ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 1092
Committed: Mon Feb 7 21:46:53 2022 UTC (3 years, 3 months ago) by ghazal
File size: 150868 byte(s)
Log Message:
Ajout du tore dans la génération RSA des microstrucutures

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