ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1123
Committed: Wed Jul 19 19:00:01 2023 UTC (21 months, 3 weeks ago) by francois
File size: 151828 byte(s)
Log Message:
ajout des pyramide comme element de MG_MAILLAGE
pb de visu gmsh. Mettre en version 2 de gmsh pour que cela fonctionne dans le fichier .magic du home directory

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_file.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #pragma hdrstop
28    
29     #include <string.h>
30     #include "mg_file.h"
31 francois 526 #include "mg_sommet_noeud.h"
32 francois 576 #include "mg_arete_element.h"
33     #include "mg_face_element.h"
34     #include "mg_volume_element.h"
35 francois 685 #include "mg_coque_element.h"
36 francois 753 #include "mg_poutre_element.h"
37 francois 283 #include "pars_argument.h"
38     #include "parse.h"
39 francois 763 #include "ot_chaine.h"
40 francois 283 #ifdef BREP_STEP
41     #include "step_surface.h"
42     #include "step_courbe.h"
43     #include "step_point.h"
44     #endif
45     #ifdef BREP_SAT
46     #include "acis_surface.h"
47     #include "acis_courbe.h"
48     #include "acis_point.h"
49     #endif
50     #include "lc_point.h"
51 francois 310 #include "fem_segment2.h"
52 francois 767 #include "fem_mini_segment2.h"
53 francois 310 #include "fem_segment3.h"
54     #include "fem_triangle3.h"
55     #include "fem_triangle6.h"
56     #include "fem_quadrangle4.h"
57     #include "fem_quadrangle8.h"
58     #include "fem_tetra4.h"
59 francois 380 #include "xfem_segment2.h"
60 francois 410 #include "xfem_triangle3.h"
61 francois 339 #include "xfem_tetra4.h"
62 francois 310 #include "fem_tetra10.h"
63     #include "fem_hexa8.h"
64     #include "fem_hexa20.h"
65 francois 876 #include "fem_penta6.h"
66     #include "fem_penta15.h"
67 francois 283 //OCC
68     #ifdef BREP_OCC
69     #include "occ_surface.h"
70     #include "occ_point.h"
71     #include "occ_courbe.h"
72 couturad 740 #include "occ_fonction.h"
73 francois 283 #include "TopoDS_Shape.hxx"
74     #include "TopoDS.hxx"
75 couturad 906 #include "occ_sommet.h"
76 francois 283 #endif
77 francois 689 #ifdef CSG_OCC
78 couturad 740 #include "mg_assemblage.h"
79 francois 689 #include "mg_primitive_boite.h"
80 couturad 723 #include "mg_primitive_sphere.h"
81 couturad 823 #include "mg_primitive_ellipsoide_revolution.h"
82 couturad 723 #include "mg_primitive_cylindre.h"
83 couturad 724 #include "mg_primitive_cone.h"
84     #include "mg_primitive_tore.h"
85 francois 689 #include "mg_primitive_complexe.h"
86     #include "mg_operateur_boolean_union.h"
87 couturad 723 #include "mg_operateur_boolean_difference.h"
88     #include "mg_operateur_boolean_intersection.h"
89 couturad 906
90 francois 689 #endif
91 couturad 906 #include "occ_fonction_v2017.h"
92     #include "mg_cg_forme.h"
93     #include "mg_cg_forme_arete_droite.h"
94     #include "mg_cg_forme_volume_boite.h"
95     #include "mg_cg_forme_volume_sphere.h"
96     #include "mg_cg_forme_volume_ellipsoide.h"
97     #include "mg_cg_forme_volume_cylindre.h"
98     #include "mg_cg_forme_volume_cone.h"
99     #include "mg_cg_forme_volume_tore.h"
100     #include "mg_cg_forme_multiple.h"
101     #include "mg_cg_forme_multi_volume.h"
102     #include "mg_cg_op_bool_union.h"
103     #include "mg_cg_op_bool_difference.h"
104     #include "mg_cg_op_bool_intersection.h"
105     #include "mg_cg_op_bool_fragment.h"
106     #include "mg_cg_op_inclusion_matrice.h"
107     #include "mg_cg_op_transf_rotation.h"
108     #include "mg_cg_op_transf_translation.h"
109     #include "mg_cg_op_transf_echelle.h"
110 couturad 951 #include "mg_cg_op_transf_decallage.h"
111 couturad 906 #include "mg_cg_modele.h"
112     #include "mg_cg_assemblage.h"
113     #include "mg_cg_op_bool_union.h"
114     #include "mg_cg.h"
115     #include "mg_sous_geometrie.h"
116 couturad 926 #include "mg_cg_info.h"
117     #include "mg_cg_groupe_forme.h"
118 couturad 906
119 francois 283 //---------------------------------------------------------------------------
120     // CAD4FE Headers
121     #ifdef WINDOWS_VERSION
122     #include "CAD4FE_MCEdge.h"
123     #include "CAD4FE_MCFace.h"
124     #include "CAD4FE_MCVertex.h"
125     #include "CAD4FE_PolySurface.h"
126     #include "CAD4FE_PolyCurve.h"
127     #include "CAD4FE_MCNode.h"
128     #include "CAD4FE_MCSegment.h"
129     #include "CAD4FE_MCTriangle.h"
130     #include "CAD4FE_m3d_MCTriangle.h"
131     #endif
132     //---------------------------------------------------------------------------
133    
134    
135     //---------------------------------------------------------------------------
136     #pragma package(smart_init)
137    
138    
139     MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
140     {
141 couturad 919 // std::string str_chemin=chemin;
142     // std::size_t found = str_chemin.rfind((char*)"/");
143     // if (found!=std::string::npos)
144     // {
145     // str_dossier=str_chemin.substr(0,found+1);
146     // }
147     // else str_dossier ="";
148     str_dossier ="";
149     code_de_lecture=lire(chemin);
150 francois 283 }
151    
152 francois 551 MG_FILE::MG_FILE():MG_GESTIONNAIRE()
153     {
154     }
155    
156 francois 283 MG_FILE::~MG_FILE()
157     {
158     }
159    
160     int MG_FILE::get_code_de_lecture(void)
161     {
162     return code_de_lecture;
163     }
164    
165     long MG_FILE::cid(std::string str)
166     {
167     const char *p=str.c_str();
168     if (*p=='$') return atol(p+1);
169     return -1;
170     }
171    
172 francois 551
173 francois 763 void MG_FILE::lire_ccf(double version,int nb,int numparam,class PARSE& parse,class PARS_ARGUMENT (&param)[100],MG_ELEMENT_TOPOLOGIQUE *ele)
174     {
175     if (version<2.0)
176     {
177     for (int i=0;i<nb;i++)
178     {
179     parse.decode(param[numparam].argument[i].c_str(),"(@,@)",param+numparam+1);
180     char nom[3];
181     strcpy(nom,param[numparam+1].argument[0].c_str());
182     if (strcmp(nom,"CM")==0)
183     {
184     unsigned long val;
185     val=atol(param[numparam+2].argument[0].c_str());
186     ele->ajouter_ccf(nom,val);
187     }
188     else
189     {
190     double val;
191     val=atof(param[numparam+2].argument[0].c_str());
192     ele->ajouter_ccf(nom,val);
193     }
194     }
195     }
196 francois 788 else if (version<2.1)
197 francois 763 {
198     for (int i=0;i<nb;i++)
199     {
200     char test[500];
201     strcpy(test,param[numparam].argument[i].c_str());
202     parse.decode(param[numparam].argument[i].c_str(),"(@,@,@)",param+numparam+1);
203     char formulation[10];
204     strcpy(formulation,param[numparam+1].argument[0].c_str());
205     char nom[3];
206     strcpy(nom,param[numparam+2].argument[0].c_str());
207     if (formulation[0]=='N')
208     {
209     double val;
210     val=atof(param[numparam+3].argument[0].c_str());
211     ele->ajouter_ccf(nom,val);
212     }
213     if (formulation[0]=='I')
214     {
215     unsigned long val;
216     val=atol(param[numparam+3].argument[0].c_str());
217     ele->ajouter_ccf(nom,val);
218     }
219     if (formulation[0]=='F')
220     {
221     parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,@,(@))",param+numparam+1);
222     char formule[500];
223     strcpy(formule,param[numparam+3].argument[0].c_str());
224     char variable[500];
225     strcpy(variable,param[numparam+5].argument[0].c_str());
226     OT_CHAINE ot;
227     std::vector<std::string> listvariable=ot.split(variable,',');
228     ele->ajouter_ccf(nom,formule,listvariable);
229     }
230     }
231     }
232 francois 788 else
233     {
234     for (int i=0;i<nb;i++)
235     {
236     char test[500];
237     strcpy(test,param[numparam].argument[i].c_str());
238     parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,@)",param+numparam+1);
239     char formulation[10];
240     strcpy(formulation,param[numparam+1].argument[0].c_str());
241     char nom[3];
242     strcpy(nom,param[numparam+2].argument[0].c_str());
243     char suiv[10];
244     strcpy(suiv,param[numparam+3].argument[0].c_str());
245     if (formulation[0]=='N')
246     {
247     double val;
248     val=atof(param[numparam+4].argument[0].c_str());
249     ele->ajouter_ccf(nom,val,suiv);
250     }
251     if (formulation[0]=='I')
252     {
253     unsigned long val;
254     val=atol(param[numparam+4].argument[0].c_str());
255     ele->ajouter_ccf(nom,val,suiv);
256     }
257     if (formulation[0]=='F')
258     {
259 couturad 919 parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,@,@,(@))",param+numparam+1);
260 francois 788 char formule[500];
261     strcpy(formule,param[numparam+4].argument[0].c_str());
262     char variable[500];
263     strcpy(variable,param[numparam+6].argument[0].c_str());
264     OT_CHAINE ot;
265     std::vector<std::string> listvariable=ot.split(variable,',');
266     ele->ajouter_ccf(nom,formule,listvariable,suiv);
267     }
268     }
269 francois 763 }
270 francois 788 }
271 francois 551
272     void MG_FILE::lire_NOEUD(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
273     {
274     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
275     long idtopo=cid(param[2].argument[0]);
276     double x=atof(param[3].argument[0].c_str());
277     double y=atof(param[4].argument[0].c_str());
278     double z=atof(param[5].argument[0].c_str());
279     int ori=atoi(param[6].argument[0].c_str());
280     MG_ELEMENT_TOPOLOGIQUE* topo;
281     if (idtopo>-1)
282     {
283     topo=mggeo->get_mg_sommetid(idtopo);
284     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
285     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
286     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
287     }
288     else topo=NULL;
289     MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
290     mgmai->ajouter_mg_noeud(noeud);
291     }
292    
293     void MG_FILE::lire_SEGMENT(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
294     {
295     parse.decode(data.c_str(),"@,@,@,@",param+2);
296     long idtopo=cid(param[2].argument[0]);
297     long idn1=cid(param[3].argument[0]);
298     long idn2=cid(param[4].argument[0]);
299     int ori=atoi(param[5].argument[0].c_str());
300     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
301     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
302     MG_ELEMENT_TOPOLOGIQUE* topo;
303     if (idtopo>-1)
304     {
305     topo=mggeo->get_mg_areteid(idtopo);
306     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
307     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
308 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
309 francois 551 }
310     else topo=NULL;
311     MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
312     mgmai->ajouter_mg_segment(seg);
313     }
314    
315    
316     void MG_FILE::lire_TRIANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
317     {
318     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
319     long idtopo=cid(param[2].argument[0]);
320     long idn1=cid(param[3].argument[0]);
321     long idn2=cid(param[4].argument[0]);
322     long idn3=cid(param[5].argument[0]);
323     int ori=atoi(param[6].argument[0].c_str());
324     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
325     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
326     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
327     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
328     if (idtopo>-1)
329     {
330     topo=mggeo->get_mg_faceid(idtopo);
331     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
332     }
333     mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
334     }
335    
336     void MG_FILE::lire_QUADRANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
337     {
338     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
339     long idtopo=cid(param[2].argument[0]);
340     long idn1=cid(param[3].argument[0]);
341     long idn2=cid(param[4].argument[0]);
342     long idn3=cid(param[5].argument[0]);
343     long idn4=cid(param[6].argument[0]);
344     int ori=atoi(param[7].argument[0].c_str());
345     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
346     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
347     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
348     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
349     MG_ELEMENT_TOPOLOGIQUE* topo;
350     if (idtopo>-1)
351     {
352     topo=mggeo->get_mg_faceid(idtopo);
353     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
354     }
355     else topo=NULL;
356     mgmai->ajouter_mg_quadrangle(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
357     }
358    
359    
360     void MG_FILE::lire_TETRA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
361     {
362     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
363     long idtopo=cid(param[2].argument[0]);
364     long idn1=cid(param[3].argument[0]);
365     long idn2=cid(param[4].argument[0]);
366     long idn3=cid(param[5].argument[0]);
367     long idn4=cid(param[6].argument[0]);
368     int ori=atoi(param[7].argument[0].c_str());
369     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
370     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
371     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
372     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
373     MG_ELEMENT_TOPOLOGIQUE* topo;
374     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
375     else topo=NULL;
376     if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
377     }
378    
379     void MG_FILE::lire_HEXA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
380     {
381     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
382     long idtopo=cid(param[2].argument[0]);
383     long idn1=cid(param[3].argument[0]);
384     long idn2=cid(param[4].argument[0]);
385     long idn3=cid(param[5].argument[0]);
386     long idn4=cid(param[6].argument[0]);
387     long idn5=cid(param[7].argument[0]);
388     long idn6=cid(param[8].argument[0]);
389     long idn7=cid(param[9].argument[0]);
390     long idn8=cid(param[10].argument[0]);
391     int ori=atoi(param[11].argument[0].c_str());
392     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
393     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
394     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
395     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
396     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
397     MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
398     MG_NOEUD* noeud7=mgmai->get_mg_noeudid(idn7);
399     MG_NOEUD* noeud8=mgmai->get_mg_noeudid(idn8);
400     MG_ELEMENT_TOPOLOGIQUE* topo;
401     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
402     else topo=NULL;
403     mgmai->ajouter_mg_hexa(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,noeud7,noeud8,ori,id);
404     }
405    
406    
407 francois 876 void MG_FILE::lire_PENTA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
408     {
409     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
410     long idtopo=cid(param[2].argument[0]);
411     long idn1=cid(param[3].argument[0]);
412     long idn2=cid(param[4].argument[0]);
413     long idn3=cid(param[5].argument[0]);
414     long idn4=cid(param[6].argument[0]);
415     long idn5=cid(param[7].argument[0]);
416     long idn6=cid(param[8].argument[0]);
417     int ori=atoi(param[9].argument[0].c_str());
418     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
419     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
420     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
421     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
422     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
423     MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
424     MG_ELEMENT_TOPOLOGIQUE* topo;
425     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
426     else topo=NULL;
427     mgmai->ajouter_mg_penta(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,ori,id);
428     }
429 francois 551
430 francois 1123 void MG_FILE::lire_PYRAMIDE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
431     {
432     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
433     long idtopo=cid(param[2].argument[0]);
434     long idn1=cid(param[3].argument[0]);
435     long idn2=cid(param[4].argument[0]);
436     long idn3=cid(param[5].argument[0]);
437     long idn4=cid(param[6].argument[0]);
438     long idn5=cid(param[7].argument[0]);
439     int ori=atoi(param[8].argument[0].c_str());
440     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
441     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
442     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
443     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
444     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
445     MG_ELEMENT_TOPOLOGIQUE* topo;
446     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
447     else topo=NULL;
448     mgmai->ajouter_mg_pyramide(topo,noeud1,noeud2,noeud3,noeud4,noeud5,ori,id);
449     }
450 francois 551
451 francois 1123
452 couturad 906 void MG_FILE::lire_MG_SOUS_GEOMETRIE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
453     {
454     // PARAM # 2 3 4 5 6 7
455     parse.decode(data.c_str(),"@,@,@,@,@,@,",param+2);
456     long id_mg_geometrie = cid(param[2].argument[0]);
457     long id_parent = cid(param[3].argument[0]);
458     std::string type_geo = param[4].argument[0];
459     std::string nom_fichier = param[5].argument[0];
460     double precision = atof(param[6].argument[0].c_str());
461     double valeur_unitee = atof(param[7].argument[0].c_str());
462 couturad 919 MG_GEOMETRIE* mg_construction = get_mg_constructionid(id_mg_geometrie);
463 couturad 906 MG_SOUS_GEOMETRIE* mg_sous_geometrie;
464     if(type_geo=="MGCG_ASS")
465     {
466     MG_CG_ASSEMBLAGE* mgcg_assemblage;
467     LISTE_MGCG_MODELE::iterator it_modele;
468     bool trouve=false;
469     it_modele=lst_mgcg_modele.begin();
470     while(trouve==false && it_modele!=lst_mgcg_modele.end())
471     {
472     MG_CG_MODELE* mgcg_modele = it_modele->second;
473     if(mgcg_modele->get_mgcg_assemblageid(id_parent)!=NULL)
474     {
475     mgcg_assemblage = mgcg_modele->get_mgcg_assemblageid(id_parent);
476     trouve=true;
477     }
478     }
479 couturad 919 mg_sous_geometrie=new MG_SOUS_GEOMETRIE(mg_construction,id_parent,(char*)type_geo.c_str(),id,(char*)nom_fichier.c_str(),valeur_unitee,precision);
480 couturad 906 mgcg_assemblage->change_mg_sous_geometrie(mg_sous_geometrie);
481     mgcg_assemblage->actualiser_mg_sous_geometrie();
482     ajouter_mg_geometrie(mg_sous_geometrie);
483     }
484     }
485 francois 551
486    
487    
488 couturad 906 void MG_FILE::lire_MG_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo,std::vector<unsigned long> &volumemince)
489     {
490     if (version_fichier<2)
491     {
492     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
493     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
494     mggeo->ajouter_mg_volume(mgvol);
495     int nummat=atoi((char*)param[4].argument[0].c_str());
496     mgvol->change_num_materiau(nummat);
497     int nb=atoi(param[5].argument[0].c_str());
498     if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
499     }
500     else if (version_fichier<2.3)
501     {
502     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
503     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
504     mggeo->ajouter_mg_volume(mgvol);
505     int nb=atoi(param[4].argument[0].c_str());
506     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgvol);
507     }
508     else
509     {
510     parse.decode(data.c_str(),"@,@,@,@",param+2);
511     MG_VOLUME* mgvol;
512 couturad 908 #ifdef ALL_OCC
513 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
514     {
515     TopoDS_Solid topods_solid;
516     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
517     topods_solid=occ_fonction_v2017->get_TopoDS_Solid_id(atol(param[2].argument[0].c_str()));
518     mgvol = new OCC_VOLUME(param[2].argument[0],id,topods_solid,&mggeo->get_occ_fonction());
519     occ_fonction_v2017->ajouter_OCC_VOLUME((OCC_VOLUME*)mgvol);
520     }
521     else mgvol=new MG_VOLUME(param[2].argument[0],id);
522     #else
523     mgvol=new MG_VOLUME(param[2].argument[0],id);
524     #endif
525     mggeo->ajouter_mg_volume(mgvol);
526     int mince=atoi(param[4].argument[0].c_str());
527     if (mince==0)
528     {
529     std::string data2=param[5].argument[0];
530     parse.decode(data2.c_str(),"@,(&)",param+5);
531     int nb=atoi(param[5].argument[0].c_str());
532     if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
533     }
534     else
535     {
536     std::string data2=param[5].argument[0];
537     parse.decode(data2.c_str(),"(&),@,(&)",param+5);
538     int nb_face=param[5].argument.size();
539     for (int i=0;i<nb_face;i=i+2)
540     {
541     unsigned long idn1=cid(param[5].argument[i]);
542     unsigned long idn2=cid(param[5].argument[i+1]);
543     volumemince.push_back(id);
544     volumemince.push_back(idn1);
545     volumemince.push_back(idn2);
546     }
547     int nb=atoi(param[6].argument[0].c_str());
548     if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
549     }
550     }
551     }
552    
553     void MG_FILE::lire_MG_COQUILLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
554     {
555     bool import_occ_2017=false;
556 couturad 908 #ifdef ALL_OCC
557 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
558     {
559     import_occ_2017=true;
560     parse.decode(data.c_str(),"@,@,@",param+2);
561     long ident=cid(param[2].argument[0]);
562     long idori = stol(param[3].argument[0]);
563     TopoDS_Shell topods_shell;
564     OCC_COQUILLE* occ_coquille;
565     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
566     topods_shell=occ_fonction_v2017->get_TopoDS_Shell_id(idori);
567     if(idori!=-1)
568     {
569     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
570     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
571     if (mgvol!=NULL)
572     {
573     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgvol,topods_shell,&mggeo->get_occ_fonction());
574     mggeo->ajouter_mg_coquille(occ_coquille,mgvol);
575     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
576     }
577     if (mgcoq!=NULL)
578     {
579     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgcoq,topods_shell,&mggeo->get_occ_fonction());
580     mggeo->ajouter_mg_coquille(occ_coquille,mgcoq);
581     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
582     }
583     }
584     else
585     {
586     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,topods_shell,&mggeo->get_occ_fonction());
587     mggeo->ajouter_mg_coquille(occ_coquille);
588     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
589     }
590     }
591     #endif
592     if(!import_occ_2017)
593     {
594     parse.decode(data.c_str(),"@,@",param+2);
595     long ident=cid(param[2].argument[0]);
596     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
597     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
598     if(mgvol!=NULL)
599     {
600     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
601     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
602     }
603     if(mgcoq!=NULL)
604     {
605     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
606     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
607     }
608     }
609     }
610    
611     void MG_FILE::lire_MG_FACE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
612     {
613     if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
614     else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
615     long idsurf=cid(param[3].argument[0]);
616     int sens=atoi(param[5].argument[0].c_str());
617     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
618     MG_FACE* mgface;
619 couturad 908 #ifdef ALL_OCC
620 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
621     {
622     TopoDS_Face topods_face;
623     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
624     topods_face=occ_fonction_v2017->get_TopoDS_Face_id(atol(param[2].argument[0].c_str()));
625     mgface = new OCC_FACE(param[2].argument[0],id,mgsurf,sens,topods_face,&mggeo->get_occ_fonction());
626     occ_fonction_v2017->ajouter_OCC_FACE((OCC_FACE*)mgface);
627     }
628     else mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
629     #else
630     mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
631     #endif
632     mggeo->ajouter_mg_face(mgface);
633     int argccf=7;
634     if (version_fichier>2.1)
635     {
636     argccf=8;
637     int nbpole=atoi(param[6].argument[0].c_str());
638     mgface->change_nb_pole(nbpole);
639     }
640     int nb=atoi(param[argccf-1].argument[0].c_str());
641     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
642     }
643    
644     void MG_FILE::lire_MG_BOUCLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
645     {
646     bool import_occ_2017=false;
647     MG_BOUCLE* mgbou;
648 couturad 908 #ifdef ALL_OCC
649 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
650     {
651     import_occ_2017=true;
652     parse.decode(data.c_str(),"@,@,(@)",param+2);
653     long ident=cid(param[2].argument[0]);
654     long idori=stol(param[3].argument[0]);
655     TopoDS_Wire topods_wire;
656     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
657     topods_wire=occ_fonction_v2017->get_TopoDS_Wire_id(idori);
658     if(ident!=-1)
659     {
660     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
661     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
662     if (mgface!=NULL)
663     {
664     mgbou=new OCC_BOUCLE(param[3].argument[0],id,mgface,topods_wire,&mggeo->get_occ_fonction());
665     mggeo->ajouter_mg_boucle(mgbou,mgface);
666     occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
667     }
668     if (mgpoutre!=NULL)
669     {
670     mgbou=new OCC_BOUCLE(param[3].argument[0],id,mgpoutre,topods_wire,&mggeo->get_occ_fonction());
671     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
672     occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
673     }
674     }
675     else
676     {
677     mgbou=new OCC_BOUCLE(param[3].argument[0],id,topods_wire,&mggeo->get_occ_fonction());
678     mggeo->ajouter_mg_boucle(mgbou);
679     occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
680     }
681     }
682     #endif
683     if(!import_occ_2017)
684     {
685     parse.decode(data.c_str(),"@,(@)",param+2);
686     long ident=cid(param[2].argument[0]);
687     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
688     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
689     if (mgface!=NULL)
690     {
691     mgbou=new MG_BOUCLE(id,mgface);
692     mggeo->ajouter_mg_boucle(mgbou,mgface);
693     }
694     if (mgpoutre!=NULL)
695     {
696     mgbou=new MG_BOUCLE(id,mgpoutre);
697     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
698     }
699     }
700     }
701    
702     void MG_FILE::lire_MG_ARETE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
703     {
704     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
705     long idcur=cid(param[3].argument[0]);
706     int sens=atol(param[6].argument[0].c_str());
707     long idori = stoi(param[2].argument[0]);
708     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
709     MG_ARETE* mgarete;
710 couturad 908 #ifdef ALL_OCC
711 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
712     {
713     TopoDS_Edge topods_edge;
714     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
715     topods_edge=occ_fonction_v2017->get_TopoDS_Edge_id(idori);
716     mgarete= new OCC_ARETE(param[2].argument[0],id,mgcur,sens,topods_edge,&mggeo->get_occ_fonction());
717     occ_fonction_v2017->ajouter_OCC_ARETE((OCC_ARETE*)mgarete);
718     }
719     else mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
720     #else
721 couturad 908 mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
722 couturad 906 #endif
723     mggeo->ajouter_mg_arete(mgarete);
724     int nb=atoi(param[7].argument[0].c_str());
725     if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
726     }
727    
728     void MG_FILE::lire_MG_SOMMET(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
729     {
730     if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
731     else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
732     long idpoint=cid(param[3].argument[0]);
733     long idori = stol(param[2].argument[0]);
734     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
735     MG_SOMMET* mgsom;
736 couturad 908 #ifdef ALL_OCC
737 couturad 906 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
738     {
739     TopoDS_Vertex topods_vertex;
740     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
741     topods_vertex=occ_fonction_v2017->get_TopoDS_Vertex_id(idori);
742     mgsom = new OCC_SOMMET(param[2].argument[0],id,mgpt,topods_vertex,&mggeo->get_occ_fonction());
743     mggeo->ajouter_mg_sommet(mgsom);
744     occ_fonction_v2017->ajouter_OCC_SOMMET((OCC_SOMMET*)mgsom);
745     }
746     else mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
747     #else
748     mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
749     #endif
750     mggeo->ajouter_mg_sommet(mgsom);
751     int argccf=5;
752     if (version_fichier>2.1)
753     {
754     argccf=6;
755     int ipole=atoi(param[4].argument[0].c_str());
756     if (ipole==1) mgsom->change_pole(true);
757     }
758     int nb=atoi(param[argccf-1].argument[0].c_str());
759     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
760     }
761    
762    
763    
764    
765    
766     void MG_FILE::lire_MG_CG_MODELE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
767     {
768     #ifdef ALL_OCC
769 couturad 912 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
770 couturad 906 std::string nom=param[2].argument[0];
771     long id_mg_geometrie = cid((char*)param[3].argument[0].c_str());
772     int fusionner_entite_similaire = atoi((char*)param[4].argument[0].c_str());
773     int importer_triangulation = atoi((char*)param[5].argument[0].c_str());
774 couturad 912 double epsilon_triangulation = atof((char*)param[6].argument[0].c_str());
775 couturad 919 MG_GEOMETRIE* mg_construction = get_mg_constructionid(id_mg_geometrie);
776     MG_CG_MODELE* mgcg_modele=new MG_CG_MODELE(this,nom,mg_construction,id);
777 couturad 906 mgcg_modele->change_fusionner_entite_similaire(fusionner_entite_similaire);
778     mgcg_modele->change_importer_triangulation(importer_triangulation);
779     mgcg_modele->change_epsilon_triangulation(epsilon_triangulation);
780     ajouter_mgcg_modele(mgcg_modele);
781     #endif
782     }
783    
784     void MG_FILE::lire_MG_CG_ASSEMBLAGE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
785     {
786     #ifdef ALL_OCC
787     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
788     long id_modele = cid((char*)param[2].argument[0].c_str());
789     std::string nom=param[3].argument[0];
790     long id_mg_sous_geometrie = cid((char*)param[4].argument[0].c_str());
791 couturad 912 long nb_mgcg_forme = atol((char*)param[5].argument[0].c_str());
792 couturad 906 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
793     MG_SOUS_GEOMETRIE* mg_sous_geometrie;
794     MG_GEOMETRIE* mg_geometrie = get_mg_geometrieid(id_mg_sous_geometrie);
795     if(mg_geometrie!=NULL) mg_sous_geometrie = (MG_SOUS_GEOMETRIE*)mg_geometrie;
796     else mg_sous_geometrie=NULL;
797     MG_CG_ASSEMBLAGE *mgcg_assemblage=new MG_CG_ASSEMBLAGE(mgcg_modele,id,nom.c_str(),mg_sous_geometrie);
798 couturad 912 for(long i=0;i<nb_mgcg_forme;i++)
799 couturad 906 {
800     unsigned long id2 = cid(param[6].argument[i]);
801     mgcg_assemblage->ajouter_mgcg_forme(mgcg_modele->get_mgcg_formeid(id2),false);
802     }
803     mgcg_modele->ajouter_mgcg_assemblage(mgcg_assemblage);
804     #endif
805     }
806    
807 couturad 926 void MG_FILE::lire_MG_CG_GROUPE_FORME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
808     {
809     #ifdef ALL_OCC
810     // PARAM # 2 3 4 5
811     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
812     long id_mgcg_modele = cid(param[2].argument[0]);
813     std::string nom=param[3].argument[0];
814     long nb_forme = atol(param[4].argument[0].c_str());
815     MG_CG_MODELE *mgcg_modele = get_mgcg_modeleid(id_mgcg_modele);
816     MG_CG_GROUPE_FORME* mgcg_groupe_forme = MG_CG::creer_MG_CG_GROUPE_FORME(mgcg_modele,id,nom);
817     for(long i=0;i<nb_forme;i++)
818     {
819     long id_forme = cid(param[5].argument[i]);
820     MG_CG_FORME* mgcg_forme = mgcg_modele->get_mgcg_formeid(id_forme);
821     mgcg_groupe_forme->ajouter_mgcg_forme(mgcg_forme);
822     }
823     #endif
824     }
825    
826 couturad 906 void MG_FILE::lire_MG_CG_FORME_ARETE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
827     {
828     #ifdef ALL_OCC
829     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
830     long id_modele = cid((char*)param[2].argument[0].c_str());
831     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
832     int provenance_forme = atoi((char*)param[3].argument[0].c_str());
833     int etat_forme = atoi((char*)param[4].argument[0].c_str());
834     MG_ARETE* mg_arete;
835     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_arete = mgcg_modele->get_mg_geometrie()->get_mg_areteid(cid((char*)param[5].argument[0].c_str()));
836     MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[6].argument[0].c_str()));
837 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_ARETE(mgcg_modele,provenance_forme,etat_forme,id,mg_arete);
838 couturad 906 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
839     mgcg_operateur_parent->ajouter_mgcg_forme_sortie(forme);
840     #endif
841     }
842    
843     void MG_FILE::lire_MG_CG_FORME_ARETE_DROITE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
844     {
845     #ifdef ALL_OCC
846     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
847     long id_modele = cid((char*)param[2].argument[0].c_str());
848     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
849     int etat_forme = atoi((char*)param[3].argument[0].c_str());
850     MG_ARETE* mg_arete;
851     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_arete = mgcg_modele->get_mg_geometrie()->get_mg_areteid(cid((char*)param[4].argument[0].c_str()));
852     double x1 = atof((char*)param[5].argument[0].c_str());
853     double y1 = atof((char*)param[6].argument[0].c_str());
854     double z1 = atof((char*)param[7].argument[0].c_str());
855     double x2 = atof((char*)param[8].argument[0].c_str());
856     double y2 = atof((char*)param[9].argument[0].c_str());
857     double z2 = atof((char*)param[10].argument[0].c_str());
858 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_ARETE_DROITE(mgcg_modele,etat_forme,id,mg_arete,x1,y1,z1,x2,y2,z2);
859 couturad 906 #endif
860     }
861    
862     void MG_FILE::lire_MG_CG_FORME_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
863     {
864     #ifdef ALL_OCC
865     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
866     long id_modele = cid((char*)param[2].argument[0].c_str());
867     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
868     int provenance_forme = atoi((char*)param[3].argument[0].c_str());
869     int etat_forme = atoi((char*)param[4].argument[0].c_str());
870     MG_VOLUME* mg_volume;
871     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[5].argument[0].c_str()));
872     MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[6].argument[0].c_str()));
873 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME(mgcg_modele,provenance_forme,etat_forme,id,mg_volume);
874 couturad 906 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
875     mgcg_operateur_parent->ajouter_mgcg_forme_sortie(forme);
876     #endif
877     }
878    
879     void MG_FILE::lire_MG_CG_FORME_VOLUME_BOITE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
880     {
881     #ifdef ALL_OCC
882     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
883     long id_modele = cid((char*)param[2].argument[0].c_str());
884     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
885     int etat_forme = atoi((char*)param[3].argument[0].c_str());
886     MG_VOLUME* mg_volume;
887     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
888     double x1 = atof((char*)param[5].argument[0].c_str());
889     double y1 = atof((char*)param[6].argument[0].c_str());
890     double z1 = atof((char*)param[7].argument[0].c_str());
891     double x2 = atof((char*)param[8].argument[0].c_str());
892     double y2 = atof((char*)param[9].argument[0].c_str());
893     double z2 = atof((char*)param[10].argument[0].c_str());
894 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_BOITE(mgcg_modele,etat_forme,id,mg_volume,x1,y1,z1,x2,y2,z2);
895 couturad 906 #endif
896     }
897    
898     void MG_FILE::lire_MG_CG_FORME_VOLUME_SPHERE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
899     {
900     #ifdef ALL_OCC
901     // PARAM # 2 3 4 5 6 7 8
902     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
903     long id_modele = cid((char*)param[2].argument[0].c_str());
904     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
905     int etat_forme = atoi((char*)param[3].argument[0].c_str());
906     MG_VOLUME* mg_volume;
907     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
908     double centre_x = atof((char*)param[5].argument[0].c_str());
909     double centre_y = atof((char*)param[6].argument[0].c_str());
910     double centre_z = atof((char*)param[7].argument[0].c_str());
911     double rayon = atof((char*)param[8].argument[0].c_str());
912 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_SPHERE(mgcg_modele,etat_forme,id,mg_volume,centre_x,centre_y,centre_z,rayon);
913 couturad 906 #endif
914     }
915    
916     void MG_FILE::lire_MG_CG_FORME_VOLUME_ELLIPSOIDE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
917     {
918     #ifdef ALL_OCC
919     // PARAM # 2 3 4 5 6 7 8 9 101112
920     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
921     long id_modele = cid((char*)param[2].argument[0].c_str());
922     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
923     int etat_forme = atoi((char*)param[3].argument[0].c_str());
924     MG_VOLUME* mg_volume;
925     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
926     double centre_x = atof((char*)param[5].argument[0].c_str());
927     double centre_y = atof((char*)param[6].argument[0].c_str());
928     double centre_z = atof((char*)param[7].argument[0].c_str());
929     double direction_x = atof((char*)param[8].argument[0].c_str());
930     double direction_y = atof((char*)param[9].argument[0].c_str());
931     double direction_z = atof((char*)param[10].argument[0].c_str());
932     double rayon_majeur = atof((char*)param[11].argument[0].c_str());
933     double rayon_mineur = atof((char*)param[12].argument[0].c_str());
934 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_ELLIPSOIDE(mgcg_modele,etat_forme,id,mg_volume,centre_x,centre_y,centre_z,direction_x,direction_y,direction_z,rayon_majeur,rayon_mineur);
935 couturad 906 #endif
936     }
937    
938     void MG_FILE::lire_MG_CG_FORME_VOLUME_CYLINDRE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
939     {
940     #ifdef ALL_OCC
941     // PARAM # 2 3 4 5 6 7 8 9 101112
942     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
943     long id_modele = cid((char*)param[2].argument[0].c_str());
944     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
945     int etat_forme = atoi((char*)param[3].argument[0].c_str());
946     MG_VOLUME* mg_volume;
947     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
948     double extremite_x = atof((char*)param[5].argument[0].c_str());
949     double extremite_y = atof((char*)param[6].argument[0].c_str());
950     double extremite_z = atof((char*)param[7].argument[0].c_str());
951     double direction_x = atof((char*)param[8].argument[0].c_str());
952     double direction_y = atof((char*)param[9].argument[0].c_str());
953     double direction_z = atof((char*)param[10].argument[0].c_str());
954     double rayon = atof((char*)param[11].argument[0].c_str());
955     double longueur = atof((char*)param[12].argument[0].c_str());
956 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_CYLINDRE(mgcg_modele,etat_forme,id,mg_volume,extremite_x,extremite_y,extremite_z,direction_x,direction_y,direction_z,rayon,longueur);
957 couturad 906 #endif
958     }
959    
960     void MG_FILE::lire_MG_CG_FORME_VOLUME_CONE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
961     {
962     #ifdef ALL_OCC
963     // PARAM # 2 3 4 5 6 7 8 9 101112
964     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
965     long id_modele = cid((char*)param[2].argument[0].c_str());
966     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
967     int etat_forme = atoi((char*)param[3].argument[0].c_str());
968     MG_VOLUME* mg_volume;
969     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
970     double extremite_x = atof((char*)param[5].argument[0].c_str());
971     double extremite_y = atof((char*)param[6].argument[0].c_str());
972     double extremite_z = atof((char*)param[7].argument[0].c_str());
973     double direction_x = atof((char*)param[8].argument[0].c_str());
974     double direction_y = atof((char*)param[9].argument[0].c_str());
975     double direction_z = atof((char*)param[10].argument[0].c_str());
976     double rayon = atof((char*)param[11].argument[0].c_str());
977     double longueur = atof((char*)param[12].argument[0].c_str());
978 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_CONE(mgcg_modele,etat_forme,id,mg_volume,extremite_x,extremite_y,extremite_z,direction_x,direction_y,direction_z,rayon,longueur);
979 couturad 906 #endif
980     }
981    
982     void MG_FILE::lire_MG_CG_FORME_VOLUME_TORE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
983     {
984     #ifdef ALL_OCC
985 ghazal 1092 // PARAM # 2 3 4 5 6 7 8 9 1011121314
986     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
987 couturad 906 long id_modele = cid((char*)param[2].argument[0].c_str());
988     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
989     int etat_forme = atoi((char*)param[3].argument[0].c_str());
990     MG_VOLUME* mg_volume;
991     if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
992     double centre_x = atof((char*)param[5].argument[0].c_str());
993     double centre_y = atof((char*)param[6].argument[0].c_str());
994     double centre_z = atof((char*)param[7].argument[0].c_str());
995     double direction_x = atof((char*)param[8].argument[0].c_str());
996     double direction_y = atof((char*)param[9].argument[0].c_str());
997     double direction_z = atof((char*)param[10].argument[0].c_str());
998     double rayon_cercle = atof((char*)param[11].argument[0].c_str());
999     double rayon_tore = atof((char*)param[12].argument[0].c_str());
1000 ghazal 1092 double angle_seg = atof((char*)param[13].argument[0].c_str());
1001     double angle_rotation = atof((char*)param[14].argument[0].c_str());
1002     MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_TORE(mgcg_modele,etat_forme,id,mg_volume,centre_x,centre_y,centre_z,direction_x,direction_y,direction_z,rayon_cercle,rayon_tore,angle_seg,angle_rotation);
1003 couturad 906 #endif
1004     }
1005    
1006     void MG_FILE::lire_MG_CG_FORME_MULTIPLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1007     {
1008     #ifdef ALL_OCC
1009     // PARAM # 2 3 4 5 6 7 8 9
1010     parse.decode(data.c_str(),"@,@,@,@,(&),@,(&),@",param+2);
1011     long id_modele = cid((char*)param[2].argument[0].c_str());
1012     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1013     int provenance_forme = atoi((char*)param[3].argument[0].c_str());
1014     int etat_forme = atoi((char*)param[4].argument[0].c_str());
1015     std::vector<MG_ELEMENT_TOPOLOGIQUE*> vector_mg_element_topologique;
1016     std::vector<MG_ELEMENT_COTOPOLOGIQUE*> vector_mg_element_cotopologique;
1017     long nb_mg_element_topologique = atol((char*)param[5].argument[0].c_str());
1018     for(long i=0;i<nb_mg_element_topologique;i++)
1019     {
1020     vector_mg_element_topologique.push_back(mgcg_modele->get_mg_geometrie()->get_mg_element_topologiqueid(cid((char*)param[6].argument[i].c_str())));
1021     }
1022     long nb_mg_element_cotopologique = atol((char*)param[7].argument[0].c_str());
1023     for(long i=0;i<nb_mg_element_cotopologique;i++)
1024     {
1025     vector_mg_element_cotopologique.push_back(mgcg_modele->get_mg_geometrie()->get_mg_element_cotopologiqueid(cid((char*)param[8].argument[i].c_str())));
1026     }
1027     MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[9].argument[0].c_str()));
1028 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_MULTIPLE(mgcg_modele,provenance_forme,etat_forme,id,vector_mg_element_topologique,vector_mg_element_cotopologique);
1029 couturad 906 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
1030     #endif
1031     }
1032    
1033     void MG_FILE::lire_MG_CG_FORME_MULTI_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1034     {
1035     #ifdef ALL_OCC
1036     // PARAM # 2 3 4 5 6 7
1037     parse.decode(data.c_str(),"@,@,@,@,(&),@",param+2);
1038     long id_modele = cid((char*)param[2].argument[0].c_str());
1039     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1040     int provenance_forme = atoi((char*)param[3].argument[0].c_str());
1041     int etat_forme = atoi((char*)param[4].argument[0].c_str());
1042     std::vector<MG_VOLUME*> vector_mg_volume;
1043     long nb_mg_volume = atol((char*)param[5].argument[0].c_str());
1044     for(long i=0;i<nb_mg_volume;i++)
1045     {
1046     vector_mg_volume.push_back(mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[6].argument[i].c_str())));
1047     }
1048     MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[7].argument[0].c_str()));
1049 couturad 912 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_MULTI_VOLUME(mgcg_modele,provenance_forme,etat_forme,id,vector_mg_volume);
1050 couturad 906 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
1051     #endif
1052     }
1053    
1054     void MG_FILE::lire_MG_CG_OP_BOOL_UNION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1055     {
1056     #ifdef ALL_OCC
1057     // PARAM # 2 3 4 5 6 7
1058     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1059     long id_modele = cid((char*)param[2].argument[0].c_str());
1060     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1061     int semantique = atoi((char*)param[3].argument[0].c_str());
1062     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1063     MG_CG_FORME* mgcg_forme_entree_1=NULL;
1064     MG_CG_FORME* mgcg_forme_entree_2=NULL;
1065     long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1066     if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1067     long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1068     if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1069     long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1070 couturad 912 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_UNION(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1071 couturad 906 #endif
1072     }
1073    
1074     void MG_FILE::lire_MG_CG_OP_BOOL_DIFFERENCE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1075     {
1076     #ifdef ALL_OCC
1077     // PARAM # 2 3 4 5 6 7
1078     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1079     long id_modele = cid((char*)param[2].argument[0].c_str());
1080     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1081     int semantique = atoi((char*)param[3].argument[0].c_str());
1082     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1083     MG_CG_FORME* mgcg_forme_entree_1=NULL;
1084     MG_CG_FORME* mgcg_forme_entree_2=NULL;
1085     long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1086     if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1087     long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1088     if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1089     long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1090 couturad 912 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_DIFFERENCE(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1091 couturad 906 #endif
1092     }
1093    
1094     void MG_FILE::lire_MG_CG_OP_BOOL_INTERSECTION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1095     {
1096     #ifdef ALL_OCC
1097     // PARAM # 2 3 4 5 6 7
1098     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1099     long id_modele = cid((char*)param[2].argument[0].c_str());
1100     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1101     int semantique = atoi((char*)param[3].argument[0].c_str());
1102     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1103     MG_CG_FORME* mgcg_forme_entree_1=NULL;
1104     MG_CG_FORME* mgcg_forme_entree_2=NULL;
1105     long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1106     if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1107     long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1108     if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1109     long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1110 couturad 912 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_INTERSECTION(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1111 couturad 906 #endif
1112     }
1113    
1114     void MG_FILE::lire_MG_CG_OP_BOOL_FRAGMENT(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1115     {
1116     #ifdef ALL_OCC
1117     // PARAM # 2 3 4 5 6 7
1118     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1119     long id_modele = cid((char*)param[2].argument[0].c_str());
1120     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1121     int semantique = atoi((char*)param[3].argument[0].c_str());
1122     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1123     MG_CG_FORME* mgcg_forme_entree_1=NULL;
1124     MG_CG_FORME* mgcg_forme_entree_2=NULL;
1125     long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1126     if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1127     long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1128     if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1129     long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1130 couturad 912 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_FRAGMENT(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1131 couturad 906 #endif
1132     }
1133    
1134     void MG_FILE::lire_MG_CG_OP_INCLUSION_MATRICE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1135     {
1136     #ifdef ALL_OCC
1137     // PARAM # 2 3 4 5 6 7 8
1138     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1139     long id_modele = cid((char*)param[2].argument[0].c_str());
1140     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1141     int semantique = atoi((char*)param[3].argument[0].c_str());
1142     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1143     MG_CG_FORME* mgcg_forme_inclusion_entree=NULL;
1144     MG_CG_FORME* mgcg_forme_matrice_entree=NULL;
1145     long id_forme_inclusion_entree = cid((char*)param[5].argument[0].c_str());
1146     if(id_forme_inclusion_entree!=0) mgcg_forme_inclusion_entree=mgcg_modele->get_mgcg_formeid(id_forme_inclusion_entree);
1147     long id_forme_matrice_entree = cid((char*)param[6].argument[0].c_str());
1148     if(id_forme_matrice_entree!=0) mgcg_forme_matrice_entree=mgcg_modele->get_mgcg_formeid(id_forme_matrice_entree);
1149     long id_forme_inclusion_sortie = cid((char*)param[7].argument[0].c_str());
1150     long id_forme_matrice_sortie = cid((char*)param[8].argument[0].c_str());
1151 couturad 912 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_INCLUSION_MATRICE(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_inclusion_entree,mgcg_forme_matrice_entree,id_forme_inclusion_sortie,id_forme_matrice_sortie);
1152 couturad 906 #endif
1153     }
1154    
1155     void MG_FILE::lire_MG_CG_OP_TRANSF_ROTATION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1156     {
1157     #ifdef ALL_OCC
1158     // PARAM # 2 3 4 5 6 7 8 9 10 12
1159     // PARAM # 11 13
1160     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1161     long id_modele = cid((char*)param[2].argument[0].c_str());
1162     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1163     int semantique = atoi((char*)param[3].argument[0].c_str());
1164     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1165     MG_CG_FORME* mgcg_forme_entree=NULL;
1166     long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1167     if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1168     long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1169 couturad 912 MG_CG_OP_TRANSF_ROTATION* mgcg_op_transf_rotation = MG_CG::creer_MG_CG_OP_TRANSF_ROTATION(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1170 couturad 906 double x = atof((char*)param[7].argument[0].c_str());
1171     double y = atof((char*)param[8].argument[0].c_str());
1172     double z = atof((char*)param[9].argument[0].c_str());
1173     double w = atof((char*)param[10].argument[0].c_str());
1174     double centre_x = atof((char*)param[11].argument[0].c_str());
1175     double centre_y = atof((char*)param[12].argument[0].c_str());
1176     double centre_z = atof((char*)param[13].argument[0].c_str());
1177     OT_QUATERNION ot_quaternion(x,y,z,w);
1178     mgcg_op_transf_rotation->change_rotation(ot_quaternion);
1179     mgcg_op_transf_rotation->change_centre_rotation(centre_x,centre_y,centre_z);
1180     #endif
1181     }
1182    
1183     void MG_FILE::lire_MG_CG_OP_TRANSF_TRANSLATION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1184     {
1185     #ifdef ALL_OCC
1186     // PARAM # 2 3 4 5 6 7 8 9
1187     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,",param+2);
1188     long id_modele = cid((char*)param[2].argument[0].c_str());
1189     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1190     int semantique = atoi((char*)param[3].argument[0].c_str());
1191     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1192     MG_CG_FORME* mgcg_forme_entree=NULL;
1193     long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1194     if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1195     long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1196 couturad 912 MG_CG_OP_TRANSF_TRANSLATION* mgcg_op_transf_translation = MG_CG::creer_MG_CG_OP_TRANSF_TRANSLATION(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1197 couturad 906 double x = atof((char*)param[7].argument[0].c_str());
1198     double y = atof((char*)param[8].argument[0].c_str());
1199     double z = atof((char*)param[9].argument[0].c_str());
1200     mgcg_op_transf_translation->change_translation(x,y,z);
1201     #endif
1202     }
1203    
1204     void MG_FILE::lire_MG_CG_OP_TRANSF_ECHELLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1205     {
1206     #ifdef ALL_OCC
1207     // PARAM # 2 3 4 5 6 7 8 9 10
1208     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,",param+2);
1209     long id_modele = cid((char*)param[2].argument[0].c_str());
1210     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1211     int semantique = atoi((char*)param[3].argument[0].c_str());
1212     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1213     MG_CG_FORME* mgcg_forme_entree=NULL;
1214     long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1215     if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1216     long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1217 couturad 912 MG_CG_OP_TRANSF_ECHELLE* mgcg_op_transf_echelle = MG_CG::creer_MG_CG_OP_TRANSF_ECHELLE(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1218 couturad 906 double x = atof((char*)param[7].argument[0].c_str());
1219     double y = atof((char*)param[8].argument[0].c_str());
1220     double z = atof((char*)param[9].argument[0].c_str());
1221     double facteur = atof((char*)param[10].argument[0].c_str());
1222     mgcg_op_transf_echelle->change_centre_echelle(x,y,z);
1223     mgcg_op_transf_echelle->change_facteur_echelle(facteur);
1224     #endif
1225     }
1226    
1227 couturad 951 void MG_FILE::lire_MG_CG_OP_TRANSF_DECALLAGE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1228     {
1229     #ifdef ALL_OCC
1230     // PARAM # 2 3 4 5 6 7
1231     parse.decode(data.c_str(),"@,@,@,@,@,@,",param+2);
1232     long id_modele = cid((char*)param[2].argument[0].c_str());
1233     MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1234     int semantique = atoi((char*)param[3].argument[0].c_str());
1235     int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1236     MG_CG_FORME* mgcg_forme_entree=NULL;
1237     long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1238     if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1239     long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1240     MG_CG_OP_TRANSF_DECALLAGE* mgcg_op_transf_decallage = MG_CG::creer_MG_CG_OP_TRANSF_DECALLAGE(mgcg_modele,semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1241     double decallage = atof((char*)param[7].argument[0].c_str());
1242     mgcg_op_transf_decallage->change_decallage(decallage);
1243     #endif
1244     }
1245    
1246 couturad 926 void MG_FILE::lire_MG_CG_INFO_STRING(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1247     {
1248     #ifdef ALL_OCC
1249     // PARAM # 2 3
1250     parse.decode(data.c_str(),"@,@",param+2);
1251     std::string identifiant = param[2].argument[0];
1252     std::string valeur = param[3].argument[0];
1253     MG_IDENTIFICATEUR *mg_id=NULL;
1254     LISTE_MGCG_MODELE::iterator it_modele=lst_mgcg_modele.begin();
1255     while(mg_id==NULL && it_modele!=lst_mgcg_modele.end())
1256     {
1257     MG_CG_MODELE* modele = it_modele->second;
1258     if(modele->get_id()==id)
1259     {
1260     mg_id=modele;
1261     }
1262     else
1263     {
1264     mg_id=modele->get_mg_identificateur(id);
1265     }
1266     it_modele++;
1267     }
1268     if(mg_id!=NULL)
1269     {
1270     MG_CONSTRUCTION_GEOMETRIQUE* mg_constr_geo = (MG_CONSTRUCTION_GEOMETRIQUE*)mg_id;
1271     MG_CG_INFO_STRING* info_str = MG_CG::creer_MG_CG_INFO_STRING(mg_constr_geo,id,identifiant,valeur);
1272     }
1273     #endif
1274     }
1275    
1276     void MG_FILE::lire_MG_CG_INFO_DOUBLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1277     {
1278     #ifdef ALL_OCC
1279     // PARAM # 2 3
1280     parse.decode(data.c_str(),"@,@",param+2);
1281     std::string identifiant = param[2].argument[0];
1282     double valeur = atof(param[3].argument[0].c_str());
1283     MG_IDENTIFICATEUR *mg_id=NULL;
1284     LISTE_MGCG_MODELE::iterator it_modele=lst_mgcg_modele.begin();
1285     while(mg_id==NULL && it_modele!=lst_mgcg_modele.end())
1286     {
1287     MG_CG_MODELE* modele = it_modele->second;
1288     if(modele->get_id()==id)
1289     {
1290     mg_id=modele;
1291     }
1292     else
1293     {
1294     mg_id=modele->get_mg_identificateur(id);
1295     }
1296     it_modele++;
1297     }
1298     if(mg_id!=NULL)
1299     {
1300     MG_CONSTRUCTION_GEOMETRIQUE* mg_constr_geo = (MG_CONSTRUCTION_GEOMETRIQUE*)mg_id;
1301     MG_CG_INFO_DOUBLE* info_dbl = MG_CG::creer_MG_CG_INFO_DOUBLE(mg_constr_geo,id,identifiant,valeur);
1302     }
1303     #endif
1304     }
1305    
1306     void MG_FILE::lire_MG_CG_INFO_VCT_DOUBLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1307     {
1308     #ifdef ALL_OCC
1309     // PARAM # 2 3 4
1310     parse.decode(data.c_str(),"@,@,(&)",param+2);
1311     std::string identifiant = param[2].argument[0];
1312     long nb_valeur = atol(param[3].argument[0].c_str());
1313     std::vector<double> vector_valeur;
1314     for(long i=0;i<nb_valeur;i++)
1315     {
1316     double valeur = atof(param[4].argument[i].c_str());
1317     vector_valeur.push_back(valeur);
1318     }
1319     MG_IDENTIFICATEUR *mg_id=NULL;
1320     LISTE_MGCG_MODELE::iterator it_modele=lst_mgcg_modele.begin();
1321     while(mg_id==NULL && it_modele!=lst_mgcg_modele.end())
1322     {
1323     MG_CG_MODELE* modele = it_modele->second;
1324     if(modele->get_id()==id)
1325     {
1326     mg_id=modele;
1327     }
1328     else
1329     {
1330     mg_id=modele->get_mg_identificateur(id);
1331     }
1332     it_modele++;
1333     }
1334     if(mg_id!=NULL)
1335     {
1336     MG_CONSTRUCTION_GEOMETRIQUE* mg_constr_geo = (MG_CONSTRUCTION_GEOMETRIQUE*)mg_id;
1337     MG_CG_INFO_VCT_DOUBLE* info_dbl = MG_CG::creer_MG_CG_INFO_VCT_DOUBLE(mg_constr_geo,id,identifiant,vector_valeur);
1338     }
1339     #endif
1340     }
1341    
1342    
1343 francois 283 int MG_FILE::lire(char* chemin)
1344     {
1345     FILE *in;
1346 francois 706 //char ligne[3000];
1347 francois 283 in=fopen(chemin,"rt");
1348     if (in==NULL) return 0;
1349     PARS_ARGUMENT param[100];
1350     PARSE parse;
1351    
1352     MG_GEOMETRIE *mggeo;
1353 francois 689 MG_ARBRE* arbre;
1354 francois 283 #ifdef WINDOWS_VERSION
1355     std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
1356     #endif
1357     bool updatedMergedRefVertices = false;
1358 francois 763 version_fichier=1.0;
1359 francois 881 std::vector<unsigned long> volumemince;
1360 francois 283 do
1361     {
1362     int ierr;
1363     std::string ligne=parse.lire(in,';',&ierr);
1364     parse.decode(ligne.c_str(),"@;",param);
1365     const char *chaine=param[0].argument[0].c_str();
1366     if ((chaine[0]=='/') && (chaine[1]=='/'))
1367     {
1368     if ((chaine[2]=='*')&&(chaine[3]=='i'))
1369     {
1370     unsigned long id;
1371     sscanf(chaine,"//*i:%lu;",&id);
1372     entiteidmax=id;
1373     }
1374 francois 763 if ((chaine[2]=='*')&&(chaine[3]=='v'))
1375     sscanf(chaine,"//*v:%lf;",&version_fichier);
1376 francois 283 }
1377     else if (param[0].argument[0]!="FIN")
1378     {
1379     parse.decode(ligne.c_str(),"%@=@(@);",param);
1380     std::string entite=param[1].argument[0];
1381     long id=atol(param[0].argument[0].c_str());
1382     std::string data=param[2].argument[0] ;
1383     MG_MAILLAGE *mgmai;
1384     FEM_MAILLAGE *femmai;
1385     if (entite=="GEOMETRIE")
1386     {
1387     parse.decode(data.c_str(),"@,@,@,@",param+2);
1388     double unite=atof(param[2].argument[0].c_str());
1389     std::string typegeo=param[3].argument[0];
1390 couturad 919 std::string chemin_geo=param[4].argument[0];
1391 francois 576 if (typegeo=="VIRTUEL")
1392     {
1393 couturad 919 mggeo=new MG_GEOMETRIE((char*)typegeo.c_str(),id,(char*)chemin_geo.c_str(),unite);
1394 francois 576 ajouter_mg_geometrie(mggeo);
1395     }
1396 francois 283 #ifdef BREP_STEP
1397     if (typegeo=="STEP")
1398     {
1399 couturad 919 mggeo=new MG_GEOMETRIE((char*)"STEP",id,(char *)chemin_geo.c_str(),unite);
1400 francois 283 ajouter_mg_geometrie(mggeo);
1401     }
1402     #endif
1403     #ifdef BREP_SAT
1404     if (typegeo=="ACIS")
1405     {
1406 couturad 919 mggeo=new MG_GEOMETRIE((char*)"ACIS",id,(char *)chemin_geo.c_str(),unite);
1407 francois 283 ajouter_mg_geometrie(mggeo);
1408     }
1409     #endif
1410    
1411     #ifdef BREP_OCC
1412     if (typegeo=="OCC")
1413     {
1414 couturad 919 mggeo=new MG_GEOMETRIE((char*)"OCC",id,chemin_geo.c_str(),unite);
1415 francois 283 ajouter_mg_geometrie(mggeo);
1416     }
1417 couturad 740 if (typegeo=="OCCV2015")
1418     {
1419 couturad 919 mggeo=new MG_GEOMETRIE((char*)"OCCV2015",id,chemin_geo.c_str(),unite);
1420 couturad 740 ajouter_mg_geometrie(mggeo);
1421     }
1422 couturad 908 #endif
1423     #ifdef ALL_OCC
1424 couturad 906 if (typegeo=="OCCV2017")
1425     {
1426 couturad 919 mggeo=new MG_GEOMETRIE((char*)"OCCV2017",id,chemin_geo.c_str(),unite);
1427 couturad 906 ajouter_mg_geometrie(mggeo);
1428     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1429 couturad 919 std::string chemin_caf = str_dossier + chemin_geo + ".ocaf";
1430 couturad 906 char* chemin_caf_char = (char*)chemin_caf.c_str();
1431     occ_fonction_v2017->ouvrir_fichier_OCAF(chemin_caf_char);
1432     }
1433 francois 283 #endif
1434    
1435     std::string nommat="";
1436     if (param[5].argument[0]!="")
1437     nommat=param[5].argument[0];
1438     mggeo->change_gest_materiau((char*)nommat.c_str());
1439     }
1440 couturad 919 if (entite=="CONSTRUCTION")
1441     {
1442     MG_GEOMETRIE * mgconstruction;
1443     parse.decode(data.c_str(),"@,@,@,@",param+2);
1444     double unite=atof(param[2].argument[0].c_str());
1445     std::string typegeo=param[3].argument[0];
1446     std::string chemin_geo=param[4].argument[0];
1447     #ifdef ALL_OCC
1448     if (typegeo=="OCCV2017")
1449     {
1450     mgconstruction=new MG_GEOMETRIE((char*)"OCCV2017",id,chemin_geo.c_str(),unite);
1451     mggeo=mgconstruction;
1452     mgconstruction->change_est_construction(true);
1453     ajouter_mg_construction(mgconstruction);
1454     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mgconstruction->get_occ_fonction();
1455     std::string chemin_caf = str_dossier + chemin_geo + ".ocaf";
1456     char* chemin_caf_char = (char*)chemin_caf.c_str();
1457     occ_fonction_v2017->ouvrir_fichier_OCAF(chemin_caf_char);
1458     }
1459     #endif
1460     std::string nommat="";
1461     if (param[5].argument[0]!="")
1462     nommat=param[5].argument[0];
1463     mgconstruction->change_gest_materiau((char*)nommat.c_str());
1464     }
1465 francois 689 #ifdef CSG_OCC
1466     if (entite=="ARBRE")
1467     {
1468     parse.decode(data.c_str(),"@",param+2);
1469     std::string nom=param[2].argument[0];
1470     arbre=new MG_ARBRE(id,nom.c_str());
1471     ajouter_mg_arbre(arbre);
1472     }
1473 couturad 740 if (entite == "ASSEMBLAGE")
1474     {
1475     parse.decode(data.c_str(),"@,@,(&)",param+2);
1476     std::string nom=param[2].argument[0];
1477     int nb_primitive = atoi((char*)param[3].argument[0].c_str());
1478     MG_ASSEMBLAGE *mgassembl=new MG_ASSEMBLAGE(id,nom.c_str());
1479     for(int i=0;i<nb_primitive;i++)
1480     {
1481     unsigned long id2 = cid(param[4].argument[i]);
1482 francois 741 mgassembl->ajouter_mg_primitive(id2);
1483 couturad 740 }
1484     arbre->ajouter_mg_assemblage(mgassembl);
1485     }
1486 francois 689 if (entite=="BOITE")
1487     {
1488     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1489     double x1=atof((char*)param[2].argument[0].c_str());
1490     double y1=atof((char*)param[3].argument[0].c_str());
1491     double z1=atof((char*)param[4].argument[0].c_str());
1492     double x2=atof((char*)param[5].argument[0].c_str());
1493     double y2=atof((char*)param[6].argument[0].c_str());
1494     double z2=atof((char*)param[7].argument[0].c_str());
1495     MG_PRIMITIVE_BOITE *b=new MG_PRIMITIVE_BOITE(id,x1,y1,z1,x2,y2,z2);
1496     b->construit();
1497     arbre->ajouter_mg_primitive(b);
1498     }
1499 couturad 723 if (entite=="SPHERE")
1500 francois 689 {
1501 couturad 723 parse.decode(data.c_str(),"@,@,@,@",param+2);
1502     double centre_x=atof((char*)param[2].argument[0].c_str());
1503     double centre_y=atof((char*)param[3].argument[0].c_str());
1504     double centre_z=atof((char*)param[4].argument[0].c_str());
1505     double rayon=atof((char*)param[5].argument[0].c_str());
1506     MG_PRIMITIVE_SPHERE *b=new MG_PRIMITIVE_SPHERE(id,centre_x,centre_y,centre_z,rayon);
1507     b->construit();
1508     arbre->ajouter_mg_primitive(b);
1509     }
1510 couturad 823 if (entite=="ELLIPSOIDE_REVOLUTION")
1511     {
1512     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1513     double centre_x=atof((char*)param[2].argument[0].c_str());
1514     double centre_y=atof((char*)param[3].argument[0].c_str());
1515     double centre_z=atof((char*)param[4].argument[0].c_str());
1516     double axe_x=atof((char*)param[5].argument[0].c_str());
1517     double axe_y=atof((char*)param[6].argument[0].c_str());
1518     double axe_z=atof((char*)param[7].argument[0].c_str());
1519     double rayon_majeur=atof((char*)param[8].argument[0].c_str());
1520     double rayon_mineur=atof((char*)param[9].argument[0].c_str());
1521     MG_PRIMITIVE_ELLIPSOIDE_REVOLUTION *b=new MG_PRIMITIVE_ELLIPSOIDE_REVOLUTION(id,centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon_majeur,rayon_mineur);
1522     b->construit();
1523     arbre->ajouter_mg_primitive(b);
1524     }
1525 couturad 723 if (entite=="CYLINDRE")
1526     {
1527     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1528     double extremite_x=atof((char*)param[2].argument[0].c_str());
1529     double extremite_y=atof((char*)param[3].argument[0].c_str());
1530     double extremite_z=atof((char*)param[4].argument[0].c_str());
1531     double longitude=atof((char*)param[5].argument[0].c_str());
1532     double latitude=atof((char*)param[6].argument[0].c_str());
1533     double rayon=atof((char*)param[7].argument[0].c_str());
1534     double longueur=atof((char*)param[8].argument[0].c_str());
1535     MG_PRIMITIVE_CYLINDRE *b=new MG_PRIMITIVE_CYLINDRE(id,extremite_x,extremite_y,extremite_z,longitude,latitude,rayon,longueur);
1536     b->construit();
1537     arbre->ajouter_mg_primitive(b);
1538     }
1539 couturad 724 if (entite=="TORE")
1540     {
1541     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1542     double centre_x=atof((char*)param[2].argument[0].c_str());
1543     double centre_y=atof((char*)param[3].argument[0].c_str());
1544     double centre_z=atof((char*)param[4].argument[0].c_str());
1545     double longitude=atof((char*)param[5].argument[0].c_str());
1546     double latitude=atof((char*)param[6].argument[0].c_str());
1547     double rayon_cercle=atof((char*)param[7].argument[0].c_str());
1548     double rayon_tore=atof((char*)param[8].argument[0].c_str());
1549     MG_PRIMITIVE_TORE *b=new MG_PRIMITIVE_TORE(id,centre_x,centre_y,centre_z,longitude,latitude,rayon_cercle,rayon_tore);
1550     b->construit();
1551     arbre->ajouter_mg_primitive(b);
1552     }
1553     if (entite=="CONE")
1554     {
1555     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1556     double base_x=atof((char*)param[2].argument[0].c_str());
1557     double base_y=atof((char*)param[3].argument[0].c_str());
1558     double base_z=atof((char*)param[4].argument[0].c_str());
1559     double longitude=atof((char*)param[5].argument[0].c_str());
1560     double latitude=atof((char*)param[6].argument[0].c_str());
1561     double rayon=atof((char*)param[7].argument[0].c_str());
1562     double hauteur=atof((char*)param[8].argument[0].c_str());
1563     MG_PRIMITIVE_CONE *b=new MG_PRIMITIVE_CONE(id,base_x,base_y,base_z,longitude,latitude,rayon,hauteur);
1564     b->construit();
1565     arbre->ajouter_mg_primitive(b);
1566     }
1567 couturad 723 if (entite=="UNION")
1568     {
1569 francois 689 parse.decode(data.c_str(),"@,@,@",param+2);
1570     int sem=atoi((char*)param[2].argument[0].c_str());
1571     long id1=cid((char*)param[3].argument[0].c_str());
1572     long id2=cid((char*)param[4].argument[0].c_str());
1573     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1574     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1575     MG_OPERATEUR_BOOLEAN_UNION *op=new MG_OPERATEUR_BOOLEAN_UNION(id,sem,p1,p2);
1576     arbre->ajouter_mg_operateur_boolean(op);
1577     }
1578 couturad 723 if (entite=="DIFFERENCE")
1579     {
1580     parse.decode(data.c_str(),"@,@,@",param+2);
1581     int sem=atoi((char*)param[2].argument[0].c_str());
1582     long id1=cid((char*)param[3].argument[0].c_str());
1583     long id2=cid((char*)param[4].argument[0].c_str());
1584     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1585     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1586     MG_OPERATEUR_BOOLEAN_DIFFERENCE *op=new MG_OPERATEUR_BOOLEAN_DIFFERENCE(id,sem,p1,p2);
1587     arbre->ajouter_mg_operateur_boolean(op);
1588     }
1589     if (entite=="INTERSECTION")
1590     {
1591     parse.decode(data.c_str(),"@,@,@",param+2);
1592     int sem=atoi((char*)param[2].argument[0].c_str());
1593     long id1=cid((char*)param[3].argument[0].c_str());
1594     long id2=cid((char*)param[4].argument[0].c_str());
1595     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1596     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1597     MG_OPERATEUR_BOOLEAN_INTERSECTION *op=new MG_OPERATEUR_BOOLEAN_INTERSECTION(id,sem,p1,p2);
1598     arbre->ajouter_mg_operateur_boolean(op);
1599     }
1600 francois 689 if (entite=="PRIM_COMPLEXE")
1601     {
1602     parse.decode(data.c_str(),"@",param+2);
1603     long id1=cid((char*)param[2].argument[0].c_str());
1604     MG_OPERATEUR_BOOLEAN *op=arbre->get_mg_operateur_booleanid(id1);
1605     MG_PRIMITIVE* p=op->construit(id);
1606     arbre->ajouter_mg_primitive(p);
1607     }
1608    
1609 couturad 906 if (entite=="MG_CG_MODELE")
1610     {
1611     lire_MG_CG_MODELE(id,parse,param,data);
1612     }
1613     if (entite =="MG_CG_ASSEMBLAGE")
1614     {
1615     lire_MG_CG_ASSEMBLAGE(id,parse,param,data);
1616     }
1617 couturad 926 if (entite =="MG_CG_INFO_DOUBLE")
1618     {
1619     lire_MG_CG_INFO_DOUBLE(id,parse,param,data);
1620     }
1621     if (entite =="MG_CG_INFO_STRING")
1622     {
1623     lire_MG_CG_INFO_STRING(id,parse,param,data);
1624     }
1625     if (entite =="MG_CG_INFO_VCT_DOUBLE")
1626     {
1627     lire_MG_CG_INFO_VCT_DOUBLE(id,parse,param,data);
1628     }
1629     if (entite =="MG_CG_GROUPE_FORME")
1630     {
1631     lire_MG_CG_GROUPE_FORME(id,parse,param,data);
1632     }
1633 couturad 906 if (entite =="MG_CG_FORME_ARETE")
1634     {
1635     lire_MG_CG_FORME_ARETE(id,parse,param,data);
1636     }
1637     if (entite =="MG_CG_FORME_ARETE_DROITE")
1638     {
1639     lire_MG_CG_FORME_ARETE_DROITE(id,parse,param,data);
1640     }
1641     if (entite =="MG_CG_FORME_VOLUME")
1642     {
1643     lire_MG_CG_FORME_VOLUME(id,parse,param,data);
1644     }
1645     if (entite =="MG_CG_FORME_VOLUME_BOITE")
1646     {
1647     lire_MG_CG_FORME_VOLUME_BOITE(id,parse,param,data);
1648     }
1649     if (entite =="MG_CG_FORME_VOLUME_SPHERE")
1650     {
1651     lire_MG_CG_FORME_VOLUME_SPHERE(id,parse,param,data);
1652     }
1653     if (entite =="MG_CG_FORME_VOLUME_ELLIPSOIDE")
1654     {
1655     lire_MG_CG_FORME_VOLUME_ELLIPSOIDE(id,parse,param,data);
1656     }
1657     if (entite =="MG_CG_FORME_VOLUME_CYLINDRE")
1658     {
1659     lire_MG_CG_FORME_VOLUME_CYLINDRE(id,parse,param,data);
1660     }
1661     if (entite =="MG_CG_FORME_VOLUME_CONE")
1662     {
1663     lire_MG_CG_FORME_VOLUME_CONE(id,parse,param,data);
1664     }
1665     if (entite =="MG_CG_FORME_VOLUME_TORE")
1666     {
1667     lire_MG_CG_FORME_VOLUME_TORE(id,parse,param,data);
1668     }
1669     if (entite =="MG_CG_FORME_MULTIPLE")
1670     {
1671     lire_MG_CG_FORME_MULTIPLE(id,parse,param,data);
1672     }
1673     if (entite =="MG_CG_FORME_MULTI_VOLUME")
1674     {
1675     lire_MG_CG_FORME_MULTI_VOLUME(id,parse,param,data);
1676     }
1677     if (entite =="MG_CG_OP_BOOL_UNION")
1678     {
1679     lire_MG_CG_OP_BOOL_UNION(id,parse,param,data);
1680     }
1681     if (entite =="MG_CG_OP_BOOL_DIFFERENCE")
1682     {
1683     lire_MG_CG_OP_BOOL_DIFFERENCE(id,parse,param,data);
1684     }
1685     if (entite =="MG_CG_OP_BOOL_INTERSECTION")
1686     {
1687     lire_MG_CG_OP_BOOL_INTERSECTION(id,parse,param,data);
1688     }
1689     if (entite =="MG_CG_OP_BOOL_FRAGMENT")
1690     {
1691     lire_MG_CG_OP_BOOL_FRAGMENT(id,parse,param,data);
1692     }
1693     if (entite =="MG_CG_OP_INCLUSION_MATRICE")
1694     {
1695     lire_MG_CG_OP_INCLUSION_MATRICE(id,parse,param,data);
1696     }
1697     if (entite =="MG_CG_OP_TRANSF_ROTATION")
1698     {
1699     lire_MG_CG_OP_TRANSF_ROTATION(id,parse,param,data);
1700     }
1701     if (entite =="MG_CG_OP_TRANSF_TRANSLATION")
1702     {
1703     lire_MG_CG_OP_TRANSF_TRANSLATION(id,parse,param,data);
1704     }
1705     if (entite =="MG_CG_OP_TRANSF_ECHELLE")
1706     {
1707     lire_MG_CG_OP_TRANSF_ECHELLE(id,parse,param,data);
1708     }
1709 couturad 951 if (entite =="MG_CG_OP_TRANSF_DECALLAGE")
1710     {
1711     lire_MG_CG_OP_TRANSF_DECALLAGE(id,parse,param,data);
1712     }
1713 francois 689
1714     #endif
1715 couturad 906 if (entite =="MG_SOUS_GEOMETRIE")
1716     {
1717     lire_MG_SOUS_GEOMETRIE(id,parse,param,data);
1718     }
1719 francois 283 if (entite=="GEOMETRIE_EPS")
1720     {
1721     parse.decode(data.c_str(),"@",param+2);
1722     double val=atof((char*)param[2].argument[0].c_str());
1723     mggeo->change_valeur_precision(val);
1724     }
1725     if (entite=="GROUPE_TOPOLOGIQUE")
1726     {
1727     parse.decode(data.c_str(),"@,(&)",param+2);
1728     MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
1729     mggeo->ajouter_mg_groupe_topologique(mggt);
1730     int nb=atoi(param[2].argument[0].c_str());
1731     for (int i=0;i<nb;i++)
1732     {
1733     unsigned long id2=cid(param[3].argument[i].c_str());
1734     MG_ELEMENT_TOPOLOGIQUE* ele;
1735     ele=mggeo->get_mg_sommetid(id2);
1736     if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
1737     if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
1738     if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
1739     if (ele!=NULL) mggt->ajouter(ele);
1740     }
1741    
1742     }
1743 francois 711 if (entite=="GEOM_FONCTION")
1744     {
1745     parse.decode(data.c_str(),"@,@,(&)",param+2);
1746     int dim=atoi((char*)param[2].argument[0].c_str());
1747     MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(id,dim);
1748     mggeo->ajouter_mg_geom_fonction(gf);
1749     int nb=atoi(param[3].argument[0].c_str());
1750     for (int i=0;i<nb;i++)
1751     {
1752     parse.decode(param[4].argument[i].c_str(),"(&)",param+5);
1753     double *coo=new double[dim];
1754     for (int j=0;j<dim;j++)
1755     coo[j]=atof(param[5].argument[j].c_str());
1756     gf->ajouter_point(coo);
1757     delete [] coo;
1758     }
1759    
1760     }
1761    
1762 francois 283 if (entite=="VOLUME")
1763     {
1764 couturad 906 lire_MG_VOLUME(id,parse,param,data,mggeo,volumemince);
1765    
1766     // if (version_fichier<2)
1767     // {
1768     // parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1769     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1770     // mggeo->ajouter_mg_volume(mgvol);
1771     // int nummat=atoi((char*)param[4].argument[0].c_str());
1772     // mgvol->change_num_materiau(nummat);
1773     // int nb=atoi(param[5].argument[0].c_str());
1774     // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1775     // }
1776     // else if (version_fichier<2.3)
1777     // {
1778     // parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1779     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1780     // mggeo->ajouter_mg_volume(mgvol);
1781     // int nb=atoi(param[4].argument[0].c_str());
1782     // if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgvol);
1783     // }
1784     // else
1785     // {
1786     // parse.decode(data.c_str(),"@,@,@,@",param+2);
1787     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1788     // mggeo->ajouter_mg_volume(mgvol);
1789     // int mince=atoi(param[4].argument[0].c_str());
1790     // if (mince==0)
1791     // {
1792     // std::string data2=param[5].argument[0];
1793     // parse.decode(data2.c_str(),"@,(&)",param+5);
1794     // int nb=atoi(param[5].argument[0].c_str());
1795     // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1796     // }
1797     // else
1798     // {
1799     // std::string data2=param[5].argument[0];
1800     // parse.decode(data2.c_str(),"(&),@,(&)",param+5);
1801     // int nb_face=param[5].argument.size();
1802     // for (int i=0;i<nb_face;i=i+2)
1803     // {
1804     // unsigned long idn1=cid(param[5].argument[i]);
1805     // unsigned long idn2=cid(param[5].argument[i+1]);
1806     // volumemince.push_back(id);
1807     // volumemince.push_back(idn1);
1808     // volumemince.push_back(idn2);
1809     // }
1810     // int nb=atoi(param[6].argument[0].c_str());
1811     // if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
1812     // }
1813     // }
1814 francois 763 /*{
1815 francois 283 for (int i=0;i<nb;i++)
1816     {
1817     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1818     char nom[3];
1819     double val;
1820     strcpy(nom,param[7].argument[0].c_str());
1821     val=atof(param[8].argument[0].c_str());
1822     mgvol->ajouter_ccf(nom,val);
1823     }
1824 francois 763 }*/
1825 francois 283 }
1826     if (entite=="COQUE")
1827     {
1828 francois 794 if (version_fichier<2)
1829     {
1830     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1831 francois 283 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1832     mggeo->ajouter_mg_coque(mgcoq);
1833     int nummat=atoi((char*)param[4].argument[0].c_str());
1834     mgcoq->change_num_materiau(nummat);
1835     int nb=atoi(param[5].argument[0].c_str());
1836 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgcoq);
1837 francois 794 }
1838     else
1839     {
1840     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1841     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1842     mggeo->ajouter_mg_coque(mgcoq);
1843     int nb=atoi(param[4].argument[0].c_str());
1844     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgcoq);
1845     }
1846 francois 763 /*if (nb!=0)
1847 francois 283 {
1848     for (int i=0;i<nb;i++)
1849     {
1850     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1851     char nom[3];
1852     double val;
1853     strcpy(nom,param[7].argument[0].c_str());
1854     val=atof(param[8].argument[0].c_str());
1855     mgcoq->ajouter_ccf(nom,val);
1856     }
1857 francois 763 }*/
1858 francois 283 }
1859     if (entite=="POUTRE")
1860     {
1861 francois 794 if (version_fichier<2)
1862     {
1863     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1864 francois 283 MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
1865     mggeo->ajouter_mg_poutre(mgpoutre);
1866     int nummat=atoi((char*)param[4].argument[0].c_str());
1867     mgpoutre->change_num_materiau(nummat);
1868     int nb=atoi(param[5].argument[0].c_str());
1869 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgpoutre);
1870 francois 794 }
1871     else
1872     {
1873     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1874     MG_POUTRE* mgpou=new MG_POUTRE(param[2].argument[0],id);
1875     mggeo->ajouter_mg_poutre(mgpou);
1876     int nb=atoi(param[4].argument[0].c_str());
1877     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgpou);
1878     }
1879    
1880 francois 763 /*if (nb!=0)
1881 francois 283 {
1882     for (int i=0;i<nb;i++)
1883     {
1884     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1885     char nom[3];
1886     double val;
1887     strcpy(nom,param[7].argument[0].c_str());
1888     val=atof(param[8].argument[0].c_str());
1889     mgpoutre->ajouter_ccf(nom,val);
1890     }
1891 francois 763 }*/
1892 francois 283 }
1893     if (entite=="COQUILLE")
1894     {
1895 couturad 906 lire_MG_COQUILLE(id,parse,param,data,mggeo);
1896     // parse.decode(data.c_str(),"@,@",param+2);
1897     // long ident=cid(param[2].argument[0]);
1898     // MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
1899     // MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
1900     // if (mgvol!=NULL)
1901     // {
1902     // MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
1903     // mggeo->ajouter_mg_coquille(mgcoq,mgvol);
1904     // }
1905     // if (mgcoq!=NULL)
1906     // {
1907     // MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
1908     // mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
1909     // }
1910 francois 283 }
1911 francois 881
1912 francois 283 #ifdef BREP_STEP
1913     if (entite=="SURFACE_STEP")
1914     {
1915     parse.decode(data.c_str(),"@",param+2);
1916     long idstepsuf=atol(param[2].argument[0].c_str());
1917 couturad 740 ST_SURFACE *stsurf=mggeo->get_gest_step().lst_surface.getid(idstepsuf);
1918 francois 283 STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
1919     mggeo->ajouter_mg_surface(stepsurf);
1920     }
1921     if (entite=="COURBE_STEP")
1922     {
1923     parse.decode(data.c_str(),"@",param+2);
1924     long idstepcur=atol(param[2].argument[0].c_str());
1925 couturad 740 ST_COURBE *stcur=mggeo->get_gest_step().lst_courbe.getid(idstepcur);
1926 francois 283 STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
1927     mggeo->ajouter_mg_courbe(stepcur);
1928     }
1929    
1930     if (entite=="POINT_STEP")
1931     {
1932     parse.decode(data.c_str(),"@",param+2);
1933     long idsteppt=atol(param[2].argument[0].c_str());
1934 couturad 740 ST_POINT *stpt=mggeo->get_gest_step().lst_point.getid(idsteppt);
1935 francois 283 STEP_POINT* steppt=new STEP_POINT(id,stpt);
1936     mggeo->ajouter_mg_point(steppt);
1937     }
1938    
1939     #endif
1940     #ifdef BREP_SAT
1941     if (entite=="SURFACE_SAT")
1942     {
1943     parse.decode(data.c_str(),"@",param+2);
1944     long idsatsuf=atol(param[2].argument[0].c_str());
1945 couturad 740 SAT_SURFACE *satsurf=mggeo->get_gest_sat().lst_surface.getid(idsatsuf);
1946 francois 283 ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
1947     mggeo->ajouter_mg_surface(acissurf);
1948     }
1949     if (entite=="COURBE_SAT")
1950     {
1951     parse.decode(data.c_str(),"@",param+2);
1952     long idsatcur=atol(param[2].argument[0].c_str());
1953 couturad 740 SAT_COURBE *satcur=mggeo->get_gest_sat().lst_courbe.getid(idsatcur);
1954 francois 283 ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
1955     mggeo->ajouter_mg_courbe(aciscur);
1956     }
1957    
1958     if (entite=="POINT_SAT")
1959     {
1960     parse.decode(data.c_str(),"@",param+2);
1961     long idsatpt=atol(param[2].argument[0].c_str());
1962 couturad 740 SAT_POINT *satpt=mggeo->get_gest_sat().lst_point.getid(idsatpt);
1963 francois 283 ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
1964     mggeo->ajouter_mg_point(acispt);
1965     }
1966    
1967     #endif
1968    
1969 couturad 908 #ifdef ALL_OCC
1970 francois 283
1971     if (entite=="SURFACE_OCC")
1972     {
1973     parse.decode(data.c_str(),"@",param+2);
1974     long idocc=atol(param[2].argument[0].c_str());
1975 couturad 906 TopoDS_Face occface;
1976     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1977     {
1978     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1979     occface=occ_fonction_2017->get_TopoDS_Face_id(idocc);
1980     }
1981     else
1982     {
1983     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
1984     occface=TopoDS::Face(occshape);
1985     }
1986 francois 1025 mggeo->get_occ_fonction().change_precision(mggeo->get_valeur_precision());
1987 couturad 906 OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface,&mggeo->get_occ_fonction());
1988     occsurf->change_idoriginal(std::to_string(idocc));
1989 francois 283 mggeo->ajouter_mg_surface(occsurf);
1990     }
1991     if (entite=="COURBE_OCC")
1992     {
1993     parse.decode(data.c_str(),"@",param+2);
1994     long idocc=atol(param[2].argument[0].c_str());
1995 couturad 906 TopoDS_Edge occedge;
1996     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1997     {
1998     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1999     occedge=occ_fonction_2017->get_TopoDS_Edge_id(idocc);
2000     }
2001     else
2002     {
2003     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
2004     occedge=TopoDS::Edge(occshape);
2005     }
2006     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, &mggeo->get_occ_fonction());
2007 francois 283 mggeo->ajouter_mg_courbe(occcrb);
2008 couturad 906 occcrb->change_idoriginal(std::to_string(idocc));
2009 francois 283 }
2010     if (entite=="POINT_OCC")
2011     {
2012     parse.decode(data.c_str(),"@",param+2);
2013     long idocc=atol(param[2].argument[0].c_str());
2014 couturad 906 TopoDS_Vertex occvertex;
2015     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2016     {
2017     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2018     occvertex = occ_fonction_2017->get_TopoDS_Vertex_id(idocc);
2019     }
2020     else
2021     {
2022     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
2023     occvertex=TopoDS::Vertex(occshape);
2024     }
2025    
2026     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, &mggeo->get_occ_fonction());
2027 francois 283 mggeo->ajouter_mg_point(occpoint);
2028 couturad 906 occpoint->change_idoriginal((std::to_string(idocc)));
2029 francois 283 }
2030     #endif
2031     #ifdef WINDOWS_VERSION
2032     if (entite=="CAD4FE_POLYCURVE")
2033     {
2034     CAD4FE::PolyCurve * polycurve = NULL;
2035     parse.decode(data.c_str(),"@,(&)",param+2);
2036     int nb = atoi(param[2].argument[0].c_str());
2037    
2038     if (nb == 0)
2039     {
2040     printf("PolyCurve %d is formed with reference vertex : ", id);
2041     parse.decode(param[3].argument[0].c_str(),"@",param+4);
2042     int idRefVertex;
2043     idRefVertex=cid(param[4].argument[0].c_str());
2044     printf("%d ;\n ", idRefVertex);
2045     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
2046     polycurve = new CAD4FE::PolyCurve(refVertex);
2047     }
2048     else
2049     {
2050     printf("PolyCurve %d is formed with reference edges : ", id);
2051     polycurve = new CAD4FE::PolyCurve;
2052     for (int i=0;i<nb;i++)
2053     {
2054     parse.decode(param[3].argument[i].c_str(),"@",param+4);
2055     int idRefEdge;
2056     idRefEdge=cid(param[4].argument[0].c_str());
2057     printf("%d ; ", idRefEdge);
2058     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
2059     CAD4FE::PolyCurve tmpPC(refEdge);
2060     polycurve->Merge(tmpPC);
2061     }
2062     printf("\n");
2063     }
2064    
2065     polycurve->change_id(id);
2066     mggeo->ajouter_mg_courbe(polycurve);
2067     }
2068    
2069    
2070     if (entite=="CAD4FE_POLYSURFACE")
2071     {
2072     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
2073     polysurface->change_id(id);
2074     mggeo->ajouter_mg_surface(polysurface);
2075    
2076     parse.decode(data.c_str(),"@,(&)",param+2);
2077    
2078     int nb = atoi(param[2].argument[0].c_str());
2079     printf("PolySurface %d is formed with reference faces : ", id);
2080     for (int i=0;i<nb;i++)
2081     {
2082     parse.decode(param[3].argument[i].c_str(),"@",param+4);
2083     int idRefFace;
2084     idRefFace=cid(param[4].argument[0].c_str());
2085     printf("%d ; ", idRefFace);
2086    
2087     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
2088     CAD4FE::PolySurface tmpSF(refFace);
2089     polysurface->Merge(tmpSF);
2090     }
2091    
2092     printf("\n");
2093     }
2094     if (entite=="CAD4FE_MCEDGE")
2095     {
2096     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2097    
2098     std::string idOriginal = param[2].argument[0];
2099     long idPolyCurve=cid(param[3].argument[0]);
2100     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
2101    
2102     // sense is not used because a MCEdge always has
2103     // a sense = 1 !
2104     // (because polycurve domain is equal to mcEdge domain)
2105     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
2106     mcEdge->change_id(id);
2107     mggeo->ajouter_mg_arete(mcEdge);
2108    
2109     int nb=atoi(param[7].argument[0].c_str());
2110     if (nb!=0)
2111     {
2112     for (int i=0;i<nb;i++)
2113     {
2114     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
2115     char nom[3];
2116     double val;
2117     strcpy(nom,param[9].argument[0].c_str());
2118     val=atof(param[10].argument[0].c_str());
2119     mcEdge->ajouter_ccf(nom,val);
2120     }
2121     }
2122     }
2123     if (entite=="CAD4FE_MCFACE")
2124     {
2125     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
2126    
2127     std::string idOriginal = param[2].argument[0];
2128     long idPolySurface=cid(param[3].argument[0]);
2129     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
2130    
2131     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
2132     mcFace->change_id(id);
2133     mggeo->ajouter_mg_face(mcFace);
2134    
2135     int nb=atoi(param[6].argument[0].c_str());
2136     if (nb!=0)
2137     {
2138     for (int i=0;i<nb;i++)
2139     {
2140     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
2141     char nom[3];
2142     double val;
2143     strcpy(nom,param[8].argument[0].c_str());
2144     val=atof(param[9].argument[0].c_str());
2145     mcFace->ajouter_ccf(nom,val);
2146     }
2147     }
2148     }
2149     if (entite=="CAD4FE_MCVERTEX")
2150     {
2151     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
2152     std::string idOriginal = param[2].argument[0];
2153     long idsom=cid(param[3].argument[0]);
2154     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
2155     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
2156     mcVertex->change_id(id);
2157     mggeo->ajouter_mg_sommet(mcVertex);
2158     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
2159     if (nb_ref_vertex!=0)
2160     {
2161     for (int i=0;i<nb_ref_vertex;i++)
2162     {
2163     unsigned long idRefVertex=cid(param[5].argument[i]);
2164     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
2165     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
2166     }
2167     }
2168     int nb_ccf=atoi(param[4+2].argument[0].c_str());
2169     if (nb_ccf!=0)
2170     {
2171     for (int i=0;i<nb_ccf;i++)
2172     {
2173     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
2174     char nom_ccf[3];
2175     double val_ccf;
2176     strcpy(nom_ccf,param[6+2].argument[0].c_str());
2177     val_ccf=atof(param[7+2].argument[0].c_str());
2178     mgsom->ajouter_ccf(nom_ccf,val_ccf);
2179     }
2180     }
2181     }
2182     #endif
2183     if (entite=="FACE")
2184     {
2185 couturad 906 lire_MG_FACE(id,parse,param,data,mggeo);
2186     // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
2187     // else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
2188     // long idsurf=cid(param[3].argument[0]);
2189     // int sens=atoi(param[5].argument[0].c_str());
2190     // MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
2191     // MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
2192     // mggeo->ajouter_mg_face(mgface);
2193     // int argccf=7;
2194     // if (version_fichier>2.1)
2195     // {
2196     // argccf=8;
2197     // int nbpole=atoi(param[6].argument[0].c_str());
2198     // mgface->change_nb_pole(nbpole);
2199     // }
2200     // int nb=atoi(param[argccf-1].argument[0].c_str());
2201     // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
2202 francois 763 /*if (nb!=0)
2203 francois 283 {
2204     for (int i=0;i<nb;i++)
2205     {
2206     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
2207     char nom[3];
2208     double val;
2209     strcpy(nom,param[8].argument[0].c_str());
2210     val=atof(param[9].argument[0].c_str());
2211     mgface->ajouter_ccf(nom,val);
2212     }
2213 francois 763 }*/
2214 francois 283 }
2215     if (entite=="COFACE")
2216     {
2217     parse.decode(data.c_str(),"@,@,@",param+2);
2218     long idface=cid(param[2].argument[0]);
2219     long idcoq=cid(param[3].argument[0]);
2220     int sens=atoi(param[4].argument[0].c_str());
2221     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
2222     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
2223     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
2224     mgcoq->ajouter_mg_coface(mgcoface);
2225     }
2226     if (entite=="BOUCLE")
2227     {
2228 couturad 906 lire_MG_BOUCLE(id,parse,param,data,mggeo);
2229     // parse.decode(data.c_str(),"@,(@)",param+2);
2230     // long ident=cid(param[2].argument[0]);
2231     // MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2232     // MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2233     // if (mgface!=NULL)
2234     // {
2235     // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
2236     // mggeo->ajouter_mg_boucle(mgbou,mgface);
2237     // }
2238     // if (mgpoutre!=NULL)
2239     // {
2240     // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
2241     // mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
2242     // }
2243 francois 283 }
2244     if (entite=="POINT")
2245     {
2246     parse.decode(data.c_str(),"@,@,@",param+2);
2247     double xyz[3];
2248     xyz[0]=atof(param[2].argument[0].c_str());
2249     xyz[1]=atof(param[3].argument[0].c_str());
2250     xyz[2]=atof(param[4].argument[0].c_str());
2251     LC_POINT* point=new LC_POINT(id,xyz);
2252     mggeo->ajouter_mg_point(point);
2253     }
2254     if (entite=="SOMMET")
2255     {
2256 couturad 906 lire_MG_SOMMET(id,parse,param,data,mggeo);
2257     // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
2258     // else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2259     // long idpoint=cid(param[3].argument[0]);
2260     // MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2261     // MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
2262     // mggeo->ajouter_mg_sommet(mgsom);
2263     // int argccf=5;
2264     // if (version_fichier>2.1)
2265     // {
2266     // argccf=6;
2267     // int ipole=atoi(param[4].argument[0].c_str());
2268     // if (ipole==1) mgsom->change_pole(true);
2269     // }
2270     // int nb=atoi(param[argccf-1].argument[0].c_str());
2271     // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
2272     // /*if (nb!=0)
2273     // {
2274     // for (int i=0;i<nb;i++)
2275     // {
2276     // parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2277     // char nom[3];
2278     // double val;
2279     // strcpy(nom,param[6].argument[0].c_str());
2280     // val=atof(param[7].argument[0].c_str());
2281     // mgsom->ajouter_ccf(nom,val);
2282     // }
2283     // }*/
2284     }
2285 couturad 908 #ifdef ALL_OCC
2286 couturad 906 if (entite=="OCC_SOMMET")
2287     {
2288     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2289 francois 283 long idpoint=cid(param[3].argument[0]);
2290     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2291 couturad 906 TopoDS_Vertex topods_vertex;
2292     long idori = stol(param[2].argument[0]);
2293     OCC_SOMMET* occ_sommet;
2294     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2295     {
2296     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2297     topods_vertex=occ_fonction_v2017->get_TopoDS_Vertex_id(idori);
2298     occ_sommet = new OCC_SOMMET(param[2].argument[0],id,mgpt,topods_vertex,&mggeo->get_occ_fonction());
2299     mggeo->ajouter_mg_sommet(occ_sommet);
2300     occ_fonction_v2017->ajouter_OCC_SOMMET(occ_sommet);
2301     }
2302     else
2303     {
2304     std::cout << "*** MG_FILE : ERREUR lecture OCC_SOMMET : Mauvaise OCC_FONCTION ! ***" << std::endl;
2305     }
2306     int argccf=5;
2307 couturad 814 if (version_fichier>2.1)
2308     {
2309     argccf=6;
2310     int ipole=atoi(param[4].argument[0].c_str());
2311 couturad 906 if (ipole==1) occ_sommet->change_pole(true);
2312 couturad 814 }
2313     int nb=atoi(param[argccf-1].argument[0].c_str());
2314 couturad 906 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_sommet);
2315 francois 283 }
2316 couturad 906 if (entite=="OCC_ARETE")
2317     {
2318     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2319     long idcur=cid(param[3].argument[0]);
2320     int sens=atol(param[6].argument[0].c_str());
2321     long idori = stoi(param[2].argument[0]);
2322     TopoDS_Edge topods_edge;
2323     OCC_ARETE* occ_arete;
2324     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2325     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2326     {
2327     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2328     topods_edge=occ_fonction_v2017->get_TopoDS_Edge_id(idori);
2329     occ_arete= new OCC_ARETE(param[2].argument[0],id,mgcur,sens,topods_edge,&mggeo->get_occ_fonction());
2330     mggeo->ajouter_mg_arete(occ_arete);
2331     occ_fonction_v2017->ajouter_OCC_ARETE(occ_arete);
2332     }
2333     else
2334     {
2335     std::cout << "*** MG_FILE : ERREUR lecture OCC_ARETE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2336     }
2337     int nb=atoi(param[7].argument[0].c_str());
2338     if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,occ_arete);
2339     }
2340     if (entite=="OCC_BOUCLE")
2341     {
2342     parse.decode(data.c_str(),"@,@,(@)",param+2);
2343     long ident=cid(param[2].argument[0]);
2344     long idori=stol(param[3].argument[0]);
2345     TopoDS_Wire topods_wire;
2346     OCC_BOUCLE* occ_boucle;
2347     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2348     {
2349     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2350     topods_wire=occ_fonction_v2017->get_TopoDS_Wire_id(idori);
2351     if(ident!=-1)
2352     {
2353     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2354     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2355     if (mgface!=NULL)
2356     {
2357     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgface,topods_wire,&mggeo->get_occ_fonction());
2358     mggeo->ajouter_mg_boucle(occ_boucle,mgface);
2359     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2360     }
2361     if (mgpoutre!=NULL)
2362     {
2363     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgpoutre,topods_wire,&mggeo->get_occ_fonction());
2364     mggeo->ajouter_mg_boucle(occ_boucle,mgpoutre);
2365     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2366     }
2367     }
2368     else
2369     {
2370     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,topods_wire,&mggeo->get_occ_fonction());
2371     mggeo->ajouter_mg_boucle(occ_boucle);
2372     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2373     }
2374     }
2375     else
2376     {
2377     std::cout << "*** MG_FILE : ERREUR lecture OCC_BOUCLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2378     }
2379    
2380     }
2381     if (entite=="OCC_FACE")
2382     {
2383     parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
2384     long idsurf=cid(param[3].argument[0]);
2385     int sens=atoi(param[5].argument[0].c_str());
2386     long idori = stol(param[2].argument[0]);
2387     TopoDS_Face topods_face;
2388     OCC_FACE* occ_face;
2389     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
2390     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2391     {
2392     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2393     topods_face=occ_fonction_v2017->get_TopoDS_Face_id(idori);
2394     occ_face = new OCC_FACE(param[2].argument[0],id,mgsurf,sens,topods_face,&mggeo->get_occ_fonction());
2395     mggeo->ajouter_mg_face(occ_face);
2396     occ_fonction_v2017->ajouter_OCC_FACE(occ_face);
2397     }
2398     else
2399     {
2400     std::cout << "*** MG_FILE : ERREUR lecture OCC_FACE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2401     }
2402     int argccf=7;
2403     if (version_fichier>2.1)
2404     {
2405     argccf=8;
2406     int nbpole=atoi(param[6].argument[0].c_str());
2407     occ_face->change_nb_pole(nbpole);
2408     }
2409     int nb=atoi(param[argccf-1].argument[0].c_str());
2410     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_face);
2411     }
2412     if (entite=="OCC_COQUILLE")
2413     {
2414     parse.decode(data.c_str(),"@,@,@",param+2);
2415     long ident=cid(param[2].argument[0]);
2416     long idori = stol(param[3].argument[0]);
2417     TopoDS_Shell topods_shell;
2418     OCC_COQUILLE* occ_coquille;
2419     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2420     {
2421     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2422     topods_shell=occ_fonction_v2017->get_TopoDS_Shell_id(idori);
2423     if(idori!=-1)
2424     {
2425     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
2426     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
2427     if (mgvol!=NULL)
2428     {
2429     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgvol,topods_shell,&mggeo->get_occ_fonction());
2430     mggeo->ajouter_mg_coquille(occ_coquille,mgvol);
2431     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2432     }
2433     if (mgcoq!=NULL)
2434     {
2435     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgcoq,topods_shell,&mggeo->get_occ_fonction());
2436     mggeo->ajouter_mg_coquille(occ_coquille,mgcoq);
2437     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2438     }
2439     }
2440     else
2441     {
2442     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,topods_shell,&mggeo->get_occ_fonction());
2443     mggeo->ajouter_mg_coquille(occ_coquille);
2444     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2445     }
2446     }
2447     else
2448     {
2449     std::cout << "*** MG_FILE : ERREUR lecture OCC_COQUILLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2450     }
2451     }
2452     if (entite=="OCC_VOLUME")
2453     {
2454    
2455     parse.decode(data.c_str(),"@,@,@,@",param+2);
2456     long idori = stol(param[2].argument[0]);
2457     TopoDS_Solid topods_solid;
2458     OCC_VOLUME* occ_volume;
2459     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2460     {
2461     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2462     topods_solid=occ_fonction_v2017->get_TopoDS_Solid_id(idori);
2463     occ_volume = new OCC_VOLUME(param[2].argument[0],id,topods_solid,&mggeo->get_occ_fonction());
2464     mggeo->ajouter_mg_volume(occ_volume);
2465     occ_fonction_v2017->ajouter_OCC_VOLUME(occ_volume);
2466     }
2467     else
2468     {
2469     std::cout << "*** MG_FILE : ERREUR lecture OCC_VOLUME : Mauvaise OCC_FONCTION ! ***" << std::endl;
2470     }
2471     int mince=atoi(param[4].argument[0].c_str());
2472     if (mince==0)
2473     {
2474     std::string data2=param[5].argument[0];
2475     parse.decode(data2.c_str(),"@,(&)",param+5);
2476     int nb=atoi(param[5].argument[0].c_str());
2477     if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,occ_volume);
2478     }
2479     else
2480     {
2481     std::string data2=param[5].argument[0];
2482     parse.decode(data2.c_str(),"(&),@,(&)",param+5);
2483     int nb_face=param[5].argument.size();
2484     for (int i=0;i<nb_face;i=i+2)
2485     {
2486     unsigned long idn1=cid(param[5].argument[i]);
2487     unsigned long idn2=cid(param[5].argument[i+1]);
2488     volumemince.push_back(id);
2489     volumemince.push_back(idn1);
2490     volumemince.push_back(idn2);
2491     }
2492     int nb=atoi(param[6].argument[0].c_str());
2493     if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,occ_volume);
2494     }
2495     }
2496    
2497    
2498     #endif
2499 francois 576 if (entite=="ARETE_ELEMENT")
2500     {
2501     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2502     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
2503     mggeo->ajouter_mg_arete(are);
2504     int nb=atoi(param[4].argument[0].c_str());
2505 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
2506     /* if (nb!=0)
2507 francois 576 {
2508     for (int i=0;i<nb;i++)
2509     {
2510     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2511     char nom[3];
2512     double val;
2513     strcpy(nom,param[6].argument[0].c_str());
2514     val=atof(param[7].argument[0].c_str());
2515     are->ajouter_ccf(nom,val);
2516     }
2517 francois 763 }*/
2518 francois 576 }
2519     if (entite=="FACE_ELEMENT")
2520     {
2521     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2522     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
2523     mggeo->ajouter_mg_face(face);
2524     int nb=atoi(param[4].argument[0].c_str());
2525 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,face);
2526     /*if (nb!=0)
2527 francois 576 {
2528     for (int i=0;i<nb;i++)
2529     {
2530     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2531     char nom[3];
2532     double val;
2533     strcpy(nom,param[6].argument[0].c_str());
2534     val=atof(param[7].argument[0].c_str());
2535     face->ajouter_ccf(nom,val);
2536     }
2537 francois 763 }*/
2538 francois 576 }
2539 francois 685 if (entite=="COQUE_ELEMENT")
2540     {
2541     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2542     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
2543     mggeo->ajouter_mg_coque(coq);
2544     int nbele=atoi(param[2].argument[0].c_str());
2545     for (int i=0;i<nbele;i++)
2546     {
2547     unsigned long idele=cid(param[3].argument[i].c_str());
2548     coq->ajouter_element(idele);
2549     }
2550     int nb=atoi(param[4].argument[0].c_str());
2551 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
2552     /* if (nb!=0)
2553 francois 685 {
2554     for (int i=0;i<nb;i++)
2555     {
2556     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2557     char nom[3];
2558     double val;
2559     strcpy(nom,param[6].argument[0].c_str());
2560     val=atof(param[7].argument[0].c_str());
2561     coq->ajouter_ccf(nom,val);
2562     }
2563 francois 763 }*/
2564 francois 685 }
2565 francois 753 if (entite=="POUTRE_ELEMENT")
2566 francois 576 {
2567     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2568 francois 753 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
2569     mggeo->ajouter_mg_poutre(pou);
2570     int nbele=atoi(param[2].argument[0].c_str());
2571     for (int i=0;i<nbele;i++)
2572     {
2573     unsigned long idele=cid(param[3].argument[i].c_str());
2574     pou->ajouter_element(idele);
2575     }
2576     int nb=atoi(param[4].argument[0].c_str());
2577 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
2578     /*if (nb!=0)
2579 francois 753 {
2580     for (int i=0;i<nb;i++)
2581     {
2582     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2583     char nom[3];
2584     double val;
2585     strcpy(nom,param[6].argument[0].c_str());
2586     val=atof(param[7].argument[0].c_str());
2587     pou->ajouter_ccf(nom,val);
2588     }
2589 francois 763 }*/
2590 francois 753 }
2591     if (entite=="VOLUME_ELEMENT")
2592     {
2593     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2594 francois 576 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
2595     mggeo->ajouter_mg_volume(vol);
2596     int nb=atoi(param[4].argument[0].c_str());
2597 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
2598     /* if (nb!=0)
2599 francois 576 {
2600     for (int i=0;i<nb;i++)
2601     {
2602     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2603     char nom[3];
2604     double val;
2605     strcpy(nom,param[6].argument[0].c_str());
2606     val=atof(param[7].argument[0].c_str());
2607     vol->ajouter_ccf(nom,val);
2608     }
2609 francois 763 }*/
2610 francois 576 }
2611 francois 526 if (entite=="SOMMET_NOEUD")
2612     {
2613     parse.decode(data.c_str(),"@,@,(&)",param+2);
2614     long idnoeud=cid(param[2].argument[0]);
2615     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
2616     mggeo->ajouter_mg_sommet(mgsom);
2617     int nb=atoi(param[3].argument[0].c_str());
2618 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
2619     /*if (nb!=0)
2620 francois 526 {
2621     for (int i=0;i<nb;i++)
2622     {
2623     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
2624     char nom[3];
2625     double val;
2626     strcpy(nom,param[5].argument[0].c_str());
2627     val=atof(param[6].argument[0].c_str());
2628     mgsom->ajouter_ccf(nom,val);
2629     }
2630 francois 763 }*/
2631 francois 526 }
2632 francois 283 if (entite=="ARETE")
2633     {
2634 couturad 906 lire_MG_ARETE(id,parse,param,data,mggeo);
2635     // parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2636     // long idcur=cid(param[3].argument[0]);
2637     // int sens=atoi(param[6].argument[0].c_str());
2638     // MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2639     // MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
2640     // mggeo->ajouter_mg_arete(mgarete);
2641     // int nb=atoi(param[7].argument[0].c_str());
2642     // if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
2643     // /*if (nb!=0)
2644     // {
2645     // for (int i=0;i<nb;i++)
2646     // {
2647     // parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
2648     // char nom[3];
2649     // double val;
2650     // strcpy(nom,param[9].argument[0].c_str());
2651     // val=atof(param[10].argument[0].c_str());
2652     // mgarete->ajouter_ccf(nom,val);
2653     // }
2654     // }*/
2655 francois 283 }
2656     if (entite=="COSOMMET")
2657     {
2658     parse.decode(data.c_str(),"@,@,@",param+2);
2659     long idsom=cid(param[2].argument[0]);
2660     long idarete=cid(param[3].argument[0]);
2661     int num=atoi(param[4].argument[0].c_str());
2662     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
2663     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2664     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
2665     if (num==1) mgarete->changer_cosommet1(mgcosom);
2666     if (num==2) mgarete->changer_cosommet2(mgcosom);
2667     }
2668     if (entite=="COARETE")
2669     {
2670     parse.decode(data.c_str(),"@,@,@",param+2);
2671     long idarete=cid(param[2].argument[0]);
2672     long idboucle=cid(param[3].argument[0]);
2673     int sens=atoi(param[4].argument[0].c_str());
2674     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2675     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
2676     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
2677     mgboucle->ajouter_mg_coarete(mgcoarete);
2678     }
2679     if (entite=="VISU_COURBE")
2680     {
2681     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2682     double xyz1[3];
2683     double xyz2[3];
2684     xyz1[0]=atof(param[2].argument[0].c_str());
2685     xyz1[1]=atof(param[3].argument[0].c_str());
2686     xyz1[2]=atof(param[4].argument[0].c_str());
2687     xyz2[0]=atof(param[5].argument[0].c_str());
2688     xyz2[1]=atof(param[6].argument[0].c_str());
2689     xyz2[2]=atof(param[7].argument[0].c_str());
2690     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
2691     mggeo->ajouter_mg_visu_courbe(mgcrb);
2692     }
2693     if (entite=="MAILLAGE")
2694     {
2695     parse.decode(data.c_str(),"@",param+2);
2696     long idgeo=cid(param[2].argument[0]);
2697 francois 626 mggeo=get_mg_geometrieid(idgeo);
2698 couturad 920 if(mggeo==NULL) mggeo=get_mg_constructionid(idgeo);
2699 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
2700     ajouter_mg_maillage(mgmai);
2701     }
2702 francois 465 if (entite=="MAILLAGE_STRUCTURE")
2703     {
2704     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2705     long idgeo=cid(param[2].argument[0]);
2706 francois 626 mggeo=get_mg_geometrieid(idgeo);
2707 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
2708     ajouter_mg_maillage(mgmai);
2709     double xmin=atof(param[3].argument[0].c_str());
2710     double ymin=atof(param[4].argument[0].c_str());
2711     double zmin=atof(param[5].argument[0].c_str());
2712     double xmax=atof(param[6].argument[0].c_str());
2713     double ymax=atof(param[7].argument[0].c_str());
2714     double zmax=atof(param[8].argument[0].c_str());
2715     int nx=atoi(param[9].argument[0].c_str());
2716     int ny=atoi(param[10].argument[0].c_str());
2717     int nz=atoi(param[11].argument[0].c_str());
2718     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2719     mgmai->change_param_structure(b,nx,ny,nz);
2720     }
2721 francois 283 if (entite=="FEM_MAILLAGE")
2722     {
2723     parse.decode(data.c_str(),"@,@,@",param+2);
2724     int degre=atoi(param[2].argument[0].c_str());
2725     long idmai=cid(param[3].argument[0]);
2726     long idgeo=cid(param[4].argument[0]);
2727 francois 626 mggeo=get_mg_geometrieid(idgeo);
2728     mgmai=get_mg_maillageid(idmai);
2729 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2730     ajouter_fem_maillage(femmai);
2731     }
2732 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
2733     {
2734     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2735     int degre=atoi(param[2].argument[0].c_str());
2736     long idmai=cid(param[3].argument[0]);
2737     long idgeo=cid(param[4].argument[0]);
2738 francois 626 mggeo=get_mg_geometrieid(idgeo);
2739     mgmai=get_mg_maillageid(idmai);
2740 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2741     ajouter_fem_maillage(femmai);
2742     double xmin=atof(param[5].argument[0].c_str());
2743     double ymin=atof(param[6].argument[0].c_str());
2744     double zmin=atof(param[7].argument[0].c_str());
2745     double xmax=atof(param[8].argument[0].c_str());
2746     double ymax=atof(param[9].argument[0].c_str());
2747     double zmax=atof(param[10].argument[0].c_str());
2748     int nx=atoi(param[11].argument[0].c_str());
2749     int ny=atoi(param[12].argument[0].c_str());
2750     int nz=atoi(param[13].argument[0].c_str());
2751     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2752     femmai->change_param_structure(b,nx,ny,nz);
2753     }
2754 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
2755 francois 283 if (entite=="FEM_NOEUD")
2756     {
2757     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2758     long idtopo=cid(param[2].argument[0]);
2759     long idmai=cid(param[3].argument[0]);
2760     double x=atof(param[4].argument[0].c_str());
2761     double y=atof(param[5].argument[0].c_str());
2762     double z=atof(param[6].argument[0].c_str());
2763     int num=atoi(param[7].argument[0].c_str());
2764     int numopt=atoi(param[8].argument[0].c_str());
2765     MG_ELEMENT_MAILLAGE* elmai;
2766     if (idmai>-1)
2767     {
2768     elmai=mgmai->get_mg_noeudid(idmai);
2769     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
2770     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
2771     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
2772     }
2773     else elmai=NULL;
2774     FEM_NOEUD* noeud;
2775     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
2776     else
2777     {
2778     MG_ELEMENT_TOPOLOGIQUE* topo;
2779     if (idtopo>-1)
2780     {
2781     topo=mggeo->get_mg_sommetid(idtopo);
2782     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
2783     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
2784     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
2785     }
2786     else topo=NULL;
2787     noeud=new FEM_NOEUD(id,topo,x,y,z);
2788     }
2789     noeud->change_numero(num);
2790     noeud->change_numero_opt(numopt);
2791     femmai->ajouter_fem_noeud(noeud);
2792     }
2793     if (entite=="FEM_NOEUD_DEF")
2794     {
2795     parse.decode(data.c_str(),"@,@,@",param+2);
2796     double x=atof(param[2].argument[0].c_str());
2797     double y=atof(param[3].argument[0].c_str());
2798     double z=atof(param[4].argument[0].c_str());
2799     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2800     noeud->change_dx(x);
2801     noeud->change_dy(y);
2802     noeud->change_dz(z);
2803     femmai->active_deforme();
2804     }
2805 francois 325 if (entite=="FEM_NOEUD_REAC")
2806     {
2807     parse.decode(data.c_str(),"@,@,@",param+2);
2808     double x=atof(param[2].argument[0].c_str());
2809     double y=atof(param[3].argument[0].c_str());
2810     double z=atof(param[4].argument[0].c_str());
2811     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2812     noeud->change_rx(x);
2813     noeud->change_ry(y);
2814     noeud->change_rz(z);
2815 francois 339 femmai->active_reaction();;
2816 francois 325 }
2817 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
2818 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
2819     {
2820     parse.decode(data.c_str(),"@,@,@",param+2);
2821     long idtopo=cid(param[2].argument[0]);
2822     long idmai=cid(param[3].argument[0]);
2823     long idn1=cid(param[4].argument[0]);
2824     FEM_NOEUD* tab[1];
2825     tab[0]=femmai->get_fem_noeudid(idn1);
2826     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2827     if (idtopo>-1)
2828     topo=mggeo->get_mg_sommetid(idtopo);
2829     MG_ELEMENT_MAILLAGE* elmai;
2830     if (idmai>-1)
2831     elmai=mgmai->get_mg_noeudid(idmai);
2832     else elmai=NULL;
2833     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
2834     femmai->ajouter_fem_element0(fem);
2835     }
2836 francois 283 if (entite=="FEM_SEGMENT2")
2837     {
2838     parse.decode(data.c_str(),"@,@,@,@",param+2);
2839 francois 378 long idtopo=cid(param[2].argument[0]);
2840 francois 283 long idmai=cid(param[3].argument[0]);
2841     long idn1=cid(param[4].argument[0]);
2842     long idn2=cid(param[5].argument[0]);
2843     FEM_NOEUD* tab[2];
2844     tab[0]=femmai->get_fem_noeudid(idn1);
2845     tab[1]=femmai->get_fem_noeudid(idn2);
2846 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2847     if (idtopo>-1)
2848     topo=mggeo->get_mg_areteid(idtopo);
2849 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
2850 francois 378 MG_ELEMENT_MAILLAGE* elmai;
2851 francois 283 if (idmai>-1)
2852     elmai=mgmai->get_mg_segmentid(idmai);
2853     else elmai=NULL;
2854 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
2855 francois 309 femmai->ajouter_fem_element1(seg);
2856 francois 283 }
2857 francois 767 if (entite=="FEM_MINI_SEGMENT2")
2858     {
2859     parse.decode(data.c_str(),"@,@",param+2);
2860     long idn1=cid(param[2].argument[0]);
2861     long idn2=cid(param[3].argument[0]);
2862     FEM_NOEUD* tab[2];
2863     tab[0]=femmai->get_fem_noeudid(idn1);
2864     tab[1]=femmai->get_fem_noeudid(idn2);
2865     MG_SEGMENT* mseg=femmai->get_mg_maillage()->get_mg_segment(tab[0]->get_mg_element_maillage()->get_id(),tab[1]->get_mg_element_maillage()->get_id());
2866     FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
2867     femmai->ajouter_fem_element1(seg);
2868     }
2869 francois 283 if (entite=="FEM_SEGMENT3")
2870     {
2871     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2872 francois 378 long idtopo=cid(param[2].argument[0]);
2873     long idmai=cid(param[3].argument[0]);
2874 francois 283 long idn1=cid(param[4].argument[0]);
2875     long idn2=cid(param[5].argument[0]);
2876     long idn3=cid(param[6].argument[0]);
2877     FEM_NOEUD* tab[3];
2878     tab[0]=femmai->get_fem_noeudid(idn1);
2879     tab[1]=femmai->get_fem_noeudid(idn2);
2880     tab[2]=femmai->get_fem_noeudid(idn3);
2881     MG_ELEMENT_MAILLAGE* elmai;
2882 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2883     if (idtopo>-1)
2884     topo=mggeo->get_mg_areteid(idtopo);
2885     if (idmai>-1)
2886 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
2887     else elmai=NULL;
2888 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
2889 francois 309 femmai->ajouter_fem_element1(seg);
2890 francois 283 }
2891 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
2892     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
2893 francois 283 if (entite=="FEM_TRIANGLE3")
2894     {
2895     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2896 francois 378 long idtopo=cid(param[2].argument[0]);
2897 francois 283 long idmai=cid(param[3].argument[0]);
2898     long idn1=cid(param[4].argument[0]);
2899     long idn2=cid(param[5].argument[0]);
2900     long idn3=cid(param[6].argument[0]);
2901     FEM_NOEUD* tab[3];
2902     tab[0]=femmai->get_fem_noeudid(idn1);
2903     tab[1]=femmai->get_fem_noeudid(idn2);
2904     tab[2]=femmai->get_fem_noeudid(idn3);
2905     MG_ELEMENT_MAILLAGE* elmai;
2906     if (idmai>-1)
2907     elmai=mgmai->get_mg_triangleid(idmai);
2908     else elmai=NULL;
2909 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2910     if (idtopo>-1)
2911 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2912 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
2913 francois 309 femmai->ajouter_fem_element2(tri);
2914 francois 283 }
2915     if (entite=="FEM_TRIANGLE6")
2916     {
2917     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
2918 francois 378 long idtopo=cid(param[2].argument[0]);
2919 francois 283 long idmai=cid(param[3].argument[0]);
2920     long idn1=cid(param[4].argument[0]);
2921     long idn2=cid(param[5].argument[0]);
2922     long idn3=cid(param[6].argument[0]);
2923     long idn4=cid(param[7].argument[0]);
2924     long idn5=cid(param[8].argument[0]);
2925     long idn6=cid(param[9].argument[0]);
2926     FEM_NOEUD* tab[6];
2927     tab[0]=femmai->get_fem_noeudid(idn1);
2928     tab[1]=femmai->get_fem_noeudid(idn2);
2929     tab[2]=femmai->get_fem_noeudid(idn3);
2930     tab[3]=femmai->get_fem_noeudid(idn4);
2931     tab[4]=femmai->get_fem_noeudid(idn5);
2932     tab[5]=femmai->get_fem_noeudid(idn6);
2933     MG_ELEMENT_MAILLAGE* elmai;
2934     if (idmai>-1)
2935     elmai=mgmai->get_mg_triangleid(idmai);
2936     else elmai=NULL;
2937 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2938     if (idtopo>-1)
2939 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2940 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
2941 francois 309 femmai->ajouter_fem_element2(tri);
2942 francois 283 }
2943 francois 310 if (entite=="FEM_QUADRANGLE4")
2944     {
2945     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2946 francois 378 long idtopo=cid(param[2].argument[0]);
2947     long idmai=cid(param[3].argument[0]);
2948 francois 310 long idn1=cid(param[4].argument[0]);
2949     long idn2=cid(param[5].argument[0]);
2950     long idn3=cid(param[6].argument[0]);
2951     long idn4=cid(param[7].argument[0]);
2952     FEM_NOEUD* tab[4];
2953     tab[0]=femmai->get_fem_noeudid(idn1);
2954     tab[1]=femmai->get_fem_noeudid(idn2);
2955     tab[2]=femmai->get_fem_noeudid(idn3);
2956     tab[3]=femmai->get_fem_noeudid(idn4);
2957     MG_ELEMENT_MAILLAGE* elmai;
2958     if (idmai>-1)
2959     elmai=mgmai->get_mg_quadrangleid(idmai);
2960     else elmai=NULL;
2961 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2962     if (idtopo>-1)
2963 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2964 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
2965 francois 310 femmai->ajouter_fem_element2(quad);
2966     }
2967     if (entite=="FEM_QUADRANGLE8")
2968     {
2969     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2970 francois 378 long idtopo=cid(param[2].argument[0]);
2971     long idmai=cid(param[3].argument[0]);
2972 francois 310 long idn1=cid(param[4].argument[0]);
2973     long idn2=cid(param[5].argument[0]);
2974     long idn3=cid(param[6].argument[0]);
2975     long idn4=cid(param[7].argument[0]);
2976     long idn5=cid(param[8].argument[0]);
2977     long idn6=cid(param[9].argument[0]);
2978     long idn7=cid(param[10].argument[0]);
2979     long idn8=cid(param[11].argument[0]);
2980     FEM_NOEUD* tab[8];
2981     tab[0]=femmai->get_fem_noeudid(idn1);
2982     tab[1]=femmai->get_fem_noeudid(idn2);
2983     tab[2]=femmai->get_fem_noeudid(idn3);
2984     tab[3]=femmai->get_fem_noeudid(idn4);
2985     tab[4]=femmai->get_fem_noeudid(idn5);
2986     tab[5]=femmai->get_fem_noeudid(idn6);
2987     tab[6]=femmai->get_fem_noeudid(idn7);
2988     tab[7]=femmai->get_fem_noeudid(idn8);
2989     MG_ELEMENT_MAILLAGE* elmai;
2990     if (idmai>-1)
2991     elmai=mgmai->get_mg_quadrangleid(idmai);
2992     else elmai=NULL;
2993 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2994     if (idtopo>-1)
2995 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2996 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
2997 francois 310 femmai->ajouter_fem_element2(quad);
2998     }
2999 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
3000    
3001     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
3002 francois 876 if (entite=="PENTAEDRE") lire_PENTA(id,parse,param,data,mgmai,mggeo);
3003 francois 1123 if (entite=="PYRAMIDE") lire_PYRAMIDE(id,parse,param,data,mgmai,mggeo);
3004 francois 283 if (entite=="FEM_TETRA4")
3005     {
3006 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
3007 francois 378 long idtopo=cid(param[2].argument[0]);
3008     long idmai=cid(param[3].argument[0]);
3009 francois 283 long idn1=cid(param[4].argument[0]);
3010     long idn2=cid(param[5].argument[0]);
3011     long idn3=cid(param[6].argument[0]);
3012     long idn4=cid(param[7].argument[0]);
3013 francois 339 long etat=atoi(param[8].argument[0].c_str());
3014 francois 283 FEM_NOEUD* tab[4];
3015     tab[0]=femmai->get_fem_noeudid(idn1);
3016     tab[1]=femmai->get_fem_noeudid(idn2);
3017     tab[2]=femmai->get_fem_noeudid(idn3);
3018     tab[3]=femmai->get_fem_noeudid(idn4);
3019     MG_ELEMENT_MAILLAGE* elmai;
3020     if (idmai>-1)
3021     elmai=mgmai->get_mg_tetraid(idmai);
3022     else elmai=NULL;
3023 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3024     if (idtopo>-1)
3025 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3026 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
3027 francois 410 tet->change_etat(0,etat);
3028 francois 309 femmai->ajouter_fem_element3(tet);
3029 francois 283 }
3030 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
3031 francois 339 {
3032 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
3033 francois 399 unsigned long idele=cid(param[2].argument[0]);
3034     unsigned long idtopo=cid(param[3].argument[0]);
3035     unsigned long idn1=cid(param[4].argument[0]);
3036 francois 380 int etat=atoi(param[5].argument[0].c_str());
3037 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
3038     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
3039     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
3040     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
3041     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
3042 francois 380 FEM_NOEUD* tab[4];
3043     tab[0]=femmai->get_fem_noeudid(idn1);
3044 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
3045     femmai->ajouter_xfem_element0(xele);
3046     xele->change_etat(etat);
3047     }
3048     if (entite=="XFEM_SEGMENT2")
3049     {
3050     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3051     unsigned long idele=cid(param[2].argument[0]);
3052     unsigned long idtopo=cid(param[3].argument[0]);
3053     unsigned long idn1=cid(param[4].argument[0]);
3054     unsigned long idn2=cid(param[5].argument[0]);
3055     int etat=atoi(param[6].argument[0].c_str());
3056     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
3057     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
3058     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
3059     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
3060     FEM_NOEUD* tab[4];
3061     tab[0]=femmai->get_fem_noeudid(idn1);
3062 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
3063 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
3064 francois 380 femmai->ajouter_xfem_element1(xseg);
3065 francois 399 xseg->change_etat(etat);
3066 francois 380 }
3067 francois 410 if (entite=="XFEM_TRIANGLE3")
3068     {
3069     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
3070     unsigned long idtet=cid(param[2].argument[0]);
3071     unsigned long idtopo=cid(param[3].argument[0]);
3072     unsigned long idn1=cid(param[4].argument[0]);
3073     unsigned long idn2=cid(param[5].argument[0]);
3074     unsigned long idn3=cid(param[6].argument[0]);
3075     int etat=atoi(param[7].argument[0].c_str());
3076     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
3077     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
3078     FEM_NOEUD* tab[3];
3079     tab[0]=femmai->get_fem_noeudid(idn1);
3080     tab[1]=femmai->get_fem_noeudid(idn2);
3081     tab[2]=femmai->get_fem_noeudid(idn3);
3082     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
3083     femmai->ajouter_xfem_element2(xtri);
3084     xtri->change_etat(etat);
3085     }
3086 francois 380 if (entite=="XFEM_TETRA4")
3087     {
3088 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
3089 francois 339 unsigned long idtet=cid(param[2].argument[0]);
3090 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
3091     unsigned long idn1=cid(param[4].argument[0]);
3092     unsigned long idn2=cid(param[5].argument[0]);
3093     unsigned long idn3=cid(param[6].argument[0]);
3094     unsigned long idn4=cid(param[7].argument[0]);
3095     int etat=atoi(param[8].argument[0].c_str());
3096 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
3097 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
3098     FEM_NOEUD* tab[4];
3099 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
3100     tab[1]=femmai->get_fem_noeudid(idn2);
3101     tab[2]=femmai->get_fem_noeudid(idn3);
3102     tab[3]=femmai->get_fem_noeudid(idn4);
3103 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
3104 francois 339 femmai->ajouter_xfem_element3(xtet);
3105 francois 383 xtet->change_etat(etat);
3106 francois 339 }
3107 francois 283 if (entite=="FEM_TETRA10")
3108     {
3109     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3110 francois 378 long idtopo=cid(param[2].argument[0]);
3111     long idmai=cid(param[3].argument[0]);
3112 francois 283 long idn1=cid(param[4].argument[0]);
3113     long idn2=cid(param[5].argument[0]);
3114     long idn3=cid(param[6].argument[0]);
3115     long idn4=cid(param[7].argument[0]);
3116     long idn5=cid(param[8].argument[0]);
3117     long idn6=cid(param[9].argument[0]);
3118     long idn7=cid(param[10].argument[0]);
3119     long idn8=cid(param[11].argument[0]);
3120     long idn9=cid(param[12].argument[0]);
3121     long idn10=cid(param[13].argument[0]);
3122     FEM_NOEUD* tab[10];
3123     tab[0]=femmai->get_fem_noeudid(idn1);
3124     tab[1]=femmai->get_fem_noeudid(idn2);
3125     tab[2]=femmai->get_fem_noeudid(idn3);
3126     tab[3]=femmai->get_fem_noeudid(idn4);
3127     tab[4]=femmai->get_fem_noeudid(idn5);
3128     tab[5]=femmai->get_fem_noeudid(idn6);
3129     tab[6]=femmai->get_fem_noeudid(idn7);
3130     tab[7]=femmai->get_fem_noeudid(idn8);
3131     tab[8]=femmai->get_fem_noeudid(idn9);
3132     tab[9]=femmai->get_fem_noeudid(idn10);
3133     MG_ELEMENT_MAILLAGE* elmai;
3134     if (idmai>-1)
3135     elmai=mgmai->get_mg_tetraid(idmai);
3136     else elmai=NULL;
3137 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3138     if (idtopo>-1)
3139 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3140 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
3141 francois 309 femmai->ajouter_fem_element3(tet);
3142 francois 283 }
3143 francois 310 if (entite=="FEM_HEXA8")
3144     {
3145     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
3146 francois 378 long idtopo=cid(param[2].argument[0]);
3147     long idmai=cid(param[3].argument[0]);
3148 francois 310 long idn1=cid(param[4].argument[0]);
3149     long idn2=cid(param[5].argument[0]);
3150     long idn3=cid(param[6].argument[0]);
3151     long idn4=cid(param[7].argument[0]);
3152     long idn5=cid(param[8].argument[0]);
3153     long idn6=cid(param[9].argument[0]);
3154     long idn7=cid(param[10].argument[0]);
3155     long idn8=cid(param[11].argument[0]);
3156     FEM_NOEUD* tab[8];
3157     tab[0]=femmai->get_fem_noeudid(idn1);
3158     tab[1]=femmai->get_fem_noeudid(idn2);
3159     tab[2]=femmai->get_fem_noeudid(idn3);
3160     tab[3]=femmai->get_fem_noeudid(idn4);
3161     tab[4]=femmai->get_fem_noeudid(idn5);
3162     tab[5]=femmai->get_fem_noeudid(idn6);
3163     tab[6]=femmai->get_fem_noeudid(idn7);
3164     tab[7]=femmai->get_fem_noeudid(idn8);
3165     MG_ELEMENT_MAILLAGE* elmai;
3166     if (idmai>-1)
3167     elmai=mgmai->get_mg_hexaid(idmai);
3168     else elmai=NULL;
3169 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3170     if (idtopo>-1)
3171 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3172 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
3173 francois 310 femmai->ajouter_fem_element3(hex);
3174     }
3175     if (entite=="FEM_HEXA20")
3176     {
3177     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3178 francois 378 long idtopo=cid(param[2].argument[0]);
3179     long idmai=cid(param[3].argument[0]);
3180 francois 310 long idn1=cid(param[4].argument[0]);
3181     long idn2=cid(param[5].argument[0]);
3182     long idn3=cid(param[6].argument[0]);
3183     long idn4=cid(param[7].argument[0]);
3184     long idn5=cid(param[8].argument[0]);
3185     long idn6=cid(param[9].argument[0]);
3186     long idn7=cid(param[10].argument[0]);
3187     long idn8=cid(param[11].argument[0]);
3188     long idn9=cid(param[12].argument[0]);
3189     long idn10=cid(param[13].argument[0]);
3190     long idn11=cid(param[14].argument[0]);
3191     long idn12=cid(param[15].argument[0]);
3192     long idn13=cid(param[16].argument[0]);
3193     long idn14=cid(param[17].argument[0]);
3194     long idn15=cid(param[18].argument[0]);
3195     long idn16=cid(param[19].argument[0]);
3196     long idn17=cid(param[20].argument[0]);
3197     long idn18=cid(param[21].argument[0]);
3198     long idn19=cid(param[22].argument[0]);
3199     long idn20=cid(param[23].argument[0]);
3200     FEM_NOEUD* tab[20];
3201     tab[0]=femmai->get_fem_noeudid(idn1);
3202     tab[1]=femmai->get_fem_noeudid(idn2);
3203     tab[2]=femmai->get_fem_noeudid(idn3);
3204     tab[3]=femmai->get_fem_noeudid(idn4);
3205     tab[4]=femmai->get_fem_noeudid(idn5);
3206     tab[5]=femmai->get_fem_noeudid(idn6);
3207     tab[6]=femmai->get_fem_noeudid(idn7);
3208     tab[7]=femmai->get_fem_noeudid(idn8);
3209     tab[8]=femmai->get_fem_noeudid(idn9);
3210     tab[9]=femmai->get_fem_noeudid(idn10);
3211     tab[10]=femmai->get_fem_noeudid(idn11);
3212     tab[11]=femmai->get_fem_noeudid(idn12);
3213     tab[12]=femmai->get_fem_noeudid(idn13);
3214     tab[13]=femmai->get_fem_noeudid(idn14);
3215     tab[14]=femmai->get_fem_noeudid(idn15);
3216     tab[15]=femmai->get_fem_noeudid(idn16);
3217     tab[16]=femmai->get_fem_noeudid(idn17);
3218     tab[17]=femmai->get_fem_noeudid(idn18);
3219     tab[18]=femmai->get_fem_noeudid(idn19);
3220     tab[19]=femmai->get_fem_noeudid(idn20);
3221     MG_ELEMENT_MAILLAGE* elmai;
3222     if (idmai>-1)
3223     elmai=mgmai->get_mg_hexaid(idmai);
3224     else elmai=NULL;
3225 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3226     if (idtopo>-1)
3227 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3228 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
3229 francois 310 femmai->ajouter_fem_element3(hex);
3230     }
3231 francois 876 if (entite=="FEM_PENTA6")
3232 francois 283 {
3233 francois 876 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
3234     long idtopo=cid(param[2].argument[0]);
3235     long idmai=cid(param[3].argument[0]);
3236     long idn1=cid(param[4].argument[0]);
3237     long idn2=cid(param[5].argument[0]);
3238     long idn3=cid(param[6].argument[0]);
3239     long idn4=cid(param[7].argument[0]);
3240     long idn5=cid(param[8].argument[0]);
3241     long idn6=cid(param[9].argument[0]);
3242     FEM_NOEUD* tab[6];
3243     tab[0]=femmai->get_fem_noeudid(idn1);
3244     tab[1]=femmai->get_fem_noeudid(idn2);
3245     tab[2]=femmai->get_fem_noeudid(idn3);
3246     tab[3]=femmai->get_fem_noeudid(idn4);
3247     tab[4]=femmai->get_fem_noeudid(idn5);
3248     tab[5]=femmai->get_fem_noeudid(idn6);
3249     MG_ELEMENT_MAILLAGE* elmai;
3250     if (idmai>-1)
3251 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3252 francois 876 else elmai=NULL;
3253     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3254     if (idtopo>-1)
3255     topo=mggeo->get_mg_volumeid(idtopo);
3256     FEM_PENTA6* pen=new FEM_PENTA6(id,topo,elmai,tab);
3257     femmai->ajouter_fem_element3(pen);
3258     }
3259     if (entite=="FEM_PENTA15")
3260     {
3261     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3262     long idtopo=cid(param[2].argument[0]);
3263     long idmai=cid(param[3].argument[0]);
3264     long idn1=cid(param[4].argument[0]);
3265     long idn2=cid(param[5].argument[0]);
3266     long idn3=cid(param[6].argument[0]);
3267     long idn4=cid(param[7].argument[0]);
3268     long idn5=cid(param[8].argument[0]);
3269     long idn6=cid(param[9].argument[0]);
3270     long idn7=cid(param[10].argument[0]);
3271     long idn8=cid(param[11].argument[0]);
3272     long idn9=cid(param[12].argument[0]);
3273     long idn10=cid(param[13].argument[0]);
3274     long idn11=cid(param[14].argument[0]);
3275     long idn12=cid(param[15].argument[0]);
3276     long idn13=cid(param[16].argument[0]);
3277     long idn14=cid(param[17].argument[0]);
3278     long idn15=cid(param[18].argument[0]);
3279     FEM_NOEUD* tab[15];
3280     tab[0]=femmai->get_fem_noeudid(idn1);
3281     tab[1]=femmai->get_fem_noeudid(idn2);
3282     tab[2]=femmai->get_fem_noeudid(idn3);
3283     tab[3]=femmai->get_fem_noeudid(idn4);
3284     tab[4]=femmai->get_fem_noeudid(idn5);
3285     tab[5]=femmai->get_fem_noeudid(idn6);
3286     tab[6]=femmai->get_fem_noeudid(idn7);
3287     tab[7]=femmai->get_fem_noeudid(idn8);
3288     tab[8]=femmai->get_fem_noeudid(idn9);
3289     tab[9]=femmai->get_fem_noeudid(idn10);
3290     tab[10]=femmai->get_fem_noeudid(idn11);
3291     tab[11]=femmai->get_fem_noeudid(idn12);
3292     tab[12]=femmai->get_fem_noeudid(idn13);
3293     tab[13]=femmai->get_fem_noeudid(idn14);
3294     tab[14]=femmai->get_fem_noeudid(idn15);
3295     MG_ELEMENT_MAILLAGE* elmai;
3296     if (idmai>-1)
3297 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3298 francois 876 else elmai=NULL;
3299     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3300     if (idtopo>-1)
3301     topo=mggeo->get_mg_volumeid(idtopo);
3302     FEM_PENTA15* pen=new FEM_PENTA15(id,topo,elmai,tab);
3303     femmai->ajouter_fem_element3(pen);
3304     }
3305     if (entite=="SOLUTION")
3306     {
3307 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3308 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3309 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
3310     std::string nomsol=param[4].argument[0];
3311     long idmai=cid(param[5].argument[0]);
3312     int nb=atoi(param[6].argument[0].c_str());
3313     std::string chemin=param[7].argument[0];
3314 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
3315 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3316 francois 283 ajouter_mg_solution(sol);
3317     for (int i=0;i<nb;i++)
3318 francois 377 sol->change_legende(i,param[8].argument[i]);
3319 francois 283 }
3320     if (entite=="FEM_SOLUTION")
3321     {
3322 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3323 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3324 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
3325     std::string nomsol=param[4].argument[0];
3326     long idmai=cid(param[5].argument[0]);
3327     int nb=atoi(param[6].argument[0].c_str());
3328 couturad 919 std::string chemin_sol=param[7].argument[0];
3329 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
3330 couturad 919 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin_sol.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3331 francois 283 ajouter_fem_solution(sol);
3332     for (int i=0;i<nb;i++)
3333 francois 375 sol->change_legende(i,param[8].argument[i]);
3334 francois 283 }
3335     #ifdef WINDOWS_VERSION
3336     if (entite=="CAD4FE_MCSEGMENT")
3337     {
3338     parse.decode(data.c_str(),"@,@,@",param+2);
3339     long idtopo=cid(param[2].argument[0]);
3340     long idn1=cid(param[3].argument[0]);
3341     long idn2=cid(param[4].argument[0]);
3342     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3343     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3344     MG_ELEMENT_TOPOLOGIQUE* topo;
3345     if (idtopo>-1)
3346     {
3347     topo=mggeo->get_mg_areteid(idtopo);
3348     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
3349     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
3350     }
3351     else topo=NULL;
3352     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
3353     mgmai->ajouter_mg_segment(seg);
3354     }
3355     if (entite=="CAD4FE_MCNODE")
3356     {
3357     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3358     long idRefTopo=cid(param[2].argument[0]);
3359     long idMCTopo=cid(param[3].argument[0]);
3360     double x=atof(param[4].argument[0].c_str());
3361     double y=atof(param[5].argument[0].c_str());
3362     double z=atof(param[6].argument[0].c_str());
3363     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
3364     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
3365     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
3366     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
3367     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
3368     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
3369     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
3370     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
3371     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
3372     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
3373    
3374     if (mcTopo->get_dimension()==0)
3375     {
3376     if (updatedMergedRefVertices == false)
3377     {
3378     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3379     itMergedRefVertices != mapMergedRefVertices.end();
3380     itMergedRefVertices++)
3381     {
3382     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3383     MG_SOMMET * refV = NULL;
3384     unsigned long id = itMergedRefVertices->second;
3385     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3386     v->MergeRefVertex(refV);
3387     }
3388    
3389     updatedMergedRefVertices = true;
3390     }
3391     }
3392    
3393     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
3394     mgmai->ajouter_mg_noeud(noeud);
3395     }
3396     if (entite=="CAD4FE_MCTRIANGLE")
3397     {
3398     parse.decode(data.c_str(),"@,@,@,@",param+2);
3399     long idtopo=cid(param[2].argument[0]);
3400     long idn1=cid(param[3].argument[0]);
3401     long idn2=cid(param[4].argument[0]);
3402     long idn3=cid(param[5].argument[0]);
3403     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3404     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3405     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
3406     CAD4FE::MCSegment* mgsegment[3];
3407     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
3408     // la topo. d'un MCTriangle est obligatoirement une MCFace
3409     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
3410     for (int i=0;i<3;i++)
3411     {
3412     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
3413     if (mgsegment[i]==NULL)
3414     {
3415     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
3416     mgmai->ajouter_mg_segment(mgsegment[i]);
3417     }
3418     }
3419     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
3420     mgmai->ajouter_mg_triangle(triangle);
3421     }
3422     #endif
3423     }
3424     }
3425     while (param[0].argument[0]!="FIN");
3426 francois 878
3427 francois 881 for (int i=0;i<volumemince.size();i=i+3)
3428 francois 878 {
3429 francois 881 MG_VOLUME *vol=mggeo->get_mg_volumeid(volumemince[i]);
3430     MG_FACE* face1=mggeo->get_mg_faceid(volumemince[i+1]);
3431     MG_FACE* face2=mggeo->get_mg_faceid(volumemince[i+2]);
3432     vol->ajouter_face_correspondante(face1,face2);
3433 francois 878 }
3434    
3435    
3436 francois 741 LISTE_MG_ARBRE::iterator itarbre;
3437     for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
3438     {
3439     LISTE_MG_ASSEMBLAGE::iterator itass;
3440     for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
3441     ass->ini_donne(arb);
3442     }
3443 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
3444     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
3445     {
3446     LISTE_MG_SOMMET::iterator itsom;
3447     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
3448     if (som->est_un_sommet_noeud())
3449     {
3450     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
3451     unsigned long idnoeud=somno->get_id_mg_noeud();
3452     MG_NOEUD* noeud;
3453     LISTE_MG_MAILLAGE::iterator itmai;
3454     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3455     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
3456     somno->change_mg_noeud(noeud);
3457     }
3458 francois 685 LISTE_MG_COQUE::iterator itcoq;
3459     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
3460     if (coq->est_une_coque_element())
3461     {
3462     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
3463     int nbele=coque->get_nb_liste_id();
3464     MG_MAILLAGE* mgmai=NULL;
3465     for (int i=0;i<nbele;i++)
3466     {
3467     unsigned long eleid=coque->get_liste_id(i);
3468     if (i==0)
3469     {
3470     LISTE_MG_MAILLAGE::iterator itmai;
3471     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3472     {
3473     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
3474     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
3475     }
3476     }
3477     MG_ELEMENT_MAILLAGE* ele=NULL;
3478     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
3479     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
3480     coque->ajouter_element(ele);
3481     }
3482    
3483     }
3484 francois 753 LISTE_MG_POUTRE::iterator itpou;
3485     for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
3486     if (pou->est_une_poutre_element())
3487     {
3488     MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
3489     int nbele=poutre->get_nb_liste_id();
3490     MG_MAILLAGE* mgmai=NULL;
3491     for (int i=0;i<nbele;i++)
3492     {
3493     unsigned long eleid=poutre->get_liste_id(i);
3494     if (i==0)
3495     {
3496     LISTE_MG_MAILLAGE::iterator itmai;
3497     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3498     {
3499     if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
3500     }
3501     }
3502     MG_ELEMENT_MAILLAGE* ele=NULL;
3503     if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
3504     poutre->ajouter_element(ele);
3505     }
3506    
3507     }
3508 francois 526 }
3509 francois 283 #ifdef WINDOWS_VERSION
3510     if (updatedMergedRefVertices == false)
3511     {
3512     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3513     itMergedRefVertices != mapMergedRefVertices.end();
3514     itMergedRefVertices++)
3515     {
3516     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3517     MG_SOMMET * refV = NULL;
3518     unsigned long id = itMergedRefVertices->second;
3519     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3520     v->MergeRefVertex(refV);
3521     }
3522    
3523     updatedMergedRefVertices = true;
3524     }
3525    
3526     #endif
3527     fclose(in);
3528     return 1;
3529     }
3530    
3531    
3532    
3533