ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 878
Committed: Mon Mar 27 19:26:07 2017 UTC (8 years, 1 month ago) by francois
File size: 92436 byte(s)
Log Message:
notion de coquille mince

File Contents

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