ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 912
Committed: Wed Jan 10 18:43:09 2018 UTC (7 years, 4 months ago) by couturad
File size: 143656 byte(s)
Log Message:
* Modification de MG_FILE

File Contents

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