ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 325
Committed: Tue Mar 6 20:54:34 2012 UTC (13 years, 2 months ago) by francois
File size: 57631 byte(s)
Log Message:
Calcul des reactions aux appui avec code aster et sauvegarde ce celles-ci dans MAGiC

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