ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 685
Committed: Thu Jul 2 20:24:31 2015 UTC (9 years, 10 months ago) by francois
File size: 71421 byte(s)
Log Message:
Calcul d'une coque non attachée a une geometrie avec code aster

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