ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 308
Committed: Mon Jan 23 21:47:45 2012 UTC (13 years, 3 months ago) by francois
File size: 50501 byte(s)
Log Message:
Ajout des elements hexaedrique dans le maillage mg

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