ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 465
Committed: Thu Nov 21 21:23:10 2013 UTC (11 years, 5 months ago) by francois
File size: 66084 byte(s)
Log Message:
Les maillages conservent les parametres de structure lorsqu'ils sont structures

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