ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 706
Committed: Mon Aug 31 13:35:48 2015 UTC (9 years, 8 months ago) by francois
File size: 73316 byte(s)
Log Message:
réérciture de la procédure pour ecrire des fichiers code aster. Changement -mecanique devient -elastique et un fichier de parametre obligatoire est maintenant necessaire pour faire un calcul

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