ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 6 months ago) by couturad
File size: 144347 byte(s)
Log Message:
Nouveau opencascade commit 1

File Contents

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