ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 788
Committed: Tue Mar 15 17:04:38 2016 UTC (9 years, 2 months ago) by francois
File size: 84184 byte(s)
Log Message:
ajout d'une propriete dans les conditions aux limites pour dire si l'effort est suivi ou non en non lineaire.
par defaut non suivi. Si non suivi rien ne change par rapport avant. 
compatible avec les operations anterieurs mais le fichier magic passe en version 2.1

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