ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 310
Committed: Thu Jan 26 21:14:45 2012 UTC (13 years, 3 months ago) by francois
File size: 57145 byte(s)
Log Message:
Ajout des elements quadrangle et hexaedre dans les maillages FEM
Changement de la version des fichier de visu sous GMSH. Les .pos ont disparus et tout est intégré dans les .msh

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