ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1183
Committed: Thu Nov 7 23:05:07 2024 UTC (6 months, 1 week ago) by ghazal
File size: 145677 byte(s)
Log Message:
resolution bug dans ecriture 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     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2387     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
2388     mggeo->ajouter_mg_arete(are);
2389     int nb=atoi(param[4].argument[0].c_str());
2390 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
2391     /* if (nb!=0)
2392 francois 576 {
2393     for (int i=0;i<nb;i++)
2394     {
2395     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2396     char nom[3];
2397     double val;
2398     strcpy(nom,param[6].argument[0].c_str());
2399     val=atof(param[7].argument[0].c_str());
2400     are->ajouter_ccf(nom,val);
2401     }
2402 francois 763 }*/
2403 francois 576 }
2404     if (entite=="FACE_ELEMENT")
2405     {
2406 ghazal 1183 if (version_fichier<2.35)
2407 francois 1181 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2408     else
2409     parse.decode(data.c_str(),"@,(&),(&),@,(&)",param+2);
2410 francois 576 MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
2411     mggeo->ajouter_mg_face(face);
2412 francois 1181 int numparamnb=4;
2413 ghazal 1183 if (version_fichier>2.35)
2414 francois 1181 {
2415     numparamnb=5;
2416     lire_contrainte(4,param,face);
2417    
2418     }
2419     int nb=atoi(param[numparamnb].argument[0].c_str());
2420     if (nb!=0)
2421     lire_ccf(version_fichier,nb,numparamnb+1,parse,param,face);
2422    
2423 francois 576 }
2424 francois 685 if (entite=="COQUE_ELEMENT")
2425     {
2426     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2427     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
2428     mggeo->ajouter_mg_coque(coq);
2429     int nbele=atoi(param[2].argument[0].c_str());
2430     for (int i=0;i<nbele;i++)
2431     {
2432     unsigned long idele=cid(param[3].argument[i].c_str());
2433     coq->ajouter_element(idele);
2434     }
2435     int nb=atoi(param[4].argument[0].c_str());
2436 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
2437     /* if (nb!=0)
2438 francois 685 {
2439     for (int i=0;i<nb;i++)
2440     {
2441     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2442     char nom[3];
2443     double val;
2444     strcpy(nom,param[6].argument[0].c_str());
2445     val=atof(param[7].argument[0].c_str());
2446     coq->ajouter_ccf(nom,val);
2447     }
2448 francois 763 }*/
2449 francois 685 }
2450 francois 753 if (entite=="POUTRE_ELEMENT")
2451 francois 576 {
2452     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2453 francois 753 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
2454     mggeo->ajouter_mg_poutre(pou);
2455     int nbele=atoi(param[2].argument[0].c_str());
2456     for (int i=0;i<nbele;i++)
2457     {
2458     unsigned long idele=cid(param[3].argument[i].c_str());
2459     pou->ajouter_element(idele);
2460     }
2461     int nb=atoi(param[4].argument[0].c_str());
2462 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
2463     /*if (nb!=0)
2464 francois 753 {
2465     for (int i=0;i<nb;i++)
2466     {
2467     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2468     char nom[3];
2469     double val;
2470     strcpy(nom,param[6].argument[0].c_str());
2471     val=atof(param[7].argument[0].c_str());
2472     pou->ajouter_ccf(nom,val);
2473     }
2474 francois 763 }*/
2475 francois 753 }
2476     if (entite=="VOLUME_ELEMENT")
2477     {
2478     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2479 francois 576 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
2480     mggeo->ajouter_mg_volume(vol);
2481     int nb=atoi(param[4].argument[0].c_str());
2482 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
2483     /* if (nb!=0)
2484 francois 576 {
2485     for (int i=0;i<nb;i++)
2486     {
2487     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2488     char nom[3];
2489     double val;
2490     strcpy(nom,param[6].argument[0].c_str());
2491     val=atof(param[7].argument[0].c_str());
2492     vol->ajouter_ccf(nom,val);
2493     }
2494 francois 763 }*/
2495 francois 576 }
2496 francois 526 if (entite=="SOMMET_NOEUD")
2497     {
2498     parse.decode(data.c_str(),"@,@,(&)",param+2);
2499     long idnoeud=cid(param[2].argument[0]);
2500     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
2501     mggeo->ajouter_mg_sommet(mgsom);
2502     int nb=atoi(param[3].argument[0].c_str());
2503 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
2504     /*if (nb!=0)
2505 francois 526 {
2506     for (int i=0;i<nb;i++)
2507     {
2508     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
2509     char nom[3];
2510     double val;
2511     strcpy(nom,param[5].argument[0].c_str());
2512     val=atof(param[6].argument[0].c_str());
2513     mgsom->ajouter_ccf(nom,val);
2514     }
2515 francois 763 }*/
2516 francois 526 }
2517 francois 283 if (entite=="ARETE")
2518     {
2519 couturad 906 lire_MG_ARETE(id,parse,param,data,mggeo);
2520 francois 283 }
2521     if (entite=="COSOMMET")
2522     {
2523     parse.decode(data.c_str(),"@,@,@",param+2);
2524     long idsom=cid(param[2].argument[0]);
2525     long idarete=cid(param[3].argument[0]);
2526     int num=atoi(param[4].argument[0].c_str());
2527     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
2528     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2529     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
2530     if (num==1) mgarete->changer_cosommet1(mgcosom);
2531     if (num==2) mgarete->changer_cosommet2(mgcosom);
2532     }
2533     if (entite=="COARETE")
2534     {
2535     parse.decode(data.c_str(),"@,@,@",param+2);
2536     long idarete=cid(param[2].argument[0]);
2537     long idboucle=cid(param[3].argument[0]);
2538     int sens=atoi(param[4].argument[0].c_str());
2539     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2540     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
2541     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
2542     mgboucle->ajouter_mg_coarete(mgcoarete);
2543     }
2544     if (entite=="VISU_COURBE")
2545     {
2546     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2547     double xyz1[3];
2548     double xyz2[3];
2549     xyz1[0]=atof(param[2].argument[0].c_str());
2550     xyz1[1]=atof(param[3].argument[0].c_str());
2551     xyz1[2]=atof(param[4].argument[0].c_str());
2552     xyz2[0]=atof(param[5].argument[0].c_str());
2553     xyz2[1]=atof(param[6].argument[0].c_str());
2554     xyz2[2]=atof(param[7].argument[0].c_str());
2555     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
2556     mggeo->ajouter_mg_visu_courbe(mgcrb);
2557     }
2558     if (entite=="MAILLAGE")
2559     {
2560     parse.decode(data.c_str(),"@",param+2);
2561     long idgeo=cid(param[2].argument[0]);
2562 francois 626 mggeo=get_mg_geometrieid(idgeo);
2563 couturad 920 if(mggeo==NULL) mggeo=get_mg_constructionid(idgeo);
2564 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
2565     ajouter_mg_maillage(mgmai);
2566     }
2567 francois 465 if (entite=="MAILLAGE_STRUCTURE")
2568     {
2569     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2570     long idgeo=cid(param[2].argument[0]);
2571 francois 626 mggeo=get_mg_geometrieid(idgeo);
2572 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
2573     ajouter_mg_maillage(mgmai);
2574     double xmin=atof(param[3].argument[0].c_str());
2575     double ymin=atof(param[4].argument[0].c_str());
2576     double zmin=atof(param[5].argument[0].c_str());
2577     double xmax=atof(param[6].argument[0].c_str());
2578     double ymax=atof(param[7].argument[0].c_str());
2579     double zmax=atof(param[8].argument[0].c_str());
2580     int nx=atoi(param[9].argument[0].c_str());
2581     int ny=atoi(param[10].argument[0].c_str());
2582     int nz=atoi(param[11].argument[0].c_str());
2583     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2584     mgmai->change_param_structure(b,nx,ny,nz);
2585     }
2586 francois 283 if (entite=="FEM_MAILLAGE")
2587     {
2588     parse.decode(data.c_str(),"@,@,@",param+2);
2589     int degre=atoi(param[2].argument[0].c_str());
2590     long idmai=cid(param[3].argument[0]);
2591     long idgeo=cid(param[4].argument[0]);
2592 francois 626 mggeo=get_mg_geometrieid(idgeo);
2593 francois 1139 if (mggeo==NULL) mggeo=get_mg_constructionid(idgeo);
2594 francois 626 mgmai=get_mg_maillageid(idmai);
2595 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2596     ajouter_fem_maillage(femmai);
2597     }
2598 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
2599     {
2600     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2601     int degre=atoi(param[2].argument[0].c_str());
2602     long idmai=cid(param[3].argument[0]);
2603     long idgeo=cid(param[4].argument[0]);
2604 francois 626 mggeo=get_mg_geometrieid(idgeo);
2605     mgmai=get_mg_maillageid(idmai);
2606 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2607     ajouter_fem_maillage(femmai);
2608     double xmin=atof(param[5].argument[0].c_str());
2609     double ymin=atof(param[6].argument[0].c_str());
2610     double zmin=atof(param[7].argument[0].c_str());
2611     double xmax=atof(param[8].argument[0].c_str());
2612     double ymax=atof(param[9].argument[0].c_str());
2613     double zmax=atof(param[10].argument[0].c_str());
2614     int nx=atoi(param[11].argument[0].c_str());
2615     int ny=atoi(param[12].argument[0].c_str());
2616     int nz=atoi(param[13].argument[0].c_str());
2617     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2618     femmai->change_param_structure(b,nx,ny,nz);
2619     }
2620 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
2621 francois 283 if (entite=="FEM_NOEUD")
2622     {
2623     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2624     long idtopo=cid(param[2].argument[0]);
2625     long idmai=cid(param[3].argument[0]);
2626     double x=atof(param[4].argument[0].c_str());
2627     double y=atof(param[5].argument[0].c_str());
2628     double z=atof(param[6].argument[0].c_str());
2629     int num=atoi(param[7].argument[0].c_str());
2630     int numopt=atoi(param[8].argument[0].c_str());
2631     MG_ELEMENT_MAILLAGE* elmai;
2632     if (idmai>-1)
2633     {
2634     elmai=mgmai->get_mg_noeudid(idmai);
2635     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
2636     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
2637     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
2638     }
2639     else elmai=NULL;
2640     FEM_NOEUD* noeud;
2641     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
2642     else
2643     {
2644     MG_ELEMENT_TOPOLOGIQUE* topo;
2645     if (idtopo>-1)
2646     {
2647     topo=mggeo->get_mg_sommetid(idtopo);
2648     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
2649     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
2650     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
2651     }
2652     else topo=NULL;
2653     noeud=new FEM_NOEUD(id,topo,x,y,z);
2654     }
2655     noeud->change_numero(num);
2656     noeud->change_numero_opt(numopt);
2657     femmai->ajouter_fem_noeud(noeud);
2658     }
2659     if (entite=="FEM_NOEUD_DEF")
2660     {
2661     parse.decode(data.c_str(),"@,@,@",param+2);
2662     double x=atof(param[2].argument[0].c_str());
2663     double y=atof(param[3].argument[0].c_str());
2664     double z=atof(param[4].argument[0].c_str());
2665     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2666     noeud->change_dx(x);
2667     noeud->change_dy(y);
2668     noeud->change_dz(z);
2669     femmai->active_deforme();
2670     }
2671 francois 325 if (entite=="FEM_NOEUD_REAC")
2672     {
2673     parse.decode(data.c_str(),"@,@,@",param+2);
2674     double x=atof(param[2].argument[0].c_str());
2675     double y=atof(param[3].argument[0].c_str());
2676     double z=atof(param[4].argument[0].c_str());
2677     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2678     noeud->change_rx(x);
2679     noeud->change_ry(y);
2680     noeud->change_rz(z);
2681 francois 339 femmai->active_reaction();;
2682 francois 325 }
2683 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
2684 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
2685     {
2686     parse.decode(data.c_str(),"@,@,@",param+2);
2687     long idtopo=cid(param[2].argument[0]);
2688     long idmai=cid(param[3].argument[0]);
2689     long idn1=cid(param[4].argument[0]);
2690     FEM_NOEUD* tab[1];
2691     tab[0]=femmai->get_fem_noeudid(idn1);
2692     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2693     if (idtopo>-1)
2694     topo=mggeo->get_mg_sommetid(idtopo);
2695     MG_ELEMENT_MAILLAGE* elmai;
2696     if (idmai>-1)
2697     elmai=mgmai->get_mg_noeudid(idmai);
2698     else elmai=NULL;
2699     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
2700     femmai->ajouter_fem_element0(fem);
2701     }
2702 francois 283 if (entite=="FEM_SEGMENT2")
2703     {
2704     parse.decode(data.c_str(),"@,@,@,@",param+2);
2705 francois 378 long idtopo=cid(param[2].argument[0]);
2706 francois 283 long idmai=cid(param[3].argument[0]);
2707     long idn1=cid(param[4].argument[0]);
2708     long idn2=cid(param[5].argument[0]);
2709     FEM_NOEUD* tab[2];
2710     tab[0]=femmai->get_fem_noeudid(idn1);
2711     tab[1]=femmai->get_fem_noeudid(idn2);
2712 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2713     if (idtopo>-1)
2714     topo=mggeo->get_mg_areteid(idtopo);
2715 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
2716 francois 378 MG_ELEMENT_MAILLAGE* elmai;
2717 francois 283 if (idmai>-1)
2718     elmai=mgmai->get_mg_segmentid(idmai);
2719     else elmai=NULL;
2720 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
2721 francois 309 femmai->ajouter_fem_element1(seg);
2722 francois 283 }
2723 francois 767 if (entite=="FEM_MINI_SEGMENT2")
2724     {
2725     parse.decode(data.c_str(),"@,@",param+2);
2726     long idn1=cid(param[2].argument[0]);
2727     long idn2=cid(param[3].argument[0]);
2728     FEM_NOEUD* tab[2];
2729     tab[0]=femmai->get_fem_noeudid(idn1);
2730     tab[1]=femmai->get_fem_noeudid(idn2);
2731     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());
2732     FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
2733     femmai->ajouter_fem_element1(seg);
2734     }
2735 francois 283 if (entite=="FEM_SEGMENT3")
2736     {
2737     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2738 francois 378 long idtopo=cid(param[2].argument[0]);
2739     long idmai=cid(param[3].argument[0]);
2740 francois 283 long idn1=cid(param[4].argument[0]);
2741     long idn2=cid(param[5].argument[0]);
2742     long idn3=cid(param[6].argument[0]);
2743     FEM_NOEUD* tab[3];
2744     tab[0]=femmai->get_fem_noeudid(idn1);
2745     tab[1]=femmai->get_fem_noeudid(idn2);
2746     tab[2]=femmai->get_fem_noeudid(idn3);
2747     MG_ELEMENT_MAILLAGE* elmai;
2748 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2749     if (idtopo>-1)
2750     topo=mggeo->get_mg_areteid(idtopo);
2751     if (idmai>-1)
2752 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
2753     else elmai=NULL;
2754 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
2755 francois 309 femmai->ajouter_fem_element1(seg);
2756 francois 283 }
2757 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
2758     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
2759 francois 283 if (entite=="FEM_TRIANGLE3")
2760     {
2761     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2762 francois 378 long idtopo=cid(param[2].argument[0]);
2763 francois 283 long idmai=cid(param[3].argument[0]);
2764     long idn1=cid(param[4].argument[0]);
2765     long idn2=cid(param[5].argument[0]);
2766     long idn3=cid(param[6].argument[0]);
2767     FEM_NOEUD* tab[3];
2768     tab[0]=femmai->get_fem_noeudid(idn1);
2769     tab[1]=femmai->get_fem_noeudid(idn2);
2770     tab[2]=femmai->get_fem_noeudid(idn3);
2771     MG_ELEMENT_MAILLAGE* elmai;
2772     if (idmai>-1)
2773     elmai=mgmai->get_mg_triangleid(idmai);
2774     else elmai=NULL;
2775 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2776     if (idtopo>-1)
2777 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2778 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
2779 francois 309 femmai->ajouter_fem_element2(tri);
2780 francois 283 }
2781     if (entite=="FEM_TRIANGLE6")
2782     {
2783     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
2784 francois 378 long idtopo=cid(param[2].argument[0]);
2785 francois 283 long idmai=cid(param[3].argument[0]);
2786     long idn1=cid(param[4].argument[0]);
2787     long idn2=cid(param[5].argument[0]);
2788     long idn3=cid(param[6].argument[0]);
2789     long idn4=cid(param[7].argument[0]);
2790     long idn5=cid(param[8].argument[0]);
2791     long idn6=cid(param[9].argument[0]);
2792     FEM_NOEUD* tab[6];
2793     tab[0]=femmai->get_fem_noeudid(idn1);
2794     tab[1]=femmai->get_fem_noeudid(idn2);
2795     tab[2]=femmai->get_fem_noeudid(idn3);
2796     tab[3]=femmai->get_fem_noeudid(idn4);
2797     tab[4]=femmai->get_fem_noeudid(idn5);
2798     tab[5]=femmai->get_fem_noeudid(idn6);
2799     MG_ELEMENT_MAILLAGE* elmai;
2800     if (idmai>-1)
2801     elmai=mgmai->get_mg_triangleid(idmai);
2802     else elmai=NULL;
2803 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2804     if (idtopo>-1)
2805 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2806 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
2807 francois 309 femmai->ajouter_fem_element2(tri);
2808 francois 283 }
2809 francois 310 if (entite=="FEM_QUADRANGLE4")
2810     {
2811     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2812 francois 378 long idtopo=cid(param[2].argument[0]);
2813     long idmai=cid(param[3].argument[0]);
2814 francois 310 long idn1=cid(param[4].argument[0]);
2815     long idn2=cid(param[5].argument[0]);
2816     long idn3=cid(param[6].argument[0]);
2817     long idn4=cid(param[7].argument[0]);
2818     FEM_NOEUD* tab[4];
2819     tab[0]=femmai->get_fem_noeudid(idn1);
2820     tab[1]=femmai->get_fem_noeudid(idn2);
2821     tab[2]=femmai->get_fem_noeudid(idn3);
2822     tab[3]=femmai->get_fem_noeudid(idn4);
2823     MG_ELEMENT_MAILLAGE* elmai;
2824     if (idmai>-1)
2825     elmai=mgmai->get_mg_quadrangleid(idmai);
2826     else elmai=NULL;
2827 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2828     if (idtopo>-1)
2829 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2830 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
2831 francois 310 femmai->ajouter_fem_element2(quad);
2832     }
2833     if (entite=="FEM_QUADRANGLE8")
2834     {
2835     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2836 francois 378 long idtopo=cid(param[2].argument[0]);
2837     long idmai=cid(param[3].argument[0]);
2838 francois 310 long idn1=cid(param[4].argument[0]);
2839     long idn2=cid(param[5].argument[0]);
2840     long idn3=cid(param[6].argument[0]);
2841     long idn4=cid(param[7].argument[0]);
2842     long idn5=cid(param[8].argument[0]);
2843     long idn6=cid(param[9].argument[0]);
2844     long idn7=cid(param[10].argument[0]);
2845     long idn8=cid(param[11].argument[0]);
2846     FEM_NOEUD* tab[8];
2847     tab[0]=femmai->get_fem_noeudid(idn1);
2848     tab[1]=femmai->get_fem_noeudid(idn2);
2849     tab[2]=femmai->get_fem_noeudid(idn3);
2850     tab[3]=femmai->get_fem_noeudid(idn4);
2851     tab[4]=femmai->get_fem_noeudid(idn5);
2852     tab[5]=femmai->get_fem_noeudid(idn6);
2853     tab[6]=femmai->get_fem_noeudid(idn7);
2854     tab[7]=femmai->get_fem_noeudid(idn8);
2855     MG_ELEMENT_MAILLAGE* elmai;
2856     if (idmai>-1)
2857     elmai=mgmai->get_mg_quadrangleid(idmai);
2858     else elmai=NULL;
2859 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2860     if (idtopo>-1)
2861 francois 383 topo=mggeo->get_mg_faceid(idtopo);
2862 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
2863 francois 310 femmai->ajouter_fem_element2(quad);
2864     }
2865 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
2866    
2867     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
2868 francois 876 if (entite=="PENTAEDRE") lire_PENTA(id,parse,param,data,mgmai,mggeo);
2869 francois 1123 if (entite=="PYRAMIDE") lire_PYRAMIDE(id,parse,param,data,mgmai,mggeo);
2870 francois 283 if (entite=="FEM_TETRA4")
2871     {
2872 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2873 francois 378 long idtopo=cid(param[2].argument[0]);
2874     long idmai=cid(param[3].argument[0]);
2875 francois 283 long idn1=cid(param[4].argument[0]);
2876     long idn2=cid(param[5].argument[0]);
2877     long idn3=cid(param[6].argument[0]);
2878     long idn4=cid(param[7].argument[0]);
2879 francois 339 long etat=atoi(param[8].argument[0].c_str());
2880 francois 283 FEM_NOEUD* tab[4];
2881     tab[0]=femmai->get_fem_noeudid(idn1);
2882     tab[1]=femmai->get_fem_noeudid(idn2);
2883     tab[2]=femmai->get_fem_noeudid(idn3);
2884     tab[3]=femmai->get_fem_noeudid(idn4);
2885     MG_ELEMENT_MAILLAGE* elmai;
2886     if (idmai>-1)
2887     elmai=mgmai->get_mg_tetraid(idmai);
2888     else elmai=NULL;
2889 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2890     if (idtopo>-1)
2891 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
2892 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
2893 francois 410 tet->change_etat(0,etat);
2894 francois 309 femmai->ajouter_fem_element3(tet);
2895 francois 283 }
2896 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
2897 francois 339 {
2898 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
2899 francois 399 unsigned long idele=cid(param[2].argument[0]);
2900     unsigned long idtopo=cid(param[3].argument[0]);
2901     unsigned long idn1=cid(param[4].argument[0]);
2902 francois 380 int etat=atoi(param[5].argument[0].c_str());
2903 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
2904     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
2905     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
2906     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
2907     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
2908 francois 380 FEM_NOEUD* tab[4];
2909     tab[0]=femmai->get_fem_noeudid(idn1);
2910 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
2911     femmai->ajouter_xfem_element0(xele);
2912     xele->change_etat(etat);
2913     }
2914     if (entite=="XFEM_SEGMENT2")
2915     {
2916     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2917     unsigned long idele=cid(param[2].argument[0]);
2918     unsigned long idtopo=cid(param[3].argument[0]);
2919     unsigned long idn1=cid(param[4].argument[0]);
2920     unsigned long idn2=cid(param[5].argument[0]);
2921     int etat=atoi(param[6].argument[0].c_str());
2922     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
2923     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
2924     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
2925     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
2926     FEM_NOEUD* tab[4];
2927     tab[0]=femmai->get_fem_noeudid(idn1);
2928 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
2929 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
2930 francois 380 femmai->ajouter_xfem_element1(xseg);
2931 francois 399 xseg->change_etat(etat);
2932 francois 380 }
2933 francois 410 if (entite=="XFEM_TRIANGLE3")
2934     {
2935     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2936     unsigned long idtet=cid(param[2].argument[0]);
2937     unsigned long idtopo=cid(param[3].argument[0]);
2938     unsigned long idn1=cid(param[4].argument[0]);
2939     unsigned long idn2=cid(param[5].argument[0]);
2940     unsigned long idn3=cid(param[6].argument[0]);
2941     int etat=atoi(param[7].argument[0].c_str());
2942     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
2943     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
2944     FEM_NOEUD* tab[3];
2945     tab[0]=femmai->get_fem_noeudid(idn1);
2946     tab[1]=femmai->get_fem_noeudid(idn2);
2947     tab[2]=femmai->get_fem_noeudid(idn3);
2948     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
2949     femmai->ajouter_xfem_element2(xtri);
2950     xtri->change_etat(etat);
2951     }
2952 francois 380 if (entite=="XFEM_TETRA4")
2953     {
2954 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2955 francois 339 unsigned long idtet=cid(param[2].argument[0]);
2956 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
2957     unsigned long idn1=cid(param[4].argument[0]);
2958     unsigned long idn2=cid(param[5].argument[0]);
2959     unsigned long idn3=cid(param[6].argument[0]);
2960     unsigned long idn4=cid(param[7].argument[0]);
2961     int etat=atoi(param[8].argument[0].c_str());
2962 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
2963 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
2964     FEM_NOEUD* tab[4];
2965 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
2966     tab[1]=femmai->get_fem_noeudid(idn2);
2967     tab[2]=femmai->get_fem_noeudid(idn3);
2968     tab[3]=femmai->get_fem_noeudid(idn4);
2969 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
2970 francois 339 femmai->ajouter_xfem_element3(xtet);
2971 francois 383 xtet->change_etat(etat);
2972 francois 339 }
2973 francois 283 if (entite=="FEM_TETRA10")
2974     {
2975     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2976 francois 378 long idtopo=cid(param[2].argument[0]);
2977     long idmai=cid(param[3].argument[0]);
2978 francois 283 long idn1=cid(param[4].argument[0]);
2979     long idn2=cid(param[5].argument[0]);
2980     long idn3=cid(param[6].argument[0]);
2981     long idn4=cid(param[7].argument[0]);
2982     long idn5=cid(param[8].argument[0]);
2983     long idn6=cid(param[9].argument[0]);
2984     long idn7=cid(param[10].argument[0]);
2985     long idn8=cid(param[11].argument[0]);
2986     long idn9=cid(param[12].argument[0]);
2987     long idn10=cid(param[13].argument[0]);
2988     FEM_NOEUD* tab[10];
2989     tab[0]=femmai->get_fem_noeudid(idn1);
2990     tab[1]=femmai->get_fem_noeudid(idn2);
2991     tab[2]=femmai->get_fem_noeudid(idn3);
2992     tab[3]=femmai->get_fem_noeudid(idn4);
2993     tab[4]=femmai->get_fem_noeudid(idn5);
2994     tab[5]=femmai->get_fem_noeudid(idn6);
2995     tab[6]=femmai->get_fem_noeudid(idn7);
2996     tab[7]=femmai->get_fem_noeudid(idn8);
2997     tab[8]=femmai->get_fem_noeudid(idn9);
2998     tab[9]=femmai->get_fem_noeudid(idn10);
2999     MG_ELEMENT_MAILLAGE* elmai;
3000     if (idmai>-1)
3001     elmai=mgmai->get_mg_tetraid(idmai);
3002     else elmai=NULL;
3003 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3004     if (idtopo>-1)
3005 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3006 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
3007 francois 309 femmai->ajouter_fem_element3(tet);
3008 francois 283 }
3009 francois 310 if (entite=="FEM_HEXA8")
3010     {
3011     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
3012 francois 378 long idtopo=cid(param[2].argument[0]);
3013     long idmai=cid(param[3].argument[0]);
3014 francois 310 long idn1=cid(param[4].argument[0]);
3015     long idn2=cid(param[5].argument[0]);
3016     long idn3=cid(param[6].argument[0]);
3017     long idn4=cid(param[7].argument[0]);
3018     long idn5=cid(param[8].argument[0]);
3019     long idn6=cid(param[9].argument[0]);
3020     long idn7=cid(param[10].argument[0]);
3021     long idn8=cid(param[11].argument[0]);
3022     FEM_NOEUD* tab[8];
3023     tab[0]=femmai->get_fem_noeudid(idn1);
3024     tab[1]=femmai->get_fem_noeudid(idn2);
3025     tab[2]=femmai->get_fem_noeudid(idn3);
3026     tab[3]=femmai->get_fem_noeudid(idn4);
3027     tab[4]=femmai->get_fem_noeudid(idn5);
3028     tab[5]=femmai->get_fem_noeudid(idn6);
3029     tab[6]=femmai->get_fem_noeudid(idn7);
3030     tab[7]=femmai->get_fem_noeudid(idn8);
3031     MG_ELEMENT_MAILLAGE* elmai;
3032     if (idmai>-1)
3033     elmai=mgmai->get_mg_hexaid(idmai);
3034     else elmai=NULL;
3035 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3036     if (idtopo>-1)
3037 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3038 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
3039 francois 310 femmai->ajouter_fem_element3(hex);
3040     }
3041     if (entite=="FEM_HEXA20")
3042     {
3043     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3044 francois 378 long idtopo=cid(param[2].argument[0]);
3045     long idmai=cid(param[3].argument[0]);
3046 francois 310 long idn1=cid(param[4].argument[0]);
3047     long idn2=cid(param[5].argument[0]);
3048     long idn3=cid(param[6].argument[0]);
3049     long idn4=cid(param[7].argument[0]);
3050     long idn5=cid(param[8].argument[0]);
3051     long idn6=cid(param[9].argument[0]);
3052     long idn7=cid(param[10].argument[0]);
3053     long idn8=cid(param[11].argument[0]);
3054     long idn9=cid(param[12].argument[0]);
3055     long idn10=cid(param[13].argument[0]);
3056     long idn11=cid(param[14].argument[0]);
3057     long idn12=cid(param[15].argument[0]);
3058     long idn13=cid(param[16].argument[0]);
3059     long idn14=cid(param[17].argument[0]);
3060     long idn15=cid(param[18].argument[0]);
3061     long idn16=cid(param[19].argument[0]);
3062     long idn17=cid(param[20].argument[0]);
3063     long idn18=cid(param[21].argument[0]);
3064     long idn19=cid(param[22].argument[0]);
3065     long idn20=cid(param[23].argument[0]);
3066     FEM_NOEUD* tab[20];
3067     tab[0]=femmai->get_fem_noeudid(idn1);
3068     tab[1]=femmai->get_fem_noeudid(idn2);
3069     tab[2]=femmai->get_fem_noeudid(idn3);
3070     tab[3]=femmai->get_fem_noeudid(idn4);
3071     tab[4]=femmai->get_fem_noeudid(idn5);
3072     tab[5]=femmai->get_fem_noeudid(idn6);
3073     tab[6]=femmai->get_fem_noeudid(idn7);
3074     tab[7]=femmai->get_fem_noeudid(idn8);
3075     tab[8]=femmai->get_fem_noeudid(idn9);
3076     tab[9]=femmai->get_fem_noeudid(idn10);
3077     tab[10]=femmai->get_fem_noeudid(idn11);
3078     tab[11]=femmai->get_fem_noeudid(idn12);
3079     tab[12]=femmai->get_fem_noeudid(idn13);
3080     tab[13]=femmai->get_fem_noeudid(idn14);
3081     tab[14]=femmai->get_fem_noeudid(idn15);
3082     tab[15]=femmai->get_fem_noeudid(idn16);
3083     tab[16]=femmai->get_fem_noeudid(idn17);
3084     tab[17]=femmai->get_fem_noeudid(idn18);
3085     tab[18]=femmai->get_fem_noeudid(idn19);
3086     tab[19]=femmai->get_fem_noeudid(idn20);
3087     MG_ELEMENT_MAILLAGE* elmai;
3088     if (idmai>-1)
3089     elmai=mgmai->get_mg_hexaid(idmai);
3090     else elmai=NULL;
3091 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3092     if (idtopo>-1)
3093 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
3094 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
3095 francois 310 femmai->ajouter_fem_element3(hex);
3096     }
3097 francois 876 if (entite=="FEM_PENTA6")
3098 francois 283 {
3099 francois 876 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
3100     long idtopo=cid(param[2].argument[0]);
3101     long idmai=cid(param[3].argument[0]);
3102     long idn1=cid(param[4].argument[0]);
3103     long idn2=cid(param[5].argument[0]);
3104     long idn3=cid(param[6].argument[0]);
3105     long idn4=cid(param[7].argument[0]);
3106     long idn5=cid(param[8].argument[0]);
3107     long idn6=cid(param[9].argument[0]);
3108     FEM_NOEUD* tab[6];
3109     tab[0]=femmai->get_fem_noeudid(idn1);
3110     tab[1]=femmai->get_fem_noeudid(idn2);
3111     tab[2]=femmai->get_fem_noeudid(idn3);
3112     tab[3]=femmai->get_fem_noeudid(idn4);
3113     tab[4]=femmai->get_fem_noeudid(idn5);
3114     tab[5]=femmai->get_fem_noeudid(idn6);
3115     MG_ELEMENT_MAILLAGE* elmai;
3116     if (idmai>-1)
3117 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3118 francois 876 else elmai=NULL;
3119     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3120     if (idtopo>-1)
3121     topo=mggeo->get_mg_volumeid(idtopo);
3122     FEM_PENTA6* pen=new FEM_PENTA6(id,topo,elmai,tab);
3123     femmai->ajouter_fem_element3(pen);
3124     }
3125     if (entite=="FEM_PENTA15")
3126     {
3127     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3128     long idtopo=cid(param[2].argument[0]);
3129     long idmai=cid(param[3].argument[0]);
3130     long idn1=cid(param[4].argument[0]);
3131     long idn2=cid(param[5].argument[0]);
3132     long idn3=cid(param[6].argument[0]);
3133     long idn4=cid(param[7].argument[0]);
3134     long idn5=cid(param[8].argument[0]);
3135     long idn6=cid(param[9].argument[0]);
3136     long idn7=cid(param[10].argument[0]);
3137     long idn8=cid(param[11].argument[0]);
3138     long idn9=cid(param[12].argument[0]);
3139     long idn10=cid(param[13].argument[0]);
3140     long idn11=cid(param[14].argument[0]);
3141     long idn12=cid(param[15].argument[0]);
3142     long idn13=cid(param[16].argument[0]);
3143     long idn14=cid(param[17].argument[0]);
3144     long idn15=cid(param[18].argument[0]);
3145     FEM_NOEUD* tab[15];
3146     tab[0]=femmai->get_fem_noeudid(idn1);
3147     tab[1]=femmai->get_fem_noeudid(idn2);
3148     tab[2]=femmai->get_fem_noeudid(idn3);
3149     tab[3]=femmai->get_fem_noeudid(idn4);
3150     tab[4]=femmai->get_fem_noeudid(idn5);
3151     tab[5]=femmai->get_fem_noeudid(idn6);
3152     tab[6]=femmai->get_fem_noeudid(idn7);
3153     tab[7]=femmai->get_fem_noeudid(idn8);
3154     tab[8]=femmai->get_fem_noeudid(idn9);
3155     tab[9]=femmai->get_fem_noeudid(idn10);
3156     tab[10]=femmai->get_fem_noeudid(idn11);
3157     tab[11]=femmai->get_fem_noeudid(idn12);
3158     tab[12]=femmai->get_fem_noeudid(idn13);
3159     tab[13]=femmai->get_fem_noeudid(idn14);
3160     tab[14]=femmai->get_fem_noeudid(idn15);
3161     MG_ELEMENT_MAILLAGE* elmai;
3162     if (idmai>-1)
3163 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
3164 francois 876 else elmai=NULL;
3165     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3166     if (idtopo>-1)
3167     topo=mggeo->get_mg_volumeid(idtopo);
3168     FEM_PENTA15* pen=new FEM_PENTA15(id,topo,elmai,tab);
3169     femmai->ajouter_fem_element3(pen);
3170     }
3171     if (entite=="SOLUTION")
3172     {
3173 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3174 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3175 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
3176     std::string nomsol=param[4].argument[0];
3177     long idmai=cid(param[5].argument[0]);
3178     int nb=atoi(param[6].argument[0].c_str());
3179     std::string chemin=param[7].argument[0];
3180 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
3181 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3182 francois 283 ajouter_mg_solution(sol);
3183     for (int i=0;i<nb;i++)
3184 francois 377 sol->change_legende(i,param[8].argument[i]);
3185 francois 283 }
3186     if (entite=="FEM_SOLUTION")
3187     {
3188 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3189 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
3190 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
3191     std::string nomsol=param[4].argument[0];
3192     long idmai=cid(param[5].argument[0]);
3193     int nb=atoi(param[6].argument[0].c_str());
3194 couturad 919 std::string chemin_sol=param[7].argument[0];
3195 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
3196 couturad 919 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin_sol.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3197 francois 283 ajouter_fem_solution(sol);
3198     for (int i=0;i<nb;i++)
3199 francois 375 sol->change_legende(i,param[8].argument[i]);
3200 francois 283 }
3201     #ifdef WINDOWS_VERSION
3202     if (entite=="CAD4FE_MCSEGMENT")
3203     {
3204     parse.decode(data.c_str(),"@,@,@",param+2);
3205     long idtopo=cid(param[2].argument[0]);
3206     long idn1=cid(param[3].argument[0]);
3207     long idn2=cid(param[4].argument[0]);
3208     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3209     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3210     MG_ELEMENT_TOPOLOGIQUE* topo;
3211     if (idtopo>-1)
3212     {
3213     topo=mggeo->get_mg_areteid(idtopo);
3214     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
3215     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
3216     }
3217     else topo=NULL;
3218     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
3219     mgmai->ajouter_mg_segment(seg);
3220     }
3221     if (entite=="CAD4FE_MCNODE")
3222     {
3223     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3224     long idRefTopo=cid(param[2].argument[0]);
3225     long idMCTopo=cid(param[3].argument[0]);
3226     double x=atof(param[4].argument[0].c_str());
3227     double y=atof(param[5].argument[0].c_str());
3228     double z=atof(param[6].argument[0].c_str());
3229     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
3230     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
3231     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
3232     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
3233     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
3234     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
3235     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
3236     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
3237     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
3238     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
3239    
3240     if (mcTopo->get_dimension()==0)
3241     {
3242     if (updatedMergedRefVertices == false)
3243     {
3244     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3245     itMergedRefVertices != mapMergedRefVertices.end();
3246     itMergedRefVertices++)
3247     {
3248     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3249     MG_SOMMET * refV = NULL;
3250     unsigned long id = itMergedRefVertices->second;
3251     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3252     v->MergeRefVertex(refV);
3253     }
3254    
3255     updatedMergedRefVertices = true;
3256     }
3257     }
3258    
3259     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
3260     mgmai->ajouter_mg_noeud(noeud);
3261     }
3262     if (entite=="CAD4FE_MCTRIANGLE")
3263     {
3264     parse.decode(data.c_str(),"@,@,@,@",param+2);
3265     long idtopo=cid(param[2].argument[0]);
3266     long idn1=cid(param[3].argument[0]);
3267     long idn2=cid(param[4].argument[0]);
3268     long idn3=cid(param[5].argument[0]);
3269     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3270     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3271     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
3272     CAD4FE::MCSegment* mgsegment[3];
3273     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
3274     // la topo. d'un MCTriangle est obligatoirement une MCFace
3275     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
3276     for (int i=0;i<3;i++)
3277     {
3278     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
3279     if (mgsegment[i]==NULL)
3280     {
3281     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
3282     mgmai->ajouter_mg_segment(mgsegment[i]);
3283     }
3284     }
3285     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
3286     mgmai->ajouter_mg_triangle(triangle);
3287     }
3288     #endif
3289     }
3290     }
3291     while (param[0].argument[0]!="FIN");
3292 francois 878
3293 francois 881 for (int i=0;i<volumemince.size();i=i+3)
3294 francois 878 {
3295 francois 881 MG_VOLUME *vol=mggeo->get_mg_volumeid(volumemince[i]);
3296     MG_FACE* face1=mggeo->get_mg_faceid(volumemince[i+1]);
3297     MG_FACE* face2=mggeo->get_mg_faceid(volumemince[i+2]);
3298     vol->ajouter_face_correspondante(face1,face2);
3299 francois 878 }
3300    
3301    
3302 francois 741 LISTE_MG_ARBRE::iterator itarbre;
3303     for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
3304     {
3305     LISTE_MG_ASSEMBLAGE::iterator itass;
3306     for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
3307     ass->ini_donne(arb);
3308     }
3309 francois 1139 TPL_MAP_ENTITE<MG_GEOMETRIE*> lst;
3310 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
3311     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
3312 francois 1139 lst.ajouter(geo);
3313     LISTE_MG_CONSTRUCTION::iterator itcon;
3314     for (MG_GEOMETRIE* geo=get_premier_construction(itcon);geo;geo=get_suivant_construction(itcon))
3315     lst.ajouter(geo);
3316     TPL_MAP_ENTITE<MG_GEOMETRIE*>::ITERATEUR it;
3317     for (MG_GEOMETRIE* geo=lst.get_premier(it);geo;geo=lst.get_suivant(it))
3318 francois 526 {
3319     LISTE_MG_SOMMET::iterator itsom;
3320     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
3321 francois 1180 if (som->est_une_topo_element())
3322 francois 526 {
3323     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
3324     unsigned long idnoeud=somno->get_id_mg_noeud();
3325     MG_NOEUD* noeud;
3326     LISTE_MG_MAILLAGE::iterator itmai;
3327     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3328     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
3329     somno->change_mg_noeud(noeud);
3330     }
3331 francois 685 LISTE_MG_COQUE::iterator itcoq;
3332     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
3333 francois 1180 if (coq->est_une_topo_element())
3334 francois 685 {
3335     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
3336     int nbele=coque->get_nb_liste_id();
3337     MG_MAILLAGE* mgmai=NULL;
3338     for (int i=0;i<nbele;i++)
3339     {
3340     unsigned long eleid=coque->get_liste_id(i);
3341     if (i==0)
3342     {
3343     LISTE_MG_MAILLAGE::iterator itmai;
3344     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3345     {
3346     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
3347     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
3348     }
3349     }
3350     MG_ELEMENT_MAILLAGE* ele=NULL;
3351     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
3352     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
3353     coque->ajouter_element(ele);
3354     }
3355    
3356     }
3357 francois 753 LISTE_MG_POUTRE::iterator itpou;
3358     for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
3359 francois 1180 if (pou->est_une_topo_element())
3360 francois 753 {
3361     MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
3362     int nbele=poutre->get_nb_liste_id();
3363     MG_MAILLAGE* mgmai=NULL;
3364     for (int i=0;i<nbele;i++)
3365     {
3366     unsigned long eleid=poutre->get_liste_id(i);
3367     if (i==0)
3368     {
3369     LISTE_MG_MAILLAGE::iterator itmai;
3370     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3371     {
3372     if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
3373     }
3374     }
3375     MG_ELEMENT_MAILLAGE* ele=NULL;
3376     if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
3377     poutre->ajouter_element(ele);
3378     }
3379    
3380     }
3381 francois 526 }
3382 francois 283 #ifdef WINDOWS_VERSION
3383     if (updatedMergedRefVertices == false)
3384     {
3385     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3386     itMergedRefVertices != mapMergedRefVertices.end();
3387     itMergedRefVertices++)
3388     {
3389     CAD4FE::MCVertex * v = itMergedRefVertices->first;
3390     MG_SOMMET * refV = NULL;
3391     unsigned long id = itMergedRefVertices->second;
3392     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3393     v->MergeRefVertex(refV);
3394     }
3395    
3396     updatedMergedRefVertices = true;
3397     }
3398    
3399     #endif
3400     fclose(in);
3401     return 1;
3402     }
3403    
3404    
3405    
3406