ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 378
Committed: Tue Nov 27 20:54:58 2012 UTC (12 years, 5 months ago) by francois
File size: 60150 byte(s)
Log Message:
ajout de methode de construction pour les fem elements compatible avec le decoupage XFEM. + bug de format de fichier dans les fem elements non visible en dehors du xfem

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     #include "pars_argument.h"
32     #include "parse.h"
33     #ifdef BREP_STEP
34     #include "step_surface.h"
35     #include "step_courbe.h"
36     #include "step_point.h"
37     #endif
38     #ifdef BREP_SAT
39     #include "acis_surface.h"
40     #include "acis_courbe.h"
41     #include "acis_point.h"
42     #endif
43     #ifdef BREP_SLD
44     #include "sld_point.h"
45     #include "sld_courbe.h"
46     #include "sld_surface.h"
47     #include "sld_fonction.h"
48     #endif
49     #include "lc_point.h"
50 francois 310 #include "fem_segment2.h"
51     #include "fem_segment3.h"
52     #include "fem_triangle3.h"
53     #include "fem_triangle6.h"
54     #include "fem_quadrangle4.h"
55     #include "fem_quadrangle8.h"
56     #include "fem_tetra4.h"
57 francois 339 #include "xfem_tetra4.h"
58 francois 310 #include "fem_tetra10.h"
59     #include "fem_hexa8.h"
60     #include "fem_hexa20.h"
61 francois 283 //OCC
62     #ifdef BREP_OCC
63     #include "occ_surface.h"
64     #include "occ_point.h"
65     #include "occ_courbe.h"
66     #include "occ_fonction1.h"
67     #include "TopoDS_Shape.hxx"
68     #include "TopoDS.hxx"
69     #endif
70     //---------------------------------------------------------------------------
71     // CAD4FE Headers
72     #ifdef WINDOWS_VERSION
73     #include "CAD4FE_MCEdge.h"
74     #include "CAD4FE_MCFace.h"
75     #include "CAD4FE_MCVertex.h"
76     #include "CAD4FE_PolySurface.h"
77     #include "CAD4FE_PolyCurve.h"
78     #include "CAD4FE_MCNode.h"
79     #include "CAD4FE_MCSegment.h"
80     #include "CAD4FE_MCTriangle.h"
81     #include "CAD4FE_m3d_MCTriangle.h"
82     #endif
83     //---------------------------------------------------------------------------
84    
85    
86     //---------------------------------------------------------------------------
87     #pragma package(smart_init)
88    
89     MG_FILE::MG_FILE():MG_GESTIONNAIRE()
90     {
91     }
92    
93     MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
94     {
95     code_de_lecture=lire(chemin);
96     }
97    
98     MG_FILE::~MG_FILE()
99     {
100     }
101    
102     int MG_FILE::get_code_de_lecture(void)
103     {
104     return code_de_lecture;
105     }
106    
107     long MG_FILE::cid(std::string str)
108     {
109     const char *p=str.c_str();
110     if (*p=='$') return atol(p+1);
111     return -1;
112     }
113    
114     int MG_FILE::lire(char* chemin)
115     {
116     FILE *in;
117     char ligne[3000];
118     in=fopen(chemin,"rt");
119     if (in==NULL) return 0;
120     PARS_ARGUMENT param[100];
121     PARSE parse;
122    
123     MG_GEOMETRIE *mggeo;
124     #ifdef WINDOWS_VERSION
125     std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
126     #endif
127     bool updatedMergedRefVertices = false;
128    
129     do
130     {
131     int ierr;
132     std::string ligne=parse.lire(in,';',&ierr);
133     parse.decode(ligne.c_str(),"@;",param);
134     const char *chaine=param[0].argument[0].c_str();
135     if ((chaine[0]=='/') && (chaine[1]=='/'))
136     {
137     if ((chaine[2]=='*')&&(chaine[3]=='i'))
138     {
139     unsigned long id;
140     sscanf(chaine,"//*i:%lu;",&id);
141     entiteidmax=id;
142     }
143     }
144     else if (param[0].argument[0]!="FIN")
145     {
146     parse.decode(ligne.c_str(),"%@=@(@);",param);
147     std::string entite=param[1].argument[0];
148     long id=atol(param[0].argument[0].c_str());
149     std::string data=param[2].argument[0] ;
150     MG_MAILLAGE *mgmai;
151     FEM_MAILLAGE *femmai;
152     if (entite=="GEOMETRIE")
153     {
154     parse.decode(data.c_str(),"@,@,@,@",param+2);
155     double unite=atof(param[2].argument[0].c_str());
156     std::string typegeo=param[3].argument[0];
157     std::string chemin=param[4].argument[0];
158     #ifdef BREP_STEP
159     if (typegeo=="STEP")
160     {
161     fichstep.change_nom((char *)chemin.c_str());
162     int code=fichstep.lire();
163     if (code==0) return 0;
164     mggeo=new MG_GEOMETRIE((char*)"STEP",id,fichstep.get_nom(),unite);
165     ajouter_mg_geometrie(mggeo);
166     }
167     #endif
168     #ifdef BREP_SAT
169     if (typegeo=="ACIS")
170     {
171     fichsat.change_nom((char *)chemin.c_str());
172     int code=fichsat.lire();
173     if (code==0) return 0;
174     mggeo=new MG_GEOMETRIE((char*)"ACIS",id,fichsat.get_nom(),unite);
175     ajouter_mg_geometrie(mggeo);
176     }
177     #endif
178     #ifdef BREP_SLD
179     if (typegeo=="SLD")
180     {
181     fonction->Connection();
182     fonction->OuvrirFichier((char *)chemin.c_str() );
183     mggeo=new MG_GEOMETRIE((char*)"SLD",id,chemin.c_str(),unite);
184     ajouter_mg_geometrie(mggeo);
185     ouvertsld=1;
186     }
187     #endif
188    
189     #ifdef BREP_OCC
190     if (typegeo=="OCC")
191     {
192     fonction1->OuvrirFichier((char *)chemin.c_str() );
193     mggeo=new MG_GEOMETRIE((char*)"OCC",id,chemin.c_str(),unite);
194     ajouter_mg_geometrie(mggeo);
195     }
196     #endif
197    
198     std::string nommat="";
199     if (param[5].argument[0]!="")
200     nommat=param[5].argument[0];
201     mggeo->change_gest_materiau((char*)nommat.c_str());
202     }
203     if (entite=="GEOMETRIE_EPS")
204     {
205     parse.decode(data.c_str(),"@",param+2);
206     double val=atof((char*)param[2].argument[0].c_str());
207     mggeo->change_valeur_precision(val);
208     }
209     if (entite=="GROUPE_TOPOLOGIQUE")
210     {
211     parse.decode(data.c_str(),"@,(&)",param+2);
212     MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
213     mggeo->ajouter_mg_groupe_topologique(mggt);
214     int nb=atoi(param[2].argument[0].c_str());
215     for (int i=0;i<nb;i++)
216     {
217     unsigned long id2=cid(param[3].argument[i].c_str());
218     MG_ELEMENT_TOPOLOGIQUE* ele;
219     ele=mggeo->get_mg_sommetid(id2);
220     if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
221     if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
222     if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
223     if (ele!=NULL) mggt->ajouter(ele);
224     }
225    
226     }
227     if (entite=="VOLUME")
228     {
229     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
230     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
231     mggeo->ajouter_mg_volume(mgvol);
232     int nummat=atoi((char*)param[4].argument[0].c_str());
233     mgvol->change_num_materiau(nummat);
234     int nb=atoi(param[5].argument[0].c_str());
235     if (nb!=0)
236     {
237     for (int i=0;i<nb;i++)
238     {
239     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
240     char nom[3];
241     double val;
242     strcpy(nom,param[7].argument[0].c_str());
243     val=atof(param[8].argument[0].c_str());
244     mgvol->ajouter_ccf(nom,val);
245     }
246     }
247     }
248     if (entite=="COQUE")
249     {
250     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
251     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
252     mggeo->ajouter_mg_coque(mgcoq);
253     int nummat=atoi((char*)param[4].argument[0].c_str());
254     mgcoq->change_num_materiau(nummat);
255     int nb=atoi(param[5].argument[0].c_str());
256     if (nb!=0)
257     {
258     for (int i=0;i<nb;i++)
259     {
260     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
261     char nom[3];
262     double val;
263     strcpy(nom,param[7].argument[0].c_str());
264     val=atof(param[8].argument[0].c_str());
265     mgcoq->ajouter_ccf(nom,val);
266     }
267     }
268     }
269     if (entite=="POUTRE")
270     {
271     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
272     MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
273     mggeo->ajouter_mg_poutre(mgpoutre);
274     int nummat=atoi((char*)param[4].argument[0].c_str());
275     mgpoutre->change_num_materiau(nummat);
276     int nb=atoi(param[5].argument[0].c_str());
277     if (nb!=0)
278     {
279     for (int i=0;i<nb;i++)
280     {
281     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
282     char nom[3];
283     double val;
284     strcpy(nom,param[7].argument[0].c_str());
285     val=atof(param[8].argument[0].c_str());
286     mgpoutre->ajouter_ccf(nom,val);
287     }
288     }
289     }
290     if (entite=="COQUILLE")
291     {
292     parse.decode(data.c_str(),"@,@",param+2);
293     long ident=cid(param[2].argument[0]);
294     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
295     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
296     if (mgvol!=NULL)
297     {
298     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
299     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
300     }
301     if (mgcoq!=NULL)
302     {
303     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
304     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
305     }
306    
307     }
308     #ifdef BREP_STEP
309     if (entite=="SURFACE_STEP")
310     {
311     parse.decode(data.c_str(),"@",param+2);
312     long idstepsuf=atol(param[2].argument[0].c_str());
313     ST_SURFACE *stsurf=fichstep.lst_surface.getid(idstepsuf);
314     STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
315     mggeo->ajouter_mg_surface(stepsurf);
316     }
317     if (entite=="COURBE_STEP")
318     {
319     parse.decode(data.c_str(),"@",param+2);
320     long idstepcur=atol(param[2].argument[0].c_str());
321     ST_COURBE *stcur=fichstep.lst_courbe.getid(idstepcur);
322     STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
323     mggeo->ajouter_mg_courbe(stepcur);
324     }
325    
326     if (entite=="POINT_STEP")
327     {
328     parse.decode(data.c_str(),"@",param+2);
329     long idsteppt=atol(param[2].argument[0].c_str());
330     ST_POINT *stpt=fichstep.lst_point.getid(idsteppt);
331     STEP_POINT* steppt=new STEP_POINT(id,stpt);
332     mggeo->ajouter_mg_point(steppt);
333     }
334    
335     #endif
336     #ifdef BREP_SAT
337     if (entite=="SURFACE_SAT")
338     {
339     parse.decode(data.c_str(),"@",param+2);
340     long idsatsuf=atol(param[2].argument[0].c_str());
341     SAT_SURFACE *satsurf=fichsat.lst_surface.getid(idsatsuf);
342     ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
343     mggeo->ajouter_mg_surface(acissurf);
344     }
345     if (entite=="COURBE_SAT")
346     {
347     parse.decode(data.c_str(),"@",param+2);
348     long idsatcur=atol(param[2].argument[0].c_str());
349     SAT_COURBE *satcur=fichsat.lst_courbe.getid(idsatcur);
350     ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
351     mggeo->ajouter_mg_courbe(aciscur);
352     }
353    
354     if (entite=="POINT_SAT")
355     {
356     parse.decode(data.c_str(),"@",param+2);
357     long idsatpt=atol(param[2].argument[0].c_str());
358     SAT_POINT *satpt=fichsat.lst_point.getid(idsatpt);
359     ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
360     mggeo->ajouter_mg_point(acispt);
361     }
362    
363     #endif
364     #ifdef BREP_SLD
365     if (entite=="SURFACE_SLD")
366     {
367     parse.decode(data.c_str(),"@",param+2);
368     CComPtr<IFace2> swface;
369     char* idsld=(char*)param[2].argument[0].c_str();
370     SLD_SURFACE* sldsurf=new SLD_SURFACE(id,idsld,*fonction);
371     mggeo->ajouter_mg_surface(sldsurf);
372     }
373     if (entite=="COURBE_SLD")
374     {
375     parse.decode(data.c_str(),"@",param+2);
376     CComPtr<IEdge> swedge;
377     char* idsld=(char*)param[2].argument[0].c_str();
378     SLD_COURBE* sldcrb=new SLD_COURBE(id,idsld,*fonction);
379     mggeo->ajouter_mg_courbe(sldcrb);
380     }
381    
382     if (entite=="POINT_SLD")
383     {
384     parse.decode(data.c_str(),"@",param+2);
385     CComPtr<IVertex> swvertex;
386     char* idsld=(char*)param[2].argument[0].c_str();
387     SLD_POINT* sldpoint=new SLD_POINT(id,idsld,*fonction);
388     mggeo->ajouter_mg_point(sldpoint);
389     }
390    
391     #endif
392    
393     #ifdef BREP_OCC
394    
395     if (entite=="SURFACE_OCC")
396     {
397     parse.decode(data.c_str(),"@",param+2);
398     long idocc=atol(param[2].argument[0].c_str());
399     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
400     TopoDS_Face occface=TopoDS::Face(occshape);
401     OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface, *fonction1);
402     mggeo->ajouter_mg_surface(occsurf);
403     }
404     if (entite=="COURBE_OCC")
405     {
406     parse.decode(data.c_str(),"@",param+2);
407     long idocc=atol(param[2].argument[0].c_str());
408     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
409     TopoDS_Edge occedge=TopoDS::Edge(occshape);
410     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, *fonction1);
411     mggeo->ajouter_mg_courbe(occcrb);
412     }
413     if (entite=="POINT_OCC")
414     {
415     parse.decode(data.c_str(),"@",param+2);
416     long idocc=atol(param[2].argument[0].c_str());
417     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
418     TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
419     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, *fonction1);
420     mggeo->ajouter_mg_point(occpoint);
421     }
422     #endif
423     #ifdef WINDOWS_VERSION
424     if (entite=="CAD4FE_POLYCURVE")
425     {
426     CAD4FE::PolyCurve * polycurve = NULL;
427     parse.decode(data.c_str(),"@,(&)",param+2);
428     int nb = atoi(param[2].argument[0].c_str());
429    
430     if (nb == 0)
431     {
432     printf("PolyCurve %d is formed with reference vertex : ", id);
433     parse.decode(param[3].argument[0].c_str(),"@",param+4);
434     int idRefVertex;
435     idRefVertex=cid(param[4].argument[0].c_str());
436     printf("%d ;\n ", idRefVertex);
437     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
438     polycurve = new CAD4FE::PolyCurve(refVertex);
439     }
440     else
441     {
442     printf("PolyCurve %d is formed with reference edges : ", id);
443     polycurve = new CAD4FE::PolyCurve;
444     for (int i=0;i<nb;i++)
445     {
446     parse.decode(param[3].argument[i].c_str(),"@",param+4);
447     int idRefEdge;
448     idRefEdge=cid(param[4].argument[0].c_str());
449     printf("%d ; ", idRefEdge);
450     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
451     CAD4FE::PolyCurve tmpPC(refEdge);
452     polycurve->Merge(tmpPC);
453     }
454     printf("\n");
455     }
456    
457     polycurve->change_id(id);
458     mggeo->ajouter_mg_courbe(polycurve);
459     }
460    
461    
462     if (entite=="CAD4FE_POLYSURFACE")
463     {
464     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
465     polysurface->change_id(id);
466     mggeo->ajouter_mg_surface(polysurface);
467    
468     parse.decode(data.c_str(),"@,(&)",param+2);
469    
470     int nb = atoi(param[2].argument[0].c_str());
471     printf("PolySurface %d is formed with reference faces : ", id);
472     for (int i=0;i<nb;i++)
473     {
474     parse.decode(param[3].argument[i].c_str(),"@",param+4);
475     int idRefFace;
476     idRefFace=cid(param[4].argument[0].c_str());
477     printf("%d ; ", idRefFace);
478    
479     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
480     CAD4FE::PolySurface tmpSF(refFace);
481     polysurface->Merge(tmpSF);
482     }
483    
484     printf("\n");
485     }
486     if (entite=="CAD4FE_MCEDGE")
487     {
488     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
489    
490     std::string idOriginal = param[2].argument[0];
491     long idPolyCurve=cid(param[3].argument[0]);
492     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
493    
494     // sense is not used because a MCEdge always has
495     // a sense = 1 !
496     // (because polycurve domain is equal to mcEdge domain)
497     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
498     mcEdge->change_id(id);
499     mggeo->ajouter_mg_arete(mcEdge);
500    
501     int nb=atoi(param[7].argument[0].c_str());
502     if (nb!=0)
503     {
504     for (int i=0;i<nb;i++)
505     {
506     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
507     char nom[3];
508     double val;
509     strcpy(nom,param[9].argument[0].c_str());
510     val=atof(param[10].argument[0].c_str());
511     mcEdge->ajouter_ccf(nom,val);
512     }
513     }
514     }
515     if (entite=="CAD4FE_MCFACE")
516     {
517     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
518    
519     std::string idOriginal = param[2].argument[0];
520     long idPolySurface=cid(param[3].argument[0]);
521     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
522    
523     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
524     mcFace->change_id(id);
525     mggeo->ajouter_mg_face(mcFace);
526    
527     int nb=atoi(param[6].argument[0].c_str());
528     if (nb!=0)
529     {
530     for (int i=0;i<nb;i++)
531     {
532     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
533     char nom[3];
534     double val;
535     strcpy(nom,param[8].argument[0].c_str());
536     val=atof(param[9].argument[0].c_str());
537     mcFace->ajouter_ccf(nom,val);
538     }
539     }
540     }
541     if (entite=="CAD4FE_MCVERTEX")
542     {
543     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
544     std::string idOriginal = param[2].argument[0];
545     long idsom=cid(param[3].argument[0]);
546     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
547     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
548     mcVertex->change_id(id);
549     mggeo->ajouter_mg_sommet(mcVertex);
550     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
551     if (nb_ref_vertex!=0)
552     {
553     for (int i=0;i<nb_ref_vertex;i++)
554     {
555     unsigned long idRefVertex=cid(param[5].argument[i]);
556     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
557     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
558     }
559     }
560     int nb_ccf=atoi(param[4+2].argument[0].c_str());
561     if (nb_ccf!=0)
562     {
563     for (int i=0;i<nb_ccf;i++)
564     {
565     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
566     char nom_ccf[3];
567     double val_ccf;
568     strcpy(nom_ccf,param[6+2].argument[0].c_str());
569     val_ccf=atof(param[7+2].argument[0].c_str());
570     mgsom->ajouter_ccf(nom_ccf,val_ccf);
571     }
572     }
573     }
574     #endif
575     if (entite=="FACE")
576     {
577     parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
578     long idsurf=cid(param[3].argument[0]);
579     int sens=atoi(param[5].argument[0].c_str());
580     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
581     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
582     mggeo->ajouter_mg_face(mgface);
583     int nb=atoi(param[6].argument[0].c_str());
584     if (nb!=0)
585     {
586     for (int i=0;i<nb;i++)
587     {
588     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
589     char nom[3];
590     double val;
591     strcpy(nom,param[8].argument[0].c_str());
592     val=atof(param[9].argument[0].c_str());
593     mgface->ajouter_ccf(nom,val);
594     }
595     }
596     }
597     if (entite=="COFACE")
598     {
599     parse.decode(data.c_str(),"@,@,@",param+2);
600     long idface=cid(param[2].argument[0]);
601     long idcoq=cid(param[3].argument[0]);
602     int sens=atoi(param[4].argument[0].c_str());
603     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
604     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
605     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
606     mgcoq->ajouter_mg_coface(mgcoface);
607     }
608     if (entite=="BOUCLE")
609     {
610     parse.decode(data.c_str(),"@,(@)",param+2);
611     long ident=cid(param[2].argument[0]);
612     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
613     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
614     if (mgface!=NULL)
615     {
616     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
617     mggeo->ajouter_mg_boucle(mgbou,mgface);
618     }
619     if (mgpoutre!=NULL)
620     {
621     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
622     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
623     }
624     }
625     if (entite=="POINT")
626     {
627     parse.decode(data.c_str(),"@,@,@",param+2);
628     double xyz[3];
629     xyz[0]=atof(param[2].argument[0].c_str());
630     xyz[1]=atof(param[3].argument[0].c_str());
631     xyz[2]=atof(param[4].argument[0].c_str());
632     LC_POINT* point=new LC_POINT(id,xyz);
633     mggeo->ajouter_mg_point(point);
634     }
635     if (entite=="SOMMET")
636     {
637     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
638     long idpoint=cid(param[3].argument[0]);
639     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
640     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
641     mggeo->ajouter_mg_sommet(mgsom);
642     int nb=atoi(param[4].argument[0].c_str());
643     if (nb!=0)
644     {
645     for (int i=0;i<nb;i++)
646     {
647     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
648     char nom[3];
649     double val;
650     strcpy(nom,param[6].argument[0].c_str());
651     val=atof(param[7].argument[0].c_str());
652     mgsom->ajouter_ccf(nom,val);
653     }
654     }
655     }
656     if (entite=="ARETE")
657     {
658     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
659     long idcur=cid(param[3].argument[0]);
660     int sens=atoi(param[6].argument[0].c_str());
661     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
662     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
663     mggeo->ajouter_mg_arete(mgarete);
664     int nb=atoi(param[7].argument[0].c_str());
665     if (nb!=0)
666     {
667     for (int i=0;i<nb;i++)
668     {
669     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
670     char nom[3];
671     double val;
672     strcpy(nom,param[9].argument[0].c_str());
673     val=atof(param[10].argument[0].c_str());
674     mgarete->ajouter_ccf(nom,val);
675     }
676     }
677     }
678     if (entite=="COSOMMET")
679     {
680     parse.decode(data.c_str(),"@,@,@",param+2);
681     long idsom=cid(param[2].argument[0]);
682     long idarete=cid(param[3].argument[0]);
683     int num=atoi(param[4].argument[0].c_str());
684     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
685     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
686     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
687     if (num==1) mgarete->changer_cosommet1(mgcosom);
688     if (num==2) mgarete->changer_cosommet2(mgcosom);
689     }
690     if (entite=="COARETE")
691     {
692     parse.decode(data.c_str(),"@,@,@",param+2);
693     long idarete=cid(param[2].argument[0]);
694     long idboucle=cid(param[3].argument[0]);
695     int sens=atoi(param[4].argument[0].c_str());
696     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
697     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
698     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
699     mgboucle->ajouter_mg_coarete(mgcoarete);
700     }
701     if (entite=="VISU_COURBE")
702     {
703     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
704     double xyz1[3];
705     double xyz2[3];
706     xyz1[0]=atof(param[2].argument[0].c_str());
707     xyz1[1]=atof(param[3].argument[0].c_str());
708     xyz1[2]=atof(param[4].argument[0].c_str());
709     xyz2[0]=atof(param[5].argument[0].c_str());
710     xyz2[1]=atof(param[6].argument[0].c_str());
711     xyz2[2]=atof(param[7].argument[0].c_str());
712     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
713     mggeo->ajouter_mg_visu_courbe(mgcrb);
714     }
715     if (entite=="MAILLAGE")
716     {
717     parse.decode(data.c_str(),"@",param+2);
718     long idgeo=cid(param[2].argument[0]);
719     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
720     mgmai=new MG_MAILLAGE(id,mggeo);
721     ajouter_mg_maillage(mgmai);
722     }
723     if (entite=="FEM_MAILLAGE")
724     {
725     parse.decode(data.c_str(),"@,@,@",param+2);
726     int degre=atoi(param[2].argument[0].c_str());
727     long idmai=cid(param[3].argument[0]);
728     long idgeo=cid(param[4].argument[0]);
729     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
730     MG_MAILLAGE* mgmai=get_mg_maillageid(idmai);
731     femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
732     ajouter_fem_maillage(femmai);
733     }
734     if (entite=="NOEUD")
735     {
736     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
737     long idtopo=cid(param[2].argument[0]);
738     double x=atof(param[3].argument[0].c_str());
739     double y=atof(param[4].argument[0].c_str());
740     double z=atof(param[5].argument[0].c_str());
741     int ori=atoi(param[6].argument[0].c_str());
742     MG_ELEMENT_TOPOLOGIQUE* topo;
743     if (idtopo>-1)
744     {
745     topo=mggeo->get_mg_sommetid(idtopo);
746     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
747     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
748     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
749     }
750     else topo=NULL;
751     MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
752     mgmai->ajouter_mg_noeud(noeud);
753     }
754     if (entite=="FEM_NOEUD")
755     {
756     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
757     long idtopo=cid(param[2].argument[0]);
758     long idmai=cid(param[3].argument[0]);
759     double x=atof(param[4].argument[0].c_str());
760     double y=atof(param[5].argument[0].c_str());
761     double z=atof(param[6].argument[0].c_str());
762     int num=atoi(param[7].argument[0].c_str());
763     int numopt=atoi(param[8].argument[0].c_str());
764     MG_ELEMENT_MAILLAGE* elmai;
765     if (idmai>-1)
766     {
767     elmai=mgmai->get_mg_noeudid(idmai);
768     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
769     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
770     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
771     }
772     else elmai=NULL;
773     FEM_NOEUD* noeud;
774     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
775     else
776     {
777     MG_ELEMENT_TOPOLOGIQUE* topo;
778     if (idtopo>-1)
779     {
780     topo=mggeo->get_mg_sommetid(idtopo);
781     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
782     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
783     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
784     }
785     else topo=NULL;
786     noeud=new FEM_NOEUD(id,topo,x,y,z);
787     }
788     noeud->change_numero(num);
789     noeud->change_numero_opt(numopt);
790     femmai->ajouter_fem_noeud(noeud);
791     }
792     if (entite=="FEM_NOEUD_DEF")
793     {
794     parse.decode(data.c_str(),"@,@,@",param+2);
795     double x=atof(param[2].argument[0].c_str());
796     double y=atof(param[3].argument[0].c_str());
797     double z=atof(param[4].argument[0].c_str());
798     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
799     noeud->change_dx(x);
800     noeud->change_dy(y);
801     noeud->change_dz(z);
802     femmai->active_deforme();
803     }
804 francois 325 if (entite=="FEM_NOEUD_REAC")
805     {
806     parse.decode(data.c_str(),"@,@,@",param+2);
807     double x=atof(param[2].argument[0].c_str());
808     double y=atof(param[3].argument[0].c_str());
809     double z=atof(param[4].argument[0].c_str());
810     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
811     noeud->change_rx(x);
812     noeud->change_ry(y);
813     noeud->change_rz(z);
814 francois 339 femmai->active_reaction();;
815 francois 325 }
816 francois 283 if (entite=="SEGMENT")
817     {
818     parse.decode(data.c_str(),"@,@,@,@",param+2);
819     long idtopo=cid(param[2].argument[0]);
820     long idn1=cid(param[3].argument[0]);
821     long idn2=cid(param[4].argument[0]);
822     int ori=atoi(param[5].argument[0].c_str());
823     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
824     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
825     MG_ELEMENT_TOPOLOGIQUE* topo;
826     if (idtopo>-1)
827     {
828     topo=mggeo->get_mg_areteid(idtopo);
829     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
830     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
831     }
832     else topo=NULL;
833     MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
834     mgmai->ajouter_mg_segment(seg);
835     }
836     if (entite=="FEM_SEGMENT2")
837     {
838     parse.decode(data.c_str(),"@,@,@,@",param+2);
839 francois 378 long idtopo=cid(param[2].argument[0]);
840 francois 283 long idmai=cid(param[3].argument[0]);
841     long idn1=cid(param[4].argument[0]);
842     long idn2=cid(param[5].argument[0]);
843     FEM_NOEUD* tab[2];
844     tab[0]=femmai->get_fem_noeudid(idn1);
845     tab[1]=femmai->get_fem_noeudid(idn2);
846 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
847     if (idtopo>-1)
848     topo=mggeo->get_mg_areteid(idtopo);
849     MG_ELEMENT_MAILLAGE* elmai;
850 francois 283 if (idmai>-1)
851     elmai=mgmai->get_mg_segmentid(idmai);
852     else elmai=NULL;
853 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
854 francois 309 femmai->ajouter_fem_element1(seg);
855 francois 283 }
856     if (entite=="FEM_SEGMENT3")
857     {
858     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
859 francois 378 long idtopo=cid(param[2].argument[0]);
860     long idmai=cid(param[3].argument[0]);
861 francois 283 long idn1=cid(param[4].argument[0]);
862     long idn2=cid(param[5].argument[0]);
863     long idn3=cid(param[6].argument[0]);
864     FEM_NOEUD* tab[3];
865     tab[0]=femmai->get_fem_noeudid(idn1);
866     tab[1]=femmai->get_fem_noeudid(idn2);
867     tab[2]=femmai->get_fem_noeudid(idn3);
868     MG_ELEMENT_MAILLAGE* elmai;
869 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
870     if (idtopo>-1)
871     topo=mggeo->get_mg_areteid(idtopo);
872     if (idmai>-1)
873 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
874     else elmai=NULL;
875 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
876 francois 309 femmai->ajouter_fem_element1(seg);
877 francois 283 }
878     if (entite=="TRIANGLE")
879     {
880     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
881     long idtopo=cid(param[2].argument[0]);
882     long idn1=cid(param[3].argument[0]);
883     long idn2=cid(param[4].argument[0]);
884     long idn3=cid(param[5].argument[0]);
885     int ori=atoi(param[6].argument[0].c_str());
886     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
887     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
888     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
889 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
890     if (idtopo>-1)
891     topo=mggeo->get_mg_areteid(idtopo);
892     mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
893 francois 283 }
894 francois 308 if (entite=="QUADRANGLE")
895     {
896     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
897     long idtopo=cid(param[2].argument[0]);
898     long idn1=cid(param[3].argument[0]);
899     long idn2=cid(param[4].argument[0]);
900     long idn3=cid(param[5].argument[0]);
901     long idn4=cid(param[6].argument[0]);
902     int ori=atoi(param[7].argument[0].c_str());
903     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
904     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
905     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
906     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
907     MG_ELEMENT_TOPOLOGIQUE* topo;
908     if (idtopo>-1)
909     {
910     topo=mggeo->get_mg_faceid(idtopo);
911     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
912     }
913     else topo=NULL;
914     mgmai->ajouter_mg_quadrangle(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
915     }
916 francois 283 if (entite=="FEM_TRIANGLE3")
917     {
918     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
919 francois 378 long idtopo=cid(param[2].argument[0]);
920 francois 283 long idmai=cid(param[3].argument[0]);
921     long idn1=cid(param[4].argument[0]);
922     long idn2=cid(param[5].argument[0]);
923     long idn3=cid(param[6].argument[0]);
924     FEM_NOEUD* tab[3];
925     tab[0]=femmai->get_fem_noeudid(idn1);
926     tab[1]=femmai->get_fem_noeudid(idn2);
927     tab[2]=femmai->get_fem_noeudid(idn3);
928     MG_ELEMENT_MAILLAGE* elmai;
929     if (idmai>-1)
930     elmai=mgmai->get_mg_triangleid(idmai);
931     else elmai=NULL;
932 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
933     if (idtopo>-1)
934     topo=mggeo->get_mg_areteid(idtopo);
935     FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
936 francois 309 femmai->ajouter_fem_element2(tri);
937 francois 283 }
938     if (entite=="FEM_TRIANGLE6")
939     {
940     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
941 francois 378 long idtopo=cid(param[2].argument[0]);
942 francois 283 long idmai=cid(param[3].argument[0]);
943     long idn1=cid(param[4].argument[0]);
944     long idn2=cid(param[5].argument[0]);
945     long idn3=cid(param[6].argument[0]);
946     long idn4=cid(param[7].argument[0]);
947     long idn5=cid(param[8].argument[0]);
948     long idn6=cid(param[9].argument[0]);
949     FEM_NOEUD* tab[6];
950     tab[0]=femmai->get_fem_noeudid(idn1);
951     tab[1]=femmai->get_fem_noeudid(idn2);
952     tab[2]=femmai->get_fem_noeudid(idn3);
953     tab[3]=femmai->get_fem_noeudid(idn4);
954     tab[4]=femmai->get_fem_noeudid(idn5);
955     tab[5]=femmai->get_fem_noeudid(idn6);
956     MG_ELEMENT_MAILLAGE* elmai;
957     if (idmai>-1)
958     elmai=mgmai->get_mg_triangleid(idmai);
959     else elmai=NULL;
960 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
961     if (idtopo>-1)
962     topo=mggeo->get_mg_areteid(idtopo);
963     FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
964 francois 309 femmai->ajouter_fem_element2(tri);
965 francois 283 }
966 francois 310 if (entite=="FEM_QUADRANGLE4")
967     {
968     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
969 francois 378 long idtopo=cid(param[2].argument[0]);
970     long idmai=cid(param[3].argument[0]);
971 francois 310 long idn1=cid(param[4].argument[0]);
972     long idn2=cid(param[5].argument[0]);
973     long idn3=cid(param[6].argument[0]);
974     long idn4=cid(param[7].argument[0]);
975     FEM_NOEUD* tab[4];
976     tab[0]=femmai->get_fem_noeudid(idn1);
977     tab[1]=femmai->get_fem_noeudid(idn2);
978     tab[2]=femmai->get_fem_noeudid(idn3);
979     tab[3]=femmai->get_fem_noeudid(idn4);
980     MG_ELEMENT_MAILLAGE* elmai;
981     if (idmai>-1)
982     elmai=mgmai->get_mg_quadrangleid(idmai);
983     else elmai=NULL;
984 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
985     if (idtopo>-1)
986     topo=mggeo->get_mg_areteid(idtopo);
987     FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
988 francois 310 femmai->ajouter_fem_element2(quad);
989     }
990     if (entite=="FEM_QUADRANGLE8")
991     {
992     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
993 francois 378 long idtopo=cid(param[2].argument[0]);
994     long idmai=cid(param[3].argument[0]);
995 francois 310 long idn1=cid(param[4].argument[0]);
996     long idn2=cid(param[5].argument[0]);
997     long idn3=cid(param[6].argument[0]);
998     long idn4=cid(param[7].argument[0]);
999     long idn5=cid(param[8].argument[0]);
1000     long idn6=cid(param[9].argument[0]);
1001     long idn7=cid(param[10].argument[0]);
1002     long idn8=cid(param[11].argument[0]);
1003     FEM_NOEUD* tab[8];
1004     tab[0]=femmai->get_fem_noeudid(idn1);
1005     tab[1]=femmai->get_fem_noeudid(idn2);
1006     tab[2]=femmai->get_fem_noeudid(idn3);
1007     tab[3]=femmai->get_fem_noeudid(idn4);
1008     tab[4]=femmai->get_fem_noeudid(idn5);
1009     tab[5]=femmai->get_fem_noeudid(idn6);
1010     tab[6]=femmai->get_fem_noeudid(idn7);
1011     tab[7]=femmai->get_fem_noeudid(idn8);
1012     MG_ELEMENT_MAILLAGE* elmai;
1013     if (idmai>-1)
1014     elmai=mgmai->get_mg_quadrangleid(idmai);
1015     else elmai=NULL;
1016 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1017     if (idtopo>-1)
1018     topo=mggeo->get_mg_areteid(idtopo);
1019     FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1020 francois 310 femmai->ajouter_fem_element2(quad);
1021     }
1022 francois 283 if (entite=="TETRAEDRE")
1023     {
1024     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1025     long idtopo=cid(param[2].argument[0]);
1026     long idn1=cid(param[3].argument[0]);
1027     long idn2=cid(param[4].argument[0]);
1028     long idn3=cid(param[5].argument[0]);
1029     long idn4=cid(param[6].argument[0]);
1030     int ori=atoi(param[7].argument[0].c_str());
1031     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
1032     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
1033     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
1034     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
1035     MG_ELEMENT_TOPOLOGIQUE* topo;
1036     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
1037     else topo=NULL;
1038     if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
1039     }
1040 francois 308 if (entite=="HEXAEDRE")
1041     {
1042     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1043     long idtopo=cid(param[2].argument[0]);
1044     long idn1=cid(param[3].argument[0]);
1045     long idn2=cid(param[4].argument[0]);
1046     long idn3=cid(param[5].argument[0]);
1047     long idn4=cid(param[6].argument[0]);
1048     long idn5=cid(param[7].argument[0]);
1049     long idn6=cid(param[8].argument[0]);
1050     long idn7=cid(param[9].argument[0]);
1051     long idn8=cid(param[10].argument[0]);
1052     int ori=atoi(param[11].argument[0].c_str());
1053     MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
1054     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
1055     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
1056     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
1057     MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
1058     MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
1059     MG_NOEUD* noeud7=mgmai->get_mg_noeudid(idn7);
1060     MG_NOEUD* noeud8=mgmai->get_mg_noeudid(idn8);
1061     MG_ELEMENT_TOPOLOGIQUE* topo;
1062     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
1063     else topo=NULL;
1064     mgmai->ajouter_mg_hexa(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,noeud7,noeud8,ori,id);
1065     }
1066 francois 283 if (entite=="FEM_TETRA4")
1067     {
1068 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1069 francois 378 long idtopo=cid(param[2].argument[0]);
1070     long idmai=cid(param[3].argument[0]);
1071 francois 283 long idn1=cid(param[4].argument[0]);
1072     long idn2=cid(param[5].argument[0]);
1073     long idn3=cid(param[6].argument[0]);
1074     long idn4=cid(param[7].argument[0]);
1075 francois 339 long etat=atoi(param[8].argument[0].c_str());
1076 francois 283 FEM_NOEUD* tab[4];
1077     tab[0]=femmai->get_fem_noeudid(idn1);
1078     tab[1]=femmai->get_fem_noeudid(idn2);
1079     tab[2]=femmai->get_fem_noeudid(idn3);
1080     tab[3]=femmai->get_fem_noeudid(idn4);
1081     MG_ELEMENT_MAILLAGE* elmai;
1082     if (idmai>-1)
1083     elmai=mgmai->get_mg_tetraid(idmai);
1084     else elmai=NULL;
1085 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1086     if (idtopo>-1)
1087     topo=mggeo->get_mg_areteid(idtopo);
1088     FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1089 francois 339 tet->change_etat(etat);
1090 francois 309 femmai->ajouter_fem_element3(tet);
1091 francois 283 }
1092 francois 339 if (entite=="XFEM_TETRA4")
1093     {
1094 francois 378 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1095 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1096     unsigned long idn1=cid(param[3].argument[0]);
1097     unsigned long idn2=cid(param[4].argument[0]);
1098     unsigned long idn3=cid(param[5].argument[0]);
1099     unsigned long idn4=cid(param[6].argument[0]);
1100 francois 378 int etat=atoi(param[7].argument[0].c_str());
1101     FEM_TETRA4* tet=(FEM_TETRA4*)femmai->get_fem_element3id(idtet);
1102     FEM_NOEUD* tab[4];
1103     tab[0]=femmai->get_fem_noeudid(idn1);
1104     tab[1]=femmai->get_fem_noeudid(idn2);
1105     tab[2]=femmai->get_fem_noeudid(idn3);
1106     tab[3]=femmai->get_fem_noeudid(idn4);
1107     XFEM_TETRA4* xtet=new XFEM_TETRA4(tet,tab);
1108 francois 339 femmai->ajouter_xfem_element3(xtet);
1109 francois 378 tet->change_etat(etat);
1110 francois 339 }
1111 francois 283 if (entite=="FEM_TETRA10")
1112     {
1113     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1114 francois 378 long idtopo=cid(param[2].argument[0]);
1115     long idmai=cid(param[3].argument[0]);
1116 francois 283 long idn1=cid(param[4].argument[0]);
1117     long idn2=cid(param[5].argument[0]);
1118     long idn3=cid(param[6].argument[0]);
1119     long idn4=cid(param[7].argument[0]);
1120     long idn5=cid(param[8].argument[0]);
1121     long idn6=cid(param[9].argument[0]);
1122     long idn7=cid(param[10].argument[0]);
1123     long idn8=cid(param[11].argument[0]);
1124     long idn9=cid(param[12].argument[0]);
1125     long idn10=cid(param[13].argument[0]);
1126     FEM_NOEUD* tab[10];
1127     tab[0]=femmai->get_fem_noeudid(idn1);
1128     tab[1]=femmai->get_fem_noeudid(idn2);
1129     tab[2]=femmai->get_fem_noeudid(idn3);
1130     tab[3]=femmai->get_fem_noeudid(idn4);
1131     tab[4]=femmai->get_fem_noeudid(idn5);
1132     tab[5]=femmai->get_fem_noeudid(idn6);
1133     tab[6]=femmai->get_fem_noeudid(idn7);
1134     tab[7]=femmai->get_fem_noeudid(idn8);
1135     tab[8]=femmai->get_fem_noeudid(idn9);
1136     tab[9]=femmai->get_fem_noeudid(idn10);
1137     MG_ELEMENT_MAILLAGE* elmai;
1138     if (idmai>-1)
1139     elmai=mgmai->get_mg_tetraid(idmai);
1140     else elmai=NULL;
1141 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1142     if (idtopo>-1)
1143     topo=mggeo->get_mg_areteid(idtopo);
1144     FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1145 francois 309 femmai->ajouter_fem_element3(tet);
1146 francois 283 }
1147 francois 310 if (entite=="FEM_HEXA8")
1148     {
1149     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1150 francois 378 long idtopo=cid(param[2].argument[0]);
1151     long idmai=cid(param[3].argument[0]);
1152 francois 310 long idn1=cid(param[4].argument[0]);
1153     long idn2=cid(param[5].argument[0]);
1154     long idn3=cid(param[6].argument[0]);
1155     long idn4=cid(param[7].argument[0]);
1156     long idn5=cid(param[8].argument[0]);
1157     long idn6=cid(param[9].argument[0]);
1158     long idn7=cid(param[10].argument[0]);
1159     long idn8=cid(param[11].argument[0]);
1160     FEM_NOEUD* tab[8];
1161     tab[0]=femmai->get_fem_noeudid(idn1);
1162     tab[1]=femmai->get_fem_noeudid(idn2);
1163     tab[2]=femmai->get_fem_noeudid(idn3);
1164     tab[3]=femmai->get_fem_noeudid(idn4);
1165     tab[4]=femmai->get_fem_noeudid(idn5);
1166     tab[5]=femmai->get_fem_noeudid(idn6);
1167     tab[6]=femmai->get_fem_noeudid(idn7);
1168     tab[7]=femmai->get_fem_noeudid(idn8);
1169     MG_ELEMENT_MAILLAGE* elmai;
1170     if (idmai>-1)
1171     elmai=mgmai->get_mg_hexaid(idmai);
1172     else elmai=NULL;
1173 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1174     if (idtopo>-1)
1175     topo=mggeo->get_mg_areteid(idtopo);
1176     FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1177 francois 310 femmai->ajouter_fem_element3(hex);
1178     }
1179     if (entite=="FEM_HEXA20")
1180     {
1181     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1182 francois 378 long idtopo=cid(param[2].argument[0]);
1183     long idmai=cid(param[3].argument[0]);
1184 francois 310 long idn1=cid(param[4].argument[0]);
1185     long idn2=cid(param[5].argument[0]);
1186     long idn3=cid(param[6].argument[0]);
1187     long idn4=cid(param[7].argument[0]);
1188     long idn5=cid(param[8].argument[0]);
1189     long idn6=cid(param[9].argument[0]);
1190     long idn7=cid(param[10].argument[0]);
1191     long idn8=cid(param[11].argument[0]);
1192     long idn9=cid(param[12].argument[0]);
1193     long idn10=cid(param[13].argument[0]);
1194     long idn11=cid(param[14].argument[0]);
1195     long idn12=cid(param[15].argument[0]);
1196     long idn13=cid(param[16].argument[0]);
1197     long idn14=cid(param[17].argument[0]);
1198     long idn15=cid(param[18].argument[0]);
1199     long idn16=cid(param[19].argument[0]);
1200     long idn17=cid(param[20].argument[0]);
1201     long idn18=cid(param[21].argument[0]);
1202     long idn19=cid(param[22].argument[0]);
1203     long idn20=cid(param[23].argument[0]);
1204     FEM_NOEUD* tab[20];
1205     tab[0]=femmai->get_fem_noeudid(idn1);
1206     tab[1]=femmai->get_fem_noeudid(idn2);
1207     tab[2]=femmai->get_fem_noeudid(idn3);
1208     tab[3]=femmai->get_fem_noeudid(idn4);
1209     tab[4]=femmai->get_fem_noeudid(idn5);
1210     tab[5]=femmai->get_fem_noeudid(idn6);
1211     tab[6]=femmai->get_fem_noeudid(idn7);
1212     tab[7]=femmai->get_fem_noeudid(idn8);
1213     tab[8]=femmai->get_fem_noeudid(idn9);
1214     tab[9]=femmai->get_fem_noeudid(idn10);
1215     tab[10]=femmai->get_fem_noeudid(idn11);
1216     tab[11]=femmai->get_fem_noeudid(idn12);
1217     tab[12]=femmai->get_fem_noeudid(idn13);
1218     tab[13]=femmai->get_fem_noeudid(idn14);
1219     tab[14]=femmai->get_fem_noeudid(idn15);
1220     tab[15]=femmai->get_fem_noeudid(idn16);
1221     tab[16]=femmai->get_fem_noeudid(idn17);
1222     tab[17]=femmai->get_fem_noeudid(idn18);
1223     tab[18]=femmai->get_fem_noeudid(idn19);
1224     tab[19]=femmai->get_fem_noeudid(idn20);
1225     MG_ELEMENT_MAILLAGE* elmai;
1226     if (idmai>-1)
1227     elmai=mgmai->get_mg_hexaid(idmai);
1228     else elmai=NULL;
1229 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1230     if (idtopo>-1)
1231     topo=mggeo->get_mg_areteid(idtopo);
1232     FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1233 francois 310 femmai->ajouter_fem_element3(hex);
1234     }
1235 francois 283 if (entite=="SOLUTION")
1236     {
1237 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1238 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1239 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1240     std::string nomsol=param[4].argument[0];
1241     long idmai=cid(param[5].argument[0]);
1242     int nb=atoi(param[6].argument[0].c_str());
1243     std::string chemin=param[7].argument[0];
1244 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1245 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1246 francois 283 ajouter_mg_solution(sol);
1247     for (int i=0;i<nb;i++)
1248 francois 377 sol->change_legende(i,param[8].argument[i]);
1249 francois 283 }
1250     if (entite=="FEM_SOLUTION")
1251     {
1252 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1253 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1254 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1255     std::string nomsol=param[4].argument[0];
1256     long idmai=cid(param[5].argument[0]);
1257     int nb=atoi(param[6].argument[0].c_str());
1258     std::string chemin=param[7].argument[0];
1259 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1260 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1261 francois 283 ajouter_fem_solution(sol);
1262     for (int i=0;i<nb;i++)
1263 francois 375 sol->change_legende(i,param[8].argument[i]);
1264 francois 283 }
1265     #ifdef WINDOWS_VERSION
1266     if (entite=="CAD4FE_MCSEGMENT")
1267     {
1268     parse.decode(data.c_str(),"@,@,@",param+2);
1269     long idtopo=cid(param[2].argument[0]);
1270     long idn1=cid(param[3].argument[0]);
1271     long idn2=cid(param[4].argument[0]);
1272     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1273     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1274     MG_ELEMENT_TOPOLOGIQUE* topo;
1275     if (idtopo>-1)
1276     {
1277     topo=mggeo->get_mg_areteid(idtopo);
1278     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1279     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1280     }
1281     else topo=NULL;
1282     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
1283     mgmai->ajouter_mg_segment(seg);
1284     }
1285     if (entite=="CAD4FE_MCNODE")
1286     {
1287     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1288     long idRefTopo=cid(param[2].argument[0]);
1289     long idMCTopo=cid(param[3].argument[0]);
1290     double x=atof(param[4].argument[0].c_str());
1291     double y=atof(param[5].argument[0].c_str());
1292     double z=atof(param[6].argument[0].c_str());
1293     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1294     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1295     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1296     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1297     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1298     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1299     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1300     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1301     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1302     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1303    
1304     if (mcTopo->get_dimension()==0)
1305     {
1306     if (updatedMergedRefVertices == false)
1307     {
1308     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1309     itMergedRefVertices != mapMergedRefVertices.end();
1310     itMergedRefVertices++)
1311     {
1312     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1313     MG_SOMMET * refV = NULL;
1314     unsigned long id = itMergedRefVertices->second;
1315     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1316     v->MergeRefVertex(refV);
1317     }
1318    
1319     updatedMergedRefVertices = true;
1320     }
1321     }
1322    
1323     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1324     mgmai->ajouter_mg_noeud(noeud);
1325     }
1326     if (entite=="CAD4FE_MCTRIANGLE")
1327     {
1328     parse.decode(data.c_str(),"@,@,@,@",param+2);
1329     long idtopo=cid(param[2].argument[0]);
1330     long idn1=cid(param[3].argument[0]);
1331     long idn2=cid(param[4].argument[0]);
1332     long idn3=cid(param[5].argument[0]);
1333     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1334     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1335     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1336     CAD4FE::MCSegment* mgsegment[3];
1337     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1338     // la topo. d'un MCTriangle est obligatoirement une MCFace
1339     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1340     for (int i=0;i<3;i++)
1341     {
1342     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1343     if (mgsegment[i]==NULL)
1344     {
1345     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1346     mgmai->ajouter_mg_segment(mgsegment[i]);
1347     }
1348     }
1349     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1350     mgmai->ajouter_mg_triangle(triangle);
1351     }
1352     #endif
1353     }
1354     }
1355     while (param[0].argument[0]!="FIN");
1356     #ifdef WINDOWS_VERSION
1357     if (updatedMergedRefVertices == false)
1358     {
1359     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1360     itMergedRefVertices != mapMergedRefVertices.end();
1361     itMergedRefVertices++)
1362     {
1363     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1364     MG_SOMMET * refV = NULL;
1365     unsigned long id = itMergedRefVertices->second;
1366     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1367     v->MergeRefVertex(refV);
1368     }
1369    
1370     updatedMergedRefVertices = true;
1371     }
1372    
1373     #endif
1374     fclose(in);
1375     #ifdef BREP_SLD
1376     fonction->Fermer();
1377     #endif
1378     return 1;
1379     }
1380    
1381    
1382    
1383