ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 876
Committed: Fri Mar 24 19:40:04 2017 UTC (8 years, 1 month ago) by francois
File size: 91048 byte(s)
Log Message:
ajouts des elements pentaedriques dans le mg_maillage et dans le fem_maillage (6 et 15 noeuds).
+notion sur les coquilles minces (incomplet)
+operations sur les fem_solution

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