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