ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 408
Committed: Fri Jun 7 23:02:47 2013 UTC (11 years, 11 months ago) by francois
File size: 63119 byte(s)
Log Message:
Resolution bug exportation gmsh + unite=0.001 pour les importations step via OCC

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