ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 753
Committed: Mon Oct 26 14:30:49 2015 UTC (9 years, 6 months ago) by francois
File size: 79045 byte(s)
Log Message:
ajout des poutre_element pour Alexandre

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