ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 723
Committed: Thu Sep 10 12:45:37 2015 UTC (9 years, 8 months ago) by couturad
File size: 76491 byte(s)
Log Message:
Ajout a l'arbre caracteristique:
->Primitives (sphere, cylindre, cone, tore)
->Operateurs booleans (Difference, Intersection)

File Contents

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