ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 767
Committed: Wed Dec 23 20:52:36 2015 UTC (9 years, 4 months ago) by francois
File size: 82980 byte(s)
Log Message:
calcul sur des structures mixtes volume poutre.
cela fonctionne pour l'instant pour des blocages appliquées uniquement aux mailles 3D et pour des résultats aux mailles 3D uniquement aux noeuds

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