ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 823
Committed: Tue Sep 6 13:02:30 2016 UTC (8 years, 8 months ago) by couturad
File size: 86378 byte(s)
Log Message:
Ajout de la primitive MG_ELLIPSOIDE_REVOLUTION

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