ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 711
Committed: Thu Sep 3 16:12:21 2015 UTC (9 years, 8 months ago) by francois
File size: 73985 byte(s)
Log Message:
ajout d'une fonction de geometrie pour saisir une courbe de traction pour un materiau

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 francois 711 if (entite=="GEOM_FONCTION")
436     {
437     parse.decode(data.c_str(),"@,@,(&)",param+2);
438     int dim=atoi((char*)param[2].argument[0].c_str());
439     MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(id,dim);
440     mggeo->ajouter_mg_geom_fonction(gf);
441     int nb=atoi(param[3].argument[0].c_str());
442     for (int i=0;i<nb;i++)
443     {
444     parse.decode(param[4].argument[i].c_str(),"(&)",param+5);
445     double *coo=new double[dim];
446     for (int j=0;j<dim;j++)
447     coo[j]=atof(param[5].argument[j].c_str());
448     gf->ajouter_point(coo);
449     delete [] coo;
450     }
451    
452     }
453    
454 francois 283 if (entite=="VOLUME")
455     {
456     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
457     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
458     mggeo->ajouter_mg_volume(mgvol);
459     int nummat=atoi((char*)param[4].argument[0].c_str());
460     mgvol->change_num_materiau(nummat);
461     int nb=atoi(param[5].argument[0].c_str());
462     if (nb!=0)
463     {
464     for (int i=0;i<nb;i++)
465     {
466     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
467     char nom[3];
468     double val;
469     strcpy(nom,param[7].argument[0].c_str());
470     val=atof(param[8].argument[0].c_str());
471     mgvol->ajouter_ccf(nom,val);
472     }
473     }
474     }
475     if (entite=="COQUE")
476     {
477     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
478     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
479     mggeo->ajouter_mg_coque(mgcoq);
480     int nummat=atoi((char*)param[4].argument[0].c_str());
481     mgcoq->change_num_materiau(nummat);
482     int nb=atoi(param[5].argument[0].c_str());
483     if (nb!=0)
484     {
485     for (int i=0;i<nb;i++)
486     {
487     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
488     char nom[3];
489     double val;
490     strcpy(nom,param[7].argument[0].c_str());
491     val=atof(param[8].argument[0].c_str());
492     mgcoq->ajouter_ccf(nom,val);
493     }
494     }
495     }
496     if (entite=="POUTRE")
497     {
498     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
499     MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
500     mggeo->ajouter_mg_poutre(mgpoutre);
501     int nummat=atoi((char*)param[4].argument[0].c_str());
502     mgpoutre->change_num_materiau(nummat);
503     int nb=atoi(param[5].argument[0].c_str());
504     if (nb!=0)
505     {
506     for (int i=0;i<nb;i++)
507     {
508     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
509     char nom[3];
510     double val;
511     strcpy(nom,param[7].argument[0].c_str());
512     val=atof(param[8].argument[0].c_str());
513     mgpoutre->ajouter_ccf(nom,val);
514     }
515     }
516     }
517     if (entite=="COQUILLE")
518     {
519     parse.decode(data.c_str(),"@,@",param+2);
520     long ident=cid(param[2].argument[0]);
521     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
522     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
523     if (mgvol!=NULL)
524     {
525     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
526     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
527     }
528     if (mgcoq!=NULL)
529     {
530     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
531     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
532     }
533    
534     }
535     #ifdef BREP_STEP
536     if (entite=="SURFACE_STEP")
537     {
538     parse.decode(data.c_str(),"@",param+2);
539     long idstepsuf=atol(param[2].argument[0].c_str());
540     ST_SURFACE *stsurf=fichstep.lst_surface.getid(idstepsuf);
541     STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
542     mggeo->ajouter_mg_surface(stepsurf);
543     }
544     if (entite=="COURBE_STEP")
545     {
546     parse.decode(data.c_str(),"@",param+2);
547     long idstepcur=atol(param[2].argument[0].c_str());
548     ST_COURBE *stcur=fichstep.lst_courbe.getid(idstepcur);
549     STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
550     mggeo->ajouter_mg_courbe(stepcur);
551     }
552    
553     if (entite=="POINT_STEP")
554     {
555     parse.decode(data.c_str(),"@",param+2);
556     long idsteppt=atol(param[2].argument[0].c_str());
557     ST_POINT *stpt=fichstep.lst_point.getid(idsteppt);
558     STEP_POINT* steppt=new STEP_POINT(id,stpt);
559     mggeo->ajouter_mg_point(steppt);
560     }
561    
562     #endif
563     #ifdef BREP_SAT
564     if (entite=="SURFACE_SAT")
565     {
566     parse.decode(data.c_str(),"@",param+2);
567     long idsatsuf=atol(param[2].argument[0].c_str());
568     SAT_SURFACE *satsurf=fichsat.lst_surface.getid(idsatsuf);
569     ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
570     mggeo->ajouter_mg_surface(acissurf);
571     }
572     if (entite=="COURBE_SAT")
573     {
574     parse.decode(data.c_str(),"@",param+2);
575     long idsatcur=atol(param[2].argument[0].c_str());
576     SAT_COURBE *satcur=fichsat.lst_courbe.getid(idsatcur);
577     ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
578     mggeo->ajouter_mg_courbe(aciscur);
579     }
580    
581     if (entite=="POINT_SAT")
582     {
583     parse.decode(data.c_str(),"@",param+2);
584     long idsatpt=atol(param[2].argument[0].c_str());
585     SAT_POINT *satpt=fichsat.lst_point.getid(idsatpt);
586     ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
587     mggeo->ajouter_mg_point(acispt);
588     }
589    
590     #endif
591     #ifdef BREP_SLD
592     if (entite=="SURFACE_SLD")
593     {
594     parse.decode(data.c_str(),"@",param+2);
595     CComPtr<IFace2> swface;
596     char* idsld=(char*)param[2].argument[0].c_str();
597     SLD_SURFACE* sldsurf=new SLD_SURFACE(id,idsld,*fonction);
598     mggeo->ajouter_mg_surface(sldsurf);
599     }
600     if (entite=="COURBE_SLD")
601     {
602     parse.decode(data.c_str(),"@",param+2);
603     CComPtr<IEdge> swedge;
604     char* idsld=(char*)param[2].argument[0].c_str();
605     SLD_COURBE* sldcrb=new SLD_COURBE(id,idsld,*fonction);
606     mggeo->ajouter_mg_courbe(sldcrb);
607     }
608    
609     if (entite=="POINT_SLD")
610     {
611     parse.decode(data.c_str(),"@",param+2);
612     CComPtr<IVertex> swvertex;
613     char* idsld=(char*)param[2].argument[0].c_str();
614     SLD_POINT* sldpoint=new SLD_POINT(id,idsld,*fonction);
615     mggeo->ajouter_mg_point(sldpoint);
616     }
617    
618     #endif
619    
620     #ifdef BREP_OCC
621    
622     if (entite=="SURFACE_OCC")
623     {
624     parse.decode(data.c_str(),"@",param+2);
625     long idocc=atol(param[2].argument[0].c_str());
626     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
627     TopoDS_Face occface=TopoDS::Face(occshape);
628     OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface, *fonction1);
629     mggeo->ajouter_mg_surface(occsurf);
630     }
631     if (entite=="COURBE_OCC")
632     {
633     parse.decode(data.c_str(),"@",param+2);
634     long idocc=atol(param[2].argument[0].c_str());
635     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
636     TopoDS_Edge occedge=TopoDS::Edge(occshape);
637     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, *fonction1);
638     mggeo->ajouter_mg_courbe(occcrb);
639     }
640     if (entite=="POINT_OCC")
641     {
642     parse.decode(data.c_str(),"@",param+2);
643     long idocc=atol(param[2].argument[0].c_str());
644     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
645     TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
646     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, *fonction1);
647     mggeo->ajouter_mg_point(occpoint);
648     }
649     #endif
650     #ifdef WINDOWS_VERSION
651     if (entite=="CAD4FE_POLYCURVE")
652     {
653     CAD4FE::PolyCurve * polycurve = NULL;
654     parse.decode(data.c_str(),"@,(&)",param+2);
655     int nb = atoi(param[2].argument[0].c_str());
656    
657     if (nb == 0)
658     {
659     printf("PolyCurve %d is formed with reference vertex : ", id);
660     parse.decode(param[3].argument[0].c_str(),"@",param+4);
661     int idRefVertex;
662     idRefVertex=cid(param[4].argument[0].c_str());
663     printf("%d ;\n ", idRefVertex);
664     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
665     polycurve = new CAD4FE::PolyCurve(refVertex);
666     }
667     else
668     {
669     printf("PolyCurve %d is formed with reference edges : ", id);
670     polycurve = new CAD4FE::PolyCurve;
671     for (int i=0;i<nb;i++)
672     {
673     parse.decode(param[3].argument[i].c_str(),"@",param+4);
674     int idRefEdge;
675     idRefEdge=cid(param[4].argument[0].c_str());
676     printf("%d ; ", idRefEdge);
677     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
678     CAD4FE::PolyCurve tmpPC(refEdge);
679     polycurve->Merge(tmpPC);
680     }
681     printf("\n");
682     }
683    
684     polycurve->change_id(id);
685     mggeo->ajouter_mg_courbe(polycurve);
686     }
687    
688    
689     if (entite=="CAD4FE_POLYSURFACE")
690     {
691     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
692     polysurface->change_id(id);
693     mggeo->ajouter_mg_surface(polysurface);
694    
695     parse.decode(data.c_str(),"@,(&)",param+2);
696    
697     int nb = atoi(param[2].argument[0].c_str());
698     printf("PolySurface %d is formed with reference faces : ", id);
699     for (int i=0;i<nb;i++)
700     {
701     parse.decode(param[3].argument[i].c_str(),"@",param+4);
702     int idRefFace;
703     idRefFace=cid(param[4].argument[0].c_str());
704     printf("%d ; ", idRefFace);
705    
706     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
707     CAD4FE::PolySurface tmpSF(refFace);
708     polysurface->Merge(tmpSF);
709     }
710    
711     printf("\n");
712     }
713     if (entite=="CAD4FE_MCEDGE")
714     {
715     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
716    
717     std::string idOriginal = param[2].argument[0];
718     long idPolyCurve=cid(param[3].argument[0]);
719     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
720    
721     // sense is not used because a MCEdge always has
722     // a sense = 1 !
723     // (because polycurve domain is equal to mcEdge domain)
724     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
725     mcEdge->change_id(id);
726     mggeo->ajouter_mg_arete(mcEdge);
727    
728     int nb=atoi(param[7].argument[0].c_str());
729     if (nb!=0)
730     {
731     for (int i=0;i<nb;i++)
732     {
733     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
734     char nom[3];
735     double val;
736     strcpy(nom,param[9].argument[0].c_str());
737     val=atof(param[10].argument[0].c_str());
738     mcEdge->ajouter_ccf(nom,val);
739     }
740     }
741     }
742     if (entite=="CAD4FE_MCFACE")
743     {
744     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
745    
746     std::string idOriginal = param[2].argument[0];
747     long idPolySurface=cid(param[3].argument[0]);
748     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
749    
750     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
751     mcFace->change_id(id);
752     mggeo->ajouter_mg_face(mcFace);
753    
754     int nb=atoi(param[6].argument[0].c_str());
755     if (nb!=0)
756     {
757     for (int i=0;i<nb;i++)
758     {
759     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
760     char nom[3];
761     double val;
762     strcpy(nom,param[8].argument[0].c_str());
763     val=atof(param[9].argument[0].c_str());
764     mcFace->ajouter_ccf(nom,val);
765     }
766     }
767     }
768     if (entite=="CAD4FE_MCVERTEX")
769     {
770     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
771     std::string idOriginal = param[2].argument[0];
772     long idsom=cid(param[3].argument[0]);
773     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
774     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
775     mcVertex->change_id(id);
776     mggeo->ajouter_mg_sommet(mcVertex);
777     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
778     if (nb_ref_vertex!=0)
779     {
780     for (int i=0;i<nb_ref_vertex;i++)
781     {
782     unsigned long idRefVertex=cid(param[5].argument[i]);
783     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
784     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
785     }
786     }
787     int nb_ccf=atoi(param[4+2].argument[0].c_str());
788     if (nb_ccf!=0)
789     {
790     for (int i=0;i<nb_ccf;i++)
791     {
792     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
793     char nom_ccf[3];
794     double val_ccf;
795     strcpy(nom_ccf,param[6+2].argument[0].c_str());
796     val_ccf=atof(param[7+2].argument[0].c_str());
797     mgsom->ajouter_ccf(nom_ccf,val_ccf);
798     }
799     }
800     }
801     #endif
802     if (entite=="FACE")
803     {
804     parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
805     long idsurf=cid(param[3].argument[0]);
806     int sens=atoi(param[5].argument[0].c_str());
807     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
808     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
809     mggeo->ajouter_mg_face(mgface);
810     int nb=atoi(param[6].argument[0].c_str());
811     if (nb!=0)
812     {
813     for (int i=0;i<nb;i++)
814     {
815     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
816     char nom[3];
817     double val;
818     strcpy(nom,param[8].argument[0].c_str());
819     val=atof(param[9].argument[0].c_str());
820     mgface->ajouter_ccf(nom,val);
821     }
822     }
823     }
824     if (entite=="COFACE")
825     {
826     parse.decode(data.c_str(),"@,@,@",param+2);
827     long idface=cid(param[2].argument[0]);
828     long idcoq=cid(param[3].argument[0]);
829     int sens=atoi(param[4].argument[0].c_str());
830     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
831     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
832     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
833     mgcoq->ajouter_mg_coface(mgcoface);
834     }
835     if (entite=="BOUCLE")
836     {
837     parse.decode(data.c_str(),"@,(@)",param+2);
838     long ident=cid(param[2].argument[0]);
839     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
840     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
841     if (mgface!=NULL)
842     {
843     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
844     mggeo->ajouter_mg_boucle(mgbou,mgface);
845     }
846     if (mgpoutre!=NULL)
847     {
848     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
849     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
850     }
851     }
852     if (entite=="POINT")
853     {
854     parse.decode(data.c_str(),"@,@,@",param+2);
855     double xyz[3];
856     xyz[0]=atof(param[2].argument[0].c_str());
857     xyz[1]=atof(param[3].argument[0].c_str());
858     xyz[2]=atof(param[4].argument[0].c_str());
859     LC_POINT* point=new LC_POINT(id,xyz);
860     mggeo->ajouter_mg_point(point);
861     }
862     if (entite=="SOMMET")
863     {
864     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
865     long idpoint=cid(param[3].argument[0]);
866     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
867     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
868     mggeo->ajouter_mg_sommet(mgsom);
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     mgsom->ajouter_ccf(nom,val);
880     }
881     }
882     }
883 francois 576 if (entite=="ARETE_ELEMENT")
884     {
885     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
886     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
887     mggeo->ajouter_mg_arete(are);
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     are->ajouter_ccf(nom,val);
899     }
900     }
901     }
902     if (entite=="FACE_ELEMENT")
903     {
904     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
905     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
906     mggeo->ajouter_mg_face(face);
907     int nb=atoi(param[4].argument[0].c_str());
908     if (nb!=0)
909     {
910     for (int i=0;i<nb;i++)
911     {
912     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
913     char nom[3];
914     double val;
915     strcpy(nom,param[6].argument[0].c_str());
916     val=atof(param[7].argument[0].c_str());
917     face->ajouter_ccf(nom,val);
918     }
919     }
920     }
921 francois 685 if (entite=="COQUE_ELEMENT")
922     {
923     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
924     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
925     mggeo->ajouter_mg_coque(coq);
926     int nbele=atoi(param[2].argument[0].c_str());
927     for (int i=0;i<nbele;i++)
928     {
929     unsigned long idele=cid(param[3].argument[i].c_str());
930     coq->ajouter_element(idele);
931     }
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     coq->ajouter_ccf(nom,val);
943     }
944     }
945     }
946 francois 576 if (entite=="VOLUME_ELEMENT")
947     {
948     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
949     MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
950     mggeo->ajouter_mg_volume(vol);
951     int nb=atoi(param[4].argument[0].c_str());
952     if (nb!=0)
953     {
954     for (int i=0;i<nb;i++)
955     {
956     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
957     char nom[3];
958     double val;
959     strcpy(nom,param[6].argument[0].c_str());
960     val=atof(param[7].argument[0].c_str());
961     vol->ajouter_ccf(nom,val);
962     }
963     }
964     }
965 francois 526 if (entite=="SOMMET_NOEUD")
966     {
967     parse.decode(data.c_str(),"@,@,(&)",param+2);
968     long idnoeud=cid(param[2].argument[0]);
969     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
970     mggeo->ajouter_mg_sommet(mgsom);
971     int nb=atoi(param[3].argument[0].c_str());
972     if (nb!=0)
973     {
974     for (int i=0;i<nb;i++)
975     {
976     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
977     char nom[3];
978     double val;
979     strcpy(nom,param[5].argument[0].c_str());
980     val=atof(param[6].argument[0].c_str());
981     mgsom->ajouter_ccf(nom,val);
982     }
983     }
984     }
985 francois 283 if (entite=="ARETE")
986     {
987     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
988     long idcur=cid(param[3].argument[0]);
989     int sens=atoi(param[6].argument[0].c_str());
990     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
991     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
992     mggeo->ajouter_mg_arete(mgarete);
993     int nb=atoi(param[7].argument[0].c_str());
994     if (nb!=0)
995     {
996     for (int i=0;i<nb;i++)
997     {
998     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
999     char nom[3];
1000     double val;
1001     strcpy(nom,param[9].argument[0].c_str());
1002     val=atof(param[10].argument[0].c_str());
1003     mgarete->ajouter_ccf(nom,val);
1004     }
1005     }
1006     }
1007     if (entite=="COSOMMET")
1008     {
1009     parse.decode(data.c_str(),"@,@,@",param+2);
1010     long idsom=cid(param[2].argument[0]);
1011     long idarete=cid(param[3].argument[0]);
1012     int num=atoi(param[4].argument[0].c_str());
1013     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
1014     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1015     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
1016     if (num==1) mgarete->changer_cosommet1(mgcosom);
1017     if (num==2) mgarete->changer_cosommet2(mgcosom);
1018     }
1019     if (entite=="COARETE")
1020     {
1021     parse.decode(data.c_str(),"@,@,@",param+2);
1022     long idarete=cid(param[2].argument[0]);
1023     long idboucle=cid(param[3].argument[0]);
1024     int sens=atoi(param[4].argument[0].c_str());
1025     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1026     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
1027     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
1028     mgboucle->ajouter_mg_coarete(mgcoarete);
1029     }
1030     if (entite=="VISU_COURBE")
1031     {
1032     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1033     double xyz1[3];
1034     double xyz2[3];
1035     xyz1[0]=atof(param[2].argument[0].c_str());
1036     xyz1[1]=atof(param[3].argument[0].c_str());
1037     xyz1[2]=atof(param[4].argument[0].c_str());
1038     xyz2[0]=atof(param[5].argument[0].c_str());
1039     xyz2[1]=atof(param[6].argument[0].c_str());
1040     xyz2[2]=atof(param[7].argument[0].c_str());
1041     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
1042     mggeo->ajouter_mg_visu_courbe(mgcrb);
1043     }
1044     if (entite=="MAILLAGE")
1045     {
1046     parse.decode(data.c_str(),"@",param+2);
1047     long idgeo=cid(param[2].argument[0]);
1048 francois 626 mggeo=get_mg_geometrieid(idgeo);
1049 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
1050     ajouter_mg_maillage(mgmai);
1051     }
1052 francois 465 if (entite=="MAILLAGE_STRUCTURE")
1053     {
1054     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1055     long idgeo=cid(param[2].argument[0]);
1056 francois 626 mggeo=get_mg_geometrieid(idgeo);
1057 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
1058     ajouter_mg_maillage(mgmai);
1059     double xmin=atof(param[3].argument[0].c_str());
1060     double ymin=atof(param[4].argument[0].c_str());
1061     double zmin=atof(param[5].argument[0].c_str());
1062     double xmax=atof(param[6].argument[0].c_str());
1063     double ymax=atof(param[7].argument[0].c_str());
1064     double zmax=atof(param[8].argument[0].c_str());
1065     int nx=atoi(param[9].argument[0].c_str());
1066     int ny=atoi(param[10].argument[0].c_str());
1067     int nz=atoi(param[11].argument[0].c_str());
1068     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1069     mgmai->change_param_structure(b,nx,ny,nz);
1070     }
1071 francois 283 if (entite=="FEM_MAILLAGE")
1072     {
1073     parse.decode(data.c_str(),"@,@,@",param+2);
1074     int degre=atoi(param[2].argument[0].c_str());
1075     long idmai=cid(param[3].argument[0]);
1076     long idgeo=cid(param[4].argument[0]);
1077 francois 626 mggeo=get_mg_geometrieid(idgeo);
1078     mgmai=get_mg_maillageid(idmai);
1079 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1080     ajouter_fem_maillage(femmai);
1081     }
1082 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
1083     {
1084     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1085     int degre=atoi(param[2].argument[0].c_str());
1086     long idmai=cid(param[3].argument[0]);
1087     long idgeo=cid(param[4].argument[0]);
1088 francois 626 mggeo=get_mg_geometrieid(idgeo);
1089     mgmai=get_mg_maillageid(idmai);
1090 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1091     ajouter_fem_maillage(femmai);
1092     double xmin=atof(param[5].argument[0].c_str());
1093     double ymin=atof(param[6].argument[0].c_str());
1094     double zmin=atof(param[7].argument[0].c_str());
1095     double xmax=atof(param[8].argument[0].c_str());
1096     double ymax=atof(param[9].argument[0].c_str());
1097     double zmax=atof(param[10].argument[0].c_str());
1098     int nx=atoi(param[11].argument[0].c_str());
1099     int ny=atoi(param[12].argument[0].c_str());
1100     int nz=atoi(param[13].argument[0].c_str());
1101     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1102     femmai->change_param_structure(b,nx,ny,nz);
1103     }
1104 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
1105 francois 283 if (entite=="FEM_NOEUD")
1106     {
1107     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1108     long idtopo=cid(param[2].argument[0]);
1109     long idmai=cid(param[3].argument[0]);
1110     double x=atof(param[4].argument[0].c_str());
1111     double y=atof(param[5].argument[0].c_str());
1112     double z=atof(param[6].argument[0].c_str());
1113     int num=atoi(param[7].argument[0].c_str());
1114     int numopt=atoi(param[8].argument[0].c_str());
1115     MG_ELEMENT_MAILLAGE* elmai;
1116     if (idmai>-1)
1117     {
1118     elmai=mgmai->get_mg_noeudid(idmai);
1119     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
1120     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
1121     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
1122     }
1123     else elmai=NULL;
1124     FEM_NOEUD* noeud;
1125     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
1126     else
1127     {
1128     MG_ELEMENT_TOPOLOGIQUE* topo;
1129     if (idtopo>-1)
1130     {
1131     topo=mggeo->get_mg_sommetid(idtopo);
1132     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
1133     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1134     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1135     }
1136     else topo=NULL;
1137     noeud=new FEM_NOEUD(id,topo,x,y,z);
1138     }
1139     noeud->change_numero(num);
1140     noeud->change_numero_opt(numopt);
1141     femmai->ajouter_fem_noeud(noeud);
1142     }
1143     if (entite=="FEM_NOEUD_DEF")
1144     {
1145     parse.decode(data.c_str(),"@,@,@",param+2);
1146     double x=atof(param[2].argument[0].c_str());
1147     double y=atof(param[3].argument[0].c_str());
1148     double z=atof(param[4].argument[0].c_str());
1149     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1150     noeud->change_dx(x);
1151     noeud->change_dy(y);
1152     noeud->change_dz(z);
1153     femmai->active_deforme();
1154     }
1155 francois 325 if (entite=="FEM_NOEUD_REAC")
1156     {
1157     parse.decode(data.c_str(),"@,@,@",param+2);
1158     double x=atof(param[2].argument[0].c_str());
1159     double y=atof(param[3].argument[0].c_str());
1160     double z=atof(param[4].argument[0].c_str());
1161     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1162     noeud->change_rx(x);
1163     noeud->change_ry(y);
1164     noeud->change_rz(z);
1165 francois 339 femmai->active_reaction();;
1166 francois 325 }
1167 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
1168 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
1169     {
1170     parse.decode(data.c_str(),"@,@,@",param+2);
1171     long idtopo=cid(param[2].argument[0]);
1172     long idmai=cid(param[3].argument[0]);
1173     long idn1=cid(param[4].argument[0]);
1174     FEM_NOEUD* tab[1];
1175     tab[0]=femmai->get_fem_noeudid(idn1);
1176     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1177     if (idtopo>-1)
1178     topo=mggeo->get_mg_sommetid(idtopo);
1179     MG_ELEMENT_MAILLAGE* elmai;
1180     if (idmai>-1)
1181     elmai=mgmai->get_mg_noeudid(idmai);
1182     else elmai=NULL;
1183     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
1184     femmai->ajouter_fem_element0(fem);
1185     }
1186 francois 283 if (entite=="FEM_SEGMENT2")
1187     {
1188     parse.decode(data.c_str(),"@,@,@,@",param+2);
1189 francois 378 long idtopo=cid(param[2].argument[0]);
1190 francois 283 long idmai=cid(param[3].argument[0]);
1191     long idn1=cid(param[4].argument[0]);
1192     long idn2=cid(param[5].argument[0]);
1193     FEM_NOEUD* tab[2];
1194     tab[0]=femmai->get_fem_noeudid(idn1);
1195     tab[1]=femmai->get_fem_noeudid(idn2);
1196 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1197     if (idtopo>-1)
1198     topo=mggeo->get_mg_areteid(idtopo);
1199     MG_ELEMENT_MAILLAGE* elmai;
1200 francois 283 if (idmai>-1)
1201     elmai=mgmai->get_mg_segmentid(idmai);
1202     else elmai=NULL;
1203 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
1204 francois 309 femmai->ajouter_fem_element1(seg);
1205 francois 283 }
1206     if (entite=="FEM_SEGMENT3")
1207     {
1208     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1209 francois 378 long idtopo=cid(param[2].argument[0]);
1210     long idmai=cid(param[3].argument[0]);
1211 francois 283 long idn1=cid(param[4].argument[0]);
1212     long idn2=cid(param[5].argument[0]);
1213     long idn3=cid(param[6].argument[0]);
1214     FEM_NOEUD* tab[3];
1215     tab[0]=femmai->get_fem_noeudid(idn1);
1216     tab[1]=femmai->get_fem_noeudid(idn2);
1217     tab[2]=femmai->get_fem_noeudid(idn3);
1218     MG_ELEMENT_MAILLAGE* elmai;
1219 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1220     if (idtopo>-1)
1221     topo=mggeo->get_mg_areteid(idtopo);
1222     if (idmai>-1)
1223 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
1224     else elmai=NULL;
1225 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
1226 francois 309 femmai->ajouter_fem_element1(seg);
1227 francois 283 }
1228 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
1229     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
1230 francois 283 if (entite=="FEM_TRIANGLE3")
1231     {
1232     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1233 francois 378 long idtopo=cid(param[2].argument[0]);
1234 francois 283 long idmai=cid(param[3].argument[0]);
1235     long idn1=cid(param[4].argument[0]);
1236     long idn2=cid(param[5].argument[0]);
1237     long idn3=cid(param[6].argument[0]);
1238     FEM_NOEUD* tab[3];
1239     tab[0]=femmai->get_fem_noeudid(idn1);
1240     tab[1]=femmai->get_fem_noeudid(idn2);
1241     tab[2]=femmai->get_fem_noeudid(idn3);
1242     MG_ELEMENT_MAILLAGE* elmai;
1243     if (idmai>-1)
1244     elmai=mgmai->get_mg_triangleid(idmai);
1245     else elmai=NULL;
1246 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1247     if (idtopo>-1)
1248 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1249 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
1250 francois 309 femmai->ajouter_fem_element2(tri);
1251 francois 283 }
1252     if (entite=="FEM_TRIANGLE6")
1253     {
1254     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1255 francois 378 long idtopo=cid(param[2].argument[0]);
1256 francois 283 long idmai=cid(param[3].argument[0]);
1257     long idn1=cid(param[4].argument[0]);
1258     long idn2=cid(param[5].argument[0]);
1259     long idn3=cid(param[6].argument[0]);
1260     long idn4=cid(param[7].argument[0]);
1261     long idn5=cid(param[8].argument[0]);
1262     long idn6=cid(param[9].argument[0]);
1263     FEM_NOEUD* tab[6];
1264     tab[0]=femmai->get_fem_noeudid(idn1);
1265     tab[1]=femmai->get_fem_noeudid(idn2);
1266     tab[2]=femmai->get_fem_noeudid(idn3);
1267     tab[3]=femmai->get_fem_noeudid(idn4);
1268     tab[4]=femmai->get_fem_noeudid(idn5);
1269     tab[5]=femmai->get_fem_noeudid(idn6);
1270     MG_ELEMENT_MAILLAGE* elmai;
1271     if (idmai>-1)
1272     elmai=mgmai->get_mg_triangleid(idmai);
1273     else elmai=NULL;
1274 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1275     if (idtopo>-1)
1276 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1277 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
1278 francois 309 femmai->ajouter_fem_element2(tri);
1279 francois 283 }
1280 francois 310 if (entite=="FEM_QUADRANGLE4")
1281     {
1282     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1283 francois 378 long idtopo=cid(param[2].argument[0]);
1284     long idmai=cid(param[3].argument[0]);
1285 francois 310 long idn1=cid(param[4].argument[0]);
1286     long idn2=cid(param[5].argument[0]);
1287     long idn3=cid(param[6].argument[0]);
1288     long idn4=cid(param[7].argument[0]);
1289     FEM_NOEUD* tab[4];
1290     tab[0]=femmai->get_fem_noeudid(idn1);
1291     tab[1]=femmai->get_fem_noeudid(idn2);
1292     tab[2]=femmai->get_fem_noeudid(idn3);
1293     tab[3]=femmai->get_fem_noeudid(idn4);
1294     MG_ELEMENT_MAILLAGE* elmai;
1295     if (idmai>-1)
1296     elmai=mgmai->get_mg_quadrangleid(idmai);
1297     else elmai=NULL;
1298 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1299     if (idtopo>-1)
1300 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1301 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
1302 francois 310 femmai->ajouter_fem_element2(quad);
1303     }
1304     if (entite=="FEM_QUADRANGLE8")
1305     {
1306     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1307 francois 378 long idtopo=cid(param[2].argument[0]);
1308     long idmai=cid(param[3].argument[0]);
1309 francois 310 long idn1=cid(param[4].argument[0]);
1310     long idn2=cid(param[5].argument[0]);
1311     long idn3=cid(param[6].argument[0]);
1312     long idn4=cid(param[7].argument[0]);
1313     long idn5=cid(param[8].argument[0]);
1314     long idn6=cid(param[9].argument[0]);
1315     long idn7=cid(param[10].argument[0]);
1316     long idn8=cid(param[11].argument[0]);
1317     FEM_NOEUD* tab[8];
1318     tab[0]=femmai->get_fem_noeudid(idn1);
1319     tab[1]=femmai->get_fem_noeudid(idn2);
1320     tab[2]=femmai->get_fem_noeudid(idn3);
1321     tab[3]=femmai->get_fem_noeudid(idn4);
1322     tab[4]=femmai->get_fem_noeudid(idn5);
1323     tab[5]=femmai->get_fem_noeudid(idn6);
1324     tab[6]=femmai->get_fem_noeudid(idn7);
1325     tab[7]=femmai->get_fem_noeudid(idn8);
1326     MG_ELEMENT_MAILLAGE* elmai;
1327     if (idmai>-1)
1328     elmai=mgmai->get_mg_quadrangleid(idmai);
1329     else elmai=NULL;
1330 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1331     if (idtopo>-1)
1332 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1333 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1334 francois 310 femmai->ajouter_fem_element2(quad);
1335     }
1336 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
1337    
1338     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
1339 francois 283 if (entite=="FEM_TETRA4")
1340     {
1341 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1342 francois 378 long idtopo=cid(param[2].argument[0]);
1343     long idmai=cid(param[3].argument[0]);
1344 francois 283 long idn1=cid(param[4].argument[0]);
1345     long idn2=cid(param[5].argument[0]);
1346     long idn3=cid(param[6].argument[0]);
1347     long idn4=cid(param[7].argument[0]);
1348 francois 339 long etat=atoi(param[8].argument[0].c_str());
1349 francois 283 FEM_NOEUD* tab[4];
1350     tab[0]=femmai->get_fem_noeudid(idn1);
1351     tab[1]=femmai->get_fem_noeudid(idn2);
1352     tab[2]=femmai->get_fem_noeudid(idn3);
1353     tab[3]=femmai->get_fem_noeudid(idn4);
1354     MG_ELEMENT_MAILLAGE* elmai;
1355     if (idmai>-1)
1356     elmai=mgmai->get_mg_tetraid(idmai);
1357     else elmai=NULL;
1358 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1359     if (idtopo>-1)
1360 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1361 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1362 francois 410 tet->change_etat(0,etat);
1363 francois 309 femmai->ajouter_fem_element3(tet);
1364 francois 283 }
1365 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
1366 francois 339 {
1367 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
1368 francois 399 unsigned long idele=cid(param[2].argument[0]);
1369     unsigned long idtopo=cid(param[3].argument[0]);
1370     unsigned long idn1=cid(param[4].argument[0]);
1371 francois 380 int etat=atoi(param[5].argument[0].c_str());
1372 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
1373     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
1374     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
1375     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1376     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1377 francois 380 FEM_NOEUD* tab[4];
1378     tab[0]=femmai->get_fem_noeudid(idn1);
1379 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
1380     femmai->ajouter_xfem_element0(xele);
1381     xele->change_etat(etat);
1382     }
1383     if (entite=="XFEM_SEGMENT2")
1384     {
1385     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1386     unsigned long idele=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     int etat=atoi(param[6].argument[0].c_str());
1391     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
1392     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1393     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1394     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
1395     FEM_NOEUD* tab[4];
1396     tab[0]=femmai->get_fem_noeudid(idn1);
1397 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
1398 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
1399 francois 380 femmai->ajouter_xfem_element1(xseg);
1400 francois 399 xseg->change_etat(etat);
1401 francois 380 }
1402 francois 410 if (entite=="XFEM_TRIANGLE3")
1403     {
1404     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1405     unsigned long idtet=cid(param[2].argument[0]);
1406     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     int etat=atoi(param[7].argument[0].c_str());
1411     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1412     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1413     FEM_NOEUD* tab[3];
1414     tab[0]=femmai->get_fem_noeudid(idn1);
1415     tab[1]=femmai->get_fem_noeudid(idn2);
1416     tab[2]=femmai->get_fem_noeudid(idn3);
1417     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
1418     femmai->ajouter_xfem_element2(xtri);
1419     xtri->change_etat(etat);
1420     }
1421 francois 380 if (entite=="XFEM_TETRA4")
1422     {
1423 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1424 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1425 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
1426     unsigned long idn1=cid(param[4].argument[0]);
1427     unsigned long idn2=cid(param[5].argument[0]);
1428     unsigned long idn3=cid(param[6].argument[0]);
1429     unsigned long idn4=cid(param[7].argument[0]);
1430     int etat=atoi(param[8].argument[0].c_str());
1431 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1432 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1433     FEM_NOEUD* tab[4];
1434 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
1435     tab[1]=femmai->get_fem_noeudid(idn2);
1436     tab[2]=femmai->get_fem_noeudid(idn3);
1437     tab[3]=femmai->get_fem_noeudid(idn4);
1438 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
1439 francois 339 femmai->ajouter_xfem_element3(xtet);
1440 francois 383 xtet->change_etat(etat);
1441 francois 339 }
1442 francois 283 if (entite=="FEM_TETRA10")
1443     {
1444     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1445 francois 378 long idtopo=cid(param[2].argument[0]);
1446     long idmai=cid(param[3].argument[0]);
1447 francois 283 long idn1=cid(param[4].argument[0]);
1448     long idn2=cid(param[5].argument[0]);
1449     long idn3=cid(param[6].argument[0]);
1450     long idn4=cid(param[7].argument[0]);
1451     long idn5=cid(param[8].argument[0]);
1452     long idn6=cid(param[9].argument[0]);
1453     long idn7=cid(param[10].argument[0]);
1454     long idn8=cid(param[11].argument[0]);
1455     long idn9=cid(param[12].argument[0]);
1456     long idn10=cid(param[13].argument[0]);
1457     FEM_NOEUD* tab[10];
1458     tab[0]=femmai->get_fem_noeudid(idn1);
1459     tab[1]=femmai->get_fem_noeudid(idn2);
1460     tab[2]=femmai->get_fem_noeudid(idn3);
1461     tab[3]=femmai->get_fem_noeudid(idn4);
1462     tab[4]=femmai->get_fem_noeudid(idn5);
1463     tab[5]=femmai->get_fem_noeudid(idn6);
1464     tab[6]=femmai->get_fem_noeudid(idn7);
1465     tab[7]=femmai->get_fem_noeudid(idn8);
1466     tab[8]=femmai->get_fem_noeudid(idn9);
1467     tab[9]=femmai->get_fem_noeudid(idn10);
1468     MG_ELEMENT_MAILLAGE* elmai;
1469     if (idmai>-1)
1470     elmai=mgmai->get_mg_tetraid(idmai);
1471     else elmai=NULL;
1472 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1473     if (idtopo>-1)
1474 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1475 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1476 francois 309 femmai->ajouter_fem_element3(tet);
1477 francois 283 }
1478 francois 310 if (entite=="FEM_HEXA8")
1479     {
1480     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1481 francois 378 long idtopo=cid(param[2].argument[0]);
1482     long idmai=cid(param[3].argument[0]);
1483 francois 310 long idn1=cid(param[4].argument[0]);
1484     long idn2=cid(param[5].argument[0]);
1485     long idn3=cid(param[6].argument[0]);
1486     long idn4=cid(param[7].argument[0]);
1487     long idn5=cid(param[8].argument[0]);
1488     long idn6=cid(param[9].argument[0]);
1489     long idn7=cid(param[10].argument[0]);
1490     long idn8=cid(param[11].argument[0]);
1491     FEM_NOEUD* tab[8];
1492     tab[0]=femmai->get_fem_noeudid(idn1);
1493     tab[1]=femmai->get_fem_noeudid(idn2);
1494     tab[2]=femmai->get_fem_noeudid(idn3);
1495     tab[3]=femmai->get_fem_noeudid(idn4);
1496     tab[4]=femmai->get_fem_noeudid(idn5);
1497     tab[5]=femmai->get_fem_noeudid(idn6);
1498     tab[6]=femmai->get_fem_noeudid(idn7);
1499     tab[7]=femmai->get_fem_noeudid(idn8);
1500     MG_ELEMENT_MAILLAGE* elmai;
1501     if (idmai>-1)
1502     elmai=mgmai->get_mg_hexaid(idmai);
1503     else elmai=NULL;
1504 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1505     if (idtopo>-1)
1506 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1507 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1508 francois 310 femmai->ajouter_fem_element3(hex);
1509     }
1510     if (entite=="FEM_HEXA20")
1511     {
1512     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1513 francois 378 long idtopo=cid(param[2].argument[0]);
1514     long idmai=cid(param[3].argument[0]);
1515 francois 310 long idn1=cid(param[4].argument[0]);
1516     long idn2=cid(param[5].argument[0]);
1517     long idn3=cid(param[6].argument[0]);
1518     long idn4=cid(param[7].argument[0]);
1519     long idn5=cid(param[8].argument[0]);
1520     long idn6=cid(param[9].argument[0]);
1521     long idn7=cid(param[10].argument[0]);
1522     long idn8=cid(param[11].argument[0]);
1523     long idn9=cid(param[12].argument[0]);
1524     long idn10=cid(param[13].argument[0]);
1525     long idn11=cid(param[14].argument[0]);
1526     long idn12=cid(param[15].argument[0]);
1527     long idn13=cid(param[16].argument[0]);
1528     long idn14=cid(param[17].argument[0]);
1529     long idn15=cid(param[18].argument[0]);
1530     long idn16=cid(param[19].argument[0]);
1531     long idn17=cid(param[20].argument[0]);
1532     long idn18=cid(param[21].argument[0]);
1533     long idn19=cid(param[22].argument[0]);
1534     long idn20=cid(param[23].argument[0]);
1535     FEM_NOEUD* tab[20];
1536     tab[0]=femmai->get_fem_noeudid(idn1);
1537     tab[1]=femmai->get_fem_noeudid(idn2);
1538     tab[2]=femmai->get_fem_noeudid(idn3);
1539     tab[3]=femmai->get_fem_noeudid(idn4);
1540     tab[4]=femmai->get_fem_noeudid(idn5);
1541     tab[5]=femmai->get_fem_noeudid(idn6);
1542     tab[6]=femmai->get_fem_noeudid(idn7);
1543     tab[7]=femmai->get_fem_noeudid(idn8);
1544     tab[8]=femmai->get_fem_noeudid(idn9);
1545     tab[9]=femmai->get_fem_noeudid(idn10);
1546     tab[10]=femmai->get_fem_noeudid(idn11);
1547     tab[11]=femmai->get_fem_noeudid(idn12);
1548     tab[12]=femmai->get_fem_noeudid(idn13);
1549     tab[13]=femmai->get_fem_noeudid(idn14);
1550     tab[14]=femmai->get_fem_noeudid(idn15);
1551     tab[15]=femmai->get_fem_noeudid(idn16);
1552     tab[16]=femmai->get_fem_noeudid(idn17);
1553     tab[17]=femmai->get_fem_noeudid(idn18);
1554     tab[18]=femmai->get_fem_noeudid(idn19);
1555     tab[19]=femmai->get_fem_noeudid(idn20);
1556     MG_ELEMENT_MAILLAGE* elmai;
1557     if (idmai>-1)
1558     elmai=mgmai->get_mg_hexaid(idmai);
1559     else elmai=NULL;
1560 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1561     if (idtopo>-1)
1562 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1563 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1564 francois 310 femmai->ajouter_fem_element3(hex);
1565     }
1566 francois 283 if (entite=="SOLUTION")
1567     {
1568 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1569 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1570 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1571     std::string nomsol=param[4].argument[0];
1572     long idmai=cid(param[5].argument[0]);
1573     int nb=atoi(param[6].argument[0].c_str());
1574     std::string chemin=param[7].argument[0];
1575 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1576 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1577 francois 283 ajouter_mg_solution(sol);
1578     for (int i=0;i<nb;i++)
1579 francois 377 sol->change_legende(i,param[8].argument[i]);
1580 francois 283 }
1581     if (entite=="FEM_SOLUTION")
1582     {
1583 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1584 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1585 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1586     std::string nomsol=param[4].argument[0];
1587     long idmai=cid(param[5].argument[0]);
1588     int nb=atoi(param[6].argument[0].c_str());
1589     std::string chemin=param[7].argument[0];
1590 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1591 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1592 francois 283 ajouter_fem_solution(sol);
1593     for (int i=0;i<nb;i++)
1594 francois 375 sol->change_legende(i,param[8].argument[i]);
1595 francois 283 }
1596     #ifdef WINDOWS_VERSION
1597     if (entite=="CAD4FE_MCSEGMENT")
1598     {
1599     parse.decode(data.c_str(),"@,@,@",param+2);
1600     long idtopo=cid(param[2].argument[0]);
1601     long idn1=cid(param[3].argument[0]);
1602     long idn2=cid(param[4].argument[0]);
1603     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1604     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1605     MG_ELEMENT_TOPOLOGIQUE* topo;
1606     if (idtopo>-1)
1607     {
1608     topo=mggeo->get_mg_areteid(idtopo);
1609     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1610     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1611     }
1612     else topo=NULL;
1613     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
1614     mgmai->ajouter_mg_segment(seg);
1615     }
1616     if (entite=="CAD4FE_MCNODE")
1617     {
1618     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1619     long idRefTopo=cid(param[2].argument[0]);
1620     long idMCTopo=cid(param[3].argument[0]);
1621     double x=atof(param[4].argument[0].c_str());
1622     double y=atof(param[5].argument[0].c_str());
1623     double z=atof(param[6].argument[0].c_str());
1624     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1625     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1626     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1627     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1628     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1629     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1630     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1631     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1632     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1633     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1634    
1635     if (mcTopo->get_dimension()==0)
1636     {
1637     if (updatedMergedRefVertices == false)
1638     {
1639     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1640     itMergedRefVertices != mapMergedRefVertices.end();
1641     itMergedRefVertices++)
1642     {
1643     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1644     MG_SOMMET * refV = NULL;
1645     unsigned long id = itMergedRefVertices->second;
1646     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1647     v->MergeRefVertex(refV);
1648     }
1649    
1650     updatedMergedRefVertices = true;
1651     }
1652     }
1653    
1654     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1655     mgmai->ajouter_mg_noeud(noeud);
1656     }
1657     if (entite=="CAD4FE_MCTRIANGLE")
1658     {
1659     parse.decode(data.c_str(),"@,@,@,@",param+2);
1660     long idtopo=cid(param[2].argument[0]);
1661     long idn1=cid(param[3].argument[0]);
1662     long idn2=cid(param[4].argument[0]);
1663     long idn3=cid(param[5].argument[0]);
1664     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1665     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1666     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1667     CAD4FE::MCSegment* mgsegment[3];
1668     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1669     // la topo. d'un MCTriangle est obligatoirement une MCFace
1670     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1671     for (int i=0;i<3;i++)
1672     {
1673     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1674     if (mgsegment[i]==NULL)
1675     {
1676     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1677     mgmai->ajouter_mg_segment(mgsegment[i]);
1678     }
1679     }
1680     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1681     mgmai->ajouter_mg_triangle(triangle);
1682     }
1683     #endif
1684     }
1685     }
1686     while (param[0].argument[0]!="FIN");
1687 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
1688     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
1689     {
1690     LISTE_MG_SOMMET::iterator itsom;
1691     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
1692     if (som->est_un_sommet_noeud())
1693     {
1694     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
1695     unsigned long idnoeud=somno->get_id_mg_noeud();
1696     MG_NOEUD* noeud;
1697     LISTE_MG_MAILLAGE::iterator itmai;
1698     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1699     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
1700     somno->change_mg_noeud(noeud);
1701     }
1702 francois 685 LISTE_MG_COQUE::iterator itcoq;
1703     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
1704     if (coq->est_une_coque_element())
1705     {
1706     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
1707     int nbele=coque->get_nb_liste_id();
1708     MG_MAILLAGE* mgmai=NULL;
1709     for (int i=0;i<nbele;i++)
1710     {
1711     unsigned long eleid=coque->get_liste_id(i);
1712     if (i==0)
1713     {
1714     LISTE_MG_MAILLAGE::iterator itmai;
1715     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1716     {
1717     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
1718     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
1719     }
1720     }
1721     MG_ELEMENT_MAILLAGE* ele=NULL;
1722     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
1723     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
1724     coque->ajouter_element(ele);
1725     }
1726    
1727     }
1728 francois 526 }
1729 francois 283 #ifdef WINDOWS_VERSION
1730     if (updatedMergedRefVertices == false)
1731     {
1732     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1733     itMergedRefVertices != mapMergedRefVertices.end();
1734     itMergedRefVertices++)
1735     {
1736     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1737     MG_SOMMET * refV = NULL;
1738     unsigned long id = itMergedRefVertices->second;
1739     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1740     v->MergeRefVertex(refV);
1741     }
1742    
1743     updatedMergedRefVertices = true;
1744     }
1745    
1746     #endif
1747     fclose(in);
1748     #ifdef BREP_SLD
1749     fonction->Fermer();
1750     #endif
1751     return 1;
1752     }
1753    
1754    
1755    
1756