ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 919
Committed: Tue Mar 6 17:51:54 2018 UTC (7 years, 2 months ago) by couturad
File size: 145160 byte(s)
Log Message:
Correction des bugs lors de l'execution en mode RELWITHDEBINFO.
Ajouts de fichiers pour la librairie MICROSTRUCTURE

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