ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 724
Committed: Thu Sep 10 13:04:56 2015 UTC (9 years, 8 months ago) by couturad
File size: 78046 byte(s)
Log Message:
Ajout de "CONE" et "TORE" dans mg_file.cpp

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 283 #include "pars_argument.h"
37     #include "parse.h"
38     #ifdef BREP_STEP
39     #include "step_surface.h"
40     #include "step_courbe.h"
41     #include "step_point.h"
42     #endif
43     #ifdef BREP_SAT
44     #include "acis_surface.h"
45     #include "acis_courbe.h"
46     #include "acis_point.h"
47     #endif
48     #ifdef BREP_SLD
49     #include "sld_point.h"
50     #include "sld_courbe.h"
51     #include "sld_surface.h"
52     #include "sld_fonction.h"
53     #endif
54     #include "lc_point.h"
55 francois 310 #include "fem_segment2.h"
56     #include "fem_segment3.h"
57     #include "fem_triangle3.h"
58     #include "fem_triangle6.h"
59     #include "fem_quadrangle4.h"
60     #include "fem_quadrangle8.h"
61     #include "fem_tetra4.h"
62 francois 380 #include "xfem_segment2.h"
63 francois 410 #include "xfem_triangle3.h"
64 francois 339 #include "xfem_tetra4.h"
65 francois 310 #include "fem_tetra10.h"
66     #include "fem_hexa8.h"
67     #include "fem_hexa20.h"
68 francois 283 //OCC
69     #ifdef BREP_OCC
70     #include "occ_surface.h"
71     #include "occ_point.h"
72     #include "occ_courbe.h"
73     #include "occ_fonction1.h"
74     #include "TopoDS_Shape.hxx"
75     #include "TopoDS.hxx"
76     #endif
77 francois 689 #ifdef CSG_OCC
78     #include "mg_primitive_boite.h"
79 couturad 723 #include "mg_primitive_sphere.h"
80     #include "mg_primitive_cylindre.h"
81 couturad 724 #include "mg_primitive_cone.h"
82     #include "mg_primitive_tore.h"
83 francois 689 #include "mg_primitive_complexe.h"
84     #include "mg_operateur_boolean_union.h"
85 couturad 723 #include "mg_operateur_boolean_difference.h"
86     #include "mg_operateur_boolean_intersection.h"
87 francois 689 #endif
88 francois 283 //---------------------------------------------------------------------------
89     // CAD4FE Headers
90     #ifdef WINDOWS_VERSION
91     #include "CAD4FE_MCEdge.h"
92     #include "CAD4FE_MCFace.h"
93     #include "CAD4FE_MCVertex.h"
94     #include "CAD4FE_PolySurface.h"
95     #include "CAD4FE_PolyCurve.h"
96     #include "CAD4FE_MCNode.h"
97     #include "CAD4FE_MCSegment.h"
98     #include "CAD4FE_MCTriangle.h"
99     #include "CAD4FE_m3d_MCTriangle.h"
100     #endif
101     //---------------------------------------------------------------------------
102    
103    
104     //---------------------------------------------------------------------------
105     #pragma package(smart_init)
106    
107    
108     MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
109     {
110     code_de_lecture=lire(chemin);
111     }
112    
113 francois 551 MG_FILE::MG_FILE():MG_GESTIONNAIRE()
114     {
115     }
116    
117 francois 283 MG_FILE::~MG_FILE()
118     {
119     }
120    
121     int MG_FILE::get_code_de_lecture(void)
122     {
123     return code_de_lecture;
124     }
125    
126     long MG_FILE::cid(std::string str)
127     {
128     const char *p=str.c_str();
129     if (*p=='$') return atol(p+1);
130     return -1;
131     }
132    
133 francois 551
134    
135    
136    
137     void MG_FILE::lire_NOEUD(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
138     {
139     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
140     long idtopo=cid(param[2].argument[0]);
141     double x=atof(param[3].argument[0].c_str());
142     double y=atof(param[4].argument[0].c_str());
143     double z=atof(param[5].argument[0].c_str());
144     int ori=atoi(param[6].argument[0].c_str());
145     MG_ELEMENT_TOPOLOGIQUE* topo;
146     if (idtopo>-1)
147     {
148     topo=mggeo->get_mg_sommetid(idtopo);
149     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
150     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
151     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
152     }
153     else topo=NULL;
154     MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
155     mgmai->ajouter_mg_noeud(noeud);
156     }
157    
158     void MG_FILE::lire_SEGMENT(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
159     {
160     parse.decode(data.c_str(),"@,@,@,@",param+2);
161     long idtopo=cid(param[2].argument[0]);
162     long idn1=cid(param[3].argument[0]);
163     long idn2=cid(param[4].argument[0]);
164     int ori=atoi(param[5].argument[0].c_str());
165     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
166     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
167     MG_ELEMENT_TOPOLOGIQUE* topo;
168     if (idtopo>-1)
169     {
170     topo=mggeo->get_mg_areteid(idtopo);
171     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
172     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
173     }
174     else topo=NULL;
175     MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
176     mgmai->ajouter_mg_segment(seg);
177     }
178    
179    
180     void MG_FILE::lire_TRIANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
181     {
182     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
183     long idtopo=cid(param[2].argument[0]);
184     long idn1=cid(param[3].argument[0]);
185     long idn2=cid(param[4].argument[0]);
186     long idn3=cid(param[5].argument[0]);
187     int ori=atoi(param[6].argument[0].c_str());
188     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
189     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
190     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
191     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
192     if (idtopo>-1)
193     {
194     topo=mggeo->get_mg_faceid(idtopo);
195     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
196     }
197     mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
198     }
199    
200     void MG_FILE::lire_QUADRANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
201     {
202     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
203     long idtopo=cid(param[2].argument[0]);
204     long idn1=cid(param[3].argument[0]);
205     long idn2=cid(param[4].argument[0]);
206     long idn3=cid(param[5].argument[0]);
207     long idn4=cid(param[6].argument[0]);
208     int ori=atoi(param[7].argument[0].c_str());
209     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
210     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
211     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
212     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
213     MG_ELEMENT_TOPOLOGIQUE* topo;
214     if (idtopo>-1)
215     {
216     topo=mggeo->get_mg_faceid(idtopo);
217     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
218     }
219     else topo=NULL;
220     mgmai->ajouter_mg_quadrangle(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
221     }
222    
223    
224     void MG_FILE::lire_TETRA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
225     {
226     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
227     long idtopo=cid(param[2].argument[0]);
228     long idn1=cid(param[3].argument[0]);
229     long idn2=cid(param[4].argument[0]);
230     long idn3=cid(param[5].argument[0]);
231     long idn4=cid(param[6].argument[0]);
232     int ori=atoi(param[7].argument[0].c_str());
233     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
234     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
235     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
236     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
237     MG_ELEMENT_TOPOLOGIQUE* topo;
238     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
239     else topo=NULL;
240     if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
241     }
242    
243     void MG_FILE::lire_HEXA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
244     {
245     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
246     long idtopo=cid(param[2].argument[0]);
247     long idn1=cid(param[3].argument[0]);
248     long idn2=cid(param[4].argument[0]);
249     long idn3=cid(param[5].argument[0]);
250     long idn4=cid(param[6].argument[0]);
251     long idn5=cid(param[7].argument[0]);
252     long idn6=cid(param[8].argument[0]);
253     long idn7=cid(param[9].argument[0]);
254     long idn8=cid(param[10].argument[0]);
255     int ori=atoi(param[11].argument[0].c_str());
256     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
257     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
258     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
259     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
260     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
261     MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
262     MG_NOEUD* noeud7=mgmai->get_mg_noeudid(idn7);
263     MG_NOEUD* noeud8=mgmai->get_mg_noeudid(idn8);
264     MG_ELEMENT_TOPOLOGIQUE* topo;
265     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
266     else topo=NULL;
267     mgmai->ajouter_mg_hexa(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,noeud7,noeud8,ori,id);
268     }
269    
270    
271    
272    
273    
274    
275    
276    
277 francois 283 int MG_FILE::lire(char* chemin)
278     {
279     FILE *in;
280 francois 706 //char ligne[3000];
281 francois 283 in=fopen(chemin,"rt");
282     if (in==NULL) return 0;
283     PARS_ARGUMENT param[100];
284     PARSE parse;
285    
286     MG_GEOMETRIE *mggeo;
287 francois 689 MG_ARBRE* arbre;
288 francois 283 #ifdef WINDOWS_VERSION
289     std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
290     #endif
291     bool updatedMergedRefVertices = false;
292    
293     do
294     {
295     int ierr;
296     std::string ligne=parse.lire(in,';',&ierr);
297     parse.decode(ligne.c_str(),"@;",param);
298     const char *chaine=param[0].argument[0].c_str();
299     if ((chaine[0]=='/') && (chaine[1]=='/'))
300     {
301     if ((chaine[2]=='*')&&(chaine[3]=='i'))
302     {
303     unsigned long id;
304     sscanf(chaine,"//*i:%lu;",&id);
305     entiteidmax=id;
306     }
307     }
308     else if (param[0].argument[0]!="FIN")
309     {
310     parse.decode(ligne.c_str(),"%@=@(@);",param);
311     std::string entite=param[1].argument[0];
312     long id=atol(param[0].argument[0].c_str());
313     std::string data=param[2].argument[0] ;
314     MG_MAILLAGE *mgmai;
315     FEM_MAILLAGE *femmai;
316     if (entite=="GEOMETRIE")
317     {
318     parse.decode(data.c_str(),"@,@,@,@",param+2);
319     double unite=atof(param[2].argument[0].c_str());
320     std::string typegeo=param[3].argument[0];
321     std::string chemin=param[4].argument[0];
322 francois 576 if (typegeo=="VIRTUEL")
323     {
324     mggeo=new MG_GEOMETRIE((char*)typegeo.c_str(),id,(char*)chemin.c_str(),unite);
325     ajouter_mg_geometrie(mggeo);
326     }
327 francois 283 #ifdef BREP_STEP
328     if (typegeo=="STEP")
329     {
330     fichstep.change_nom((char *)chemin.c_str());
331     int code=fichstep.lire();
332     if (code==0) return 0;
333     mggeo=new MG_GEOMETRIE((char*)"STEP",id,fichstep.get_nom(),unite);
334     ajouter_mg_geometrie(mggeo);
335     }
336     #endif
337     #ifdef BREP_SAT
338     if (typegeo=="ACIS")
339     {
340     fichsat.change_nom((char *)chemin.c_str());
341     int code=fichsat.lire();
342     if (code==0) return 0;
343     mggeo=new MG_GEOMETRIE((char*)"ACIS",id,fichsat.get_nom(),unite);
344     ajouter_mg_geometrie(mggeo);
345     }
346     #endif
347     #ifdef BREP_SLD
348     if (typegeo=="SLD")
349     {
350     fonction->Connection();
351     fonction->OuvrirFichier((char *)chemin.c_str() );
352     mggeo=new MG_GEOMETRIE((char*)"SLD",id,chemin.c_str(),unite);
353     ajouter_mg_geometrie(mggeo);
354     ouvertsld=1;
355     }
356     #endif
357    
358     #ifdef BREP_OCC
359     if (typegeo=="OCC")
360     {
361     fonction1->OuvrirFichier((char *)chemin.c_str() );
362     mggeo=new MG_GEOMETRIE((char*)"OCC",id,chemin.c_str(),unite);
363     ajouter_mg_geometrie(mggeo);
364     }
365     #endif
366    
367     std::string nommat="";
368     if (param[5].argument[0]!="")
369     nommat=param[5].argument[0];
370     mggeo->change_gest_materiau((char*)nommat.c_str());
371     }
372 francois 689 #ifdef CSG_OCC
373     if (entite=="ARBRE")
374     {
375     parse.decode(data.c_str(),"@",param+2);
376     std::string nom=param[2].argument[0];
377     arbre=new MG_ARBRE(id,nom.c_str());
378     ajouter_mg_arbre(arbre);
379     }
380     if (entite=="BOITE")
381     {
382     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
383     double x1=atof((char*)param[2].argument[0].c_str());
384     double y1=atof((char*)param[3].argument[0].c_str());
385     double z1=atof((char*)param[4].argument[0].c_str());
386     double x2=atof((char*)param[5].argument[0].c_str());
387     double y2=atof((char*)param[6].argument[0].c_str());
388     double z2=atof((char*)param[7].argument[0].c_str());
389     MG_PRIMITIVE_BOITE *b=new MG_PRIMITIVE_BOITE(id,x1,y1,z1,x2,y2,z2);
390     b->construit();
391     arbre->ajouter_mg_primitive(b);
392     }
393 couturad 723 if (entite=="SPHERE")
394 francois 689 {
395 couturad 723 parse.decode(data.c_str(),"@,@,@,@",param+2);
396     double centre_x=atof((char*)param[2].argument[0].c_str());
397     double centre_y=atof((char*)param[3].argument[0].c_str());
398     double centre_z=atof((char*)param[4].argument[0].c_str());
399     double rayon=atof((char*)param[5].argument[0].c_str());
400     MG_PRIMITIVE_SPHERE *b=new MG_PRIMITIVE_SPHERE(id,centre_x,centre_y,centre_z,rayon);
401     b->construit();
402     arbre->ajouter_mg_primitive(b);
403     }
404     if (entite=="CYLINDRE")
405     {
406     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
407     double extremite_x=atof((char*)param[2].argument[0].c_str());
408     double extremite_y=atof((char*)param[3].argument[0].c_str());
409     double extremite_z=atof((char*)param[4].argument[0].c_str());
410     double longitude=atof((char*)param[5].argument[0].c_str());
411     double latitude=atof((char*)param[6].argument[0].c_str());
412     double rayon=atof((char*)param[7].argument[0].c_str());
413     double longueur=atof((char*)param[8].argument[0].c_str());
414     MG_PRIMITIVE_CYLINDRE *b=new MG_PRIMITIVE_CYLINDRE(id,extremite_x,extremite_y,extremite_z,longitude,latitude,rayon,longueur);
415     b->construit();
416     arbre->ajouter_mg_primitive(b);
417     }
418 couturad 724 if (entite=="TORE")
419     {
420     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
421     double centre_x=atof((char*)param[2].argument[0].c_str());
422     double centre_y=atof((char*)param[3].argument[0].c_str());
423     double centre_z=atof((char*)param[4].argument[0].c_str());
424     double longitude=atof((char*)param[5].argument[0].c_str());
425     double latitude=atof((char*)param[6].argument[0].c_str());
426     double rayon_cercle=atof((char*)param[7].argument[0].c_str());
427     double rayon_tore=atof((char*)param[8].argument[0].c_str());
428     MG_PRIMITIVE_TORE *b=new MG_PRIMITIVE_TORE(id,centre_x,centre_y,centre_z,longitude,latitude,rayon_cercle,rayon_tore);
429     b->construit();
430     arbre->ajouter_mg_primitive(b);
431     }
432     if (entite=="CONE")
433     {
434     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
435     double base_x=atof((char*)param[2].argument[0].c_str());
436     double base_y=atof((char*)param[3].argument[0].c_str());
437     double base_z=atof((char*)param[4].argument[0].c_str());
438     double longitude=atof((char*)param[5].argument[0].c_str());
439     double latitude=atof((char*)param[6].argument[0].c_str());
440     double rayon=atof((char*)param[7].argument[0].c_str());
441     double hauteur=atof((char*)param[8].argument[0].c_str());
442     MG_PRIMITIVE_CONE *b=new MG_PRIMITIVE_CONE(id,base_x,base_y,base_z,longitude,latitude,rayon,hauteur);
443     b->construit();
444     arbre->ajouter_mg_primitive(b);
445     }
446 couturad 723 if (entite=="UNION")
447     {
448 francois 689 parse.decode(data.c_str(),"@,@,@",param+2);
449     int sem=atoi((char*)param[2].argument[0].c_str());
450     long id1=cid((char*)param[3].argument[0].c_str());
451     long id2=cid((char*)param[4].argument[0].c_str());
452     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
453     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
454     MG_OPERATEUR_BOOLEAN_UNION *op=new MG_OPERATEUR_BOOLEAN_UNION(id,sem,p1,p2);
455     arbre->ajouter_mg_operateur_boolean(op);
456     }
457 couturad 723 if (entite=="DIFFERENCE")
458     {
459     parse.decode(data.c_str(),"@,@,@",param+2);
460     int sem=atoi((char*)param[2].argument[0].c_str());
461     long id1=cid((char*)param[3].argument[0].c_str());
462     long id2=cid((char*)param[4].argument[0].c_str());
463     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
464     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
465     MG_OPERATEUR_BOOLEAN_DIFFERENCE *op=new MG_OPERATEUR_BOOLEAN_DIFFERENCE(id,sem,p1,p2);
466     arbre->ajouter_mg_operateur_boolean(op);
467     }
468     if (entite=="INTERSECTION")
469     {
470     parse.decode(data.c_str(),"@,@,@",param+2);
471     int sem=atoi((char*)param[2].argument[0].c_str());
472     long id1=cid((char*)param[3].argument[0].c_str());
473     long id2=cid((char*)param[4].argument[0].c_str());
474     MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
475     MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
476     MG_OPERATEUR_BOOLEAN_INTERSECTION *op=new MG_OPERATEUR_BOOLEAN_INTERSECTION(id,sem,p1,p2);
477     arbre->ajouter_mg_operateur_boolean(op);
478     }
479 francois 689 if (entite=="PRIM_COMPLEXE")
480     {
481     parse.decode(data.c_str(),"@",param+2);
482     long id1=cid((char*)param[2].argument[0].c_str());
483     MG_OPERATEUR_BOOLEAN *op=arbre->get_mg_operateur_booleanid(id1);
484     MG_PRIMITIVE* p=op->construit(id);
485     arbre->ajouter_mg_primitive(p);
486     }
487    
488    
489    
490    
491     #endif
492 francois 283 if (entite=="GEOMETRIE_EPS")
493     {
494     parse.decode(data.c_str(),"@",param+2);
495     double val=atof((char*)param[2].argument[0].c_str());
496     mggeo->change_valeur_precision(val);
497     }
498     if (entite=="GROUPE_TOPOLOGIQUE")
499     {
500     parse.decode(data.c_str(),"@,(&)",param+2);
501     MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
502     mggeo->ajouter_mg_groupe_topologique(mggt);
503     int nb=atoi(param[2].argument[0].c_str());
504     for (int i=0;i<nb;i++)
505     {
506     unsigned long id2=cid(param[3].argument[i].c_str());
507     MG_ELEMENT_TOPOLOGIQUE* ele;
508     ele=mggeo->get_mg_sommetid(id2);
509     if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
510     if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
511     if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
512     if (ele!=NULL) mggt->ajouter(ele);
513     }
514    
515     }
516 francois 711 if (entite=="GEOM_FONCTION")
517     {
518     parse.decode(data.c_str(),"@,@,(&)",param+2);
519     int dim=atoi((char*)param[2].argument[0].c_str());
520     MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(id,dim);
521     mggeo->ajouter_mg_geom_fonction(gf);
522     int nb=atoi(param[3].argument[0].c_str());
523     for (int i=0;i<nb;i++)
524     {
525     parse.decode(param[4].argument[i].c_str(),"(&)",param+5);
526     double *coo=new double[dim];
527     for (int j=0;j<dim;j++)
528     coo[j]=atof(param[5].argument[j].c_str());
529     gf->ajouter_point(coo);
530     delete [] coo;
531     }
532    
533     }
534    
535 francois 283 if (entite=="VOLUME")
536     {
537     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
538     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
539     mggeo->ajouter_mg_volume(mgvol);
540     int nummat=atoi((char*)param[4].argument[0].c_str());
541     mgvol->change_num_materiau(nummat);
542     int nb=atoi(param[5].argument[0].c_str());
543     if (nb!=0)
544     {
545     for (int i=0;i<nb;i++)
546     {
547     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
548     char nom[3];
549     double val;
550     strcpy(nom,param[7].argument[0].c_str());
551     val=atof(param[8].argument[0].c_str());
552     mgvol->ajouter_ccf(nom,val);
553     }
554     }
555     }
556     if (entite=="COQUE")
557     {
558     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
559     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
560     mggeo->ajouter_mg_coque(mgcoq);
561     int nummat=atoi((char*)param[4].argument[0].c_str());
562     mgcoq->change_num_materiau(nummat);
563     int nb=atoi(param[5].argument[0].c_str());
564     if (nb!=0)
565     {
566     for (int i=0;i<nb;i++)
567     {
568     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
569     char nom[3];
570     double val;
571     strcpy(nom,param[7].argument[0].c_str());
572     val=atof(param[8].argument[0].c_str());
573     mgcoq->ajouter_ccf(nom,val);
574     }
575     }
576     }
577     if (entite=="POUTRE")
578     {
579     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
580     MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
581     mggeo->ajouter_mg_poutre(mgpoutre);
582     int nummat=atoi((char*)param[4].argument[0].c_str());
583     mgpoutre->change_num_materiau(nummat);
584     int nb=atoi(param[5].argument[0].c_str());
585     if (nb!=0)
586     {
587     for (int i=0;i<nb;i++)
588     {
589     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
590     char nom[3];
591     double val;
592     strcpy(nom,param[7].argument[0].c_str());
593     val=atof(param[8].argument[0].c_str());
594     mgpoutre->ajouter_ccf(nom,val);
595     }
596     }
597     }
598     if (entite=="COQUILLE")
599     {
600     parse.decode(data.c_str(),"@,@",param+2);
601     long ident=cid(param[2].argument[0]);
602     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
603     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
604     if (mgvol!=NULL)
605     {
606     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
607     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
608     }
609     if (mgcoq!=NULL)
610     {
611     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
612     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
613     }
614    
615     }
616     #ifdef BREP_STEP
617     if (entite=="SURFACE_STEP")
618     {
619     parse.decode(data.c_str(),"@",param+2);
620     long idstepsuf=atol(param[2].argument[0].c_str());
621     ST_SURFACE *stsurf=fichstep.lst_surface.getid(idstepsuf);
622     STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
623     mggeo->ajouter_mg_surface(stepsurf);
624     }
625     if (entite=="COURBE_STEP")
626     {
627     parse.decode(data.c_str(),"@",param+2);
628     long idstepcur=atol(param[2].argument[0].c_str());
629     ST_COURBE *stcur=fichstep.lst_courbe.getid(idstepcur);
630     STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
631     mggeo->ajouter_mg_courbe(stepcur);
632     }
633    
634     if (entite=="POINT_STEP")
635     {
636     parse.decode(data.c_str(),"@",param+2);
637     long idsteppt=atol(param[2].argument[0].c_str());
638     ST_POINT *stpt=fichstep.lst_point.getid(idsteppt);
639     STEP_POINT* steppt=new STEP_POINT(id,stpt);
640     mggeo->ajouter_mg_point(steppt);
641     }
642    
643     #endif
644     #ifdef BREP_SAT
645     if (entite=="SURFACE_SAT")
646     {
647     parse.decode(data.c_str(),"@",param+2);
648     long idsatsuf=atol(param[2].argument[0].c_str());
649     SAT_SURFACE *satsurf=fichsat.lst_surface.getid(idsatsuf);
650     ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
651     mggeo->ajouter_mg_surface(acissurf);
652     }
653     if (entite=="COURBE_SAT")
654     {
655     parse.decode(data.c_str(),"@",param+2);
656     long idsatcur=atol(param[2].argument[0].c_str());
657     SAT_COURBE *satcur=fichsat.lst_courbe.getid(idsatcur);
658     ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
659     mggeo->ajouter_mg_courbe(aciscur);
660     }
661    
662     if (entite=="POINT_SAT")
663     {
664     parse.decode(data.c_str(),"@",param+2);
665     long idsatpt=atol(param[2].argument[0].c_str());
666     SAT_POINT *satpt=fichsat.lst_point.getid(idsatpt);
667     ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
668     mggeo->ajouter_mg_point(acispt);
669     }
670    
671     #endif
672     #ifdef BREP_SLD
673     if (entite=="SURFACE_SLD")
674     {
675     parse.decode(data.c_str(),"@",param+2);
676     CComPtr<IFace2> swface;
677     char* idsld=(char*)param[2].argument[0].c_str();
678     SLD_SURFACE* sldsurf=new SLD_SURFACE(id,idsld,*fonction);
679     mggeo->ajouter_mg_surface(sldsurf);
680     }
681     if (entite=="COURBE_SLD")
682     {
683     parse.decode(data.c_str(),"@",param+2);
684     CComPtr<IEdge> swedge;
685     char* idsld=(char*)param[2].argument[0].c_str();
686     SLD_COURBE* sldcrb=new SLD_COURBE(id,idsld,*fonction);
687     mggeo->ajouter_mg_courbe(sldcrb);
688     }
689    
690     if (entite=="POINT_SLD")
691     {
692     parse.decode(data.c_str(),"@",param+2);
693     CComPtr<IVertex> swvertex;
694     char* idsld=(char*)param[2].argument[0].c_str();
695     SLD_POINT* sldpoint=new SLD_POINT(id,idsld,*fonction);
696     mggeo->ajouter_mg_point(sldpoint);
697     }
698    
699     #endif
700    
701     #ifdef BREP_OCC
702    
703     if (entite=="SURFACE_OCC")
704     {
705     parse.decode(data.c_str(),"@",param+2);
706     long idocc=atol(param[2].argument[0].c_str());
707     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
708     TopoDS_Face occface=TopoDS::Face(occshape);
709     OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface, *fonction1);
710     mggeo->ajouter_mg_surface(occsurf);
711     }
712     if (entite=="COURBE_OCC")
713     {
714     parse.decode(data.c_str(),"@",param+2);
715     long idocc=atol(param[2].argument[0].c_str());
716     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
717     TopoDS_Edge occedge=TopoDS::Edge(occshape);
718     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, *fonction1);
719     mggeo->ajouter_mg_courbe(occcrb);
720     }
721     if (entite=="POINT_OCC")
722     {
723     parse.decode(data.c_str(),"@",param+2);
724     long idocc=atol(param[2].argument[0].c_str());
725     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
726     TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
727     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, *fonction1);
728     mggeo->ajouter_mg_point(occpoint);
729     }
730     #endif
731     #ifdef WINDOWS_VERSION
732     if (entite=="CAD4FE_POLYCURVE")
733     {
734     CAD4FE::PolyCurve * polycurve = NULL;
735     parse.decode(data.c_str(),"@,(&)",param+2);
736     int nb = atoi(param[2].argument[0].c_str());
737    
738     if (nb == 0)
739     {
740     printf("PolyCurve %d is formed with reference vertex : ", id);
741     parse.decode(param[3].argument[0].c_str(),"@",param+4);
742     int idRefVertex;
743     idRefVertex=cid(param[4].argument[0].c_str());
744     printf("%d ;\n ", idRefVertex);
745     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
746     polycurve = new CAD4FE::PolyCurve(refVertex);
747     }
748     else
749     {
750     printf("PolyCurve %d is formed with reference edges : ", id);
751     polycurve = new CAD4FE::PolyCurve;
752     for (int i=0;i<nb;i++)
753     {
754     parse.decode(param[3].argument[i].c_str(),"@",param+4);
755     int idRefEdge;
756     idRefEdge=cid(param[4].argument[0].c_str());
757     printf("%d ; ", idRefEdge);
758     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
759     CAD4FE::PolyCurve tmpPC(refEdge);
760     polycurve->Merge(tmpPC);
761     }
762     printf("\n");
763     }
764    
765     polycurve->change_id(id);
766     mggeo->ajouter_mg_courbe(polycurve);
767     }
768    
769    
770     if (entite=="CAD4FE_POLYSURFACE")
771     {
772     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
773     polysurface->change_id(id);
774     mggeo->ajouter_mg_surface(polysurface);
775    
776     parse.decode(data.c_str(),"@,(&)",param+2);
777    
778     int nb = atoi(param[2].argument[0].c_str());
779     printf("PolySurface %d is formed with reference faces : ", id);
780     for (int i=0;i<nb;i++)
781     {
782     parse.decode(param[3].argument[i].c_str(),"@",param+4);
783     int idRefFace;
784     idRefFace=cid(param[4].argument[0].c_str());
785     printf("%d ; ", idRefFace);
786    
787     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
788     CAD4FE::PolySurface tmpSF(refFace);
789     polysurface->Merge(tmpSF);
790     }
791    
792     printf("\n");
793     }
794     if (entite=="CAD4FE_MCEDGE")
795     {
796     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
797    
798     std::string idOriginal = param[2].argument[0];
799     long idPolyCurve=cid(param[3].argument[0]);
800     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
801    
802     // sense is not used because a MCEdge always has
803     // a sense = 1 !
804     // (because polycurve domain is equal to mcEdge domain)
805     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
806     mcEdge->change_id(id);
807     mggeo->ajouter_mg_arete(mcEdge);
808    
809     int nb=atoi(param[7].argument[0].c_str());
810     if (nb!=0)
811     {
812     for (int i=0;i<nb;i++)
813     {
814     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
815     char nom[3];
816     double val;
817     strcpy(nom,param[9].argument[0].c_str());
818     val=atof(param[10].argument[0].c_str());
819     mcEdge->ajouter_ccf(nom,val);
820     }
821     }
822     }
823     if (entite=="CAD4FE_MCFACE")
824     {
825     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
826    
827     std::string idOriginal = param[2].argument[0];
828     long idPolySurface=cid(param[3].argument[0]);
829     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
830    
831     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
832     mcFace->change_id(id);
833     mggeo->ajouter_mg_face(mcFace);
834    
835     int nb=atoi(param[6].argument[0].c_str());
836     if (nb!=0)
837     {
838     for (int i=0;i<nb;i++)
839     {
840     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
841     char nom[3];
842     double val;
843     strcpy(nom,param[8].argument[0].c_str());
844     val=atof(param[9].argument[0].c_str());
845     mcFace->ajouter_ccf(nom,val);
846     }
847     }
848     }
849     if (entite=="CAD4FE_MCVERTEX")
850     {
851     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
852     std::string idOriginal = param[2].argument[0];
853     long idsom=cid(param[3].argument[0]);
854     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
855     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
856     mcVertex->change_id(id);
857     mggeo->ajouter_mg_sommet(mcVertex);
858     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
859     if (nb_ref_vertex!=0)
860     {
861     for (int i=0;i<nb_ref_vertex;i++)
862     {
863     unsigned long idRefVertex=cid(param[5].argument[i]);
864     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
865     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
866     }
867     }
868     int nb_ccf=atoi(param[4+2].argument[0].c_str());
869     if (nb_ccf!=0)
870     {
871     for (int i=0;i<nb_ccf;i++)
872     {
873     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
874     char nom_ccf[3];
875     double val_ccf;
876     strcpy(nom_ccf,param[6+2].argument[0].c_str());
877     val_ccf=atof(param[7+2].argument[0].c_str());
878     mgsom->ajouter_ccf(nom_ccf,val_ccf);
879     }
880     }
881     }
882     #endif
883     if (entite=="FACE")
884     {
885     parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
886     long idsurf=cid(param[3].argument[0]);
887     int sens=atoi(param[5].argument[0].c_str());
888     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
889     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
890     mggeo->ajouter_mg_face(mgface);
891     int nb=atoi(param[6].argument[0].c_str());
892     if (nb!=0)
893     {
894     for (int i=0;i<nb;i++)
895     {
896     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
897     char nom[3];
898     double val;
899     strcpy(nom,param[8].argument[0].c_str());
900     val=atof(param[9].argument[0].c_str());
901     mgface->ajouter_ccf(nom,val);
902     }
903     }
904     }
905     if (entite=="COFACE")
906     {
907     parse.decode(data.c_str(),"@,@,@",param+2);
908     long idface=cid(param[2].argument[0]);
909     long idcoq=cid(param[3].argument[0]);
910     int sens=atoi(param[4].argument[0].c_str());
911     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
912     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
913     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
914     mgcoq->ajouter_mg_coface(mgcoface);
915     }
916     if (entite=="BOUCLE")
917     {
918     parse.decode(data.c_str(),"@,(@)",param+2);
919     long ident=cid(param[2].argument[0]);
920     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
921     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
922     if (mgface!=NULL)
923     {
924     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
925     mggeo->ajouter_mg_boucle(mgbou,mgface);
926     }
927     if (mgpoutre!=NULL)
928     {
929     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
930     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
931     }
932     }
933     if (entite=="POINT")
934     {
935     parse.decode(data.c_str(),"@,@,@",param+2);
936     double xyz[3];
937     xyz[0]=atof(param[2].argument[0].c_str());
938     xyz[1]=atof(param[3].argument[0].c_str());
939     xyz[2]=atof(param[4].argument[0].c_str());
940     LC_POINT* point=new LC_POINT(id,xyz);
941     mggeo->ajouter_mg_point(point);
942     }
943     if (entite=="SOMMET")
944     {
945     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
946     long idpoint=cid(param[3].argument[0]);
947     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
948     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
949     mggeo->ajouter_mg_sommet(mgsom);
950     int nb=atoi(param[4].argument[0].c_str());
951     if (nb!=0)
952     {
953     for (int i=0;i<nb;i++)
954     {
955     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
956     char nom[3];
957     double val;
958     strcpy(nom,param[6].argument[0].c_str());
959     val=atof(param[7].argument[0].c_str());
960     mgsom->ajouter_ccf(nom,val);
961     }
962     }
963     }
964 francois 576 if (entite=="ARETE_ELEMENT")
965     {
966     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
967     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
968     mggeo->ajouter_mg_arete(are);
969     int nb=atoi(param[4].argument[0].c_str());
970     if (nb!=0)
971     {
972     for (int i=0;i<nb;i++)
973     {
974     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
975     char nom[3];
976     double val;
977     strcpy(nom,param[6].argument[0].c_str());
978     val=atof(param[7].argument[0].c_str());
979     are->ajouter_ccf(nom,val);
980     }
981     }
982     }
983     if (entite=="FACE_ELEMENT")
984     {
985     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
986     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
987     mggeo->ajouter_mg_face(face);
988     int nb=atoi(param[4].argument[0].c_str());
989     if (nb!=0)
990     {
991     for (int i=0;i<nb;i++)
992     {
993     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
994     char nom[3];
995     double val;
996     strcpy(nom,param[6].argument[0].c_str());
997     val=atof(param[7].argument[0].c_str());
998     face->ajouter_ccf(nom,val);
999     }
1000     }
1001     }
1002 francois 685 if (entite=="COQUE_ELEMENT")
1003     {
1004     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1005     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
1006     mggeo->ajouter_mg_coque(coq);
1007     int nbele=atoi(param[2].argument[0].c_str());
1008     for (int i=0;i<nbele;i++)
1009     {
1010     unsigned long idele=cid(param[3].argument[i].c_str());
1011     coq->ajouter_element(idele);
1012     }
1013     int nb=atoi(param[4].argument[0].c_str());
1014     if (nb!=0)
1015     {
1016     for (int i=0;i<nb;i++)
1017     {
1018     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1019     char nom[3];
1020     double val;
1021     strcpy(nom,param[6].argument[0].c_str());
1022     val=atof(param[7].argument[0].c_str());
1023     coq->ajouter_ccf(nom,val);
1024     }
1025     }
1026     }
1027 francois 576 if (entite=="VOLUME_ELEMENT")
1028     {
1029     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1030     MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
1031     mggeo->ajouter_mg_volume(vol);
1032     int nb=atoi(param[4].argument[0].c_str());
1033     if (nb!=0)
1034     {
1035     for (int i=0;i<nb;i++)
1036     {
1037     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1038     char nom[3];
1039     double val;
1040     strcpy(nom,param[6].argument[0].c_str());
1041     val=atof(param[7].argument[0].c_str());
1042     vol->ajouter_ccf(nom,val);
1043     }
1044     }
1045     }
1046 francois 526 if (entite=="SOMMET_NOEUD")
1047     {
1048     parse.decode(data.c_str(),"@,@,(&)",param+2);
1049     long idnoeud=cid(param[2].argument[0]);
1050     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
1051     mggeo->ajouter_mg_sommet(mgsom);
1052     int nb=atoi(param[3].argument[0].c_str());
1053     if (nb!=0)
1054     {
1055     for (int i=0;i<nb;i++)
1056     {
1057     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
1058     char nom[3];
1059     double val;
1060     strcpy(nom,param[5].argument[0].c_str());
1061     val=atof(param[6].argument[0].c_str());
1062     mgsom->ajouter_ccf(nom,val);
1063     }
1064     }
1065     }
1066 francois 283 if (entite=="ARETE")
1067     {
1068     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1069     long idcur=cid(param[3].argument[0]);
1070     int sens=atoi(param[6].argument[0].c_str());
1071     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
1072     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
1073     mggeo->ajouter_mg_arete(mgarete);
1074     int nb=atoi(param[7].argument[0].c_str());
1075     if (nb!=0)
1076     {
1077     for (int i=0;i<nb;i++)
1078     {
1079     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
1080     char nom[3];
1081     double val;
1082     strcpy(nom,param[9].argument[0].c_str());
1083     val=atof(param[10].argument[0].c_str());
1084     mgarete->ajouter_ccf(nom,val);
1085     }
1086     }
1087     }
1088     if (entite=="COSOMMET")
1089     {
1090     parse.decode(data.c_str(),"@,@,@",param+2);
1091     long idsom=cid(param[2].argument[0]);
1092     long idarete=cid(param[3].argument[0]);
1093     int num=atoi(param[4].argument[0].c_str());
1094     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
1095     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1096     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
1097     if (num==1) mgarete->changer_cosommet1(mgcosom);
1098     if (num==2) mgarete->changer_cosommet2(mgcosom);
1099     }
1100     if (entite=="COARETE")
1101     {
1102     parse.decode(data.c_str(),"@,@,@",param+2);
1103     long idarete=cid(param[2].argument[0]);
1104     long idboucle=cid(param[3].argument[0]);
1105     int sens=atoi(param[4].argument[0].c_str());
1106     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1107     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
1108     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
1109     mgboucle->ajouter_mg_coarete(mgcoarete);
1110     }
1111     if (entite=="VISU_COURBE")
1112     {
1113     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1114     double xyz1[3];
1115     double xyz2[3];
1116     xyz1[0]=atof(param[2].argument[0].c_str());
1117     xyz1[1]=atof(param[3].argument[0].c_str());
1118     xyz1[2]=atof(param[4].argument[0].c_str());
1119     xyz2[0]=atof(param[5].argument[0].c_str());
1120     xyz2[1]=atof(param[6].argument[0].c_str());
1121     xyz2[2]=atof(param[7].argument[0].c_str());
1122     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
1123     mggeo->ajouter_mg_visu_courbe(mgcrb);
1124     }
1125     if (entite=="MAILLAGE")
1126     {
1127     parse.decode(data.c_str(),"@",param+2);
1128     long idgeo=cid(param[2].argument[0]);
1129 francois 626 mggeo=get_mg_geometrieid(idgeo);
1130 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
1131     ajouter_mg_maillage(mgmai);
1132     }
1133 francois 465 if (entite=="MAILLAGE_STRUCTURE")
1134     {
1135     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1136     long idgeo=cid(param[2].argument[0]);
1137 francois 626 mggeo=get_mg_geometrieid(idgeo);
1138 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
1139     ajouter_mg_maillage(mgmai);
1140     double xmin=atof(param[3].argument[0].c_str());
1141     double ymin=atof(param[4].argument[0].c_str());
1142     double zmin=atof(param[5].argument[0].c_str());
1143     double xmax=atof(param[6].argument[0].c_str());
1144     double ymax=atof(param[7].argument[0].c_str());
1145     double zmax=atof(param[8].argument[0].c_str());
1146     int nx=atoi(param[9].argument[0].c_str());
1147     int ny=atoi(param[10].argument[0].c_str());
1148     int nz=atoi(param[11].argument[0].c_str());
1149     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1150     mgmai->change_param_structure(b,nx,ny,nz);
1151     }
1152 francois 283 if (entite=="FEM_MAILLAGE")
1153     {
1154     parse.decode(data.c_str(),"@,@,@",param+2);
1155     int degre=atoi(param[2].argument[0].c_str());
1156     long idmai=cid(param[3].argument[0]);
1157     long idgeo=cid(param[4].argument[0]);
1158 francois 626 mggeo=get_mg_geometrieid(idgeo);
1159     mgmai=get_mg_maillageid(idmai);
1160 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1161     ajouter_fem_maillage(femmai);
1162     }
1163 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
1164     {
1165     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1166     int degre=atoi(param[2].argument[0].c_str());
1167     long idmai=cid(param[3].argument[0]);
1168     long idgeo=cid(param[4].argument[0]);
1169 francois 626 mggeo=get_mg_geometrieid(idgeo);
1170     mgmai=get_mg_maillageid(idmai);
1171 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1172     ajouter_fem_maillage(femmai);
1173     double xmin=atof(param[5].argument[0].c_str());
1174     double ymin=atof(param[6].argument[0].c_str());
1175     double zmin=atof(param[7].argument[0].c_str());
1176     double xmax=atof(param[8].argument[0].c_str());
1177     double ymax=atof(param[9].argument[0].c_str());
1178     double zmax=atof(param[10].argument[0].c_str());
1179     int nx=atoi(param[11].argument[0].c_str());
1180     int ny=atoi(param[12].argument[0].c_str());
1181     int nz=atoi(param[13].argument[0].c_str());
1182     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1183     femmai->change_param_structure(b,nx,ny,nz);
1184     }
1185 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
1186 francois 283 if (entite=="FEM_NOEUD")
1187     {
1188     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1189     long idtopo=cid(param[2].argument[0]);
1190     long idmai=cid(param[3].argument[0]);
1191     double x=atof(param[4].argument[0].c_str());
1192     double y=atof(param[5].argument[0].c_str());
1193     double z=atof(param[6].argument[0].c_str());
1194     int num=atoi(param[7].argument[0].c_str());
1195     int numopt=atoi(param[8].argument[0].c_str());
1196     MG_ELEMENT_MAILLAGE* elmai;
1197     if (idmai>-1)
1198     {
1199     elmai=mgmai->get_mg_noeudid(idmai);
1200     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
1201     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
1202     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
1203     }
1204     else elmai=NULL;
1205     FEM_NOEUD* noeud;
1206     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
1207     else
1208     {
1209     MG_ELEMENT_TOPOLOGIQUE* topo;
1210     if (idtopo>-1)
1211     {
1212     topo=mggeo->get_mg_sommetid(idtopo);
1213     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
1214     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1215     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1216     }
1217     else topo=NULL;
1218     noeud=new FEM_NOEUD(id,topo,x,y,z);
1219     }
1220     noeud->change_numero(num);
1221     noeud->change_numero_opt(numopt);
1222     femmai->ajouter_fem_noeud(noeud);
1223     }
1224     if (entite=="FEM_NOEUD_DEF")
1225     {
1226     parse.decode(data.c_str(),"@,@,@",param+2);
1227     double x=atof(param[2].argument[0].c_str());
1228     double y=atof(param[3].argument[0].c_str());
1229     double z=atof(param[4].argument[0].c_str());
1230     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1231     noeud->change_dx(x);
1232     noeud->change_dy(y);
1233     noeud->change_dz(z);
1234     femmai->active_deforme();
1235     }
1236 francois 325 if (entite=="FEM_NOEUD_REAC")
1237     {
1238     parse.decode(data.c_str(),"@,@,@",param+2);
1239     double x=atof(param[2].argument[0].c_str());
1240     double y=atof(param[3].argument[0].c_str());
1241     double z=atof(param[4].argument[0].c_str());
1242     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1243     noeud->change_rx(x);
1244     noeud->change_ry(y);
1245     noeud->change_rz(z);
1246 francois 339 femmai->active_reaction();;
1247 francois 325 }
1248 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
1249 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
1250     {
1251     parse.decode(data.c_str(),"@,@,@",param+2);
1252     long idtopo=cid(param[2].argument[0]);
1253     long idmai=cid(param[3].argument[0]);
1254     long idn1=cid(param[4].argument[0]);
1255     FEM_NOEUD* tab[1];
1256     tab[0]=femmai->get_fem_noeudid(idn1);
1257     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1258     if (idtopo>-1)
1259     topo=mggeo->get_mg_sommetid(idtopo);
1260     MG_ELEMENT_MAILLAGE* elmai;
1261     if (idmai>-1)
1262     elmai=mgmai->get_mg_noeudid(idmai);
1263     else elmai=NULL;
1264     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
1265     femmai->ajouter_fem_element0(fem);
1266     }
1267 francois 283 if (entite=="FEM_SEGMENT2")
1268     {
1269     parse.decode(data.c_str(),"@,@,@,@",param+2);
1270 francois 378 long idtopo=cid(param[2].argument[0]);
1271 francois 283 long idmai=cid(param[3].argument[0]);
1272     long idn1=cid(param[4].argument[0]);
1273     long idn2=cid(param[5].argument[0]);
1274     FEM_NOEUD* tab[2];
1275     tab[0]=femmai->get_fem_noeudid(idn1);
1276     tab[1]=femmai->get_fem_noeudid(idn2);
1277 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1278     if (idtopo>-1)
1279     topo=mggeo->get_mg_areteid(idtopo);
1280     MG_ELEMENT_MAILLAGE* elmai;
1281 francois 283 if (idmai>-1)
1282     elmai=mgmai->get_mg_segmentid(idmai);
1283     else elmai=NULL;
1284 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
1285 francois 309 femmai->ajouter_fem_element1(seg);
1286 francois 283 }
1287     if (entite=="FEM_SEGMENT3")
1288     {
1289     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1290 francois 378 long idtopo=cid(param[2].argument[0]);
1291     long idmai=cid(param[3].argument[0]);
1292 francois 283 long idn1=cid(param[4].argument[0]);
1293     long idn2=cid(param[5].argument[0]);
1294     long idn3=cid(param[6].argument[0]);
1295     FEM_NOEUD* tab[3];
1296     tab[0]=femmai->get_fem_noeudid(idn1);
1297     tab[1]=femmai->get_fem_noeudid(idn2);
1298     tab[2]=femmai->get_fem_noeudid(idn3);
1299     MG_ELEMENT_MAILLAGE* elmai;
1300 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1301     if (idtopo>-1)
1302     topo=mggeo->get_mg_areteid(idtopo);
1303     if (idmai>-1)
1304 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
1305     else elmai=NULL;
1306 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
1307 francois 309 femmai->ajouter_fem_element1(seg);
1308 francois 283 }
1309 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
1310     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
1311 francois 283 if (entite=="FEM_TRIANGLE3")
1312     {
1313     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1314 francois 378 long idtopo=cid(param[2].argument[0]);
1315 francois 283 long idmai=cid(param[3].argument[0]);
1316     long idn1=cid(param[4].argument[0]);
1317     long idn2=cid(param[5].argument[0]);
1318     long idn3=cid(param[6].argument[0]);
1319     FEM_NOEUD* tab[3];
1320     tab[0]=femmai->get_fem_noeudid(idn1);
1321     tab[1]=femmai->get_fem_noeudid(idn2);
1322     tab[2]=femmai->get_fem_noeudid(idn3);
1323     MG_ELEMENT_MAILLAGE* elmai;
1324     if (idmai>-1)
1325     elmai=mgmai->get_mg_triangleid(idmai);
1326     else elmai=NULL;
1327 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1328     if (idtopo>-1)
1329 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1330 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
1331 francois 309 femmai->ajouter_fem_element2(tri);
1332 francois 283 }
1333     if (entite=="FEM_TRIANGLE6")
1334     {
1335     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1336 francois 378 long idtopo=cid(param[2].argument[0]);
1337 francois 283 long idmai=cid(param[3].argument[0]);
1338     long idn1=cid(param[4].argument[0]);
1339     long idn2=cid(param[5].argument[0]);
1340     long idn3=cid(param[6].argument[0]);
1341     long idn4=cid(param[7].argument[0]);
1342     long idn5=cid(param[8].argument[0]);
1343     long idn6=cid(param[9].argument[0]);
1344     FEM_NOEUD* tab[6];
1345     tab[0]=femmai->get_fem_noeudid(idn1);
1346     tab[1]=femmai->get_fem_noeudid(idn2);
1347     tab[2]=femmai->get_fem_noeudid(idn3);
1348     tab[3]=femmai->get_fem_noeudid(idn4);
1349     tab[4]=femmai->get_fem_noeudid(idn5);
1350     tab[5]=femmai->get_fem_noeudid(idn6);
1351     MG_ELEMENT_MAILLAGE* elmai;
1352     if (idmai>-1)
1353     elmai=mgmai->get_mg_triangleid(idmai);
1354     else elmai=NULL;
1355 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1356     if (idtopo>-1)
1357 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1358 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
1359 francois 309 femmai->ajouter_fem_element2(tri);
1360 francois 283 }
1361 francois 310 if (entite=="FEM_QUADRANGLE4")
1362     {
1363     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1364 francois 378 long idtopo=cid(param[2].argument[0]);
1365     long idmai=cid(param[3].argument[0]);
1366 francois 310 long idn1=cid(param[4].argument[0]);
1367     long idn2=cid(param[5].argument[0]);
1368     long idn3=cid(param[6].argument[0]);
1369     long idn4=cid(param[7].argument[0]);
1370     FEM_NOEUD* tab[4];
1371     tab[0]=femmai->get_fem_noeudid(idn1);
1372     tab[1]=femmai->get_fem_noeudid(idn2);
1373     tab[2]=femmai->get_fem_noeudid(idn3);
1374     tab[3]=femmai->get_fem_noeudid(idn4);
1375     MG_ELEMENT_MAILLAGE* elmai;
1376     if (idmai>-1)
1377     elmai=mgmai->get_mg_quadrangleid(idmai);
1378     else elmai=NULL;
1379 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1380     if (idtopo>-1)
1381 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1382 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
1383 francois 310 femmai->ajouter_fem_element2(quad);
1384     }
1385     if (entite=="FEM_QUADRANGLE8")
1386     {
1387     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1388 francois 378 long idtopo=cid(param[2].argument[0]);
1389     long idmai=cid(param[3].argument[0]);
1390 francois 310 long idn1=cid(param[4].argument[0]);
1391     long idn2=cid(param[5].argument[0]);
1392     long idn3=cid(param[6].argument[0]);
1393     long idn4=cid(param[7].argument[0]);
1394     long idn5=cid(param[8].argument[0]);
1395     long idn6=cid(param[9].argument[0]);
1396     long idn7=cid(param[10].argument[0]);
1397     long idn8=cid(param[11].argument[0]);
1398     FEM_NOEUD* tab[8];
1399     tab[0]=femmai->get_fem_noeudid(idn1);
1400     tab[1]=femmai->get_fem_noeudid(idn2);
1401     tab[2]=femmai->get_fem_noeudid(idn3);
1402     tab[3]=femmai->get_fem_noeudid(idn4);
1403     tab[4]=femmai->get_fem_noeudid(idn5);
1404     tab[5]=femmai->get_fem_noeudid(idn6);
1405     tab[6]=femmai->get_fem_noeudid(idn7);
1406     tab[7]=femmai->get_fem_noeudid(idn8);
1407     MG_ELEMENT_MAILLAGE* elmai;
1408     if (idmai>-1)
1409     elmai=mgmai->get_mg_quadrangleid(idmai);
1410     else elmai=NULL;
1411 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1412     if (idtopo>-1)
1413 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1414 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1415 francois 310 femmai->ajouter_fem_element2(quad);
1416     }
1417 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
1418    
1419     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
1420 francois 283 if (entite=="FEM_TETRA4")
1421     {
1422 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1423 francois 378 long idtopo=cid(param[2].argument[0]);
1424     long idmai=cid(param[3].argument[0]);
1425 francois 283 long idn1=cid(param[4].argument[0]);
1426     long idn2=cid(param[5].argument[0]);
1427     long idn3=cid(param[6].argument[0]);
1428     long idn4=cid(param[7].argument[0]);
1429 francois 339 long etat=atoi(param[8].argument[0].c_str());
1430 francois 283 FEM_NOEUD* tab[4];
1431     tab[0]=femmai->get_fem_noeudid(idn1);
1432     tab[1]=femmai->get_fem_noeudid(idn2);
1433     tab[2]=femmai->get_fem_noeudid(idn3);
1434     tab[3]=femmai->get_fem_noeudid(idn4);
1435     MG_ELEMENT_MAILLAGE* elmai;
1436     if (idmai>-1)
1437     elmai=mgmai->get_mg_tetraid(idmai);
1438     else elmai=NULL;
1439 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1440     if (idtopo>-1)
1441 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1442 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1443 francois 410 tet->change_etat(0,etat);
1444 francois 309 femmai->ajouter_fem_element3(tet);
1445 francois 283 }
1446 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
1447 francois 339 {
1448 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
1449 francois 399 unsigned long idele=cid(param[2].argument[0]);
1450     unsigned long idtopo=cid(param[3].argument[0]);
1451     unsigned long idn1=cid(param[4].argument[0]);
1452 francois 380 int etat=atoi(param[5].argument[0].c_str());
1453 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
1454     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
1455     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
1456     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1457     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1458 francois 380 FEM_NOEUD* tab[4];
1459     tab[0]=femmai->get_fem_noeudid(idn1);
1460 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
1461     femmai->ajouter_xfem_element0(xele);
1462     xele->change_etat(etat);
1463     }
1464     if (entite=="XFEM_SEGMENT2")
1465     {
1466     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1467     unsigned long idele=cid(param[2].argument[0]);
1468     unsigned long idtopo=cid(param[3].argument[0]);
1469     unsigned long idn1=cid(param[4].argument[0]);
1470     unsigned long idn2=cid(param[5].argument[0]);
1471     int etat=atoi(param[6].argument[0].c_str());
1472     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
1473     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1474     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1475     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
1476     FEM_NOEUD* tab[4];
1477     tab[0]=femmai->get_fem_noeudid(idn1);
1478 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
1479 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
1480 francois 380 femmai->ajouter_xfem_element1(xseg);
1481 francois 399 xseg->change_etat(etat);
1482 francois 380 }
1483 francois 410 if (entite=="XFEM_TRIANGLE3")
1484     {
1485     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1486     unsigned long idtet=cid(param[2].argument[0]);
1487     unsigned long idtopo=cid(param[3].argument[0]);
1488     unsigned long idn1=cid(param[4].argument[0]);
1489     unsigned long idn2=cid(param[5].argument[0]);
1490     unsigned long idn3=cid(param[6].argument[0]);
1491     int etat=atoi(param[7].argument[0].c_str());
1492     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1493     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1494     FEM_NOEUD* tab[3];
1495     tab[0]=femmai->get_fem_noeudid(idn1);
1496     tab[1]=femmai->get_fem_noeudid(idn2);
1497     tab[2]=femmai->get_fem_noeudid(idn3);
1498     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
1499     femmai->ajouter_xfem_element2(xtri);
1500     xtri->change_etat(etat);
1501     }
1502 francois 380 if (entite=="XFEM_TETRA4")
1503     {
1504 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1505 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1506 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
1507     unsigned long idn1=cid(param[4].argument[0]);
1508     unsigned long idn2=cid(param[5].argument[0]);
1509     unsigned long idn3=cid(param[6].argument[0]);
1510     unsigned long idn4=cid(param[7].argument[0]);
1511     int etat=atoi(param[8].argument[0].c_str());
1512 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1513 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1514     FEM_NOEUD* tab[4];
1515 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
1516     tab[1]=femmai->get_fem_noeudid(idn2);
1517     tab[2]=femmai->get_fem_noeudid(idn3);
1518     tab[3]=femmai->get_fem_noeudid(idn4);
1519 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
1520 francois 339 femmai->ajouter_xfem_element3(xtet);
1521 francois 383 xtet->change_etat(etat);
1522 francois 339 }
1523 francois 283 if (entite=="FEM_TETRA10")
1524     {
1525     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1526 francois 378 long idtopo=cid(param[2].argument[0]);
1527     long idmai=cid(param[3].argument[0]);
1528 francois 283 long idn1=cid(param[4].argument[0]);
1529     long idn2=cid(param[5].argument[0]);
1530     long idn3=cid(param[6].argument[0]);
1531     long idn4=cid(param[7].argument[0]);
1532     long idn5=cid(param[8].argument[0]);
1533     long idn6=cid(param[9].argument[0]);
1534     long idn7=cid(param[10].argument[0]);
1535     long idn8=cid(param[11].argument[0]);
1536     long idn9=cid(param[12].argument[0]);
1537     long idn10=cid(param[13].argument[0]);
1538     FEM_NOEUD* tab[10];
1539     tab[0]=femmai->get_fem_noeudid(idn1);
1540     tab[1]=femmai->get_fem_noeudid(idn2);
1541     tab[2]=femmai->get_fem_noeudid(idn3);
1542     tab[3]=femmai->get_fem_noeudid(idn4);
1543     tab[4]=femmai->get_fem_noeudid(idn5);
1544     tab[5]=femmai->get_fem_noeudid(idn6);
1545     tab[6]=femmai->get_fem_noeudid(idn7);
1546     tab[7]=femmai->get_fem_noeudid(idn8);
1547     tab[8]=femmai->get_fem_noeudid(idn9);
1548     tab[9]=femmai->get_fem_noeudid(idn10);
1549     MG_ELEMENT_MAILLAGE* elmai;
1550     if (idmai>-1)
1551     elmai=mgmai->get_mg_tetraid(idmai);
1552     else elmai=NULL;
1553 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1554     if (idtopo>-1)
1555 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1556 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1557 francois 309 femmai->ajouter_fem_element3(tet);
1558 francois 283 }
1559 francois 310 if (entite=="FEM_HEXA8")
1560     {
1561     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1562 francois 378 long idtopo=cid(param[2].argument[0]);
1563     long idmai=cid(param[3].argument[0]);
1564 francois 310 long idn1=cid(param[4].argument[0]);
1565     long idn2=cid(param[5].argument[0]);
1566     long idn3=cid(param[6].argument[0]);
1567     long idn4=cid(param[7].argument[0]);
1568     long idn5=cid(param[8].argument[0]);
1569     long idn6=cid(param[9].argument[0]);
1570     long idn7=cid(param[10].argument[0]);
1571     long idn8=cid(param[11].argument[0]);
1572     FEM_NOEUD* tab[8];
1573     tab[0]=femmai->get_fem_noeudid(idn1);
1574     tab[1]=femmai->get_fem_noeudid(idn2);
1575     tab[2]=femmai->get_fem_noeudid(idn3);
1576     tab[3]=femmai->get_fem_noeudid(idn4);
1577     tab[4]=femmai->get_fem_noeudid(idn5);
1578     tab[5]=femmai->get_fem_noeudid(idn6);
1579     tab[6]=femmai->get_fem_noeudid(idn7);
1580     tab[7]=femmai->get_fem_noeudid(idn8);
1581     MG_ELEMENT_MAILLAGE* elmai;
1582     if (idmai>-1)
1583     elmai=mgmai->get_mg_hexaid(idmai);
1584     else elmai=NULL;
1585 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1586     if (idtopo>-1)
1587 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1588 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1589 francois 310 femmai->ajouter_fem_element3(hex);
1590     }
1591     if (entite=="FEM_HEXA20")
1592     {
1593     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1594 francois 378 long idtopo=cid(param[2].argument[0]);
1595     long idmai=cid(param[3].argument[0]);
1596 francois 310 long idn1=cid(param[4].argument[0]);
1597     long idn2=cid(param[5].argument[0]);
1598     long idn3=cid(param[6].argument[0]);
1599     long idn4=cid(param[7].argument[0]);
1600     long idn5=cid(param[8].argument[0]);
1601     long idn6=cid(param[9].argument[0]);
1602     long idn7=cid(param[10].argument[0]);
1603     long idn8=cid(param[11].argument[0]);
1604     long idn9=cid(param[12].argument[0]);
1605     long idn10=cid(param[13].argument[0]);
1606     long idn11=cid(param[14].argument[0]);
1607     long idn12=cid(param[15].argument[0]);
1608     long idn13=cid(param[16].argument[0]);
1609     long idn14=cid(param[17].argument[0]);
1610     long idn15=cid(param[18].argument[0]);
1611     long idn16=cid(param[19].argument[0]);
1612     long idn17=cid(param[20].argument[0]);
1613     long idn18=cid(param[21].argument[0]);
1614     long idn19=cid(param[22].argument[0]);
1615     long idn20=cid(param[23].argument[0]);
1616     FEM_NOEUD* tab[20];
1617     tab[0]=femmai->get_fem_noeudid(idn1);
1618     tab[1]=femmai->get_fem_noeudid(idn2);
1619     tab[2]=femmai->get_fem_noeudid(idn3);
1620     tab[3]=femmai->get_fem_noeudid(idn4);
1621     tab[4]=femmai->get_fem_noeudid(idn5);
1622     tab[5]=femmai->get_fem_noeudid(idn6);
1623     tab[6]=femmai->get_fem_noeudid(idn7);
1624     tab[7]=femmai->get_fem_noeudid(idn8);
1625     tab[8]=femmai->get_fem_noeudid(idn9);
1626     tab[9]=femmai->get_fem_noeudid(idn10);
1627     tab[10]=femmai->get_fem_noeudid(idn11);
1628     tab[11]=femmai->get_fem_noeudid(idn12);
1629     tab[12]=femmai->get_fem_noeudid(idn13);
1630     tab[13]=femmai->get_fem_noeudid(idn14);
1631     tab[14]=femmai->get_fem_noeudid(idn15);
1632     tab[15]=femmai->get_fem_noeudid(idn16);
1633     tab[16]=femmai->get_fem_noeudid(idn17);
1634     tab[17]=femmai->get_fem_noeudid(idn18);
1635     tab[18]=femmai->get_fem_noeudid(idn19);
1636     tab[19]=femmai->get_fem_noeudid(idn20);
1637     MG_ELEMENT_MAILLAGE* elmai;
1638     if (idmai>-1)
1639     elmai=mgmai->get_mg_hexaid(idmai);
1640     else elmai=NULL;
1641 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1642     if (idtopo>-1)
1643 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1644 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1645 francois 310 femmai->ajouter_fem_element3(hex);
1646     }
1647 francois 283 if (entite=="SOLUTION")
1648     {
1649 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1650 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1651 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1652     std::string nomsol=param[4].argument[0];
1653     long idmai=cid(param[5].argument[0]);
1654     int nb=atoi(param[6].argument[0].c_str());
1655     std::string chemin=param[7].argument[0];
1656 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1657 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1658 francois 283 ajouter_mg_solution(sol);
1659     for (int i=0;i<nb;i++)
1660 francois 377 sol->change_legende(i,param[8].argument[i]);
1661 francois 283 }
1662     if (entite=="FEM_SOLUTION")
1663     {
1664 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1665 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1666 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1667     std::string nomsol=param[4].argument[0];
1668     long idmai=cid(param[5].argument[0]);
1669     int nb=atoi(param[6].argument[0].c_str());
1670     std::string chemin=param[7].argument[0];
1671 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1672 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1673 francois 283 ajouter_fem_solution(sol);
1674     for (int i=0;i<nb;i++)
1675 francois 375 sol->change_legende(i,param[8].argument[i]);
1676 francois 283 }
1677     #ifdef WINDOWS_VERSION
1678     if (entite=="CAD4FE_MCSEGMENT")
1679     {
1680     parse.decode(data.c_str(),"@,@,@",param+2);
1681     long idtopo=cid(param[2].argument[0]);
1682     long idn1=cid(param[3].argument[0]);
1683     long idn2=cid(param[4].argument[0]);
1684     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1685     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1686     MG_ELEMENT_TOPOLOGIQUE* topo;
1687     if (idtopo>-1)
1688     {
1689     topo=mggeo->get_mg_areteid(idtopo);
1690     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1691     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1692     }
1693     else topo=NULL;
1694     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
1695     mgmai->ajouter_mg_segment(seg);
1696     }
1697     if (entite=="CAD4FE_MCNODE")
1698     {
1699     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1700     long idRefTopo=cid(param[2].argument[0]);
1701     long idMCTopo=cid(param[3].argument[0]);
1702     double x=atof(param[4].argument[0].c_str());
1703     double y=atof(param[5].argument[0].c_str());
1704     double z=atof(param[6].argument[0].c_str());
1705     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1706     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1707     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1708     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1709     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1710     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1711     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1712     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1713     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1714     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1715    
1716     if (mcTopo->get_dimension()==0)
1717     {
1718     if (updatedMergedRefVertices == false)
1719     {
1720     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1721     itMergedRefVertices != mapMergedRefVertices.end();
1722     itMergedRefVertices++)
1723     {
1724     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1725     MG_SOMMET * refV = NULL;
1726     unsigned long id = itMergedRefVertices->second;
1727     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1728     v->MergeRefVertex(refV);
1729     }
1730    
1731     updatedMergedRefVertices = true;
1732     }
1733     }
1734    
1735     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1736     mgmai->ajouter_mg_noeud(noeud);
1737     }
1738     if (entite=="CAD4FE_MCTRIANGLE")
1739     {
1740     parse.decode(data.c_str(),"@,@,@,@",param+2);
1741     long idtopo=cid(param[2].argument[0]);
1742     long idn1=cid(param[3].argument[0]);
1743     long idn2=cid(param[4].argument[0]);
1744     long idn3=cid(param[5].argument[0]);
1745     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1746     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1747     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1748     CAD4FE::MCSegment* mgsegment[3];
1749     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1750     // la topo. d'un MCTriangle est obligatoirement une MCFace
1751     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1752     for (int i=0;i<3;i++)
1753     {
1754     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1755     if (mgsegment[i]==NULL)
1756     {
1757     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1758     mgmai->ajouter_mg_segment(mgsegment[i]);
1759     }
1760     }
1761     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1762     mgmai->ajouter_mg_triangle(triangle);
1763     }
1764     #endif
1765     }
1766     }
1767     while (param[0].argument[0]!="FIN");
1768 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
1769     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
1770     {
1771     LISTE_MG_SOMMET::iterator itsom;
1772     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
1773     if (som->est_un_sommet_noeud())
1774     {
1775     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
1776     unsigned long idnoeud=somno->get_id_mg_noeud();
1777     MG_NOEUD* noeud;
1778     LISTE_MG_MAILLAGE::iterator itmai;
1779     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1780     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
1781     somno->change_mg_noeud(noeud);
1782     }
1783 francois 685 LISTE_MG_COQUE::iterator itcoq;
1784     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
1785     if (coq->est_une_coque_element())
1786     {
1787     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
1788     int nbele=coque->get_nb_liste_id();
1789     MG_MAILLAGE* mgmai=NULL;
1790     for (int i=0;i<nbele;i++)
1791     {
1792     unsigned long eleid=coque->get_liste_id(i);
1793     if (i==0)
1794     {
1795     LISTE_MG_MAILLAGE::iterator itmai;
1796     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1797     {
1798     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
1799     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
1800     }
1801     }
1802     MG_ELEMENT_MAILLAGE* ele=NULL;
1803     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
1804     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
1805     coque->ajouter_element(ele);
1806     }
1807    
1808     }
1809 francois 526 }
1810 francois 283 #ifdef WINDOWS_VERSION
1811     if (updatedMergedRefVertices == false)
1812     {
1813     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1814     itMergedRefVertices != mapMergedRefVertices.end();
1815     itMergedRefVertices++)
1816     {
1817     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1818     MG_SOMMET * refV = NULL;
1819     unsigned long id = itMergedRefVertices->second;
1820     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1821     v->MergeRefVertex(refV);
1822     }
1823    
1824     updatedMergedRefVertices = true;
1825     }
1826    
1827     #endif
1828     fclose(in);
1829     #ifdef BREP_SLD
1830     fonction->Fermer();
1831     #endif
1832     return 1;
1833     }
1834    
1835    
1836    
1837