ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 908
Committed: Tue Nov 21 15:33:21 2017 UTC (7 years, 5 months ago) by couturad
File size: 144351 byte(s)
Log Message:
Ajout des "#ifdef ALL_OCC" manquant

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