ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1139
Committed: Mon Mar 18 20:23:06 2024 UTC (13 months, 3 weeks ago) by francois
File size: 152598 byte(s)
Log Message:
creation d'un mg_cg_Assemblage sur un modéle de geometrie virtuelle pour l'homogeinisation

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 francois 1139 if (mgcg_operateur_parent!=NULL) mgcg_operateur_parent->ajouter_mgcg_forme_sortie(forme);
876 couturad 906 #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 francois 1139 std::string nommat="";
1435     if (param[5].argument[0]!="")
1436 francois 283 nommat=param[5].argument[0];
1437     mggeo->change_gest_materiau((char*)nommat.c_str());
1438     }
1439 couturad 919 if (entite=="CONSTRUCTION")
1440     {
1441     MG_GEOMETRIE * mgconstruction;
1442     parse.decode(data.c_str(),"@,@,@,@",param+2);
1443     double unite=atof(param[2].argument[0].c_str());
1444     std::string typegeo=param[3].argument[0];
1445     std::string chemin_geo=param[4].argument[0];
1446     #ifdef ALL_OCC
1447     if (typegeo=="OCCV2017")
1448     {
1449     mgconstruction=new MG_GEOMETRIE((char*)"OCCV2017",id,chemin_geo.c_str(),unite);
1450     mggeo=mgconstruction;
1451     mgconstruction->change_est_construction(true);
1452     ajouter_mg_construction(mgconstruction);
1453     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mgconstruction->get_occ_fonction();
1454     std::string chemin_caf = str_dossier + chemin_geo + ".ocaf";
1455     char* chemin_caf_char = (char*)chemin_caf.c_str();
1456     occ_fonction_v2017->ouvrir_fichier_OCAF(chemin_caf_char);
1457     }
1458     #endif
1459 francois 1139 if (typegeo=="VIRTUEL")
1460     {
1461     mgconstruction=new MG_GEOMETRIE((char*)typegeo.c_str(),id,(char*)chemin_geo.c_str(),unite);
1462     mggeo=mgconstruction;
1463     mggeo->change_est_construction(true);
1464     ajouter_mg_construction(mggeo);
1465     }
1466     std::string nommat="";
1467 couturad 919 if (param[5].argument[0]!="")
1468     nommat=param[5].argument[0];
1469     mgconstruction->change_gest_materiau((char*)nommat.c_str());
1470     }
1471 francois 689 #ifdef CSG_OCC
1472     if (entite=="ARBRE")
1473     {
1474     parse.decode(data.c_str(),"@",param+2);
1475     std::string nom=param[2].argument[0];
1476     arbre=new MG_ARBRE(id,nom.c_str());
1477     ajouter_mg_arbre(arbre);
1478     }
1479 couturad 740 if (entite == "ASSEMBLAGE")
1480     {
1481     parse.decode(data.c_str(),"@,@,(&)",param+2);
1482     std::string nom=param[2].argument[0];
1483     int nb_primitive = atoi((char*)param[3].argument[0].c_str());
1484     MG_ASSEMBLAGE *mgassembl=new MG_ASSEMBLAGE(id,nom.c_str());
1485     for(int i=0;i<nb_primitive;i++)
1486     {
1487     unsigned long id2 = cid(param[4].argument[i]);
1488 francois 741 mgassembl->ajouter_mg_primitive(id2);
1489 couturad 740 }
1490     arbre->ajouter_mg_assemblage(mgassembl);
1491     }
1492 francois 689 if (entite=="BOITE")
1493     {
1494     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1495     double x1=atof((char*)param[2].argument[0].c_str());
1496     double y1=atof((char*)param[3].argument[0].c_str());
1497     double z1=atof((char*)param[4].argument[0].c_str());
1498     double x2=atof((char*)param[5].argument[0].c_str());
1499     double y2=atof((char*)param[6].argument[0].c_str());
1500     double z2=atof((char*)param[7].argument[0].c_str());
1501     MG_PRIMITIVE_BOITE *b=new MG_PRIMITIVE_BOITE(id,x1,y1,z1,x2,y2,z2);
1502     b->construit();
1503     arbre->ajouter_mg_primitive(b);
1504     }
1505 couturad 723 if (entite=="SPHERE")
1506 francois 689 {
1507 couturad 723 parse.decode(data.c_str(),"@,@,@,@",param+2);
1508     double centre_x=atof((char*)param[2].argument[0].c_str());
1509     double centre_y=atof((char*)param[3].argument[0].c_str());
1510     double centre_z=atof((char*)param[4].argument[0].c_str());
1511     double rayon=atof((char*)param[5].argument[0].c_str());
1512     MG_PRIMITIVE_SPHERE *b=new MG_PRIMITIVE_SPHERE(id,centre_x,centre_y,centre_z,rayon);
1513     b->construit();
1514     arbre->ajouter_mg_primitive(b);
1515     }
1516 couturad 823 if (entite=="ELLIPSOIDE_REVOLUTION")
1517     {
1518     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1519     double centre_x=atof((char*)param[2].argument[0].c_str());
1520     double centre_y=atof((char*)param[3].argument[0].c_str());
1521     double centre_z=atof((char*)param[4].argument[0].c_str());
1522     double axe_x=atof((char*)param[5].argument[0].c_str());
1523     double axe_y=atof((char*)param[6].argument[0].c_str());
1524     double axe_z=atof((char*)param[7].argument[0].c_str());
1525     double rayon_majeur=atof((char*)param[8].argument[0].c_str());
1526     double rayon_mineur=atof((char*)param[9].argument[0].c_str());
1527     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);
1528     b->construit();
1529     arbre->ajouter_mg_primitive(b);
1530     }
1531 couturad 723 if (entite=="CYLINDRE")
1532     {
1533     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1534     double extremite_x=atof((char*)param[2].argument[0].c_str());
1535     double extremite_y=atof((char*)param[3].argument[0].c_str());
1536     double extremite_z=atof((char*)param[4].argument[0].c_str());
1537     double longitude=atof((char*)param[5].argument[0].c_str());
1538     double latitude=atof((char*)param[6].argument[0].c_str());
1539     double rayon=atof((char*)param[7].argument[0].c_str());
1540     double longueur=atof((char*)param[8].argument[0].c_str());
1541     MG_PRIMITIVE_CYLINDRE *b=new MG_PRIMITIVE_CYLINDRE(id,extremite_x,extremite_y,extremite_z,longitude,latitude,rayon,longueur);
1542     b->construit();
1543     arbre->ajouter_mg_primitive(b);
1544     }
1545 couturad 724 if (entite=="TORE")
1546     {
1547     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1548     double centre_x=atof((char*)param[2].argument[0].c_str());
1549     double centre_y=atof((char*)param[3].argument[0].c_str());
1550     double centre_z=atof((char*)param[4].argument[0].c_str());
1551     double longitude=atof((char*)param[5].argument[0].c_str());
1552     double latitude=atof((char*)param[6].argument[0].c_str());
1553     double rayon_cercle=atof((char*)param[7].argument[0].c_str());
1554     double rayon_tore=atof((char*)param[8].argument[0].c_str());
1555     MG_PRIMITIVE_TORE *b=new MG_PRIMITIVE_TORE(id,centre_x,centre_y,centre_z,longitude,latitude,rayon_cercle,rayon_tore);
1556     b->construit();
1557     arbre->ajouter_mg_primitive(b);
1558     }
1559     if (entite=="CONE")
1560     {
1561     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1562     double base_x=atof((char*)param[2].argument[0].c_str());
1563     double base_y=atof((char*)param[3].argument[0].c_str());
1564     double base_z=atof((char*)param[4].argument[0].c_str());
1565     double longitude=atof((char*)param[5].argument[0].c_str());
1566     double latitude=atof((char*)param[6].argument[0].c_str());
1567     double rayon=atof((char*)param[7].argument[0].c_str());
1568     double hauteur=atof((char*)param[8].argument[0].c_str());
1569     MG_PRIMITIVE_CONE *b=new MG_PRIMITIVE_CONE(id,base_x,base_y,base_z,longitude,latitude,rayon,hauteur);
1570     b->construit();
1571     arbre->ajouter_mg_primitive(b);
1572     }
1573 couturad 723 if (entite=="UNION")
1574     {
1575 francois 689 parse.decode(data.c_str(),"@,@,@",param+2);
1576     int sem=atoi((char*)param[2].argument[0].c_str());
1577     long id1=cid((char*)param[3].argument[0].c_str());
1578     long id2=cid((char*)param[4].argument[0].c_str());
1579     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1580     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1581     MG_OPERATEUR_BOOLEAN_UNION *op=new MG_OPERATEUR_BOOLEAN_UNION(id,sem,p1,p2);
1582     arbre->ajouter_mg_operateur_boolean(op);
1583     }
1584 couturad 723 if (entite=="DIFFERENCE")
1585     {
1586     parse.decode(data.c_str(),"@,@,@",param+2);
1587     int sem=atoi((char*)param[2].argument[0].c_str());
1588     long id1=cid((char*)param[3].argument[0].c_str());
1589     long id2=cid((char*)param[4].argument[0].c_str());
1590     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1591     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1592     MG_OPERATEUR_BOOLEAN_DIFFERENCE *op=new MG_OPERATEUR_BOOLEAN_DIFFERENCE(id,sem,p1,p2);
1593     arbre->ajouter_mg_operateur_boolean(op);
1594     }
1595     if (entite=="INTERSECTION")
1596     {
1597     parse.decode(data.c_str(),"@,@,@",param+2);
1598     int sem=atoi((char*)param[2].argument[0].c_str());
1599     long id1=cid((char*)param[3].argument[0].c_str());
1600     long id2=cid((char*)param[4].argument[0].c_str());
1601     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1602     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1603     MG_OPERATEUR_BOOLEAN_INTERSECTION *op=new MG_OPERATEUR_BOOLEAN_INTERSECTION(id,sem,p1,p2);
1604     arbre->ajouter_mg_operateur_boolean(op);
1605     }
1606 francois 689 if (entite=="PRIM_COMPLEXE")
1607     {
1608     parse.decode(data.c_str(),"@",param+2);
1609     long id1=cid((char*)param[2].argument[0].c_str());
1610     MG_OPERATEUR_BOOLEAN *op=arbre->get_mg_operateur_booleanid(id1);
1611     MG_PRIMITIVE* p=op->construit(id);
1612     arbre->ajouter_mg_primitive(p);
1613     }
1614    
1615 couturad 906 if (entite=="MG_CG_MODELE")
1616     {
1617     lire_MG_CG_MODELE(id,parse,param,data);
1618     }
1619     if (entite =="MG_CG_ASSEMBLAGE")
1620     {
1621     lire_MG_CG_ASSEMBLAGE(id,parse,param,data);
1622     }
1623 couturad 926 if (entite =="MG_CG_INFO_DOUBLE")
1624     {
1625     lire_MG_CG_INFO_DOUBLE(id,parse,param,data);
1626     }
1627     if (entite =="MG_CG_INFO_STRING")
1628     {
1629     lire_MG_CG_INFO_STRING(id,parse,param,data);
1630     }
1631     if (entite =="MG_CG_INFO_VCT_DOUBLE")
1632     {
1633     lire_MG_CG_INFO_VCT_DOUBLE(id,parse,param,data);
1634     }
1635     if (entite =="MG_CG_GROUPE_FORME")
1636     {
1637     lire_MG_CG_GROUPE_FORME(id,parse,param,data);
1638     }
1639 couturad 906 if (entite =="MG_CG_FORME_ARETE")
1640     {
1641     lire_MG_CG_FORME_ARETE(id,parse,param,data);
1642     }
1643     if (entite =="MG_CG_FORME_ARETE_DROITE")
1644     {
1645     lire_MG_CG_FORME_ARETE_DROITE(id,parse,param,data);
1646     }
1647     if (entite =="MG_CG_FORME_VOLUME")
1648     {
1649     lire_MG_CG_FORME_VOLUME(id,parse,param,data);
1650     }
1651     if (entite =="MG_CG_FORME_VOLUME_BOITE")
1652     {
1653     lire_MG_CG_FORME_VOLUME_BOITE(id,parse,param,data);
1654     }
1655     if (entite =="MG_CG_FORME_VOLUME_SPHERE")
1656     {
1657     lire_MG_CG_FORME_VOLUME_SPHERE(id,parse,param,data);
1658     }
1659     if (entite =="MG_CG_FORME_VOLUME_ELLIPSOIDE")
1660     {
1661     lire_MG_CG_FORME_VOLUME_ELLIPSOIDE(id,parse,param,data);
1662     }
1663     if (entite =="MG_CG_FORME_VOLUME_CYLINDRE")
1664     {
1665     lire_MG_CG_FORME_VOLUME_CYLINDRE(id,parse,param,data);
1666     }
1667     if (entite =="MG_CG_FORME_VOLUME_CONE")
1668     {
1669     lire_MG_CG_FORME_VOLUME_CONE(id,parse,param,data);
1670     }
1671     if (entite =="MG_CG_FORME_VOLUME_TORE")
1672     {
1673     lire_MG_CG_FORME_VOLUME_TORE(id,parse,param,data);
1674     }
1675     if (entite =="MG_CG_FORME_MULTIPLE")
1676     {
1677     lire_MG_CG_FORME_MULTIPLE(id,parse,param,data);
1678     }
1679     if (entite =="MG_CG_FORME_MULTI_VOLUME")
1680     {
1681     lire_MG_CG_FORME_MULTI_VOLUME(id,parse,param,data);
1682     }
1683     if (entite =="MG_CG_OP_BOOL_UNION")
1684     {
1685     lire_MG_CG_OP_BOOL_UNION(id,parse,param,data);
1686     }
1687     if (entite =="MG_CG_OP_BOOL_DIFFERENCE")
1688     {
1689     lire_MG_CG_OP_BOOL_DIFFERENCE(id,parse,param,data);
1690     }
1691     if (entite =="MG_CG_OP_BOOL_INTERSECTION")
1692     {
1693     lire_MG_CG_OP_BOOL_INTERSECTION(id,parse,param,data);
1694     }
1695     if (entite =="MG_CG_OP_BOOL_FRAGMENT")
1696     {
1697     lire_MG_CG_OP_BOOL_FRAGMENT(id,parse,param,data);
1698     }
1699     if (entite =="MG_CG_OP_INCLUSION_MATRICE")
1700     {
1701     lire_MG_CG_OP_INCLUSION_MATRICE(id,parse,param,data);
1702     }
1703     if (entite =="MG_CG_OP_TRANSF_ROTATION")
1704     {
1705     lire_MG_CG_OP_TRANSF_ROTATION(id,parse,param,data);
1706     }
1707     if (entite =="MG_CG_OP_TRANSF_TRANSLATION")
1708     {
1709     lire_MG_CG_OP_TRANSF_TRANSLATION(id,parse,param,data);
1710     }
1711     if (entite =="MG_CG_OP_TRANSF_ECHELLE")
1712     {
1713     lire_MG_CG_OP_TRANSF_ECHELLE(id,parse,param,data);
1714     }
1715 couturad 951 if (entite =="MG_CG_OP_TRANSF_DECALLAGE")
1716     {
1717     lire_MG_CG_OP_TRANSF_DECALLAGE(id,parse,param,data);
1718     }
1719 francois 689
1720     #endif
1721 couturad 906 if (entite =="MG_SOUS_GEOMETRIE")
1722     {
1723     lire_MG_SOUS_GEOMETRIE(id,parse,param,data);
1724     }
1725 francois 283 if (entite=="GEOMETRIE_EPS")
1726     {
1727     parse.decode(data.c_str(),"@",param+2);
1728     double val=atof((char*)param[2].argument[0].c_str());
1729     mggeo->change_valeur_precision(val);
1730     }
1731     if (entite=="GROUPE_TOPOLOGIQUE")
1732     {
1733     parse.decode(data.c_str(),"@,(&)",param+2);
1734     MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
1735     mggeo->ajouter_mg_groupe_topologique(mggt);
1736     int nb=atoi(param[2].argument[0].c_str());
1737     for (int i=0;i<nb;i++)
1738     {
1739     unsigned long id2=cid(param[3].argument[i].c_str());
1740     MG_ELEMENT_TOPOLOGIQUE* ele;
1741     ele=mggeo->get_mg_sommetid(id2);
1742     if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
1743     if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
1744     if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
1745     if (ele!=NULL) mggt->ajouter(ele);
1746     }
1747    
1748     }
1749 francois 711 if (entite=="GEOM_FONCTION")
1750     {
1751     parse.decode(data.c_str(),"@,@,(&)",param+2);
1752     int dim=atoi((char*)param[2].argument[0].c_str());
1753     MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(id,dim);
1754     mggeo->ajouter_mg_geom_fonction(gf);
1755     int nb=atoi(param[3].argument[0].c_str());
1756     for (int i=0;i<nb;i++)
1757     {
1758     parse.decode(param[4].argument[i].c_str(),"(&)",param+5);
1759     double *coo=new double[dim];
1760     for (int j=0;j<dim;j++)
1761     coo[j]=atof(param[5].argument[j].c_str());
1762     gf->ajouter_point(coo);
1763     delete [] coo;
1764     }
1765    
1766     }
1767    
1768 francois 283 if (entite=="VOLUME")
1769     {
1770 couturad 906 lire_MG_VOLUME(id,parse,param,data,mggeo,volumemince);
1771    
1772     // if (version_fichier<2)
1773     // {
1774     // parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1775     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1776     // mggeo->ajouter_mg_volume(mgvol);
1777     // int nummat=atoi((char*)param[4].argument[0].c_str());
1778     // mgvol->change_num_materiau(nummat);
1779     // int nb=atoi(param[5].argument[0].c_str());
1780     // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1781     // }
1782     // else if (version_fichier<2.3)
1783     // {
1784     // parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1785     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1786     // mggeo->ajouter_mg_volume(mgvol);
1787     // int nb=atoi(param[4].argument[0].c_str());
1788     // if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgvol);
1789     // }
1790     // else
1791     // {
1792     // parse.decode(data.c_str(),"@,@,@,@",param+2);
1793     // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1794     // mggeo->ajouter_mg_volume(mgvol);
1795     // int mince=atoi(param[4].argument[0].c_str());
1796     // if (mince==0)
1797     // {
1798     // std::string data2=param[5].argument[0];
1799     // parse.decode(data2.c_str(),"@,(&)",param+5);
1800     // int nb=atoi(param[5].argument[0].c_str());
1801     // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1802     // }
1803     // else
1804     // {
1805     // std::string data2=param[5].argument[0];
1806     // parse.decode(data2.c_str(),"(&),@,(&)",param+5);
1807     // int nb_face=param[5].argument.size();
1808     // for (int i=0;i<nb_face;i=i+2)
1809     // {
1810     // unsigned long idn1=cid(param[5].argument[i]);
1811     // unsigned long idn2=cid(param[5].argument[i+1]);
1812     // volumemince.push_back(id);
1813     // volumemince.push_back(idn1);
1814     // volumemince.push_back(idn2);
1815     // }
1816     // int nb=atoi(param[6].argument[0].c_str());
1817     // if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
1818     // }
1819     // }
1820 francois 763 /*{
1821 francois 283 for (int i=0;i<nb;i++)
1822     {
1823     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1824     char nom[3];
1825     double val;
1826     strcpy(nom,param[7].argument[0].c_str());
1827     val=atof(param[8].argument[0].c_str());
1828     mgvol->ajouter_ccf(nom,val);
1829     }
1830 francois 763 }*/
1831 francois 283 }
1832     if (entite=="COQUE")
1833     {
1834 francois 794 if (version_fichier<2)
1835     {
1836     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1837 francois 283 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1838     mggeo->ajouter_mg_coque(mgcoq);
1839     int nummat=atoi((char*)param[4].argument[0].c_str());
1840     mgcoq->change_num_materiau(nummat);
1841     int nb=atoi(param[5].argument[0].c_str());
1842 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgcoq);
1843 francois 794 }
1844     else
1845     {
1846     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1847     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1848     mggeo->ajouter_mg_coque(mgcoq);
1849     int nb=atoi(param[4].argument[0].c_str());
1850     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgcoq);
1851     }
1852 francois 763 /*if (nb!=0)
1853 francois 283 {
1854     for (int i=0;i<nb;i++)
1855     {
1856     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1857     char nom[3];
1858     double val;
1859     strcpy(nom,param[7].argument[0].c_str());
1860     val=atof(param[8].argument[0].c_str());
1861     mgcoq->ajouter_ccf(nom,val);
1862     }
1863 francois 763 }*/
1864 francois 283 }
1865     if (entite=="POUTRE")
1866     {
1867 francois 794 if (version_fichier<2)
1868     {
1869     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1870 francois 283 MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
1871     mggeo->ajouter_mg_poutre(mgpoutre);
1872     int nummat=atoi((char*)param[4].argument[0].c_str());
1873     mgpoutre->change_num_materiau(nummat);
1874     int nb=atoi(param[5].argument[0].c_str());
1875 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgpoutre);
1876 francois 794 }
1877     else
1878     {
1879     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1880     MG_POUTRE* mgpou=new MG_POUTRE(param[2].argument[0],id);
1881     mggeo->ajouter_mg_poutre(mgpou);
1882     int nb=atoi(param[4].argument[0].c_str());
1883     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgpou);
1884     }
1885    
1886 francois 763 /*if (nb!=0)
1887 francois 283 {
1888     for (int i=0;i<nb;i++)
1889     {
1890     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1891     char nom[3];
1892     double val;
1893     strcpy(nom,param[7].argument[0].c_str());
1894     val=atof(param[8].argument[0].c_str());
1895     mgpoutre->ajouter_ccf(nom,val);
1896     }
1897 francois 763 }*/
1898 francois 283 }
1899     if (entite=="COQUILLE")
1900     {
1901 couturad 906 lire_MG_COQUILLE(id,parse,param,data,mggeo);
1902     // parse.decode(data.c_str(),"@,@",param+2);
1903     // long ident=cid(param[2].argument[0]);
1904     // MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
1905     // MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
1906     // if (mgvol!=NULL)
1907     // {
1908     // MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
1909     // mggeo->ajouter_mg_coquille(mgcoq,mgvol);
1910     // }
1911     // if (mgcoq!=NULL)
1912     // {
1913     // MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
1914     // mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
1915     // }
1916 francois 283 }
1917 francois 881
1918 francois 283 #ifdef BREP_STEP
1919     if (entite=="SURFACE_STEP")
1920     {
1921     parse.decode(data.c_str(),"@",param+2);
1922     long idstepsuf=atol(param[2].argument[0].c_str());
1923 couturad 740 ST_SURFACE *stsurf=mggeo->get_gest_step().lst_surface.getid(idstepsuf);
1924 francois 283 STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
1925     mggeo->ajouter_mg_surface(stepsurf);
1926     }
1927     if (entite=="COURBE_STEP")
1928     {
1929     parse.decode(data.c_str(),"@",param+2);
1930     long idstepcur=atol(param[2].argument[0].c_str());
1931 couturad 740 ST_COURBE *stcur=mggeo->get_gest_step().lst_courbe.getid(idstepcur);
1932 francois 283 STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
1933     mggeo->ajouter_mg_courbe(stepcur);
1934     }
1935    
1936     if (entite=="POINT_STEP")
1937     {
1938     parse.decode(data.c_str(),"@",param+2);
1939     long idsteppt=atol(param[2].argument[0].c_str());
1940 couturad 740 ST_POINT *stpt=mggeo->get_gest_step().lst_point.getid(idsteppt);
1941 francois 283 STEP_POINT* steppt=new STEP_POINT(id,stpt);
1942     mggeo->ajouter_mg_point(steppt);
1943     }
1944    
1945     #endif
1946     #ifdef BREP_SAT
1947     if (entite=="SURFACE_SAT")
1948     {
1949     parse.decode(data.c_str(),"@",param+2);
1950     long idsatsuf=atol(param[2].argument[0].c_str());
1951 couturad 740 SAT_SURFACE *satsurf=mggeo->get_gest_sat().lst_surface.getid(idsatsuf);
1952 francois 283 ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
1953     mggeo->ajouter_mg_surface(acissurf);
1954     }
1955     if (entite=="COURBE_SAT")
1956     {
1957     parse.decode(data.c_str(),"@",param+2);
1958     long idsatcur=atol(param[2].argument[0].c_str());
1959 couturad 740 SAT_COURBE *satcur=mggeo->get_gest_sat().lst_courbe.getid(idsatcur);
1960 francois 283 ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
1961     mggeo->ajouter_mg_courbe(aciscur);
1962     }
1963    
1964     if (entite=="POINT_SAT")
1965     {
1966     parse.decode(data.c_str(),"@",param+2);
1967     long idsatpt=atol(param[2].argument[0].c_str());
1968 couturad 740 SAT_POINT *satpt=mggeo->get_gest_sat().lst_point.getid(idsatpt);
1969 francois 283 ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
1970     mggeo->ajouter_mg_point(acispt);
1971     }
1972    
1973     #endif
1974    
1975 couturad 908 #ifdef ALL_OCC
1976 francois 283
1977     if (entite=="SURFACE_OCC")
1978     {
1979     parse.decode(data.c_str(),"@",param+2);
1980     long idocc=atol(param[2].argument[0].c_str());
1981 couturad 906 TopoDS_Face occface;
1982     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1983     {
1984     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1985     occface=occ_fonction_2017->get_TopoDS_Face_id(idocc);
1986     }
1987     else
1988     {
1989     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
1990     occface=TopoDS::Face(occshape);
1991     }
1992 francois 1025 mggeo->get_occ_fonction().change_precision(mggeo->get_valeur_precision());
1993 couturad 906 OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface,&mggeo->get_occ_fonction());
1994     occsurf->change_idoriginal(std::to_string(idocc));
1995 francois 283 mggeo->ajouter_mg_surface(occsurf);
1996     }
1997     if (entite=="COURBE_OCC")
1998     {
1999     parse.decode(data.c_str(),"@",param+2);
2000     long idocc=atol(param[2].argument[0].c_str());
2001 couturad 906 TopoDS_Edge occedge;
2002     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2003     {
2004     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2005     occedge=occ_fonction_2017->get_TopoDS_Edge_id(idocc);
2006     }
2007     else
2008     {
2009     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
2010     occedge=TopoDS::Edge(occshape);
2011     }
2012     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, &mggeo->get_occ_fonction());
2013 francois 283 mggeo->ajouter_mg_courbe(occcrb);
2014 couturad 906 occcrb->change_idoriginal(std::to_string(idocc));
2015 francois 283 }
2016     if (entite=="POINT_OCC")
2017     {
2018     parse.decode(data.c_str(),"@",param+2);
2019     long idocc=atol(param[2].argument[0].c_str());
2020 couturad 906 TopoDS_Vertex occvertex;
2021     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2022     {
2023     OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2024     occvertex = occ_fonction_2017->get_TopoDS_Vertex_id(idocc);
2025     }
2026     else
2027     {
2028     const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
2029     occvertex=TopoDS::Vertex(occshape);
2030     }
2031    
2032     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, &mggeo->get_occ_fonction());
2033 francois 283 mggeo->ajouter_mg_point(occpoint);
2034 couturad 906 occpoint->change_idoriginal((std::to_string(idocc)));
2035 francois 283 }
2036     #endif
2037     #ifdef WINDOWS_VERSION
2038     if (entite=="CAD4FE_POLYCURVE")
2039     {
2040     CAD4FE::PolyCurve * polycurve = NULL;
2041     parse.decode(data.c_str(),"@,(&)",param+2);
2042     int nb = atoi(param[2].argument[0].c_str());
2043    
2044     if (nb == 0)
2045     {
2046     printf("PolyCurve %d is formed with reference vertex : ", id);
2047     parse.decode(param[3].argument[0].c_str(),"@",param+4);
2048     int idRefVertex;
2049     idRefVertex=cid(param[4].argument[0].c_str());
2050     printf("%d ;\n ", idRefVertex);
2051     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
2052     polycurve = new CAD4FE::PolyCurve(refVertex);
2053     }
2054     else
2055     {
2056     printf("PolyCurve %d is formed with reference edges : ", id);
2057     polycurve = new CAD4FE::PolyCurve;
2058     for (int i=0;i<nb;i++)
2059     {
2060     parse.decode(param[3].argument[i].c_str(),"@",param+4);
2061     int idRefEdge;
2062     idRefEdge=cid(param[4].argument[0].c_str());
2063     printf("%d ; ", idRefEdge);
2064     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
2065     CAD4FE::PolyCurve tmpPC(refEdge);
2066     polycurve->Merge(tmpPC);
2067     }
2068     printf("\n");
2069     }
2070    
2071     polycurve->change_id(id);
2072     mggeo->ajouter_mg_courbe(polycurve);
2073     }
2074    
2075    
2076     if (entite=="CAD4FE_POLYSURFACE")
2077     {
2078     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
2079     polysurface->change_id(id);
2080     mggeo->ajouter_mg_surface(polysurface);
2081    
2082     parse.decode(data.c_str(),"@,(&)",param+2);
2083    
2084     int nb = atoi(param[2].argument[0].c_str());
2085     printf("PolySurface %d is formed with reference faces : ", id);
2086     for (int i=0;i<nb;i++)
2087     {
2088     parse.decode(param[3].argument[i].c_str(),"@",param+4);
2089     int idRefFace;
2090     idRefFace=cid(param[4].argument[0].c_str());
2091     printf("%d ; ", idRefFace);
2092    
2093     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
2094     CAD4FE::PolySurface tmpSF(refFace);
2095     polysurface->Merge(tmpSF);
2096     }
2097    
2098     printf("\n");
2099     }
2100     if (entite=="CAD4FE_MCEDGE")
2101     {
2102     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2103    
2104     std::string idOriginal = param[2].argument[0];
2105     long idPolyCurve=cid(param[3].argument[0]);
2106     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
2107    
2108     // sense is not used because a MCEdge always has
2109     // a sense = 1 !
2110     // (because polycurve domain is equal to mcEdge domain)
2111     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
2112     mcEdge->change_id(id);
2113     mggeo->ajouter_mg_arete(mcEdge);
2114    
2115     int nb=atoi(param[7].argument[0].c_str());
2116     if (nb!=0)
2117     {
2118     for (int i=0;i<nb;i++)
2119     {
2120     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
2121     char nom[3];
2122     double val;
2123     strcpy(nom,param[9].argument[0].c_str());
2124     val=atof(param[10].argument[0].c_str());
2125     mcEdge->ajouter_ccf(nom,val);
2126     }
2127     }
2128     }
2129     if (entite=="CAD4FE_MCFACE")
2130     {
2131     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
2132    
2133     std::string idOriginal = param[2].argument[0];
2134     long idPolySurface=cid(param[3].argument[0]);
2135     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
2136    
2137     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
2138     mcFace->change_id(id);
2139     mggeo->ajouter_mg_face(mcFace);
2140    
2141     int nb=atoi(param[6].argument[0].c_str());
2142     if (nb!=0)
2143     {
2144     for (int i=0;i<nb;i++)
2145     {
2146     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
2147     char nom[3];
2148     double val;
2149     strcpy(nom,param[8].argument[0].c_str());
2150     val=atof(param[9].argument[0].c_str());
2151     mcFace->ajouter_ccf(nom,val);
2152     }
2153     }
2154     }
2155     if (entite=="CAD4FE_MCVERTEX")
2156     {
2157     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
2158     std::string idOriginal = param[2].argument[0];
2159     long idsom=cid(param[3].argument[0]);
2160     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
2161     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
2162     mcVertex->change_id(id);
2163     mggeo->ajouter_mg_sommet(mcVertex);
2164     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
2165     if (nb_ref_vertex!=0)
2166     {
2167     for (int i=0;i<nb_ref_vertex;i++)
2168     {
2169     unsigned long idRefVertex=cid(param[5].argument[i]);
2170     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
2171     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
2172     }
2173     }
2174     int nb_ccf=atoi(param[4+2].argument[0].c_str());
2175     if (nb_ccf!=0)
2176     {
2177     for (int i=0;i<nb_ccf;i++)
2178     {
2179     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
2180     char nom_ccf[3];
2181     double val_ccf;
2182     strcpy(nom_ccf,param[6+2].argument[0].c_str());
2183     val_ccf=atof(param[7+2].argument[0].c_str());
2184     mgsom->ajouter_ccf(nom_ccf,val_ccf);
2185     }
2186     }
2187     }
2188     #endif
2189     if (entite=="FACE")
2190     {
2191 couturad 906 lire_MG_FACE(id,parse,param,data,mggeo);
2192     // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
2193     // else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
2194     // long idsurf=cid(param[3].argument[0]);
2195     // int sens=atoi(param[5].argument[0].c_str());
2196     // MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
2197     // MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
2198     // mggeo->ajouter_mg_face(mgface);
2199     // int argccf=7;
2200     // if (version_fichier>2.1)
2201     // {
2202     // argccf=8;
2203     // int nbpole=atoi(param[6].argument[0].c_str());
2204     // mgface->change_nb_pole(nbpole);
2205     // }
2206     // int nb=atoi(param[argccf-1].argument[0].c_str());
2207     // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
2208 francois 763 /*if (nb!=0)
2209 francois 283 {
2210     for (int i=0;i<nb;i++)
2211     {
2212     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
2213     char nom[3];
2214     double val;
2215     strcpy(nom,param[8].argument[0].c_str());
2216     val=atof(param[9].argument[0].c_str());
2217     mgface->ajouter_ccf(nom,val);
2218     }
2219 francois 763 }*/
2220 francois 283 }
2221     if (entite=="COFACE")
2222     {
2223     parse.decode(data.c_str(),"@,@,@",param+2);
2224     long idface=cid(param[2].argument[0]);
2225     long idcoq=cid(param[3].argument[0]);
2226     int sens=atoi(param[4].argument[0].c_str());
2227     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
2228     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
2229     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
2230     mgcoq->ajouter_mg_coface(mgcoface);
2231     }
2232     if (entite=="BOUCLE")
2233     {
2234 couturad 906 lire_MG_BOUCLE(id,parse,param,data,mggeo);
2235     // parse.decode(data.c_str(),"@,(@)",param+2);
2236     // long ident=cid(param[2].argument[0]);
2237     // MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2238     // MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2239     // if (mgface!=NULL)
2240     // {
2241     // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
2242     // mggeo->ajouter_mg_boucle(mgbou,mgface);
2243     // }
2244     // if (mgpoutre!=NULL)
2245     // {
2246     // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
2247     // mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
2248     // }
2249 francois 283 }
2250     if (entite=="POINT")
2251     {
2252     parse.decode(data.c_str(),"@,@,@",param+2);
2253     double xyz[3];
2254     xyz[0]=atof(param[2].argument[0].c_str());
2255     xyz[1]=atof(param[3].argument[0].c_str());
2256     xyz[2]=atof(param[4].argument[0].c_str());
2257     LC_POINT* point=new LC_POINT(id,xyz);
2258     mggeo->ajouter_mg_point(point);
2259     }
2260     if (entite=="SOMMET")
2261     {
2262 couturad 906 lire_MG_SOMMET(id,parse,param,data,mggeo);
2263     // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
2264     // else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2265     // long idpoint=cid(param[3].argument[0]);
2266     // MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2267     // MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
2268     // mggeo->ajouter_mg_sommet(mgsom);
2269     // int argccf=5;
2270     // if (version_fichier>2.1)
2271     // {
2272     // argccf=6;
2273     // int ipole=atoi(param[4].argument[0].c_str());
2274     // if (ipole==1) mgsom->change_pole(true);
2275     // }
2276     // int nb=atoi(param[argccf-1].argument[0].c_str());
2277     // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
2278     // /*if (nb!=0)
2279     // {
2280     // for (int i=0;i<nb;i++)
2281     // {
2282     // parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2283     // char nom[3];
2284     // double val;
2285     // strcpy(nom,param[6].argument[0].c_str());
2286     // val=atof(param[7].argument[0].c_str());
2287     // mgsom->ajouter_ccf(nom,val);
2288     // }
2289     // }*/
2290     }
2291 couturad 908 #ifdef ALL_OCC
2292 couturad 906 if (entite=="OCC_SOMMET")
2293     {
2294     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2295 francois 283 long idpoint=cid(param[3].argument[0]);
2296     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2297 couturad 906 TopoDS_Vertex topods_vertex;
2298     long idori = stol(param[2].argument[0]);
2299     OCC_SOMMET* occ_sommet;
2300     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2301     {
2302     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2303     topods_vertex=occ_fonction_v2017->get_TopoDS_Vertex_id(idori);
2304     occ_sommet = new OCC_SOMMET(param[2].argument[0],id,mgpt,topods_vertex,&mggeo->get_occ_fonction());
2305     mggeo->ajouter_mg_sommet(occ_sommet);
2306     occ_fonction_v2017->ajouter_OCC_SOMMET(occ_sommet);
2307     }
2308     else
2309     {
2310     std::cout << "*** MG_FILE : ERREUR lecture OCC_SOMMET : Mauvaise OCC_FONCTION ! ***" << std::endl;
2311     }
2312     int argccf=5;
2313 couturad 814 if (version_fichier>2.1)
2314     {
2315     argccf=6;
2316     int ipole=atoi(param[4].argument[0].c_str());
2317 couturad 906 if (ipole==1) occ_sommet->change_pole(true);
2318 couturad 814 }
2319     int nb=atoi(param[argccf-1].argument[0].c_str());
2320 couturad 906 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_sommet);
2321 francois 283 }
2322 couturad 906 if (entite=="OCC_ARETE")
2323     {
2324     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2325     long idcur=cid(param[3].argument[0]);
2326     int sens=atol(param[6].argument[0].c_str());
2327     long idori = stoi(param[2].argument[0]);
2328     TopoDS_Edge topods_edge;
2329     OCC_ARETE* occ_arete;
2330     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2331     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2332     {
2333     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2334     topods_edge=occ_fonction_v2017->get_TopoDS_Edge_id(idori);
2335     occ_arete= new OCC_ARETE(param[2].argument[0],id,mgcur,sens,topods_edge,&mggeo->get_occ_fonction());
2336     mggeo->ajouter_mg_arete(occ_arete);
2337     occ_fonction_v2017->ajouter_OCC_ARETE(occ_arete);
2338     }
2339     else
2340     {
2341     std::cout << "*** MG_FILE : ERREUR lecture OCC_ARETE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2342     }
2343     int nb=atoi(param[7].argument[0].c_str());
2344     if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,occ_arete);
2345     }
2346     if (entite=="OCC_BOUCLE")
2347     {
2348     parse.decode(data.c_str(),"@,@,(@)",param+2);
2349     long ident=cid(param[2].argument[0]);
2350     long idori=stol(param[3].argument[0]);
2351     TopoDS_Wire topods_wire;
2352     OCC_BOUCLE* occ_boucle;
2353     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2354     {
2355     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2356     topods_wire=occ_fonction_v2017->get_TopoDS_Wire_id(idori);
2357     if(ident!=-1)
2358     {
2359     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2360     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2361     if (mgface!=NULL)
2362     {
2363     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgface,topods_wire,&mggeo->get_occ_fonction());
2364     mggeo->ajouter_mg_boucle(occ_boucle,mgface);
2365     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2366     }
2367     if (mgpoutre!=NULL)
2368     {
2369     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgpoutre,topods_wire,&mggeo->get_occ_fonction());
2370     mggeo->ajouter_mg_boucle(occ_boucle,mgpoutre);
2371     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2372     }
2373     }
2374     else
2375     {
2376     OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,topods_wire,&mggeo->get_occ_fonction());
2377     mggeo->ajouter_mg_boucle(occ_boucle);
2378     occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2379     }
2380     }
2381     else
2382     {
2383     std::cout << "*** MG_FILE : ERREUR lecture OCC_BOUCLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2384     }
2385    
2386     }
2387     if (entite=="OCC_FACE")
2388     {
2389     parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
2390     long idsurf=cid(param[3].argument[0]);
2391     int sens=atoi(param[5].argument[0].c_str());
2392     long idori = stol(param[2].argument[0]);
2393     TopoDS_Face topods_face;
2394     OCC_FACE* occ_face;
2395     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
2396     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2397     {
2398     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2399     topods_face=occ_fonction_v2017->get_TopoDS_Face_id(idori);
2400     occ_face = new OCC_FACE(param[2].argument[0],id,mgsurf,sens,topods_face,&mggeo->get_occ_fonction());
2401     mggeo->ajouter_mg_face(occ_face);
2402     occ_fonction_v2017->ajouter_OCC_FACE(occ_face);
2403     }
2404     else
2405     {
2406     std::cout << "*** MG_FILE : ERREUR lecture OCC_FACE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2407     }
2408     int argccf=7;
2409     if (version_fichier>2.1)
2410     {
2411     argccf=8;
2412     int nbpole=atoi(param[6].argument[0].c_str());
2413     occ_face->change_nb_pole(nbpole);
2414     }
2415     int nb=atoi(param[argccf-1].argument[0].c_str());
2416     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_face);
2417     }
2418     if (entite=="OCC_COQUILLE")
2419     {
2420     parse.decode(data.c_str(),"@,@,@",param+2);
2421     long ident=cid(param[2].argument[0]);
2422     long idori = stol(param[3].argument[0]);
2423     TopoDS_Shell topods_shell;
2424     OCC_COQUILLE* occ_coquille;
2425     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2426     {
2427     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2428     topods_shell=occ_fonction_v2017->get_TopoDS_Shell_id(idori);
2429     if(idori!=-1)
2430     {
2431     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
2432     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
2433     if (mgvol!=NULL)
2434     {
2435     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgvol,topods_shell,&mggeo->get_occ_fonction());
2436     mggeo->ajouter_mg_coquille(occ_coquille,mgvol);
2437     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2438     }
2439     if (mgcoq!=NULL)
2440     {
2441     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgcoq,topods_shell,&mggeo->get_occ_fonction());
2442     mggeo->ajouter_mg_coquille(occ_coquille,mgcoq);
2443     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2444     }
2445     }
2446     else
2447     {
2448     OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,topods_shell,&mggeo->get_occ_fonction());
2449     mggeo->ajouter_mg_coquille(occ_coquille);
2450     occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2451     }
2452     }
2453     else
2454     {
2455     std::cout << "*** MG_FILE : ERREUR lecture OCC_COQUILLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2456     }
2457     }
2458     if (entite=="OCC_VOLUME")
2459     {
2460    
2461     parse.decode(data.c_str(),"@,@,@,@",param+2);
2462     long idori = stol(param[2].argument[0]);
2463     TopoDS_Solid topods_solid;
2464     OCC_VOLUME* occ_volume;
2465     if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2466     {
2467     OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2468     topods_solid=occ_fonction_v2017->get_TopoDS_Solid_id(idori);
2469     occ_volume = new OCC_VOLUME(param[2].argument[0],id,topods_solid,&mggeo->get_occ_fonction());
2470     mggeo->ajouter_mg_volume(occ_volume);
2471     occ_fonction_v2017->ajouter_OCC_VOLUME(occ_volume);
2472     }
2473     else
2474     {
2475     std::cout << "*** MG_FILE : ERREUR lecture OCC_VOLUME : Mauvaise OCC_FONCTION ! ***" << std::endl;
2476     }
2477     int mince=atoi(param[4].argument[0].c_str());
2478     if (mince==0)
2479     {
2480     std::string data2=param[5].argument[0];
2481     parse.decode(data2.c_str(),"@,(&)",param+5);
2482     int nb=atoi(param[5].argument[0].c_str());
2483     if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,occ_volume);
2484     }
2485     else
2486     {
2487     std::string data2=param[5].argument[0];
2488     parse.decode(data2.c_str(),"(&),@,(&)",param+5);
2489     int nb_face=param[5].argument.size();
2490     for (int i=0;i<nb_face;i=i+2)
2491     {
2492     unsigned long idn1=cid(param[5].argument[i]);
2493     unsigned long idn2=cid(param[5].argument[i+1]);
2494     volumemince.push_back(id);
2495     volumemince.push_back(idn1);
2496     volumemince.push_back(idn2);
2497     }
2498     int nb=atoi(param[6].argument[0].c_str());
2499     if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,occ_volume);
2500     }
2501     }
2502    
2503    
2504     #endif
2505 francois 576 if (entite=="ARETE_ELEMENT")
2506     {
2507     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2508     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
2509     mggeo->ajouter_mg_arete(are);
2510     int nb=atoi(param[4].argument[0].c_str());
2511 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
2512     /* if (nb!=0)
2513 francois 576 {
2514     for (int i=0;i<nb;i++)
2515     {
2516     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2517     char nom[3];
2518     double val;
2519     strcpy(nom,param[6].argument[0].c_str());
2520     val=atof(param[7].argument[0].c_str());
2521     are->ajouter_ccf(nom,val);
2522     }
2523 francois 763 }*/
2524 francois 576 }
2525     if (entite=="FACE_ELEMENT")
2526     {
2527     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2528     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
2529     mggeo->ajouter_mg_face(face);
2530     int nb=atoi(param[4].argument[0].c_str());
2531 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,face);
2532     /*if (nb!=0)
2533 francois 576 {
2534     for (int i=0;i<nb;i++)
2535     {
2536     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2537     char nom[3];
2538     double val;
2539     strcpy(nom,param[6].argument[0].c_str());
2540     val=atof(param[7].argument[0].c_str());
2541     face->ajouter_ccf(nom,val);
2542     }
2543 francois 763 }*/
2544 francois 576 }
2545 francois 685 if (entite=="COQUE_ELEMENT")
2546     {
2547     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2548     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
2549     mggeo->ajouter_mg_coque(coq);
2550     int nbele=atoi(param[2].argument[0].c_str());
2551     for (int i=0;i<nbele;i++)
2552     {
2553     unsigned long idele=cid(param[3].argument[i].c_str());
2554     coq->ajouter_element(idele);
2555     }
2556     int nb=atoi(param[4].argument[0].c_str());
2557 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
2558     /* if (nb!=0)
2559 francois 685 {
2560     for (int i=0;i<nb;i++)
2561     {
2562     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2563     char nom[3];
2564     double val;
2565     strcpy(nom,param[6].argument[0].c_str());
2566     val=atof(param[7].argument[0].c_str());
2567     coq->ajouter_ccf(nom,val);
2568     }
2569 francois 763 }*/
2570 francois 685 }
2571 francois 753 if (entite=="POUTRE_ELEMENT")
2572 francois 576 {
2573     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2574 francois 753 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
2575     mggeo->ajouter_mg_poutre(pou);
2576     int nbele=atoi(param[2].argument[0].c_str());
2577     for (int i=0;i<nbele;i++)
2578     {
2579     unsigned long idele=cid(param[3].argument[i].c_str());
2580     pou->ajouter_element(idele);
2581     }
2582     int nb=atoi(param[4].argument[0].c_str());
2583 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
2584     /*if (nb!=0)
2585 francois 753 {
2586     for (int i=0;i<nb;i++)
2587     {
2588     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2589     char nom[3];
2590     double val;
2591     strcpy(nom,param[6].argument[0].c_str());
2592     val=atof(param[7].argument[0].c_str());
2593     pou->ajouter_ccf(nom,val);
2594     }
2595 francois 763 }*/
2596 francois 753 }
2597     if (entite=="VOLUME_ELEMENT")
2598     {
2599     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2600 francois 576 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
2601     mggeo->ajouter_mg_volume(vol);
2602     int nb=atoi(param[4].argument[0].c_str());
2603 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
2604     /* if (nb!=0)
2605 francois 576 {
2606     for (int i=0;i<nb;i++)
2607     {
2608     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2609     char nom[3];
2610     double val;
2611     strcpy(nom,param[6].argument[0].c_str());
2612     val=atof(param[7].argument[0].c_str());
2613     vol->ajouter_ccf(nom,val);
2614     }
2615 francois 763 }*/
2616 francois 576 }
2617 francois 526 if (entite=="SOMMET_NOEUD")
2618     {
2619     parse.decode(data.c_str(),"@,@,(&)",param+2);
2620     long idnoeud=cid(param[2].argument[0]);
2621     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
2622     mggeo->ajouter_mg_sommet(mgsom);
2623     int nb=atoi(param[3].argument[0].c_str());
2624 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
2625     /*if (nb!=0)
2626 francois 526 {
2627     for (int i=0;i<nb;i++)
2628     {
2629     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
2630     char nom[3];
2631     double val;
2632     strcpy(nom,param[5].argument[0].c_str());
2633     val=atof(param[6].argument[0].c_str());
2634     mgsom->ajouter_ccf(nom,val);
2635     }
2636 francois 763 }*/
2637 francois 526 }
2638 francois 283 if (entite=="ARETE")
2639     {
2640 couturad 906 lire_MG_ARETE(id,parse,param,data,mggeo);
2641     // parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2642     // long idcur=cid(param[3].argument[0]);
2643     // int sens=atoi(param[6].argument[0].c_str());
2644     // MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2645     // MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
2646     // mggeo->ajouter_mg_arete(mgarete);
2647     // int nb=atoi(param[7].argument[0].c_str());
2648     // if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
2649     // /*if (nb!=0)
2650     // {
2651     // for (int i=0;i<nb;i++)
2652     // {
2653     // parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
2654     // char nom[3];
2655     // double val;
2656     // strcpy(nom,param[9].argument[0].c_str());
2657     // val=atof(param[10].argument[0].c_str());
2658     // mgarete->ajouter_ccf(nom,val);
2659     // }
2660     // }*/
2661 francois 283 }
2662     if (entite=="COSOMMET")
2663     {
2664     parse.decode(data.c_str(),"@,@,@",param+2);
2665     long idsom=cid(param[2].argument[0]);
2666     long idarete=cid(param[3].argument[0]);
2667     int num=atoi(param[4].argument[0].c_str());
2668     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
2669     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2670     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
2671     if (num==1) mgarete->changer_cosommet1(mgcosom);
2672     if (num==2) mgarete->changer_cosommet2(mgcosom);
2673     }
2674     if (entite=="COARETE")
2675     {
2676     parse.decode(data.c_str(),"@,@,@",param+2);
2677     long idarete=cid(param[2].argument[0]);
2678     long idboucle=cid(param[3].argument[0]);
2679     int sens=atoi(param[4].argument[0].c_str());
2680     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2681     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
2682     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
2683     mgboucle->ajouter_mg_coarete(mgcoarete);
2684     }
2685     if (entite=="VISU_COURBE")
2686     {
2687     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2688     double xyz1[3];
2689     double xyz2[3];
2690     xyz1[0]=atof(param[2].argument[0].c_str());
2691     xyz1[1]=atof(param[3].argument[0].c_str());
2692     xyz1[2]=atof(param[4].argument[0].c_str());
2693     xyz2[0]=atof(param[5].argument[0].c_str());
2694     xyz2[1]=atof(param[6].argument[0].c_str());
2695     xyz2[2]=atof(param[7].argument[0].c_str());
2696     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
2697     mggeo->ajouter_mg_visu_courbe(mgcrb);
2698     }
2699     if (entite=="MAILLAGE")
2700     {
2701     parse.decode(data.c_str(),"@",param+2);
2702     long idgeo=cid(param[2].argument[0]);
2703 francois 626 mggeo=get_mg_geometrieid(idgeo);
2704 couturad 920 if(mggeo==NULL) mggeo=get_mg_constructionid(idgeo);
2705 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
2706     ajouter_mg_maillage(mgmai);
2707     }
2708 francois 465 if (entite=="MAILLAGE_STRUCTURE")
2709     {
2710     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2711     long idgeo=cid(param[2].argument[0]);
2712 francois 626 mggeo=get_mg_geometrieid(idgeo);
2713 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
2714     ajouter_mg_maillage(mgmai);
2715     double xmin=atof(param[3].argument[0].c_str());
2716     double ymin=atof(param[4].argument[0].c_str());
2717     double zmin=atof(param[5].argument[0].c_str());
2718     double xmax=atof(param[6].argument[0].c_str());
2719     double ymax=atof(param[7].argument[0].c_str());
2720     double zmax=atof(param[8].argument[0].c_str());
2721     int nx=atoi(param[9].argument[0].c_str());
2722     int ny=atoi(param[10].argument[0].c_str());
2723     int nz=atoi(param[11].argument[0].c_str());
2724     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2725     mgmai->change_param_structure(b,nx,ny,nz);
2726     }
2727 francois 283 if (entite=="FEM_MAILLAGE")
2728     {
2729     parse.decode(data.c_str(),"@,@,@",param+2);
2730     int degre=atoi(param[2].argument[0].c_str());
2731     long idmai=cid(param[3].argument[0]);
2732     long idgeo=cid(param[4].argument[0]);
2733 francois 626 mggeo=get_mg_geometrieid(idgeo);
2734 francois 1139 if (mggeo==NULL) mggeo=get_mg_constructionid(idgeo);
2735 francois 626 mgmai=get_mg_maillageid(idmai);
2736 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2737     ajouter_fem_maillage(femmai);
2738     }
2739 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
2740     {
2741     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2742     int degre=atoi(param[2].argument[0].c_str());
2743     long idmai=cid(param[3].argument[0]);
2744     long idgeo=cid(param[4].argument[0]);
2745 francois 626 mggeo=get_mg_geometrieid(idgeo);
2746     mgmai=get_mg_maillageid(idmai);
2747 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2748     ajouter_fem_maillage(femmai);
2749     double xmin=atof(param[5].argument[0].c_str());
2750     double ymin=atof(param[6].argument[0].c_str());
2751     double zmin=atof(param[7].argument[0].c_str());
2752     double xmax=atof(param[8].argument[0].c_str());
2753     double ymax=atof(param[9].argument[0].c_str());
2754     double zmax=atof(param[10].argument[0].c_str());
2755     int nx=atoi(param[11].argument[0].c_str());
2756     int ny=atoi(param[12].argument[0].c_str());
2757     int nz=atoi(param[13].argument[0].c_str());
2758     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2759     femmai->change_param_structure(b,nx,ny,nz);
2760     }
2761 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
2762 francois 283 if (entite=="FEM_NOEUD")
2763     {
2764     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2765     long idtopo=cid(param[2].argument[0]);
2766     long idmai=cid(param[3].argument[0]);
2767     double x=atof(param[4].argument[0].c_str());
2768     double y=atof(param[5].argument[0].c_str());
2769     double z=atof(param[6].argument[0].c_str());
2770     int num=atoi(param[7].argument[0].c_str());
2771     int numopt=atoi(param[8].argument[0].c_str());
2772     MG_ELEMENT_MAILLAGE* elmai;
2773     if (idmai>-1)
2774     {
2775     elmai=mgmai->get_mg_noeudid(idmai);
2776     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
2777     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
2778     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
2779     }
2780     else elmai=NULL;
2781     FEM_NOEUD* noeud;
2782     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
2783     else
2784     {
2785     MG_ELEMENT_TOPOLOGIQUE* topo;
2786     if (idtopo>-1)
2787     {
2788     topo=mggeo->get_mg_sommetid(idtopo);
2789     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
2790     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
2791     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
2792     }
2793     else topo=NULL;
2794     noeud=new FEM_NOEUD(id,topo,x,y,z);
2795     }
2796     noeud->change_numero(num);
2797     noeud->change_numero_opt(numopt);
2798     femmai->ajouter_fem_noeud(noeud);
2799     }
2800     if (entite=="FEM_NOEUD_DEF")
2801     {
2802     parse.decode(data.c_str(),"@,@,@",param+2);
2803     double x=atof(param[2].argument[0].c_str());
2804     double y=atof(param[3].argument[0].c_str());
2805     double z=atof(param[4].argument[0].c_str());
2806     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2807     noeud->change_dx(x);
2808     noeud->change_dy(y);
2809     noeud->change_dz(z);
2810     femmai->active_deforme();
2811     }
2812 francois 325 if (entite=="FEM_NOEUD_REAC")
2813     {
2814     parse.decode(data.c_str(),"@,@,@",param+2);
2815     double x=atof(param[2].argument[0].c_str());
2816     double y=atof(param[3].argument[0].c_str());
2817     double z=atof(param[4].argument[0].c_str());
2818     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2819     noeud->change_rx(x);
2820     noeud->change_ry(y);
2821     noeud->change_rz(z);
2822 francois 339 femmai->active_reaction();;
2823 francois 325 }
2824 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
2825 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
2826     {
2827     parse.decode(data.c_str(),"@,@,@",param+2);
2828     long idtopo=cid(param[2].argument[0]);
2829     long idmai=cid(param[3].argument[0]);
2830     long idn1=cid(param[4].argument[0]);
2831     FEM_NOEUD* tab[1];
2832     tab[0]=femmai->get_fem_noeudid(idn1);
2833     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2834     if (idtopo>-1)
2835     topo=mggeo->get_mg_sommetid(idtopo);
2836     MG_ELEMENT_MAILLAGE* elmai;
2837     if (idmai>-1)
2838     elmai=mgmai->get_mg_noeudid(idmai);
2839     else elmai=NULL;
2840     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
2841     femmai->ajouter_fem_element0(fem);
2842     }
2843 francois 283 if (entite=="FEM_SEGMENT2")
2844     {
2845     parse.decode(data.c_str(),"@,@,@,@",param+2);
2846 francois 378 long idtopo=cid(param[2].argument[0]);
2847 francois 283 long idmai=cid(param[3].argument[0]);
2848     long idn1=cid(param[4].argument[0]);
2849     long idn2=cid(param[5].argument[0]);
2850     FEM_NOEUD* tab[2];
2851     tab[0]=femmai->get_fem_noeudid(idn1);
2852     tab[1]=femmai->get_fem_noeudid(idn2);
2853 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2854     if (idtopo>-1)
2855     topo=mggeo->get_mg_areteid(idtopo);
2856 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
2857 francois 378 MG_ELEMENT_MAILLAGE* elmai;
2858 francois 283 if (idmai>-1)
2859     elmai=mgmai->get_mg_segmentid(idmai);
2860     else elmai=NULL;
2861 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
2862 francois 309 femmai->ajouter_fem_element1(seg);
2863 francois 283 }
2864 francois 767 if (entite=="FEM_MINI_SEGMENT2")
2865     {
2866     parse.decode(data.c_str(),"@,@",param+2);
2867     long idn1=cid(param[2].argument[0]);
2868     long idn2=cid(param[3].argument[0]);
2869     FEM_NOEUD* tab[2];
2870     tab[0]=femmai->get_fem_noeudid(idn1);
2871     tab[1]=femmai->get_fem_noeudid(idn2);
2872     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());
2873     FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
2874     femmai->ajouter_fem_element1(seg);
2875     }
2876 francois 283 if (entite=="FEM_SEGMENT3")
2877     {
2878     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2879 francois 378 long idtopo=cid(param[2].argument[0]);
2880     long idmai=cid(param[3].argument[0]);
2881 francois 283 long idn1=cid(param[4].argument[0]);
2882     long idn2=cid(param[5].argument[0]);
2883     long idn3=cid(param[6].argument[0]);
2884     FEM_NOEUD* tab[3];
2885     tab[0]=femmai->get_fem_noeudid(idn1);
2886     tab[1]=femmai->get_fem_noeudid(idn2);
2887     tab[2]=femmai->get_fem_noeudid(idn3);
2888     MG_ELEMENT_MAILLAGE* elmai;
2889 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2890     if (idtopo>-1)
2891     topo=mggeo->get_mg_areteid(idtopo);
2892     if (idmai>-1)
2893 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
2894     else elmai=NULL;
2895 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
2896 francois 309 femmai->ajouter_fem_element1(seg);
2897 francois 283 }
2898 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
2899     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
2900 francois 283 if (entite=="FEM_TRIANGLE3")
2901     {
2902     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2903 francois 378 long idtopo=cid(param[2].argument[0]);
2904 francois 283 long idmai=cid(param[3].argument[0]);
2905     long idn1=cid(param[4].argument[0]);
2906     long idn2=cid(param[5].argument[0]);
2907     long idn3=cid(param[6].argument[0]);
2908     FEM_NOEUD* tab[3];
2909     tab[0]=femmai->get_fem_noeudid(idn1);
2910     tab[1]=femmai->get_fem_noeudid(idn2);
2911     tab[2]=femmai->get_fem_noeudid(idn3);
2912     MG_ELEMENT_MAILLAGE* elmai;
2913     if (idmai>-1)
2914     elmai=mgmai->get_mg_triangleid(idmai);
2915     else elmai=NULL;
2916 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2917     if (idtopo>-1)
2918 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2919 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
2920 francois 309 femmai->ajouter_fem_element2(tri);
2921 francois 283 }
2922     if (entite=="FEM_TRIANGLE6")
2923     {
2924     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
2925 francois 378 long idtopo=cid(param[2].argument[0]);
2926 francois 283 long idmai=cid(param[3].argument[0]);
2927     long idn1=cid(param[4].argument[0]);
2928     long idn2=cid(param[5].argument[0]);
2929     long idn3=cid(param[6].argument[0]);
2930     long idn4=cid(param[7].argument[0]);
2931     long idn5=cid(param[8].argument[0]);
2932     long idn6=cid(param[9].argument[0]);
2933     FEM_NOEUD* tab[6];
2934     tab[0]=femmai->get_fem_noeudid(idn1);
2935     tab[1]=femmai->get_fem_noeudid(idn2);
2936     tab[2]=femmai->get_fem_noeudid(idn3);
2937     tab[3]=femmai->get_fem_noeudid(idn4);
2938     tab[4]=femmai->get_fem_noeudid(idn5);
2939     tab[5]=femmai->get_fem_noeudid(idn6);
2940     MG_ELEMENT_MAILLAGE* elmai;
2941     if (idmai>-1)
2942     elmai=mgmai->get_mg_triangleid(idmai);
2943     else elmai=NULL;
2944 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2945     if (idtopo>-1)
2946 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2947 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
2948 francois 309 femmai->ajouter_fem_element2(tri);
2949 francois 283 }
2950 francois 310 if (entite=="FEM_QUADRANGLE4")
2951     {
2952     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2953 francois 378 long idtopo=cid(param[2].argument[0]);
2954     long idmai=cid(param[3].argument[0]);
2955 francois 310 long idn1=cid(param[4].argument[0]);
2956     long idn2=cid(param[5].argument[0]);
2957     long idn3=cid(param[6].argument[0]);
2958     long idn4=cid(param[7].argument[0]);
2959     FEM_NOEUD* tab[4];
2960     tab[0]=femmai->get_fem_noeudid(idn1);
2961     tab[1]=femmai->get_fem_noeudid(idn2);
2962     tab[2]=femmai->get_fem_noeudid(idn3);
2963     tab[3]=femmai->get_fem_noeudid(idn4);
2964     MG_ELEMENT_MAILLAGE* elmai;
2965     if (idmai>-1)
2966     elmai=mgmai->get_mg_quadrangleid(idmai);
2967     else elmai=NULL;
2968 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2969     if (idtopo>-1)
2970 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2971 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
2972 francois 310 femmai->ajouter_fem_element2(quad);
2973     }
2974     if (entite=="FEM_QUADRANGLE8")
2975     {
2976     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2977 francois 378 long idtopo=cid(param[2].argument[0]);
2978     long idmai=cid(param[3].argument[0]);
2979 francois 310 long idn1=cid(param[4].argument[0]);
2980     long idn2=cid(param[5].argument[0]);
2981     long idn3=cid(param[6].argument[0]);
2982     long idn4=cid(param[7].argument[0]);
2983     long idn5=cid(param[8].argument[0]);
2984     long idn6=cid(param[9].argument[0]);
2985     long idn7=cid(param[10].argument[0]);
2986     long idn8=cid(param[11].argument[0]);
2987     FEM_NOEUD* tab[8];
2988     tab[0]=femmai->get_fem_noeudid(idn1);
2989     tab[1]=femmai->get_fem_noeudid(idn2);
2990     tab[2]=femmai->get_fem_noeudid(idn3);
2991     tab[3]=femmai->get_fem_noeudid(idn4);
2992     tab[4]=femmai->get_fem_noeudid(idn5);
2993     tab[5]=femmai->get_fem_noeudid(idn6);
2994     tab[6]=femmai->get_fem_noeudid(idn7);
2995     tab[7]=femmai->get_fem_noeudid(idn8);
2996     MG_ELEMENT_MAILLAGE* elmai;
2997     if (idmai>-1)
2998     elmai=mgmai->get_mg_quadrangleid(idmai);
2999     else elmai=NULL;
3000 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3001     if (idtopo>-1)
3002 francois 383 topo=mggeo->get_mg_faceid(idtopo);
3003 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
3004 francois 310 femmai->ajouter_fem_element2(quad);
3005     }
3006 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
3007    
3008     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
3009 francois 876 if (entite=="PENTAEDRE") lire_PENTA(id,parse,param,data,mgmai,mggeo);
3010 francois 1123 if (entite=="PYRAMIDE") lire_PYRAMIDE(id,parse,param,data,mgmai,mggeo);
3011 francois 283 if (entite=="FEM_TETRA4")
3012     {
3013 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
3014 francois 378 long idtopo=cid(param[2].argument[0]);
3015     long idmai=cid(param[3].argument[0]);
3016 francois 283 long idn1=cid(param[4].argument[0]);
3017     long idn2=cid(param[5].argument[0]);
3018     long idn3=cid(param[6].argument[0]);
3019     long idn4=cid(param[7].argument[0]);
3020 francois 339 long etat=atoi(param[8].argument[0].c_str());
3021 francois 283 FEM_NOEUD* tab[4];
3022     tab[0]=femmai->get_fem_noeudid(idn1);
3023     tab[1]=femmai->get_fem_noeudid(idn2);
3024     tab[2]=femmai->get_fem_noeudid(idn3);
3025     tab[3]=femmai->get_fem_noeudid(idn4);
3026     MG_ELEMENT_MAILLAGE* elmai;
3027     if (idmai>-1)
3028     elmai=mgmai->get_mg_tetraid(idmai);
3029     else elmai=NULL;
3030 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3031     if (idtopo>-1)
3032 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3033 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
3034 francois 410 tet->change_etat(0,etat);
3035 francois 309 femmai->ajouter_fem_element3(tet);
3036 francois 283 }
3037 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
3038 francois 339 {
3039 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
3040 francois 399 unsigned long idele=cid(param[2].argument[0]);
3041     unsigned long idtopo=cid(param[3].argument[0]);
3042     unsigned long idn1=cid(param[4].argument[0]);
3043 francois 380 int etat=atoi(param[5].argument[0].c_str());
3044 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
3045     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
3046     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
3047     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
3048     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
3049 francois 380 FEM_NOEUD* tab[4];
3050     tab[0]=femmai->get_fem_noeudid(idn1);
3051 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
3052     femmai->ajouter_xfem_element0(xele);
3053     xele->change_etat(etat);
3054     }
3055     if (entite=="XFEM_SEGMENT2")
3056     {
3057     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3058     unsigned long idele=cid(param[2].argument[0]);
3059     unsigned long idtopo=cid(param[3].argument[0]);
3060     unsigned long idn1=cid(param[4].argument[0]);
3061     unsigned long idn2=cid(param[5].argument[0]);
3062     int etat=atoi(param[6].argument[0].c_str());
3063     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
3064     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
3065     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
3066     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
3067     FEM_NOEUD* tab[4];
3068     tab[0]=femmai->get_fem_noeudid(idn1);
3069 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
3070 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
3071 francois 380 femmai->ajouter_xfem_element1(xseg);
3072 francois 399 xseg->change_etat(etat);
3073 francois 380 }
3074 francois 410 if (entite=="XFEM_TRIANGLE3")
3075     {
3076     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
3077     unsigned long idtet=cid(param[2].argument[0]);
3078     unsigned long idtopo=cid(param[3].argument[0]);
3079     unsigned long idn1=cid(param[4].argument[0]);
3080     unsigned long idn2=cid(param[5].argument[0]);
3081     unsigned long idn3=cid(param[6].argument[0]);
3082     int etat=atoi(param[7].argument[0].c_str());
3083     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
3084     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
3085     FEM_NOEUD* tab[3];
3086     tab[0]=femmai->get_fem_noeudid(idn1);
3087     tab[1]=femmai->get_fem_noeudid(idn2);
3088     tab[2]=femmai->get_fem_noeudid(idn3);
3089     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
3090     femmai->ajouter_xfem_element2(xtri);
3091     xtri->change_etat(etat);
3092     }
3093 francois 380 if (entite=="XFEM_TETRA4")
3094     {
3095 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
3096 francois 339 unsigned long idtet=cid(param[2].argument[0]);
3097 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
3098     unsigned long idn1=cid(param[4].argument[0]);
3099     unsigned long idn2=cid(param[5].argument[0]);
3100     unsigned long idn3=cid(param[6].argument[0]);
3101     unsigned long idn4=cid(param[7].argument[0]);
3102     int etat=atoi(param[8].argument[0].c_str());
3103 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
3104 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
3105     FEM_NOEUD* tab[4];
3106 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
3107     tab[1]=femmai->get_fem_noeudid(idn2);
3108     tab[2]=femmai->get_fem_noeudid(idn3);
3109     tab[3]=femmai->get_fem_noeudid(idn4);
3110 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
3111 francois 339 femmai->ajouter_xfem_element3(xtet);
3112 francois 383 xtet->change_etat(etat);
3113 francois 339 }
3114 francois 283 if (entite=="FEM_TETRA10")
3115     {
3116     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3117 francois 378 long idtopo=cid(param[2].argument[0]);
3118     long idmai=cid(param[3].argument[0]);
3119 francois 283 long idn1=cid(param[4].argument[0]);
3120     long idn2=cid(param[5].argument[0]);
3121     long idn3=cid(param[6].argument[0]);
3122     long idn4=cid(param[7].argument[0]);
3123     long idn5=cid(param[8].argument[0]);
3124     long idn6=cid(param[9].argument[0]);
3125     long idn7=cid(param[10].argument[0]);
3126     long idn8=cid(param[11].argument[0]);
3127     long idn9=cid(param[12].argument[0]);
3128     long idn10=cid(param[13].argument[0]);
3129     FEM_NOEUD* tab[10];
3130     tab[0]=femmai->get_fem_noeudid(idn1);
3131     tab[1]=femmai->get_fem_noeudid(idn2);
3132     tab[2]=femmai->get_fem_noeudid(idn3);
3133     tab[3]=femmai->get_fem_noeudid(idn4);
3134     tab[4]=femmai->get_fem_noeudid(idn5);
3135     tab[5]=femmai->get_fem_noeudid(idn6);
3136     tab[6]=femmai->get_fem_noeudid(idn7);
3137     tab[7]=femmai->get_fem_noeudid(idn8);
3138     tab[8]=femmai->get_fem_noeudid(idn9);
3139     tab[9]=femmai->get_fem_noeudid(idn10);
3140     MG_ELEMENT_MAILLAGE* elmai;
3141     if (idmai>-1)
3142     elmai=mgmai->get_mg_tetraid(idmai);
3143     else elmai=NULL;
3144 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3145     if (idtopo>-1)
3146 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3147 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
3148 francois 309 femmai->ajouter_fem_element3(tet);
3149 francois 283 }
3150 francois 310 if (entite=="FEM_HEXA8")
3151     {
3152     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
3153 francois 378 long idtopo=cid(param[2].argument[0]);
3154     long idmai=cid(param[3].argument[0]);
3155 francois 310 long idn1=cid(param[4].argument[0]);
3156     long idn2=cid(param[5].argument[0]);
3157     long idn3=cid(param[6].argument[0]);
3158     long idn4=cid(param[7].argument[0]);
3159     long idn5=cid(param[8].argument[0]);
3160     long idn6=cid(param[9].argument[0]);
3161     long idn7=cid(param[10].argument[0]);
3162     long idn8=cid(param[11].argument[0]);
3163     FEM_NOEUD* tab[8];
3164     tab[0]=femmai->get_fem_noeudid(idn1);
3165     tab[1]=femmai->get_fem_noeudid(idn2);
3166     tab[2]=femmai->get_fem_noeudid(idn3);
3167     tab[3]=femmai->get_fem_noeudid(idn4);
3168     tab[4]=femmai->get_fem_noeudid(idn5);
3169     tab[5]=femmai->get_fem_noeudid(idn6);
3170     tab[6]=femmai->get_fem_noeudid(idn7);
3171     tab[7]=femmai->get_fem_noeudid(idn8);
3172     MG_ELEMENT_MAILLAGE* elmai;
3173     if (idmai>-1)
3174     elmai=mgmai->get_mg_hexaid(idmai);
3175     else elmai=NULL;
3176 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3177     if (idtopo>-1)
3178 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3179 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
3180 francois 310 femmai->ajouter_fem_element3(hex);
3181     }
3182     if (entite=="FEM_HEXA20")
3183     {
3184     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3185 francois 378 long idtopo=cid(param[2].argument[0]);
3186     long idmai=cid(param[3].argument[0]);
3187 francois 310 long idn1=cid(param[4].argument[0]);
3188     long idn2=cid(param[5].argument[0]);
3189     long idn3=cid(param[6].argument[0]);
3190     long idn4=cid(param[7].argument[0]);
3191     long idn5=cid(param[8].argument[0]);
3192     long idn6=cid(param[9].argument[0]);
3193     long idn7=cid(param[10].argument[0]);
3194     long idn8=cid(param[11].argument[0]);
3195     long idn9=cid(param[12].argument[0]);
3196     long idn10=cid(param[13].argument[0]);
3197     long idn11=cid(param[14].argument[0]);
3198     long idn12=cid(param[15].argument[0]);
3199     long idn13=cid(param[16].argument[0]);
3200     long idn14=cid(param[17].argument[0]);
3201     long idn15=cid(param[18].argument[0]);
3202     long idn16=cid(param[19].argument[0]);
3203     long idn17=cid(param[20].argument[0]);
3204     long idn18=cid(param[21].argument[0]);
3205     long idn19=cid(param[22].argument[0]);
3206     long idn20=cid(param[23].argument[0]);
3207     FEM_NOEUD* tab[20];
3208     tab[0]=femmai->get_fem_noeudid(idn1);
3209     tab[1]=femmai->get_fem_noeudid(idn2);
3210     tab[2]=femmai->get_fem_noeudid(idn3);
3211     tab[3]=femmai->get_fem_noeudid(idn4);
3212     tab[4]=femmai->get_fem_noeudid(idn5);
3213     tab[5]=femmai->get_fem_noeudid(idn6);
3214     tab[6]=femmai->get_fem_noeudid(idn7);
3215     tab[7]=femmai->get_fem_noeudid(idn8);
3216     tab[8]=femmai->get_fem_noeudid(idn9);
3217     tab[9]=femmai->get_fem_noeudid(idn10);
3218     tab[10]=femmai->get_fem_noeudid(idn11);
3219     tab[11]=femmai->get_fem_noeudid(idn12);
3220     tab[12]=femmai->get_fem_noeudid(idn13);
3221     tab[13]=femmai->get_fem_noeudid(idn14);
3222     tab[14]=femmai->get_fem_noeudid(idn15);
3223     tab[15]=femmai->get_fem_noeudid(idn16);
3224     tab[16]=femmai->get_fem_noeudid(idn17);
3225     tab[17]=femmai->get_fem_noeudid(idn18);
3226     tab[18]=femmai->get_fem_noeudid(idn19);
3227     tab[19]=femmai->get_fem_noeudid(idn20);
3228     MG_ELEMENT_MAILLAGE* elmai;
3229     if (idmai>-1)
3230     elmai=mgmai->get_mg_hexaid(idmai);
3231     else elmai=NULL;
3232 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3233     if (idtopo>-1)
3234 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3235 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
3236 francois 310 femmai->ajouter_fem_element3(hex);
3237     }
3238 francois 876 if (entite=="FEM_PENTA6")
3239 francois 283 {
3240 francois 876 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
3241     long idtopo=cid(param[2].argument[0]);
3242     long idmai=cid(param[3].argument[0]);
3243     long idn1=cid(param[4].argument[0]);
3244     long idn2=cid(param[5].argument[0]);
3245     long idn3=cid(param[6].argument[0]);
3246     long idn4=cid(param[7].argument[0]);
3247     long idn5=cid(param[8].argument[0]);
3248     long idn6=cid(param[9].argument[0]);
3249     FEM_NOEUD* tab[6];
3250     tab[0]=femmai->get_fem_noeudid(idn1);
3251     tab[1]=femmai->get_fem_noeudid(idn2);
3252     tab[2]=femmai->get_fem_noeudid(idn3);
3253     tab[3]=femmai->get_fem_noeudid(idn4);
3254     tab[4]=femmai->get_fem_noeudid(idn5);
3255     tab[5]=femmai->get_fem_noeudid(idn6);
3256     MG_ELEMENT_MAILLAGE* elmai;
3257     if (idmai>-1)
3258 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3259 francois 876 else elmai=NULL;
3260     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3261     if (idtopo>-1)
3262     topo=mggeo->get_mg_volumeid(idtopo);
3263     FEM_PENTA6* pen=new FEM_PENTA6(id,topo,elmai,tab);
3264     femmai->ajouter_fem_element3(pen);
3265     }
3266     if (entite=="FEM_PENTA15")
3267     {
3268     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3269     long idtopo=cid(param[2].argument[0]);
3270     long idmai=cid(param[3].argument[0]);
3271     long idn1=cid(param[4].argument[0]);
3272     long idn2=cid(param[5].argument[0]);
3273     long idn3=cid(param[6].argument[0]);
3274     long idn4=cid(param[7].argument[0]);
3275     long idn5=cid(param[8].argument[0]);
3276     long idn6=cid(param[9].argument[0]);
3277     long idn7=cid(param[10].argument[0]);
3278     long idn8=cid(param[11].argument[0]);
3279     long idn9=cid(param[12].argument[0]);
3280     long idn10=cid(param[13].argument[0]);
3281     long idn11=cid(param[14].argument[0]);
3282     long idn12=cid(param[15].argument[0]);
3283     long idn13=cid(param[16].argument[0]);
3284     long idn14=cid(param[17].argument[0]);
3285     long idn15=cid(param[18].argument[0]);
3286     FEM_NOEUD* tab[15];
3287     tab[0]=femmai->get_fem_noeudid(idn1);
3288     tab[1]=femmai->get_fem_noeudid(idn2);
3289     tab[2]=femmai->get_fem_noeudid(idn3);
3290     tab[3]=femmai->get_fem_noeudid(idn4);
3291     tab[4]=femmai->get_fem_noeudid(idn5);
3292     tab[5]=femmai->get_fem_noeudid(idn6);
3293     tab[6]=femmai->get_fem_noeudid(idn7);
3294     tab[7]=femmai->get_fem_noeudid(idn8);
3295     tab[8]=femmai->get_fem_noeudid(idn9);
3296     tab[9]=femmai->get_fem_noeudid(idn10);
3297     tab[10]=femmai->get_fem_noeudid(idn11);
3298     tab[11]=femmai->get_fem_noeudid(idn12);
3299     tab[12]=femmai->get_fem_noeudid(idn13);
3300     tab[13]=femmai->get_fem_noeudid(idn14);
3301     tab[14]=femmai->get_fem_noeudid(idn15);
3302     MG_ELEMENT_MAILLAGE* elmai;
3303     if (idmai>-1)
3304 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3305 francois 876 else elmai=NULL;
3306     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3307     if (idtopo>-1)
3308     topo=mggeo->get_mg_volumeid(idtopo);
3309     FEM_PENTA15* pen=new FEM_PENTA15(id,topo,elmai,tab);
3310     femmai->ajouter_fem_element3(pen);
3311     }
3312     if (entite=="SOLUTION")
3313     {
3314 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3315 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3316 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
3317     std::string nomsol=param[4].argument[0];
3318     long idmai=cid(param[5].argument[0]);
3319     int nb=atoi(param[6].argument[0].c_str());
3320     std::string chemin=param[7].argument[0];
3321 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
3322 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3323 francois 283 ajouter_mg_solution(sol);
3324     for (int i=0;i<nb;i++)
3325 francois 377 sol->change_legende(i,param[8].argument[i]);
3326 francois 283 }
3327     if (entite=="FEM_SOLUTION")
3328     {
3329 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3330 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3331 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
3332     std::string nomsol=param[4].argument[0];
3333     long idmai=cid(param[5].argument[0]);
3334     int nb=atoi(param[6].argument[0].c_str());
3335 couturad 919 std::string chemin_sol=param[7].argument[0];
3336 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
3337 couturad 919 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin_sol.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3338 francois 283 ajouter_fem_solution(sol);
3339     for (int i=0;i<nb;i++)
3340 francois 375 sol->change_legende(i,param[8].argument[i]);
3341 francois 283 }
3342     #ifdef WINDOWS_VERSION
3343     if (entite=="CAD4FE_MCSEGMENT")
3344     {
3345     parse.decode(data.c_str(),"@,@,@",param+2);
3346     long idtopo=cid(param[2].argument[0]);
3347     long idn1=cid(param[3].argument[0]);
3348     long idn2=cid(param[4].argument[0]);
3349     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3350     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3351     MG_ELEMENT_TOPOLOGIQUE* topo;
3352     if (idtopo>-1)
3353     {
3354     topo=mggeo->get_mg_areteid(idtopo);
3355     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
3356     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
3357     }
3358     else topo=NULL;
3359     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
3360     mgmai->ajouter_mg_segment(seg);
3361     }
3362     if (entite=="CAD4FE_MCNODE")
3363     {
3364     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3365     long idRefTopo=cid(param[2].argument[0]);
3366     long idMCTopo=cid(param[3].argument[0]);
3367     double x=atof(param[4].argument[0].c_str());
3368     double y=atof(param[5].argument[0].c_str());
3369     double z=atof(param[6].argument[0].c_str());
3370     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
3371     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
3372     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
3373     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
3374     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
3375     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
3376     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
3377     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
3378     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
3379     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
3380    
3381     if (mcTopo->get_dimension()==0)
3382     {
3383     if (updatedMergedRefVertices == false)
3384     {
3385     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3386     itMergedRefVertices != mapMergedRefVertices.end();
3387     itMergedRefVertices++)
3388     {
3389     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3390     MG_SOMMET * refV = NULL;
3391     unsigned long id = itMergedRefVertices->second;
3392     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3393     v->MergeRefVertex(refV);
3394     }
3395    
3396     updatedMergedRefVertices = true;
3397     }
3398     }
3399    
3400     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
3401     mgmai->ajouter_mg_noeud(noeud);
3402     }
3403     if (entite=="CAD4FE_MCTRIANGLE")
3404     {
3405     parse.decode(data.c_str(),"@,@,@,@",param+2);
3406     long idtopo=cid(param[2].argument[0]);
3407     long idn1=cid(param[3].argument[0]);
3408     long idn2=cid(param[4].argument[0]);
3409     long idn3=cid(param[5].argument[0]);
3410     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3411     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3412     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
3413     CAD4FE::MCSegment* mgsegment[3];
3414     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
3415     // la topo. d'un MCTriangle est obligatoirement une MCFace
3416     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
3417     for (int i=0;i<3;i++)
3418     {
3419     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
3420     if (mgsegment[i]==NULL)
3421     {
3422     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
3423     mgmai->ajouter_mg_segment(mgsegment[i]);
3424     }
3425     }
3426     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
3427     mgmai->ajouter_mg_triangle(triangle);
3428     }
3429     #endif
3430     }
3431     }
3432     while (param[0].argument[0]!="FIN");
3433 francois 878
3434 francois 881 for (int i=0;i<volumemince.size();i=i+3)
3435 francois 878 {
3436 francois 881 MG_VOLUME *vol=mggeo->get_mg_volumeid(volumemince[i]);
3437     MG_FACE* face1=mggeo->get_mg_faceid(volumemince[i+1]);
3438     MG_FACE* face2=mggeo->get_mg_faceid(volumemince[i+2]);
3439     vol->ajouter_face_correspondante(face1,face2);
3440 francois 878 }
3441    
3442    
3443 francois 741 LISTE_MG_ARBRE::iterator itarbre;
3444     for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
3445     {
3446     LISTE_MG_ASSEMBLAGE::iterator itass;
3447     for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
3448     ass->ini_donne(arb);
3449     }
3450 francois 1139 TPL_MAP_ENTITE<MG_GEOMETRIE*> lst;
3451 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
3452     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
3453 francois 1139 lst.ajouter(geo);
3454     LISTE_MG_CONSTRUCTION::iterator itcon;
3455     for (MG_GEOMETRIE* geo=get_premier_construction(itcon);geo;geo=get_suivant_construction(itcon))
3456     lst.ajouter(geo);
3457     TPL_MAP_ENTITE<MG_GEOMETRIE*>::ITERATEUR it;
3458     for (MG_GEOMETRIE* geo=lst.get_premier(it);geo;geo=lst.get_suivant(it))
3459 francois 526 {
3460     LISTE_MG_SOMMET::iterator itsom;
3461     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
3462     if (som->est_un_sommet_noeud())
3463     {
3464     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
3465     unsigned long idnoeud=somno->get_id_mg_noeud();
3466     MG_NOEUD* noeud;
3467     LISTE_MG_MAILLAGE::iterator itmai;
3468     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3469     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
3470     somno->change_mg_noeud(noeud);
3471     }
3472 francois 685 LISTE_MG_COQUE::iterator itcoq;
3473     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
3474     if (coq->est_une_coque_element())
3475     {
3476     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
3477     int nbele=coque->get_nb_liste_id();
3478     MG_MAILLAGE* mgmai=NULL;
3479     for (int i=0;i<nbele;i++)
3480     {
3481     unsigned long eleid=coque->get_liste_id(i);
3482     if (i==0)
3483     {
3484     LISTE_MG_MAILLAGE::iterator itmai;
3485     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3486     {
3487     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
3488     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
3489     }
3490     }
3491     MG_ELEMENT_MAILLAGE* ele=NULL;
3492     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
3493     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
3494     coque->ajouter_element(ele);
3495     }
3496    
3497     }
3498 francois 753 LISTE_MG_POUTRE::iterator itpou;
3499     for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
3500     if (pou->est_une_poutre_element())
3501     {
3502     MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
3503     int nbele=poutre->get_nb_liste_id();
3504     MG_MAILLAGE* mgmai=NULL;
3505     for (int i=0;i<nbele;i++)
3506     {
3507     unsigned long eleid=poutre->get_liste_id(i);
3508     if (i==0)
3509     {
3510     LISTE_MG_MAILLAGE::iterator itmai;
3511     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3512     {
3513     if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
3514     }
3515     }
3516     MG_ELEMENT_MAILLAGE* ele=NULL;
3517     if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
3518     poutre->ajouter_element(ele);
3519     }
3520    
3521     }
3522 francois 526 }
3523 francois 283 #ifdef WINDOWS_VERSION
3524     if (updatedMergedRefVertices == false)
3525     {
3526     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3527     itMergedRefVertices != mapMergedRefVertices.end();
3528     itMergedRefVertices++)
3529     {
3530     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3531     MG_SOMMET * refV = NULL;
3532     unsigned long id = itMergedRefVertices->second;
3533     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3534     v->MergeRefVertex(refV);
3535     }
3536    
3537     updatedMergedRefVertices = true;
3538     }
3539    
3540     #endif
3541     fclose(in);
3542     return 1;
3543     }
3544    
3545    
3546    
3547