ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 741
Committed: Thu Oct 1 04:00:37 2015 UTC (9 years, 7 months ago) by francois
File size: 77285 byte(s)
Log Message:
possibilite de mettre des primitives dans un assemblage meme si celles ci sont crées après

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