ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 881
Committed: Wed Apr 12 23:14:07 2017 UTC (8 years, 1 month ago) by francois
File size: 92524 byte(s)
Log Message:
Changement de strategie pour le mailleur couche.
Il fonctionne maintenant avec des volumes minces et non des coquilles
mince est une propriète de volume et ne change pas son nom.
cela necessite un changement de version de fichier -> maintenant 2.3 compatible en arrière
valider sur ancien exemple plus sphere creuse

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 881 std::vector<unsigned long> volumemince;
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 francois 881 else if (version_fichier<2.3)
686 francois 763 {
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 francois 881 else
694     {
695     parse.decode(data.c_str(),"@,@,@,@",param+2);
696     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
697     mggeo->ajouter_mg_volume(mgvol);
698     int mince=atoi(param[4].argument[0].c_str());
699     if (mince==0)
700     {
701     std::string data2=param[5].argument[0];
702     parse.decode(data2.c_str(),"@,(&)",param+5);
703     int nb=atoi(param[5].argument[0].c_str());
704     if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
705     }
706     else
707     {
708     std::string data2=param[5].argument[0];
709     parse.decode(data2.c_str(),"(&),@,(&)",param+5);
710     int nb_face=param[5].argument.size();
711     for (int i=0;i<nb_face;i=i+2)
712     {
713     unsigned long idn1=cid(param[5].argument[i]);
714     unsigned long idn2=cid(param[5].argument[i+1]);
715     volumemince.push_back(id);
716     volumemince.push_back(idn1);
717     volumemince.push_back(idn2);
718     }
719     int nb=atoi(param[6].argument[0].c_str());
720     if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
721     }
722     }
723 francois 763 /*{
724 francois 283 for (int i=0;i<nb;i++)
725     {
726     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
727     char nom[3];
728     double val;
729     strcpy(nom,param[7].argument[0].c_str());
730     val=atof(param[8].argument[0].c_str());
731     mgvol->ajouter_ccf(nom,val);
732     }
733 francois 763 }*/
734 francois 283 }
735     if (entite=="COQUE")
736     {
737 francois 794 if (version_fichier<2)
738     {
739     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
740 francois 283 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
741     mggeo->ajouter_mg_coque(mgcoq);
742     int nummat=atoi((char*)param[4].argument[0].c_str());
743     mgcoq->change_num_materiau(nummat);
744     int nb=atoi(param[5].argument[0].c_str());
745 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgcoq);
746 francois 794 }
747     else
748     {
749     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
750     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
751     mggeo->ajouter_mg_coque(mgcoq);
752     int nb=atoi(param[4].argument[0].c_str());
753     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgcoq);
754     }
755 francois 763 /*if (nb!=0)
756 francois 283 {
757     for (int i=0;i<nb;i++)
758     {
759     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
760     char nom[3];
761     double val;
762     strcpy(nom,param[7].argument[0].c_str());
763     val=atof(param[8].argument[0].c_str());
764     mgcoq->ajouter_ccf(nom,val);
765     }
766 francois 763 }*/
767 francois 283 }
768     if (entite=="POUTRE")
769     {
770 francois 794 if (version_fichier<2)
771     {
772     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
773 francois 283 MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
774     mggeo->ajouter_mg_poutre(mgpoutre);
775     int nummat=atoi((char*)param[4].argument[0].c_str());
776     mgpoutre->change_num_materiau(nummat);
777     int nb=atoi(param[5].argument[0].c_str());
778 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgpoutre);
779 francois 794 }
780     else
781     {
782     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
783     MG_POUTRE* mgpou=new MG_POUTRE(param[2].argument[0],id);
784     mggeo->ajouter_mg_poutre(mgpou);
785     int nb=atoi(param[4].argument[0].c_str());
786     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgpou);
787     }
788    
789 francois 763 /*if (nb!=0)
790 francois 283 {
791     for (int i=0;i<nb;i++)
792     {
793     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
794     char nom[3];
795     double val;
796     strcpy(nom,param[7].argument[0].c_str());
797     val=atof(param[8].argument[0].c_str());
798     mgpoutre->ajouter_ccf(nom,val);
799     }
800 francois 763 }*/
801 francois 283 }
802     if (entite=="COQUILLE")
803     {
804     parse.decode(data.c_str(),"@,@",param+2);
805     long ident=cid(param[2].argument[0]);
806     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
807     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
808     if (mgvol!=NULL)
809     {
810     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
811     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
812     }
813     if (mgcoq!=NULL)
814     {
815     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
816     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
817     }
818    
819     }
820 francois 881
821 francois 283 #ifdef BREP_STEP
822     if (entite=="SURFACE_STEP")
823     {
824     parse.decode(data.c_str(),"@",param+2);
825     long idstepsuf=atol(param[2].argument[0].c_str());
826 couturad 740 ST_SURFACE *stsurf=mggeo->get_gest_step().lst_surface.getid(idstepsuf);
827 francois 283 STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
828     mggeo->ajouter_mg_surface(stepsurf);
829     }
830     if (entite=="COURBE_STEP")
831     {
832     parse.decode(data.c_str(),"@",param+2);
833     long idstepcur=atol(param[2].argument[0].c_str());
834 couturad 740 ST_COURBE *stcur=mggeo->get_gest_step().lst_courbe.getid(idstepcur);
835 francois 283 STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
836     mggeo->ajouter_mg_courbe(stepcur);
837     }
838    
839     if (entite=="POINT_STEP")
840     {
841     parse.decode(data.c_str(),"@",param+2);
842     long idsteppt=atol(param[2].argument[0].c_str());
843 couturad 740 ST_POINT *stpt=mggeo->get_gest_step().lst_point.getid(idsteppt);
844 francois 283 STEP_POINT* steppt=new STEP_POINT(id,stpt);
845     mggeo->ajouter_mg_point(steppt);
846     }
847    
848     #endif
849     #ifdef BREP_SAT
850     if (entite=="SURFACE_SAT")
851     {
852     parse.decode(data.c_str(),"@",param+2);
853     long idsatsuf=atol(param[2].argument[0].c_str());
854 couturad 740 SAT_SURFACE *satsurf=mggeo->get_gest_sat().lst_surface.getid(idsatsuf);
855 francois 283 ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
856     mggeo->ajouter_mg_surface(acissurf);
857     }
858     if (entite=="COURBE_SAT")
859     {
860     parse.decode(data.c_str(),"@",param+2);
861     long idsatcur=atol(param[2].argument[0].c_str());
862 couturad 740 SAT_COURBE *satcur=mggeo->get_gest_sat().lst_courbe.getid(idsatcur);
863 francois 283 ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
864     mggeo->ajouter_mg_courbe(aciscur);
865     }
866    
867     if (entite=="POINT_SAT")
868     {
869     parse.decode(data.c_str(),"@",param+2);
870     long idsatpt=atol(param[2].argument[0].c_str());
871 couturad 740 SAT_POINT *satpt=mggeo->get_gest_sat().lst_point.getid(idsatpt);
872 francois 283 ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
873     mggeo->ajouter_mg_point(acispt);
874     }
875    
876     #endif
877    
878     #ifdef BREP_OCC
879    
880     if (entite=="SURFACE_OCC")
881     {
882     parse.decode(data.c_str(),"@",param+2);
883     long idocc=atol(param[2].argument[0].c_str());
884 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
885 francois 283 TopoDS_Face occface=TopoDS::Face(occshape);
886 couturad 740 OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface,mggeo->get_occ_fonction());
887 francois 283 mggeo->ajouter_mg_surface(occsurf);
888     }
889     if (entite=="COURBE_OCC")
890     {
891     parse.decode(data.c_str(),"@",param+2);
892     long idocc=atol(param[2].argument[0].c_str());
893 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
894 francois 283 TopoDS_Edge occedge=TopoDS::Edge(occshape);
895 couturad 740 OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, mggeo->get_occ_fonction());
896 francois 283 mggeo->ajouter_mg_courbe(occcrb);
897     }
898     if (entite=="POINT_OCC")
899     {
900     parse.decode(data.c_str(),"@",param+2);
901     long idocc=atol(param[2].argument[0].c_str());
902 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
903 francois 283 TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
904 couturad 740 OCC_POINT* occpoint=new OCC_POINT(id,occvertex, mggeo->get_occ_fonction());
905 francois 283 mggeo->ajouter_mg_point(occpoint);
906     }
907     #endif
908     #ifdef WINDOWS_VERSION
909     if (entite=="CAD4FE_POLYCURVE")
910     {
911     CAD4FE::PolyCurve * polycurve = NULL;
912     parse.decode(data.c_str(),"@,(&)",param+2);
913     int nb = atoi(param[2].argument[0].c_str());
914    
915     if (nb == 0)
916     {
917     printf("PolyCurve %d is formed with reference vertex : ", id);
918     parse.decode(param[3].argument[0].c_str(),"@",param+4);
919     int idRefVertex;
920     idRefVertex=cid(param[4].argument[0].c_str());
921     printf("%d ;\n ", idRefVertex);
922     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
923     polycurve = new CAD4FE::PolyCurve(refVertex);
924     }
925     else
926     {
927     printf("PolyCurve %d is formed with reference edges : ", id);
928     polycurve = new CAD4FE::PolyCurve;
929     for (int i=0;i<nb;i++)
930     {
931     parse.decode(param[3].argument[i].c_str(),"@",param+4);
932     int idRefEdge;
933     idRefEdge=cid(param[4].argument[0].c_str());
934     printf("%d ; ", idRefEdge);
935     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
936     CAD4FE::PolyCurve tmpPC(refEdge);
937     polycurve->Merge(tmpPC);
938     }
939     printf("\n");
940     }
941    
942     polycurve->change_id(id);
943     mggeo->ajouter_mg_courbe(polycurve);
944     }
945    
946    
947     if (entite=="CAD4FE_POLYSURFACE")
948     {
949     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
950     polysurface->change_id(id);
951     mggeo->ajouter_mg_surface(polysurface);
952    
953     parse.decode(data.c_str(),"@,(&)",param+2);
954    
955     int nb = atoi(param[2].argument[0].c_str());
956     printf("PolySurface %d is formed with reference faces : ", id);
957     for (int i=0;i<nb;i++)
958     {
959     parse.decode(param[3].argument[i].c_str(),"@",param+4);
960     int idRefFace;
961     idRefFace=cid(param[4].argument[0].c_str());
962     printf("%d ; ", idRefFace);
963    
964     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
965     CAD4FE::PolySurface tmpSF(refFace);
966     polysurface->Merge(tmpSF);
967     }
968    
969     printf("\n");
970     }
971     if (entite=="CAD4FE_MCEDGE")
972     {
973     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
974    
975     std::string idOriginal = param[2].argument[0];
976     long idPolyCurve=cid(param[3].argument[0]);
977     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
978    
979     // sense is not used because a MCEdge always has
980     // a sense = 1 !
981     // (because polycurve domain is equal to mcEdge domain)
982     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
983     mcEdge->change_id(id);
984     mggeo->ajouter_mg_arete(mcEdge);
985    
986     int nb=atoi(param[7].argument[0].c_str());
987     if (nb!=0)
988     {
989     for (int i=0;i<nb;i++)
990     {
991     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
992     char nom[3];
993     double val;
994     strcpy(nom,param[9].argument[0].c_str());
995     val=atof(param[10].argument[0].c_str());
996     mcEdge->ajouter_ccf(nom,val);
997     }
998     }
999     }
1000     if (entite=="CAD4FE_MCFACE")
1001     {
1002     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
1003    
1004     std::string idOriginal = param[2].argument[0];
1005     long idPolySurface=cid(param[3].argument[0]);
1006     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
1007    
1008     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
1009     mcFace->change_id(id);
1010     mggeo->ajouter_mg_face(mcFace);
1011    
1012     int nb=atoi(param[6].argument[0].c_str());
1013     if (nb!=0)
1014     {
1015     for (int i=0;i<nb;i++)
1016     {
1017     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
1018     char nom[3];
1019     double val;
1020     strcpy(nom,param[8].argument[0].c_str());
1021     val=atof(param[9].argument[0].c_str());
1022     mcFace->ajouter_ccf(nom,val);
1023     }
1024     }
1025     }
1026     if (entite=="CAD4FE_MCVERTEX")
1027     {
1028     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
1029     std::string idOriginal = param[2].argument[0];
1030     long idsom=cid(param[3].argument[0]);
1031     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
1032     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
1033     mcVertex->change_id(id);
1034     mggeo->ajouter_mg_sommet(mcVertex);
1035     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
1036     if (nb_ref_vertex!=0)
1037     {
1038     for (int i=0;i<nb_ref_vertex;i++)
1039     {
1040     unsigned long idRefVertex=cid(param[5].argument[i]);
1041     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
1042     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
1043     }
1044     }
1045     int nb_ccf=atoi(param[4+2].argument[0].c_str());
1046     if (nb_ccf!=0)
1047     {
1048     for (int i=0;i<nb_ccf;i++)
1049     {
1050     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
1051     char nom_ccf[3];
1052     double val_ccf;
1053     strcpy(nom_ccf,param[6+2].argument[0].c_str());
1054     val_ccf=atof(param[7+2].argument[0].c_str());
1055     mgsom->ajouter_ccf(nom_ccf,val_ccf);
1056     }
1057     }
1058     }
1059     #endif
1060     if (entite=="FACE")
1061     {
1062 couturad 814 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
1063     else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
1064     long idsurf=cid(param[3].argument[0]);
1065 francois 283 int sens=atoi(param[5].argument[0].c_str());
1066     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
1067     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
1068     mggeo->ajouter_mg_face(mgface);
1069 couturad 814 int argccf=7;
1070     if (version_fichier>2.1)
1071     {
1072     argccf=8;
1073     int nbpole=atoi(param[6].argument[0].c_str());
1074     mgface->change_nb_pole(nbpole);
1075     }
1076     int nb=atoi(param[argccf-1].argument[0].c_str());
1077     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
1078 francois 763 /*if (nb!=0)
1079 francois 283 {
1080     for (int i=0;i<nb;i++)
1081     {
1082     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
1083     char nom[3];
1084     double val;
1085     strcpy(nom,param[8].argument[0].c_str());
1086     val=atof(param[9].argument[0].c_str());
1087     mgface->ajouter_ccf(nom,val);
1088     }
1089 francois 763 }*/
1090 francois 283 }
1091     if (entite=="COFACE")
1092     {
1093     parse.decode(data.c_str(),"@,@,@",param+2);
1094     long idface=cid(param[2].argument[0]);
1095     long idcoq=cid(param[3].argument[0]);
1096     int sens=atoi(param[4].argument[0].c_str());
1097     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
1098     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
1099     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
1100     mgcoq->ajouter_mg_coface(mgcoface);
1101     }
1102     if (entite=="BOUCLE")
1103     {
1104     parse.decode(data.c_str(),"@,(@)",param+2);
1105     long ident=cid(param[2].argument[0]);
1106     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
1107     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
1108     if (mgface!=NULL)
1109     {
1110     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
1111     mggeo->ajouter_mg_boucle(mgbou,mgface);
1112     }
1113     if (mgpoutre!=NULL)
1114     {
1115     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
1116     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
1117     }
1118     }
1119     if (entite=="POINT")
1120     {
1121     parse.decode(data.c_str(),"@,@,@",param+2);
1122     double xyz[3];
1123     xyz[0]=atof(param[2].argument[0].c_str());
1124     xyz[1]=atof(param[3].argument[0].c_str());
1125     xyz[2]=atof(param[4].argument[0].c_str());
1126     LC_POINT* point=new LC_POINT(id,xyz);
1127     mggeo->ajouter_mg_point(point);
1128     }
1129     if (entite=="SOMMET")
1130     {
1131 couturad 814 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1132     else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1133 francois 283 long idpoint=cid(param[3].argument[0]);
1134     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
1135     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
1136     mggeo->ajouter_mg_sommet(mgsom);
1137 couturad 814 int argccf=5;
1138     if (version_fichier>2.1)
1139     {
1140     argccf=6;
1141     int ipole=atoi(param[4].argument[0].c_str());
1142     if (ipole==1) mgsom->change_pole(true);
1143     }
1144     int nb=atoi(param[argccf-1].argument[0].c_str());
1145     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
1146 francois 763 /*if (nb!=0)
1147 francois 283 {
1148     for (int i=0;i<nb;i++)
1149     {
1150     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1151     char nom[3];
1152     double val;
1153     strcpy(nom,param[6].argument[0].c_str());
1154     val=atof(param[7].argument[0].c_str());
1155     mgsom->ajouter_ccf(nom,val);
1156     }
1157 francois 763 }*/
1158 francois 283 }
1159 francois 576 if (entite=="ARETE_ELEMENT")
1160     {
1161     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1162     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
1163     mggeo->ajouter_mg_arete(are);
1164     int nb=atoi(param[4].argument[0].c_str());
1165 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
1166     /* if (nb!=0)
1167 francois 576 {
1168     for (int i=0;i<nb;i++)
1169     {
1170     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1171     char nom[3];
1172     double val;
1173     strcpy(nom,param[6].argument[0].c_str());
1174     val=atof(param[7].argument[0].c_str());
1175     are->ajouter_ccf(nom,val);
1176     }
1177 francois 763 }*/
1178 francois 576 }
1179     if (entite=="FACE_ELEMENT")
1180     {
1181     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1182     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
1183     mggeo->ajouter_mg_face(face);
1184     int nb=atoi(param[4].argument[0].c_str());
1185 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,face);
1186     /*if (nb!=0)
1187 francois 576 {
1188     for (int i=0;i<nb;i++)
1189     {
1190     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1191     char nom[3];
1192     double val;
1193     strcpy(nom,param[6].argument[0].c_str());
1194     val=atof(param[7].argument[0].c_str());
1195     face->ajouter_ccf(nom,val);
1196     }
1197 francois 763 }*/
1198 francois 576 }
1199 francois 685 if (entite=="COQUE_ELEMENT")
1200     {
1201     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1202     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
1203     mggeo->ajouter_mg_coque(coq);
1204     int nbele=atoi(param[2].argument[0].c_str());
1205     for (int i=0;i<nbele;i++)
1206     {
1207     unsigned long idele=cid(param[3].argument[i].c_str());
1208     coq->ajouter_element(idele);
1209     }
1210     int nb=atoi(param[4].argument[0].c_str());
1211 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
1212     /* if (nb!=0)
1213 francois 685 {
1214     for (int i=0;i<nb;i++)
1215     {
1216     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1217     char nom[3];
1218     double val;
1219     strcpy(nom,param[6].argument[0].c_str());
1220     val=atof(param[7].argument[0].c_str());
1221     coq->ajouter_ccf(nom,val);
1222     }
1223 francois 763 }*/
1224 francois 685 }
1225 francois 753 if (entite=="POUTRE_ELEMENT")
1226 francois 576 {
1227     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1228 francois 753 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
1229     mggeo->ajouter_mg_poutre(pou);
1230     int nbele=atoi(param[2].argument[0].c_str());
1231     for (int i=0;i<nbele;i++)
1232     {
1233     unsigned long idele=cid(param[3].argument[i].c_str());
1234     pou->ajouter_element(idele);
1235     }
1236     int nb=atoi(param[4].argument[0].c_str());
1237 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
1238     /*if (nb!=0)
1239 francois 753 {
1240     for (int i=0;i<nb;i++)
1241     {
1242     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1243     char nom[3];
1244     double val;
1245     strcpy(nom,param[6].argument[0].c_str());
1246     val=atof(param[7].argument[0].c_str());
1247     pou->ajouter_ccf(nom,val);
1248     }
1249 francois 763 }*/
1250 francois 753 }
1251     if (entite=="VOLUME_ELEMENT")
1252     {
1253     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1254 francois 576 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
1255     mggeo->ajouter_mg_volume(vol);
1256     int nb=atoi(param[4].argument[0].c_str());
1257 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
1258     /* if (nb!=0)
1259 francois 576 {
1260     for (int i=0;i<nb;i++)
1261     {
1262     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1263     char nom[3];
1264     double val;
1265     strcpy(nom,param[6].argument[0].c_str());
1266     val=atof(param[7].argument[0].c_str());
1267     vol->ajouter_ccf(nom,val);
1268     }
1269 francois 763 }*/
1270 francois 576 }
1271 francois 526 if (entite=="SOMMET_NOEUD")
1272     {
1273     parse.decode(data.c_str(),"@,@,(&)",param+2);
1274     long idnoeud=cid(param[2].argument[0]);
1275     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
1276     mggeo->ajouter_mg_sommet(mgsom);
1277     int nb=atoi(param[3].argument[0].c_str());
1278 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
1279     /*if (nb!=0)
1280 francois 526 {
1281     for (int i=0;i<nb;i++)
1282     {
1283     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
1284     char nom[3];
1285     double val;
1286     strcpy(nom,param[5].argument[0].c_str());
1287     val=atof(param[6].argument[0].c_str());
1288     mgsom->ajouter_ccf(nom,val);
1289     }
1290 francois 763 }*/
1291 francois 526 }
1292 francois 283 if (entite=="ARETE")
1293     {
1294     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1295     long idcur=cid(param[3].argument[0]);
1296     int sens=atoi(param[6].argument[0].c_str());
1297     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
1298     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
1299     mggeo->ajouter_mg_arete(mgarete);
1300     int nb=atoi(param[7].argument[0].c_str());
1301 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
1302     /*if (nb!=0)
1303 francois 283 {
1304     for (int i=0;i<nb;i++)
1305     {
1306     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
1307     char nom[3];
1308     double val;
1309     strcpy(nom,param[9].argument[0].c_str());
1310     val=atof(param[10].argument[0].c_str());
1311     mgarete->ajouter_ccf(nom,val);
1312     }
1313 francois 763 }*/
1314 francois 283 }
1315     if (entite=="COSOMMET")
1316     {
1317     parse.decode(data.c_str(),"@,@,@",param+2);
1318     long idsom=cid(param[2].argument[0]);
1319     long idarete=cid(param[3].argument[0]);
1320     int num=atoi(param[4].argument[0].c_str());
1321     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
1322     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1323     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
1324     if (num==1) mgarete->changer_cosommet1(mgcosom);
1325     if (num==2) mgarete->changer_cosommet2(mgcosom);
1326     }
1327     if (entite=="COARETE")
1328     {
1329     parse.decode(data.c_str(),"@,@,@",param+2);
1330     long idarete=cid(param[2].argument[0]);
1331     long idboucle=cid(param[3].argument[0]);
1332     int sens=atoi(param[4].argument[0].c_str());
1333     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1334     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
1335     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
1336     mgboucle->ajouter_mg_coarete(mgcoarete);
1337     }
1338     if (entite=="VISU_COURBE")
1339     {
1340     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1341     double xyz1[3];
1342     double xyz2[3];
1343     xyz1[0]=atof(param[2].argument[0].c_str());
1344     xyz1[1]=atof(param[3].argument[0].c_str());
1345     xyz1[2]=atof(param[4].argument[0].c_str());
1346     xyz2[0]=atof(param[5].argument[0].c_str());
1347     xyz2[1]=atof(param[6].argument[0].c_str());
1348     xyz2[2]=atof(param[7].argument[0].c_str());
1349     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
1350     mggeo->ajouter_mg_visu_courbe(mgcrb);
1351     }
1352     if (entite=="MAILLAGE")
1353     {
1354     parse.decode(data.c_str(),"@",param+2);
1355     long idgeo=cid(param[2].argument[0]);
1356 francois 626 mggeo=get_mg_geometrieid(idgeo);
1357 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
1358     ajouter_mg_maillage(mgmai);
1359     }
1360 francois 465 if (entite=="MAILLAGE_STRUCTURE")
1361     {
1362     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1363     long idgeo=cid(param[2].argument[0]);
1364 francois 626 mggeo=get_mg_geometrieid(idgeo);
1365 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
1366     ajouter_mg_maillage(mgmai);
1367     double xmin=atof(param[3].argument[0].c_str());
1368     double ymin=atof(param[4].argument[0].c_str());
1369     double zmin=atof(param[5].argument[0].c_str());
1370     double xmax=atof(param[6].argument[0].c_str());
1371     double ymax=atof(param[7].argument[0].c_str());
1372     double zmax=atof(param[8].argument[0].c_str());
1373     int nx=atoi(param[9].argument[0].c_str());
1374     int ny=atoi(param[10].argument[0].c_str());
1375     int nz=atoi(param[11].argument[0].c_str());
1376     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1377     mgmai->change_param_structure(b,nx,ny,nz);
1378     }
1379 francois 283 if (entite=="FEM_MAILLAGE")
1380     {
1381     parse.decode(data.c_str(),"@,@,@",param+2);
1382     int degre=atoi(param[2].argument[0].c_str());
1383     long idmai=cid(param[3].argument[0]);
1384     long idgeo=cid(param[4].argument[0]);
1385 francois 626 mggeo=get_mg_geometrieid(idgeo);
1386     mgmai=get_mg_maillageid(idmai);
1387 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1388     ajouter_fem_maillage(femmai);
1389     }
1390 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
1391     {
1392     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1393     int degre=atoi(param[2].argument[0].c_str());
1394     long idmai=cid(param[3].argument[0]);
1395     long idgeo=cid(param[4].argument[0]);
1396 francois 626 mggeo=get_mg_geometrieid(idgeo);
1397     mgmai=get_mg_maillageid(idmai);
1398 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1399     ajouter_fem_maillage(femmai);
1400     double xmin=atof(param[5].argument[0].c_str());
1401     double ymin=atof(param[6].argument[0].c_str());
1402     double zmin=atof(param[7].argument[0].c_str());
1403     double xmax=atof(param[8].argument[0].c_str());
1404     double ymax=atof(param[9].argument[0].c_str());
1405     double zmax=atof(param[10].argument[0].c_str());
1406     int nx=atoi(param[11].argument[0].c_str());
1407     int ny=atoi(param[12].argument[0].c_str());
1408     int nz=atoi(param[13].argument[0].c_str());
1409     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1410     femmai->change_param_structure(b,nx,ny,nz);
1411     }
1412 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
1413 francois 283 if (entite=="FEM_NOEUD")
1414     {
1415     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1416     long idtopo=cid(param[2].argument[0]);
1417     long idmai=cid(param[3].argument[0]);
1418     double x=atof(param[4].argument[0].c_str());
1419     double y=atof(param[5].argument[0].c_str());
1420     double z=atof(param[6].argument[0].c_str());
1421     int num=atoi(param[7].argument[0].c_str());
1422     int numopt=atoi(param[8].argument[0].c_str());
1423     MG_ELEMENT_MAILLAGE* elmai;
1424     if (idmai>-1)
1425     {
1426     elmai=mgmai->get_mg_noeudid(idmai);
1427     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
1428     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
1429     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
1430     }
1431     else elmai=NULL;
1432     FEM_NOEUD* noeud;
1433     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
1434     else
1435     {
1436     MG_ELEMENT_TOPOLOGIQUE* topo;
1437     if (idtopo>-1)
1438     {
1439     topo=mggeo->get_mg_sommetid(idtopo);
1440     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
1441     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1442     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1443     }
1444     else topo=NULL;
1445     noeud=new FEM_NOEUD(id,topo,x,y,z);
1446     }
1447     noeud->change_numero(num);
1448     noeud->change_numero_opt(numopt);
1449     femmai->ajouter_fem_noeud(noeud);
1450     }
1451     if (entite=="FEM_NOEUD_DEF")
1452     {
1453     parse.decode(data.c_str(),"@,@,@",param+2);
1454     double x=atof(param[2].argument[0].c_str());
1455     double y=atof(param[3].argument[0].c_str());
1456     double z=atof(param[4].argument[0].c_str());
1457     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1458     noeud->change_dx(x);
1459     noeud->change_dy(y);
1460     noeud->change_dz(z);
1461     femmai->active_deforme();
1462     }
1463 francois 325 if (entite=="FEM_NOEUD_REAC")
1464     {
1465     parse.decode(data.c_str(),"@,@,@",param+2);
1466     double x=atof(param[2].argument[0].c_str());
1467     double y=atof(param[3].argument[0].c_str());
1468     double z=atof(param[4].argument[0].c_str());
1469     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1470     noeud->change_rx(x);
1471     noeud->change_ry(y);
1472     noeud->change_rz(z);
1473 francois 339 femmai->active_reaction();;
1474 francois 325 }
1475 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
1476 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
1477     {
1478     parse.decode(data.c_str(),"@,@,@",param+2);
1479     long idtopo=cid(param[2].argument[0]);
1480     long idmai=cid(param[3].argument[0]);
1481     long idn1=cid(param[4].argument[0]);
1482     FEM_NOEUD* tab[1];
1483     tab[0]=femmai->get_fem_noeudid(idn1);
1484     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1485     if (idtopo>-1)
1486     topo=mggeo->get_mg_sommetid(idtopo);
1487     MG_ELEMENT_MAILLAGE* elmai;
1488     if (idmai>-1)
1489     elmai=mgmai->get_mg_noeudid(idmai);
1490     else elmai=NULL;
1491     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
1492     femmai->ajouter_fem_element0(fem);
1493     }
1494 francois 283 if (entite=="FEM_SEGMENT2")
1495     {
1496     parse.decode(data.c_str(),"@,@,@,@",param+2);
1497 francois 378 long idtopo=cid(param[2].argument[0]);
1498 francois 283 long idmai=cid(param[3].argument[0]);
1499     long idn1=cid(param[4].argument[0]);
1500     long idn2=cid(param[5].argument[0]);
1501     FEM_NOEUD* tab[2];
1502     tab[0]=femmai->get_fem_noeudid(idn1);
1503     tab[1]=femmai->get_fem_noeudid(idn2);
1504 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1505     if (idtopo>-1)
1506     topo=mggeo->get_mg_areteid(idtopo);
1507 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
1508 francois 378 MG_ELEMENT_MAILLAGE* elmai;
1509 francois 283 if (idmai>-1)
1510     elmai=mgmai->get_mg_segmentid(idmai);
1511     else elmai=NULL;
1512 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
1513 francois 309 femmai->ajouter_fem_element1(seg);
1514 francois 283 }
1515 francois 767 if (entite=="FEM_MINI_SEGMENT2")
1516     {
1517     parse.decode(data.c_str(),"@,@",param+2);
1518     long idn1=cid(param[2].argument[0]);
1519     long idn2=cid(param[3].argument[0]);
1520     FEM_NOEUD* tab[2];
1521     tab[0]=femmai->get_fem_noeudid(idn1);
1522     tab[1]=femmai->get_fem_noeudid(idn2);
1523     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());
1524     FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
1525     femmai->ajouter_fem_element1(seg);
1526     }
1527 francois 283 if (entite=="FEM_SEGMENT3")
1528     {
1529     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1530 francois 378 long idtopo=cid(param[2].argument[0]);
1531     long idmai=cid(param[3].argument[0]);
1532 francois 283 long idn1=cid(param[4].argument[0]);
1533     long idn2=cid(param[5].argument[0]);
1534     long idn3=cid(param[6].argument[0]);
1535     FEM_NOEUD* tab[3];
1536     tab[0]=femmai->get_fem_noeudid(idn1);
1537     tab[1]=femmai->get_fem_noeudid(idn2);
1538     tab[2]=femmai->get_fem_noeudid(idn3);
1539     MG_ELEMENT_MAILLAGE* elmai;
1540 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1541     if (idtopo>-1)
1542     topo=mggeo->get_mg_areteid(idtopo);
1543     if (idmai>-1)
1544 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
1545     else elmai=NULL;
1546 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
1547 francois 309 femmai->ajouter_fem_element1(seg);
1548 francois 283 }
1549 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
1550     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
1551 francois 283 if (entite=="FEM_TRIANGLE3")
1552     {
1553     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1554 francois 378 long idtopo=cid(param[2].argument[0]);
1555 francois 283 long idmai=cid(param[3].argument[0]);
1556     long idn1=cid(param[4].argument[0]);
1557     long idn2=cid(param[5].argument[0]);
1558     long idn3=cid(param[6].argument[0]);
1559     FEM_NOEUD* tab[3];
1560     tab[0]=femmai->get_fem_noeudid(idn1);
1561     tab[1]=femmai->get_fem_noeudid(idn2);
1562     tab[2]=femmai->get_fem_noeudid(idn3);
1563     MG_ELEMENT_MAILLAGE* elmai;
1564     if (idmai>-1)
1565     elmai=mgmai->get_mg_triangleid(idmai);
1566     else elmai=NULL;
1567 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1568     if (idtopo>-1)
1569 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1570 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
1571 francois 309 femmai->ajouter_fem_element2(tri);
1572 francois 283 }
1573     if (entite=="FEM_TRIANGLE6")
1574     {
1575     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1576 francois 378 long idtopo=cid(param[2].argument[0]);
1577 francois 283 long idmai=cid(param[3].argument[0]);
1578     long idn1=cid(param[4].argument[0]);
1579     long idn2=cid(param[5].argument[0]);
1580     long idn3=cid(param[6].argument[0]);
1581     long idn4=cid(param[7].argument[0]);
1582     long idn5=cid(param[8].argument[0]);
1583     long idn6=cid(param[9].argument[0]);
1584     FEM_NOEUD* tab[6];
1585     tab[0]=femmai->get_fem_noeudid(idn1);
1586     tab[1]=femmai->get_fem_noeudid(idn2);
1587     tab[2]=femmai->get_fem_noeudid(idn3);
1588     tab[3]=femmai->get_fem_noeudid(idn4);
1589     tab[4]=femmai->get_fem_noeudid(idn5);
1590     tab[5]=femmai->get_fem_noeudid(idn6);
1591     MG_ELEMENT_MAILLAGE* elmai;
1592     if (idmai>-1)
1593     elmai=mgmai->get_mg_triangleid(idmai);
1594     else elmai=NULL;
1595 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1596     if (idtopo>-1)
1597 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1598 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
1599 francois 309 femmai->ajouter_fem_element2(tri);
1600 francois 283 }
1601 francois 310 if (entite=="FEM_QUADRANGLE4")
1602     {
1603     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1604 francois 378 long idtopo=cid(param[2].argument[0]);
1605     long idmai=cid(param[3].argument[0]);
1606 francois 310 long idn1=cid(param[4].argument[0]);
1607     long idn2=cid(param[5].argument[0]);
1608     long idn3=cid(param[6].argument[0]);
1609     long idn4=cid(param[7].argument[0]);
1610     FEM_NOEUD* tab[4];
1611     tab[0]=femmai->get_fem_noeudid(idn1);
1612     tab[1]=femmai->get_fem_noeudid(idn2);
1613     tab[2]=femmai->get_fem_noeudid(idn3);
1614     tab[3]=femmai->get_fem_noeudid(idn4);
1615     MG_ELEMENT_MAILLAGE* elmai;
1616     if (idmai>-1)
1617     elmai=mgmai->get_mg_quadrangleid(idmai);
1618     else elmai=NULL;
1619 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1620     if (idtopo>-1)
1621 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1622 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
1623 francois 310 femmai->ajouter_fem_element2(quad);
1624     }
1625     if (entite=="FEM_QUADRANGLE8")
1626     {
1627     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1628 francois 378 long idtopo=cid(param[2].argument[0]);
1629     long idmai=cid(param[3].argument[0]);
1630 francois 310 long idn1=cid(param[4].argument[0]);
1631     long idn2=cid(param[5].argument[0]);
1632     long idn3=cid(param[6].argument[0]);
1633     long idn4=cid(param[7].argument[0]);
1634     long idn5=cid(param[8].argument[0]);
1635     long idn6=cid(param[9].argument[0]);
1636     long idn7=cid(param[10].argument[0]);
1637     long idn8=cid(param[11].argument[0]);
1638     FEM_NOEUD* tab[8];
1639     tab[0]=femmai->get_fem_noeudid(idn1);
1640     tab[1]=femmai->get_fem_noeudid(idn2);
1641     tab[2]=femmai->get_fem_noeudid(idn3);
1642     tab[3]=femmai->get_fem_noeudid(idn4);
1643     tab[4]=femmai->get_fem_noeudid(idn5);
1644     tab[5]=femmai->get_fem_noeudid(idn6);
1645     tab[6]=femmai->get_fem_noeudid(idn7);
1646     tab[7]=femmai->get_fem_noeudid(idn8);
1647     MG_ELEMENT_MAILLAGE* elmai;
1648     if (idmai>-1)
1649     elmai=mgmai->get_mg_quadrangleid(idmai);
1650     else elmai=NULL;
1651 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1652     if (idtopo>-1)
1653 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1654 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1655 francois 310 femmai->ajouter_fem_element2(quad);
1656     }
1657 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
1658    
1659     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
1660 francois 876 if (entite=="PENTAEDRE") lire_PENTA(id,parse,param,data,mgmai,mggeo);
1661 francois 283 if (entite=="FEM_TETRA4")
1662     {
1663 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1664 francois 378 long idtopo=cid(param[2].argument[0]);
1665     long idmai=cid(param[3].argument[0]);
1666 francois 283 long idn1=cid(param[4].argument[0]);
1667     long idn2=cid(param[5].argument[0]);
1668     long idn3=cid(param[6].argument[0]);
1669     long idn4=cid(param[7].argument[0]);
1670 francois 339 long etat=atoi(param[8].argument[0].c_str());
1671 francois 283 FEM_NOEUD* tab[4];
1672     tab[0]=femmai->get_fem_noeudid(idn1);
1673     tab[1]=femmai->get_fem_noeudid(idn2);
1674     tab[2]=femmai->get_fem_noeudid(idn3);
1675     tab[3]=femmai->get_fem_noeudid(idn4);
1676     MG_ELEMENT_MAILLAGE* elmai;
1677     if (idmai>-1)
1678     elmai=mgmai->get_mg_tetraid(idmai);
1679     else elmai=NULL;
1680 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1681     if (idtopo>-1)
1682 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1683 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1684 francois 410 tet->change_etat(0,etat);
1685 francois 309 femmai->ajouter_fem_element3(tet);
1686 francois 283 }
1687 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
1688 francois 339 {
1689 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
1690 francois 399 unsigned long idele=cid(param[2].argument[0]);
1691     unsigned long idtopo=cid(param[3].argument[0]);
1692     unsigned long idn1=cid(param[4].argument[0]);
1693 francois 380 int etat=atoi(param[5].argument[0].c_str());
1694 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
1695     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
1696     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
1697     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1698     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1699 francois 380 FEM_NOEUD* tab[4];
1700     tab[0]=femmai->get_fem_noeudid(idn1);
1701 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
1702     femmai->ajouter_xfem_element0(xele);
1703     xele->change_etat(etat);
1704     }
1705     if (entite=="XFEM_SEGMENT2")
1706     {
1707     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1708     unsigned long idele=cid(param[2].argument[0]);
1709     unsigned long idtopo=cid(param[3].argument[0]);
1710     unsigned long idn1=cid(param[4].argument[0]);
1711     unsigned long idn2=cid(param[5].argument[0]);
1712     int etat=atoi(param[6].argument[0].c_str());
1713     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
1714     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1715     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1716     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
1717     FEM_NOEUD* tab[4];
1718     tab[0]=femmai->get_fem_noeudid(idn1);
1719 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
1720 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
1721 francois 380 femmai->ajouter_xfem_element1(xseg);
1722 francois 399 xseg->change_etat(etat);
1723 francois 380 }
1724 francois 410 if (entite=="XFEM_TRIANGLE3")
1725     {
1726     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1727     unsigned long idtet=cid(param[2].argument[0]);
1728     unsigned long idtopo=cid(param[3].argument[0]);
1729     unsigned long idn1=cid(param[4].argument[0]);
1730     unsigned long idn2=cid(param[5].argument[0]);
1731     unsigned long idn3=cid(param[6].argument[0]);
1732     int etat=atoi(param[7].argument[0].c_str());
1733     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1734     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1735     FEM_NOEUD* tab[3];
1736     tab[0]=femmai->get_fem_noeudid(idn1);
1737     tab[1]=femmai->get_fem_noeudid(idn2);
1738     tab[2]=femmai->get_fem_noeudid(idn3);
1739     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
1740     femmai->ajouter_xfem_element2(xtri);
1741     xtri->change_etat(etat);
1742     }
1743 francois 380 if (entite=="XFEM_TETRA4")
1744     {
1745 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1746 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1747 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
1748     unsigned long idn1=cid(param[4].argument[0]);
1749     unsigned long idn2=cid(param[5].argument[0]);
1750     unsigned long idn3=cid(param[6].argument[0]);
1751     unsigned long idn4=cid(param[7].argument[0]);
1752     int etat=atoi(param[8].argument[0].c_str());
1753 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1754 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1755     FEM_NOEUD* tab[4];
1756 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
1757     tab[1]=femmai->get_fem_noeudid(idn2);
1758     tab[2]=femmai->get_fem_noeudid(idn3);
1759     tab[3]=femmai->get_fem_noeudid(idn4);
1760 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
1761 francois 339 femmai->ajouter_xfem_element3(xtet);
1762 francois 383 xtet->change_etat(etat);
1763 francois 339 }
1764 francois 283 if (entite=="FEM_TETRA10")
1765     {
1766     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1767 francois 378 long idtopo=cid(param[2].argument[0]);
1768     long idmai=cid(param[3].argument[0]);
1769 francois 283 long idn1=cid(param[4].argument[0]);
1770     long idn2=cid(param[5].argument[0]);
1771     long idn3=cid(param[6].argument[0]);
1772     long idn4=cid(param[7].argument[0]);
1773     long idn5=cid(param[8].argument[0]);
1774     long idn6=cid(param[9].argument[0]);
1775     long idn7=cid(param[10].argument[0]);
1776     long idn8=cid(param[11].argument[0]);
1777     long idn9=cid(param[12].argument[0]);
1778     long idn10=cid(param[13].argument[0]);
1779     FEM_NOEUD* tab[10];
1780     tab[0]=femmai->get_fem_noeudid(idn1);
1781     tab[1]=femmai->get_fem_noeudid(idn2);
1782     tab[2]=femmai->get_fem_noeudid(idn3);
1783     tab[3]=femmai->get_fem_noeudid(idn4);
1784     tab[4]=femmai->get_fem_noeudid(idn5);
1785     tab[5]=femmai->get_fem_noeudid(idn6);
1786     tab[6]=femmai->get_fem_noeudid(idn7);
1787     tab[7]=femmai->get_fem_noeudid(idn8);
1788     tab[8]=femmai->get_fem_noeudid(idn9);
1789     tab[9]=femmai->get_fem_noeudid(idn10);
1790     MG_ELEMENT_MAILLAGE* elmai;
1791     if (idmai>-1)
1792     elmai=mgmai->get_mg_tetraid(idmai);
1793     else elmai=NULL;
1794 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1795     if (idtopo>-1)
1796 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1797 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1798 francois 309 femmai->ajouter_fem_element3(tet);
1799 francois 283 }
1800 francois 310 if (entite=="FEM_HEXA8")
1801     {
1802     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1803 francois 378 long idtopo=cid(param[2].argument[0]);
1804     long idmai=cid(param[3].argument[0]);
1805 francois 310 long idn1=cid(param[4].argument[0]);
1806     long idn2=cid(param[5].argument[0]);
1807     long idn3=cid(param[6].argument[0]);
1808     long idn4=cid(param[7].argument[0]);
1809     long idn5=cid(param[8].argument[0]);
1810     long idn6=cid(param[9].argument[0]);
1811     long idn7=cid(param[10].argument[0]);
1812     long idn8=cid(param[11].argument[0]);
1813     FEM_NOEUD* tab[8];
1814     tab[0]=femmai->get_fem_noeudid(idn1);
1815     tab[1]=femmai->get_fem_noeudid(idn2);
1816     tab[2]=femmai->get_fem_noeudid(idn3);
1817     tab[3]=femmai->get_fem_noeudid(idn4);
1818     tab[4]=femmai->get_fem_noeudid(idn5);
1819     tab[5]=femmai->get_fem_noeudid(idn6);
1820     tab[6]=femmai->get_fem_noeudid(idn7);
1821     tab[7]=femmai->get_fem_noeudid(idn8);
1822     MG_ELEMENT_MAILLAGE* elmai;
1823     if (idmai>-1)
1824     elmai=mgmai->get_mg_hexaid(idmai);
1825     else elmai=NULL;
1826 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1827     if (idtopo>-1)
1828 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1829 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1830 francois 310 femmai->ajouter_fem_element3(hex);
1831     }
1832     if (entite=="FEM_HEXA20")
1833     {
1834     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1835 francois 378 long idtopo=cid(param[2].argument[0]);
1836     long idmai=cid(param[3].argument[0]);
1837 francois 310 long idn1=cid(param[4].argument[0]);
1838     long idn2=cid(param[5].argument[0]);
1839     long idn3=cid(param[6].argument[0]);
1840     long idn4=cid(param[7].argument[0]);
1841     long idn5=cid(param[8].argument[0]);
1842     long idn6=cid(param[9].argument[0]);
1843     long idn7=cid(param[10].argument[0]);
1844     long idn8=cid(param[11].argument[0]);
1845     long idn9=cid(param[12].argument[0]);
1846     long idn10=cid(param[13].argument[0]);
1847     long idn11=cid(param[14].argument[0]);
1848     long idn12=cid(param[15].argument[0]);
1849     long idn13=cid(param[16].argument[0]);
1850     long idn14=cid(param[17].argument[0]);
1851     long idn15=cid(param[18].argument[0]);
1852     long idn16=cid(param[19].argument[0]);
1853     long idn17=cid(param[20].argument[0]);
1854     long idn18=cid(param[21].argument[0]);
1855     long idn19=cid(param[22].argument[0]);
1856     long idn20=cid(param[23].argument[0]);
1857     FEM_NOEUD* tab[20];
1858     tab[0]=femmai->get_fem_noeudid(idn1);
1859     tab[1]=femmai->get_fem_noeudid(idn2);
1860     tab[2]=femmai->get_fem_noeudid(idn3);
1861     tab[3]=femmai->get_fem_noeudid(idn4);
1862     tab[4]=femmai->get_fem_noeudid(idn5);
1863     tab[5]=femmai->get_fem_noeudid(idn6);
1864     tab[6]=femmai->get_fem_noeudid(idn7);
1865     tab[7]=femmai->get_fem_noeudid(idn8);
1866     tab[8]=femmai->get_fem_noeudid(idn9);
1867     tab[9]=femmai->get_fem_noeudid(idn10);
1868     tab[10]=femmai->get_fem_noeudid(idn11);
1869     tab[11]=femmai->get_fem_noeudid(idn12);
1870     tab[12]=femmai->get_fem_noeudid(idn13);
1871     tab[13]=femmai->get_fem_noeudid(idn14);
1872     tab[14]=femmai->get_fem_noeudid(idn15);
1873     tab[15]=femmai->get_fem_noeudid(idn16);
1874     tab[16]=femmai->get_fem_noeudid(idn17);
1875     tab[17]=femmai->get_fem_noeudid(idn18);
1876     tab[18]=femmai->get_fem_noeudid(idn19);
1877     tab[19]=femmai->get_fem_noeudid(idn20);
1878     MG_ELEMENT_MAILLAGE* elmai;
1879     if (idmai>-1)
1880     elmai=mgmai->get_mg_hexaid(idmai);
1881     else elmai=NULL;
1882 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1883     if (idtopo>-1)
1884 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1885 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1886 francois 310 femmai->ajouter_fem_element3(hex);
1887     }
1888 francois 876 if (entite=="FEM_PENTA6")
1889 francois 283 {
1890 francois 876 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1891     long idtopo=cid(param[2].argument[0]);
1892     long idmai=cid(param[3].argument[0]);
1893     long idn1=cid(param[4].argument[0]);
1894     long idn2=cid(param[5].argument[0]);
1895     long idn3=cid(param[6].argument[0]);
1896     long idn4=cid(param[7].argument[0]);
1897     long idn5=cid(param[8].argument[0]);
1898     long idn6=cid(param[9].argument[0]);
1899     FEM_NOEUD* tab[6];
1900     tab[0]=femmai->get_fem_noeudid(idn1);
1901     tab[1]=femmai->get_fem_noeudid(idn2);
1902     tab[2]=femmai->get_fem_noeudid(idn3);
1903     tab[3]=femmai->get_fem_noeudid(idn4);
1904     tab[4]=femmai->get_fem_noeudid(idn5);
1905     tab[5]=femmai->get_fem_noeudid(idn6);
1906     MG_ELEMENT_MAILLAGE* elmai;
1907     if (idmai>-1)
1908 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
1909 francois 876 else elmai=NULL;
1910     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1911     if (idtopo>-1)
1912     topo=mggeo->get_mg_volumeid(idtopo);
1913     FEM_PENTA6* pen=new FEM_PENTA6(id,topo,elmai,tab);
1914     femmai->ajouter_fem_element3(pen);
1915     }
1916     if (entite=="FEM_PENTA15")
1917     {
1918     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1919     long idtopo=cid(param[2].argument[0]);
1920     long idmai=cid(param[3].argument[0]);
1921     long idn1=cid(param[4].argument[0]);
1922     long idn2=cid(param[5].argument[0]);
1923     long idn3=cid(param[6].argument[0]);
1924     long idn4=cid(param[7].argument[0]);
1925     long idn5=cid(param[8].argument[0]);
1926     long idn6=cid(param[9].argument[0]);
1927     long idn7=cid(param[10].argument[0]);
1928     long idn8=cid(param[11].argument[0]);
1929     long idn9=cid(param[12].argument[0]);
1930     long idn10=cid(param[13].argument[0]);
1931     long idn11=cid(param[14].argument[0]);
1932     long idn12=cid(param[15].argument[0]);
1933     long idn13=cid(param[16].argument[0]);
1934     long idn14=cid(param[17].argument[0]);
1935     long idn15=cid(param[18].argument[0]);
1936     FEM_NOEUD* tab[15];
1937     tab[0]=femmai->get_fem_noeudid(idn1);
1938     tab[1]=femmai->get_fem_noeudid(idn2);
1939     tab[2]=femmai->get_fem_noeudid(idn3);
1940     tab[3]=femmai->get_fem_noeudid(idn4);
1941     tab[4]=femmai->get_fem_noeudid(idn5);
1942     tab[5]=femmai->get_fem_noeudid(idn6);
1943     tab[6]=femmai->get_fem_noeudid(idn7);
1944     tab[7]=femmai->get_fem_noeudid(idn8);
1945     tab[8]=femmai->get_fem_noeudid(idn9);
1946     tab[9]=femmai->get_fem_noeudid(idn10);
1947     tab[10]=femmai->get_fem_noeudid(idn11);
1948     tab[11]=femmai->get_fem_noeudid(idn12);
1949     tab[12]=femmai->get_fem_noeudid(idn13);
1950     tab[13]=femmai->get_fem_noeudid(idn14);
1951     tab[14]=femmai->get_fem_noeudid(idn15);
1952     MG_ELEMENT_MAILLAGE* elmai;
1953     if (idmai>-1)
1954 francois 878 elmai=mgmai->get_mg_pentaid(idmai);
1955 francois 876 else elmai=NULL;
1956     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1957     if (idtopo>-1)
1958     topo=mggeo->get_mg_volumeid(idtopo);
1959     FEM_PENTA15* pen=new FEM_PENTA15(id,topo,elmai,tab);
1960     femmai->ajouter_fem_element3(pen);
1961     }
1962     if (entite=="SOLUTION")
1963     {
1964 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1965 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1966 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1967     std::string nomsol=param[4].argument[0];
1968     long idmai=cid(param[5].argument[0]);
1969     int nb=atoi(param[6].argument[0].c_str());
1970     std::string chemin=param[7].argument[0];
1971 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1972 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1973 francois 283 ajouter_mg_solution(sol);
1974     for (int i=0;i<nb;i++)
1975 francois 377 sol->change_legende(i,param[8].argument[i]);
1976 francois 283 }
1977     if (entite=="FEM_SOLUTION")
1978     {
1979 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1980 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1981 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1982     std::string nomsol=param[4].argument[0];
1983     long idmai=cid(param[5].argument[0]);
1984     int nb=atoi(param[6].argument[0].c_str());
1985     std::string chemin=param[7].argument[0];
1986 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1987 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1988 francois 283 ajouter_fem_solution(sol);
1989     for (int i=0;i<nb;i++)
1990 francois 375 sol->change_legende(i,param[8].argument[i]);
1991 francois 283 }
1992     #ifdef WINDOWS_VERSION
1993     if (entite=="CAD4FE_MCSEGMENT")
1994     {
1995     parse.decode(data.c_str(),"@,@,@",param+2);
1996     long idtopo=cid(param[2].argument[0]);
1997     long idn1=cid(param[3].argument[0]);
1998     long idn2=cid(param[4].argument[0]);
1999     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
2000     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
2001     MG_ELEMENT_TOPOLOGIQUE* topo;
2002     if (idtopo>-1)
2003     {
2004     topo=mggeo->get_mg_areteid(idtopo);
2005     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
2006     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
2007     }
2008     else topo=NULL;
2009     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
2010     mgmai->ajouter_mg_segment(seg);
2011     }
2012     if (entite=="CAD4FE_MCNODE")
2013     {
2014     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2015     long idRefTopo=cid(param[2].argument[0]);
2016     long idMCTopo=cid(param[3].argument[0]);
2017     double x=atof(param[4].argument[0].c_str());
2018     double y=atof(param[5].argument[0].c_str());
2019     double z=atof(param[6].argument[0].c_str());
2020     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
2021     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
2022     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
2023     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
2024     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
2025     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
2026     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
2027     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
2028     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
2029     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
2030    
2031     if (mcTopo->get_dimension()==0)
2032     {
2033     if (updatedMergedRefVertices == false)
2034     {
2035     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
2036     itMergedRefVertices != mapMergedRefVertices.end();
2037     itMergedRefVertices++)
2038     {
2039     CAD4FE::MCVertex * v = itMergedRefVertices->first;
2040     MG_SOMMET * refV = NULL;
2041     unsigned long id = itMergedRefVertices->second;
2042     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
2043     v->MergeRefVertex(refV);
2044     }
2045    
2046     updatedMergedRefVertices = true;
2047     }
2048     }
2049    
2050     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
2051     mgmai->ajouter_mg_noeud(noeud);
2052     }
2053     if (entite=="CAD4FE_MCTRIANGLE")
2054     {
2055     parse.decode(data.c_str(),"@,@,@,@",param+2);
2056     long idtopo=cid(param[2].argument[0]);
2057     long idn1=cid(param[3].argument[0]);
2058     long idn2=cid(param[4].argument[0]);
2059     long idn3=cid(param[5].argument[0]);
2060     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
2061     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
2062     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
2063     CAD4FE::MCSegment* mgsegment[3];
2064     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
2065     // la topo. d'un MCTriangle est obligatoirement une MCFace
2066     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
2067     for (int i=0;i<3;i++)
2068     {
2069     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
2070     if (mgsegment[i]==NULL)
2071     {
2072     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
2073     mgmai->ajouter_mg_segment(mgsegment[i]);
2074     }
2075     }
2076     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
2077     mgmai->ajouter_mg_triangle(triangle);
2078     }
2079     #endif
2080     }
2081     }
2082     while (param[0].argument[0]!="FIN");
2083 francois 878
2084 francois 881 for (int i=0;i<volumemince.size();i=i+3)
2085 francois 878 {
2086 francois 881 MG_VOLUME *vol=mggeo->get_mg_volumeid(volumemince[i]);
2087     MG_FACE* face1=mggeo->get_mg_faceid(volumemince[i+1]);
2088     MG_FACE* face2=mggeo->get_mg_faceid(volumemince[i+2]);
2089     vol->ajouter_face_correspondante(face1,face2);
2090 francois 878 }
2091    
2092    
2093 francois 741 LISTE_MG_ARBRE::iterator itarbre;
2094     for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
2095     {
2096     LISTE_MG_ASSEMBLAGE::iterator itass;
2097     for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
2098     ass->ini_donne(arb);
2099     }
2100 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
2101     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
2102     {
2103     LISTE_MG_SOMMET::iterator itsom;
2104     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
2105     if (som->est_un_sommet_noeud())
2106     {
2107     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
2108     unsigned long idnoeud=somno->get_id_mg_noeud();
2109     MG_NOEUD* noeud;
2110     LISTE_MG_MAILLAGE::iterator itmai;
2111     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
2112     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
2113     somno->change_mg_noeud(noeud);
2114     }
2115 francois 685 LISTE_MG_COQUE::iterator itcoq;
2116     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
2117     if (coq->est_une_coque_element())
2118     {
2119     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
2120     int nbele=coque->get_nb_liste_id();
2121     MG_MAILLAGE* mgmai=NULL;
2122     for (int i=0;i<nbele;i++)
2123     {
2124     unsigned long eleid=coque->get_liste_id(i);
2125     if (i==0)
2126     {
2127     LISTE_MG_MAILLAGE::iterator itmai;
2128     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
2129     {
2130     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
2131     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
2132     }
2133     }
2134     MG_ELEMENT_MAILLAGE* ele=NULL;
2135     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
2136     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
2137     coque->ajouter_element(ele);
2138     }
2139    
2140     }
2141 francois 753 LISTE_MG_POUTRE::iterator itpou;
2142     for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
2143     if (pou->est_une_poutre_element())
2144     {
2145     MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
2146     int nbele=poutre->get_nb_liste_id();
2147     MG_MAILLAGE* mgmai=NULL;
2148     for (int i=0;i<nbele;i++)
2149     {
2150     unsigned long eleid=poutre->get_liste_id(i);
2151     if (i==0)
2152     {
2153     LISTE_MG_MAILLAGE::iterator itmai;
2154     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
2155     {
2156     if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
2157     }
2158     }
2159     MG_ELEMENT_MAILLAGE* ele=NULL;
2160     if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
2161     poutre->ajouter_element(ele);
2162     }
2163    
2164     }
2165 francois 526 }
2166 francois 283 #ifdef WINDOWS_VERSION
2167     if (updatedMergedRefVertices == false)
2168     {
2169     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
2170     itMergedRefVertices != mapMergedRefVertices.end();
2171     itMergedRefVertices++)
2172     {
2173     CAD4FE::MCVertex * v = itMergedRefVertices->first;
2174     MG_SOMMET * refV = NULL;
2175     unsigned long id = itMergedRefVertices->second;
2176     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
2177     v->MergeRefVertex(refV);
2178     }
2179    
2180     updatedMergedRefVertices = true;
2181     }
2182    
2183     #endif
2184     fclose(in);
2185     return 1;
2186     }
2187    
2188    
2189    
2190