ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1185
Committed: Mon Nov 11 21:29:00 2024 UTC (6 months, 1 week ago) by francois
File size: 145244 byte(s)
Log Message:
finition de l'enregistrement des contraintes

File Contents

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