ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 526
Committed: Fri Jun 13 19:34:07 2014 UTC (10 years, 11 months ago) by francois
File size: 67693 byte(s)
Log Message:
Creation d'un sommet_noeud. C'est un sommet "virtuel" qui est créé à partir d'un noeud pour pouvoir appliquer des condiitions aux limites.

File Contents

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