ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 82177 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

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