ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 551
Committed: Fri Sep 26 19:32:11 2014 UTC (10 years, 7 months ago) by francois
File size: 67126 byte(s)
Log Message:
Preparation pour Mailleur3D apres une erreur

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