ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 145556 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

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