ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 814
Committed: Fri Aug 12 14:58:19 2016 UTC (8 years, 9 months ago) by couturad
File size: 85460 byte(s)
Log Message:
-> Mise à jour de la version du fichier MAGiC (version 2.2)
-> Ajout de la fonctionnalité get_liste_pole permettant d'obtenir les pôles d'une face
-> Ajout d'une méthode de génération d'un VES aléatoire selon la méthode RSA

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 francois 794 if (version_fichier<2)
668     {
669     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
670 francois 283 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
671     mggeo->ajouter_mg_coque(mgcoq);
672     int nummat=atoi((char*)param[4].argument[0].c_str());
673     mgcoq->change_num_materiau(nummat);
674     int nb=atoi(param[5].argument[0].c_str());
675 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgcoq);
676 francois 794 }
677     else
678     {
679     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
680     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
681     mggeo->ajouter_mg_coque(mgcoq);
682     int nb=atoi(param[4].argument[0].c_str());
683     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgcoq);
684     }
685 francois 763 /*if (nb!=0)
686 francois 283 {
687     for (int i=0;i<nb;i++)
688     {
689     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
690     char nom[3];
691     double val;
692     strcpy(nom,param[7].argument[0].c_str());
693     val=atof(param[8].argument[0].c_str());
694     mgcoq->ajouter_ccf(nom,val);
695     }
696 francois 763 }*/
697 francois 283 }
698     if (entite=="POUTRE")
699     {
700 francois 794 if (version_fichier<2)
701     {
702     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
703 francois 283 MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
704     mggeo->ajouter_mg_poutre(mgpoutre);
705     int nummat=atoi((char*)param[4].argument[0].c_str());
706     mgpoutre->change_num_materiau(nummat);
707     int nb=atoi(param[5].argument[0].c_str());
708 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgpoutre);
709 francois 794 }
710     else
711     {
712     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
713     MG_POUTRE* mgpou=new MG_POUTRE(param[2].argument[0],id);
714     mggeo->ajouter_mg_poutre(mgpou);
715     int nb=atoi(param[4].argument[0].c_str());
716     if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgpou);
717     }
718    
719 francois 763 /*if (nb!=0)
720 francois 283 {
721     for (int i=0;i<nb;i++)
722     {
723     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
724     char nom[3];
725     double val;
726     strcpy(nom,param[7].argument[0].c_str());
727     val=atof(param[8].argument[0].c_str());
728     mgpoutre->ajouter_ccf(nom,val);
729     }
730 francois 763 }*/
731 francois 283 }
732     if (entite=="COQUILLE")
733     {
734     parse.decode(data.c_str(),"@,@",param+2);
735     long ident=cid(param[2].argument[0]);
736     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
737     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
738     if (mgvol!=NULL)
739     {
740     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
741     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
742     }
743     if (mgcoq!=NULL)
744     {
745     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
746     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
747     }
748    
749     }
750     #ifdef BREP_STEP
751     if (entite=="SURFACE_STEP")
752     {
753     parse.decode(data.c_str(),"@",param+2);
754     long idstepsuf=atol(param[2].argument[0].c_str());
755 couturad 740 ST_SURFACE *stsurf=mggeo->get_gest_step().lst_surface.getid(idstepsuf);
756 francois 283 STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
757     mggeo->ajouter_mg_surface(stepsurf);
758     }
759     if (entite=="COURBE_STEP")
760     {
761     parse.decode(data.c_str(),"@",param+2);
762     long idstepcur=atol(param[2].argument[0].c_str());
763 couturad 740 ST_COURBE *stcur=mggeo->get_gest_step().lst_courbe.getid(idstepcur);
764 francois 283 STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
765     mggeo->ajouter_mg_courbe(stepcur);
766     }
767    
768     if (entite=="POINT_STEP")
769     {
770     parse.decode(data.c_str(),"@",param+2);
771     long idsteppt=atol(param[2].argument[0].c_str());
772 couturad 740 ST_POINT *stpt=mggeo->get_gest_step().lst_point.getid(idsteppt);
773 francois 283 STEP_POINT* steppt=new STEP_POINT(id,stpt);
774     mggeo->ajouter_mg_point(steppt);
775     }
776    
777     #endif
778     #ifdef BREP_SAT
779     if (entite=="SURFACE_SAT")
780     {
781     parse.decode(data.c_str(),"@",param+2);
782     long idsatsuf=atol(param[2].argument[0].c_str());
783 couturad 740 SAT_SURFACE *satsurf=mggeo->get_gest_sat().lst_surface.getid(idsatsuf);
784 francois 283 ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
785     mggeo->ajouter_mg_surface(acissurf);
786     }
787     if (entite=="COURBE_SAT")
788     {
789     parse.decode(data.c_str(),"@",param+2);
790     long idsatcur=atol(param[2].argument[0].c_str());
791 couturad 740 SAT_COURBE *satcur=mggeo->get_gest_sat().lst_courbe.getid(idsatcur);
792 francois 283 ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
793     mggeo->ajouter_mg_courbe(aciscur);
794     }
795    
796     if (entite=="POINT_SAT")
797     {
798     parse.decode(data.c_str(),"@",param+2);
799     long idsatpt=atol(param[2].argument[0].c_str());
800 couturad 740 SAT_POINT *satpt=mggeo->get_gest_sat().lst_point.getid(idsatpt);
801 francois 283 ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
802     mggeo->ajouter_mg_point(acispt);
803     }
804    
805     #endif
806    
807     #ifdef BREP_OCC
808    
809     if (entite=="SURFACE_OCC")
810     {
811     parse.decode(data.c_str(),"@",param+2);
812     long idocc=atol(param[2].argument[0].c_str());
813 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
814 francois 283 TopoDS_Face occface=TopoDS::Face(occshape);
815 couturad 740 OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface,mggeo->get_occ_fonction());
816 francois 283 mggeo->ajouter_mg_surface(occsurf);
817     }
818     if (entite=="COURBE_OCC")
819     {
820     parse.decode(data.c_str(),"@",param+2);
821     long idocc=atol(param[2].argument[0].c_str());
822 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
823 francois 283 TopoDS_Edge occedge=TopoDS::Edge(occshape);
824 couturad 740 OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, mggeo->get_occ_fonction());
825 francois 283 mggeo->ajouter_mg_courbe(occcrb);
826     }
827     if (entite=="POINT_OCC")
828     {
829     parse.decode(data.c_str(),"@",param+2);
830     long idocc=atol(param[2].argument[0].c_str());
831 couturad 740 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
832 francois 283 TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
833 couturad 740 OCC_POINT* occpoint=new OCC_POINT(id,occvertex, mggeo->get_occ_fonction());
834 francois 283 mggeo->ajouter_mg_point(occpoint);
835     }
836     #endif
837     #ifdef WINDOWS_VERSION
838     if (entite=="CAD4FE_POLYCURVE")
839     {
840     CAD4FE::PolyCurve * polycurve = NULL;
841     parse.decode(data.c_str(),"@,(&)",param+2);
842     int nb = atoi(param[2].argument[0].c_str());
843    
844     if (nb == 0)
845     {
846     printf("PolyCurve %d is formed with reference vertex : ", id);
847     parse.decode(param[3].argument[0].c_str(),"@",param+4);
848     int idRefVertex;
849     idRefVertex=cid(param[4].argument[0].c_str());
850     printf("%d ;\n ", idRefVertex);
851     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
852     polycurve = new CAD4FE::PolyCurve(refVertex);
853     }
854     else
855     {
856     printf("PolyCurve %d is formed with reference edges : ", id);
857     polycurve = new CAD4FE::PolyCurve;
858     for (int i=0;i<nb;i++)
859     {
860     parse.decode(param[3].argument[i].c_str(),"@",param+4);
861     int idRefEdge;
862     idRefEdge=cid(param[4].argument[0].c_str());
863     printf("%d ; ", idRefEdge);
864     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
865     CAD4FE::PolyCurve tmpPC(refEdge);
866     polycurve->Merge(tmpPC);
867     }
868     printf("\n");
869     }
870    
871     polycurve->change_id(id);
872     mggeo->ajouter_mg_courbe(polycurve);
873     }
874    
875    
876     if (entite=="CAD4FE_POLYSURFACE")
877     {
878     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
879     polysurface->change_id(id);
880     mggeo->ajouter_mg_surface(polysurface);
881    
882     parse.decode(data.c_str(),"@,(&)",param+2);
883    
884     int nb = atoi(param[2].argument[0].c_str());
885     printf("PolySurface %d is formed with reference faces : ", id);
886     for (int i=0;i<nb;i++)
887     {
888     parse.decode(param[3].argument[i].c_str(),"@",param+4);
889     int idRefFace;
890     idRefFace=cid(param[4].argument[0].c_str());
891     printf("%d ; ", idRefFace);
892    
893     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
894     CAD4FE::PolySurface tmpSF(refFace);
895     polysurface->Merge(tmpSF);
896     }
897    
898     printf("\n");
899     }
900     if (entite=="CAD4FE_MCEDGE")
901     {
902     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
903    
904     std::string idOriginal = param[2].argument[0];
905     long idPolyCurve=cid(param[3].argument[0]);
906     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
907    
908     // sense is not used because a MCEdge always has
909     // a sense = 1 !
910     // (because polycurve domain is equal to mcEdge domain)
911     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
912     mcEdge->change_id(id);
913     mggeo->ajouter_mg_arete(mcEdge);
914    
915     int nb=atoi(param[7].argument[0].c_str());
916     if (nb!=0)
917     {
918     for (int i=0;i<nb;i++)
919     {
920     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
921     char nom[3];
922     double val;
923     strcpy(nom,param[9].argument[0].c_str());
924     val=atof(param[10].argument[0].c_str());
925     mcEdge->ajouter_ccf(nom,val);
926     }
927     }
928     }
929     if (entite=="CAD4FE_MCFACE")
930     {
931     parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
932    
933     std::string idOriginal = param[2].argument[0];
934     long idPolySurface=cid(param[3].argument[0]);
935     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
936    
937     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
938     mcFace->change_id(id);
939     mggeo->ajouter_mg_face(mcFace);
940    
941     int nb=atoi(param[6].argument[0].c_str());
942     if (nb!=0)
943     {
944     for (int i=0;i<nb;i++)
945     {
946     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
947     char nom[3];
948     double val;
949     strcpy(nom,param[8].argument[0].c_str());
950     val=atof(param[9].argument[0].c_str());
951     mcFace->ajouter_ccf(nom,val);
952     }
953     }
954     }
955     if (entite=="CAD4FE_MCVERTEX")
956     {
957     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
958     std::string idOriginal = param[2].argument[0];
959     long idsom=cid(param[3].argument[0]);
960     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
961     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
962     mcVertex->change_id(id);
963     mggeo->ajouter_mg_sommet(mcVertex);
964     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
965     if (nb_ref_vertex!=0)
966     {
967     for (int i=0;i<nb_ref_vertex;i++)
968     {
969     unsigned long idRefVertex=cid(param[5].argument[i]);
970     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
971     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
972     }
973     }
974     int nb_ccf=atoi(param[4+2].argument[0].c_str());
975     if (nb_ccf!=0)
976     {
977     for (int i=0;i<nb_ccf;i++)
978     {
979     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
980     char nom_ccf[3];
981     double val_ccf;
982     strcpy(nom_ccf,param[6+2].argument[0].c_str());
983     val_ccf=atof(param[7+2].argument[0].c_str());
984     mgsom->ajouter_ccf(nom_ccf,val_ccf);
985     }
986     }
987     }
988     #endif
989     if (entite=="FACE")
990     {
991 couturad 814 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
992     else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
993     long idsurf=cid(param[3].argument[0]);
994 francois 283 int sens=atoi(param[5].argument[0].c_str());
995     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
996     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
997     mggeo->ajouter_mg_face(mgface);
998 couturad 814 int argccf=7;
999     if (version_fichier>2.1)
1000     {
1001     argccf=8;
1002     int nbpole=atoi(param[6].argument[0].c_str());
1003     mgface->change_nb_pole(nbpole);
1004     }
1005     int nb=atoi(param[argccf-1].argument[0].c_str());
1006     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
1007 francois 763 /*if (nb!=0)
1008 francois 283 {
1009     for (int i=0;i<nb;i++)
1010     {
1011     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
1012     char nom[3];
1013     double val;
1014     strcpy(nom,param[8].argument[0].c_str());
1015     val=atof(param[9].argument[0].c_str());
1016     mgface->ajouter_ccf(nom,val);
1017     }
1018 francois 763 }*/
1019 francois 283 }
1020     if (entite=="COFACE")
1021     {
1022     parse.decode(data.c_str(),"@,@,@",param+2);
1023     long idface=cid(param[2].argument[0]);
1024     long idcoq=cid(param[3].argument[0]);
1025     int sens=atoi(param[4].argument[0].c_str());
1026     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
1027     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
1028     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
1029     mgcoq->ajouter_mg_coface(mgcoface);
1030     }
1031     if (entite=="BOUCLE")
1032     {
1033     parse.decode(data.c_str(),"@,(@)",param+2);
1034     long ident=cid(param[2].argument[0]);
1035     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
1036     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
1037     if (mgface!=NULL)
1038     {
1039     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
1040     mggeo->ajouter_mg_boucle(mgbou,mgface);
1041     }
1042     if (mgpoutre!=NULL)
1043     {
1044     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
1045     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
1046     }
1047     }
1048     if (entite=="POINT")
1049     {
1050     parse.decode(data.c_str(),"@,@,@",param+2);
1051     double xyz[3];
1052     xyz[0]=atof(param[2].argument[0].c_str());
1053     xyz[1]=atof(param[3].argument[0].c_str());
1054     xyz[2]=atof(param[4].argument[0].c_str());
1055     LC_POINT* point=new LC_POINT(id,xyz);
1056     mggeo->ajouter_mg_point(point);
1057     }
1058     if (entite=="SOMMET")
1059     {
1060 couturad 814 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1061     else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1062 francois 283 long idpoint=cid(param[3].argument[0]);
1063     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
1064     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
1065     mggeo->ajouter_mg_sommet(mgsom);
1066 couturad 814 int argccf=5;
1067     if (version_fichier>2.1)
1068     {
1069     argccf=6;
1070     int ipole=atoi(param[4].argument[0].c_str());
1071     if (ipole==1) mgsom->change_pole(true);
1072     }
1073     int nb=atoi(param[argccf-1].argument[0].c_str());
1074     if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
1075 francois 763 /*if (nb!=0)
1076 francois 283 {
1077     for (int i=0;i<nb;i++)
1078     {
1079     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1080     char nom[3];
1081     double val;
1082     strcpy(nom,param[6].argument[0].c_str());
1083     val=atof(param[7].argument[0].c_str());
1084     mgsom->ajouter_ccf(nom,val);
1085     }
1086 francois 763 }*/
1087 francois 283 }
1088 francois 576 if (entite=="ARETE_ELEMENT")
1089     {
1090     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1091     MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
1092     mggeo->ajouter_mg_arete(are);
1093     int nb=atoi(param[4].argument[0].c_str());
1094 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
1095     /* if (nb!=0)
1096 francois 576 {
1097     for (int i=0;i<nb;i++)
1098     {
1099     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1100     char nom[3];
1101     double val;
1102     strcpy(nom,param[6].argument[0].c_str());
1103     val=atof(param[7].argument[0].c_str());
1104     are->ajouter_ccf(nom,val);
1105     }
1106 francois 763 }*/
1107 francois 576 }
1108     if (entite=="FACE_ELEMENT")
1109     {
1110     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1111     MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
1112     mggeo->ajouter_mg_face(face);
1113     int nb=atoi(param[4].argument[0].c_str());
1114 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,face);
1115     /*if (nb!=0)
1116 francois 576 {
1117     for (int i=0;i<nb;i++)
1118     {
1119     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1120     char nom[3];
1121     double val;
1122     strcpy(nom,param[6].argument[0].c_str());
1123     val=atof(param[7].argument[0].c_str());
1124     face->ajouter_ccf(nom,val);
1125     }
1126 francois 763 }*/
1127 francois 576 }
1128 francois 685 if (entite=="COQUE_ELEMENT")
1129     {
1130     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1131     MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
1132     mggeo->ajouter_mg_coque(coq);
1133     int nbele=atoi(param[2].argument[0].c_str());
1134     for (int i=0;i<nbele;i++)
1135     {
1136     unsigned long idele=cid(param[3].argument[i].c_str());
1137     coq->ajouter_element(idele);
1138     }
1139     int nb=atoi(param[4].argument[0].c_str());
1140 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
1141     /* if (nb!=0)
1142 francois 685 {
1143     for (int i=0;i<nb;i++)
1144     {
1145     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1146     char nom[3];
1147     double val;
1148     strcpy(nom,param[6].argument[0].c_str());
1149     val=atof(param[7].argument[0].c_str());
1150     coq->ajouter_ccf(nom,val);
1151     }
1152 francois 763 }*/
1153 francois 685 }
1154 francois 753 if (entite=="POUTRE_ELEMENT")
1155 francois 576 {
1156     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1157 francois 753 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
1158     mggeo->ajouter_mg_poutre(pou);
1159     int nbele=atoi(param[2].argument[0].c_str());
1160     for (int i=0;i<nbele;i++)
1161     {
1162     unsigned long idele=cid(param[3].argument[i].c_str());
1163     pou->ajouter_element(idele);
1164     }
1165     int nb=atoi(param[4].argument[0].c_str());
1166 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
1167     /*if (nb!=0)
1168 francois 753 {
1169     for (int i=0;i<nb;i++)
1170     {
1171     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1172     char nom[3];
1173     double val;
1174     strcpy(nom,param[6].argument[0].c_str());
1175     val=atof(param[7].argument[0].c_str());
1176     pou->ajouter_ccf(nom,val);
1177     }
1178 francois 763 }*/
1179 francois 753 }
1180     if (entite=="VOLUME_ELEMENT")
1181     {
1182     parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
1183 francois 576 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
1184     mggeo->ajouter_mg_volume(vol);
1185     int nb=atoi(param[4].argument[0].c_str());
1186 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
1187     /* if (nb!=0)
1188 francois 576 {
1189     for (int i=0;i<nb;i++)
1190     {
1191     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
1192     char nom[3];
1193     double val;
1194     strcpy(nom,param[6].argument[0].c_str());
1195     val=atof(param[7].argument[0].c_str());
1196     vol->ajouter_ccf(nom,val);
1197     }
1198 francois 763 }*/
1199 francois 576 }
1200 francois 526 if (entite=="SOMMET_NOEUD")
1201     {
1202     parse.decode(data.c_str(),"@,@,(&)",param+2);
1203     long idnoeud=cid(param[2].argument[0]);
1204     MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
1205     mggeo->ajouter_mg_sommet(mgsom);
1206     int nb=atoi(param[3].argument[0].c_str());
1207 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
1208     /*if (nb!=0)
1209 francois 526 {
1210     for (int i=0;i<nb;i++)
1211     {
1212     parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
1213     char nom[3];
1214     double val;
1215     strcpy(nom,param[5].argument[0].c_str());
1216     val=atof(param[6].argument[0].c_str());
1217     mgsom->ajouter_ccf(nom,val);
1218     }
1219 francois 763 }*/
1220 francois 526 }
1221 francois 283 if (entite=="ARETE")
1222     {
1223     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1224     long idcur=cid(param[3].argument[0]);
1225     int sens=atoi(param[6].argument[0].c_str());
1226     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
1227     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
1228     mggeo->ajouter_mg_arete(mgarete);
1229     int nb=atoi(param[7].argument[0].c_str());
1230 francois 763 if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
1231     /*if (nb!=0)
1232 francois 283 {
1233     for (int i=0;i<nb;i++)
1234     {
1235     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
1236     char nom[3];
1237     double val;
1238     strcpy(nom,param[9].argument[0].c_str());
1239     val=atof(param[10].argument[0].c_str());
1240     mgarete->ajouter_ccf(nom,val);
1241     }
1242 francois 763 }*/
1243 francois 283 }
1244     if (entite=="COSOMMET")
1245     {
1246     parse.decode(data.c_str(),"@,@,@",param+2);
1247     long idsom=cid(param[2].argument[0]);
1248     long idarete=cid(param[3].argument[0]);
1249     int num=atoi(param[4].argument[0].c_str());
1250     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
1251     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1252     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
1253     if (num==1) mgarete->changer_cosommet1(mgcosom);
1254     if (num==2) mgarete->changer_cosommet2(mgcosom);
1255     }
1256     if (entite=="COARETE")
1257     {
1258     parse.decode(data.c_str(),"@,@,@",param+2);
1259     long idarete=cid(param[2].argument[0]);
1260     long idboucle=cid(param[3].argument[0]);
1261     int sens=atoi(param[4].argument[0].c_str());
1262     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
1263     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
1264     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
1265     mgboucle->ajouter_mg_coarete(mgcoarete);
1266     }
1267     if (entite=="VISU_COURBE")
1268     {
1269     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1270     double xyz1[3];
1271     double xyz2[3];
1272     xyz1[0]=atof(param[2].argument[0].c_str());
1273     xyz1[1]=atof(param[3].argument[0].c_str());
1274     xyz1[2]=atof(param[4].argument[0].c_str());
1275     xyz2[0]=atof(param[5].argument[0].c_str());
1276     xyz2[1]=atof(param[6].argument[0].c_str());
1277     xyz2[2]=atof(param[7].argument[0].c_str());
1278     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
1279     mggeo->ajouter_mg_visu_courbe(mgcrb);
1280     }
1281     if (entite=="MAILLAGE")
1282     {
1283     parse.decode(data.c_str(),"@",param+2);
1284     long idgeo=cid(param[2].argument[0]);
1285 francois 626 mggeo=get_mg_geometrieid(idgeo);
1286 francois 283 mgmai=new MG_MAILLAGE(id,mggeo);
1287     ajouter_mg_maillage(mgmai);
1288     }
1289 francois 465 if (entite=="MAILLAGE_STRUCTURE")
1290     {
1291     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1292     long idgeo=cid(param[2].argument[0]);
1293 francois 626 mggeo=get_mg_geometrieid(idgeo);
1294 francois 465 mgmai=new MG_MAILLAGE(id,mggeo);
1295     ajouter_mg_maillage(mgmai);
1296     double xmin=atof(param[3].argument[0].c_str());
1297     double ymin=atof(param[4].argument[0].c_str());
1298     double zmin=atof(param[5].argument[0].c_str());
1299     double xmax=atof(param[6].argument[0].c_str());
1300     double ymax=atof(param[7].argument[0].c_str());
1301     double zmax=atof(param[8].argument[0].c_str());
1302     int nx=atoi(param[9].argument[0].c_str());
1303     int ny=atoi(param[10].argument[0].c_str());
1304     int nz=atoi(param[11].argument[0].c_str());
1305     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1306     mgmai->change_param_structure(b,nx,ny,nz);
1307     }
1308 francois 283 if (entite=="FEM_MAILLAGE")
1309     {
1310     parse.decode(data.c_str(),"@,@,@",param+2);
1311     int degre=atoi(param[2].argument[0].c_str());
1312     long idmai=cid(param[3].argument[0]);
1313     long idgeo=cid(param[4].argument[0]);
1314 francois 626 mggeo=get_mg_geometrieid(idgeo);
1315     mgmai=get_mg_maillageid(idmai);
1316 francois 283 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1317     ajouter_fem_maillage(femmai);
1318     }
1319 francois 465 if (entite=="FEM_MAILLAGE_STRUCTURE")
1320     {
1321     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1322     int degre=atoi(param[2].argument[0].c_str());
1323     long idmai=cid(param[3].argument[0]);
1324     long idgeo=cid(param[4].argument[0]);
1325 francois 626 mggeo=get_mg_geometrieid(idgeo);
1326     mgmai=get_mg_maillageid(idmai);
1327 francois 465 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
1328     ajouter_fem_maillage(femmai);
1329     double xmin=atof(param[5].argument[0].c_str());
1330     double ymin=atof(param[6].argument[0].c_str());
1331     double zmin=atof(param[7].argument[0].c_str());
1332     double xmax=atof(param[8].argument[0].c_str());
1333     double ymax=atof(param[9].argument[0].c_str());
1334     double zmax=atof(param[10].argument[0].c_str());
1335     int nx=atoi(param[11].argument[0].c_str());
1336     int ny=atoi(param[12].argument[0].c_str());
1337     int nz=atoi(param[13].argument[0].c_str());
1338     BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
1339     femmai->change_param_structure(b,nx,ny,nz);
1340     }
1341 francois 551 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
1342 francois 283 if (entite=="FEM_NOEUD")
1343     {
1344     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1345     long idtopo=cid(param[2].argument[0]);
1346     long idmai=cid(param[3].argument[0]);
1347     double x=atof(param[4].argument[0].c_str());
1348     double y=atof(param[5].argument[0].c_str());
1349     double z=atof(param[6].argument[0].c_str());
1350     int num=atoi(param[7].argument[0].c_str());
1351     int numopt=atoi(param[8].argument[0].c_str());
1352     MG_ELEMENT_MAILLAGE* elmai;
1353     if (idmai>-1)
1354     {
1355     elmai=mgmai->get_mg_noeudid(idmai);
1356     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
1357     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
1358     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
1359     }
1360     else elmai=NULL;
1361     FEM_NOEUD* noeud;
1362     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
1363     else
1364     {
1365     MG_ELEMENT_TOPOLOGIQUE* topo;
1366     if (idtopo>-1)
1367     {
1368     topo=mggeo->get_mg_sommetid(idtopo);
1369     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
1370     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1371     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1372     }
1373     else topo=NULL;
1374     noeud=new FEM_NOEUD(id,topo,x,y,z);
1375     }
1376     noeud->change_numero(num);
1377     noeud->change_numero_opt(numopt);
1378     femmai->ajouter_fem_noeud(noeud);
1379     }
1380     if (entite=="FEM_NOEUD_DEF")
1381     {
1382     parse.decode(data.c_str(),"@,@,@",param+2);
1383     double x=atof(param[2].argument[0].c_str());
1384     double y=atof(param[3].argument[0].c_str());
1385     double z=atof(param[4].argument[0].c_str());
1386     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1387     noeud->change_dx(x);
1388     noeud->change_dy(y);
1389     noeud->change_dz(z);
1390     femmai->active_deforme();
1391     }
1392 francois 325 if (entite=="FEM_NOEUD_REAC")
1393     {
1394     parse.decode(data.c_str(),"@,@,@",param+2);
1395     double x=atof(param[2].argument[0].c_str());
1396     double y=atof(param[3].argument[0].c_str());
1397     double z=atof(param[4].argument[0].c_str());
1398     FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
1399     noeud->change_rx(x);
1400     noeud->change_ry(y);
1401     noeud->change_rz(z);
1402 francois 339 femmai->active_reaction();;
1403 francois 325 }
1404 francois 551 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
1405 francois 399 if (entite=="FEM_ELEMENT_NOEUD")
1406     {
1407     parse.decode(data.c_str(),"@,@,@",param+2);
1408     long idtopo=cid(param[2].argument[0]);
1409     long idmai=cid(param[3].argument[0]);
1410     long idn1=cid(param[4].argument[0]);
1411     FEM_NOEUD* tab[1];
1412     tab[0]=femmai->get_fem_noeudid(idn1);
1413     MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1414     if (idtopo>-1)
1415     topo=mggeo->get_mg_sommetid(idtopo);
1416     MG_ELEMENT_MAILLAGE* elmai;
1417     if (idmai>-1)
1418     elmai=mgmai->get_mg_noeudid(idmai);
1419     else elmai=NULL;
1420     FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
1421     femmai->ajouter_fem_element0(fem);
1422     }
1423 francois 283 if (entite=="FEM_SEGMENT2")
1424     {
1425     parse.decode(data.c_str(),"@,@,@,@",param+2);
1426 francois 378 long idtopo=cid(param[2].argument[0]);
1427 francois 283 long idmai=cid(param[3].argument[0]);
1428     long idn1=cid(param[4].argument[0]);
1429     long idn2=cid(param[5].argument[0]);
1430     FEM_NOEUD* tab[2];
1431     tab[0]=femmai->get_fem_noeudid(idn1);
1432     tab[1]=femmai->get_fem_noeudid(idn2);
1433 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1434     if (idtopo>-1)
1435     topo=mggeo->get_mg_areteid(idtopo);
1436 francois 767 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
1437 francois 378 MG_ELEMENT_MAILLAGE* elmai;
1438 francois 283 if (idmai>-1)
1439     elmai=mgmai->get_mg_segmentid(idmai);
1440     else elmai=NULL;
1441 francois 378 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
1442 francois 309 femmai->ajouter_fem_element1(seg);
1443 francois 283 }
1444 francois 767 if (entite=="FEM_MINI_SEGMENT2")
1445     {
1446     parse.decode(data.c_str(),"@,@",param+2);
1447     long idn1=cid(param[2].argument[0]);
1448     long idn2=cid(param[3].argument[0]);
1449     FEM_NOEUD* tab[2];
1450     tab[0]=femmai->get_fem_noeudid(idn1);
1451     tab[1]=femmai->get_fem_noeudid(idn2);
1452     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());
1453     FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
1454     femmai->ajouter_fem_element1(seg);
1455     }
1456 francois 283 if (entite=="FEM_SEGMENT3")
1457     {
1458     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1459 francois 378 long idtopo=cid(param[2].argument[0]);
1460     long idmai=cid(param[3].argument[0]);
1461 francois 283 long idn1=cid(param[4].argument[0]);
1462     long idn2=cid(param[5].argument[0]);
1463     long idn3=cid(param[6].argument[0]);
1464     FEM_NOEUD* tab[3];
1465     tab[0]=femmai->get_fem_noeudid(idn1);
1466     tab[1]=femmai->get_fem_noeudid(idn2);
1467     tab[2]=femmai->get_fem_noeudid(idn3);
1468     MG_ELEMENT_MAILLAGE* elmai;
1469 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1470     if (idtopo>-1)
1471     topo=mggeo->get_mg_areteid(idtopo);
1472     if (idmai>-1)
1473 francois 283 elmai=mgmai->get_mg_segmentid(idmai);
1474     else elmai=NULL;
1475 francois 378 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
1476 francois 309 femmai->ajouter_fem_element1(seg);
1477 francois 283 }
1478 francois 551 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
1479     if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
1480 francois 283 if (entite=="FEM_TRIANGLE3")
1481     {
1482     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1483 francois 378 long idtopo=cid(param[2].argument[0]);
1484 francois 283 long idmai=cid(param[3].argument[0]);
1485     long idn1=cid(param[4].argument[0]);
1486     long idn2=cid(param[5].argument[0]);
1487     long idn3=cid(param[6].argument[0]);
1488     FEM_NOEUD* tab[3];
1489     tab[0]=femmai->get_fem_noeudid(idn1);
1490     tab[1]=femmai->get_fem_noeudid(idn2);
1491     tab[2]=femmai->get_fem_noeudid(idn3);
1492     MG_ELEMENT_MAILLAGE* elmai;
1493     if (idmai>-1)
1494     elmai=mgmai->get_mg_triangleid(idmai);
1495     else elmai=NULL;
1496 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1497     if (idtopo>-1)
1498 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1499 francois 378 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
1500 francois 309 femmai->ajouter_fem_element2(tri);
1501 francois 283 }
1502     if (entite=="FEM_TRIANGLE6")
1503     {
1504     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1505 francois 378 long idtopo=cid(param[2].argument[0]);
1506 francois 283 long idmai=cid(param[3].argument[0]);
1507     long idn1=cid(param[4].argument[0]);
1508     long idn2=cid(param[5].argument[0]);
1509     long idn3=cid(param[6].argument[0]);
1510     long idn4=cid(param[7].argument[0]);
1511     long idn5=cid(param[8].argument[0]);
1512     long idn6=cid(param[9].argument[0]);
1513     FEM_NOEUD* tab[6];
1514     tab[0]=femmai->get_fem_noeudid(idn1);
1515     tab[1]=femmai->get_fem_noeudid(idn2);
1516     tab[2]=femmai->get_fem_noeudid(idn3);
1517     tab[3]=femmai->get_fem_noeudid(idn4);
1518     tab[4]=femmai->get_fem_noeudid(idn5);
1519     tab[5]=femmai->get_fem_noeudid(idn6);
1520     MG_ELEMENT_MAILLAGE* elmai;
1521     if (idmai>-1)
1522     elmai=mgmai->get_mg_triangleid(idmai);
1523     else elmai=NULL;
1524 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1525     if (idtopo>-1)
1526 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1527 francois 378 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
1528 francois 309 femmai->ajouter_fem_element2(tri);
1529 francois 283 }
1530 francois 310 if (entite=="FEM_QUADRANGLE4")
1531     {
1532     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1533 francois 378 long idtopo=cid(param[2].argument[0]);
1534     long idmai=cid(param[3].argument[0]);
1535 francois 310 long idn1=cid(param[4].argument[0]);
1536     long idn2=cid(param[5].argument[0]);
1537     long idn3=cid(param[6].argument[0]);
1538     long idn4=cid(param[7].argument[0]);
1539     FEM_NOEUD* tab[4];
1540     tab[0]=femmai->get_fem_noeudid(idn1);
1541     tab[1]=femmai->get_fem_noeudid(idn2);
1542     tab[2]=femmai->get_fem_noeudid(idn3);
1543     tab[3]=femmai->get_fem_noeudid(idn4);
1544     MG_ELEMENT_MAILLAGE* elmai;
1545     if (idmai>-1)
1546     elmai=mgmai->get_mg_quadrangleid(idmai);
1547     else elmai=NULL;
1548 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1549     if (idtopo>-1)
1550 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1551 francois 378 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
1552 francois 310 femmai->ajouter_fem_element2(quad);
1553     }
1554     if (entite=="FEM_QUADRANGLE8")
1555     {
1556     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1557 francois 378 long idtopo=cid(param[2].argument[0]);
1558     long idmai=cid(param[3].argument[0]);
1559 francois 310 long idn1=cid(param[4].argument[0]);
1560     long idn2=cid(param[5].argument[0]);
1561     long idn3=cid(param[6].argument[0]);
1562     long idn4=cid(param[7].argument[0]);
1563     long idn5=cid(param[8].argument[0]);
1564     long idn6=cid(param[9].argument[0]);
1565     long idn7=cid(param[10].argument[0]);
1566     long idn8=cid(param[11].argument[0]);
1567     FEM_NOEUD* tab[8];
1568     tab[0]=femmai->get_fem_noeudid(idn1);
1569     tab[1]=femmai->get_fem_noeudid(idn2);
1570     tab[2]=femmai->get_fem_noeudid(idn3);
1571     tab[3]=femmai->get_fem_noeudid(idn4);
1572     tab[4]=femmai->get_fem_noeudid(idn5);
1573     tab[5]=femmai->get_fem_noeudid(idn6);
1574     tab[6]=femmai->get_fem_noeudid(idn7);
1575     tab[7]=femmai->get_fem_noeudid(idn8);
1576     MG_ELEMENT_MAILLAGE* elmai;
1577     if (idmai>-1)
1578     elmai=mgmai->get_mg_quadrangleid(idmai);
1579     else elmai=NULL;
1580 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1581     if (idtopo>-1)
1582 francois 383 topo=mggeo->get_mg_faceid(idtopo);
1583 francois 378 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
1584 francois 310 femmai->ajouter_fem_element2(quad);
1585     }
1586 francois 551 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
1587    
1588     if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
1589 francois 283 if (entite=="FEM_TETRA4")
1590     {
1591 francois 339 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1592 francois 378 long idtopo=cid(param[2].argument[0]);
1593     long idmai=cid(param[3].argument[0]);
1594 francois 283 long idn1=cid(param[4].argument[0]);
1595     long idn2=cid(param[5].argument[0]);
1596     long idn3=cid(param[6].argument[0]);
1597     long idn4=cid(param[7].argument[0]);
1598 francois 339 long etat=atoi(param[8].argument[0].c_str());
1599 francois 283 FEM_NOEUD* tab[4];
1600     tab[0]=femmai->get_fem_noeudid(idn1);
1601     tab[1]=femmai->get_fem_noeudid(idn2);
1602     tab[2]=femmai->get_fem_noeudid(idn3);
1603     tab[3]=femmai->get_fem_noeudid(idn4);
1604     MG_ELEMENT_MAILLAGE* elmai;
1605     if (idmai>-1)
1606     elmai=mgmai->get_mg_tetraid(idmai);
1607     else elmai=NULL;
1608 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1609     if (idtopo>-1)
1610 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1611 francois 378 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
1612 francois 410 tet->change_etat(0,etat);
1613 francois 309 femmai->ajouter_fem_element3(tet);
1614 francois 283 }
1615 francois 399 if (entite=="XFEM_ELEMENT_NOEUD")
1616 francois 339 {
1617 francois 380 parse.decode(data.c_str(),"@,@,@,@",param+2);
1618 francois 399 unsigned long idele=cid(param[2].argument[0]);
1619     unsigned long idtopo=cid(param[3].argument[0]);
1620     unsigned long idn1=cid(param[4].argument[0]);
1621 francois 380 int etat=atoi(param[5].argument[0].c_str());
1622 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
1623     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
1624     if (mai==NULL) mai=femmai->get_fem_element1id(idele);
1625     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1626     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1627 francois 380 FEM_NOEUD* tab[4];
1628     tab[0]=femmai->get_fem_noeudid(idn1);
1629 francois 399 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
1630     femmai->ajouter_xfem_element0(xele);
1631     xele->change_etat(etat);
1632     }
1633     if (entite=="XFEM_SEGMENT2")
1634     {
1635     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1636     unsigned long idele=cid(param[2].argument[0]);
1637     unsigned long idtopo=cid(param[3].argument[0]);
1638     unsigned long idn1=cid(param[4].argument[0]);
1639     unsigned long idn2=cid(param[5].argument[0]);
1640     int etat=atoi(param[6].argument[0].c_str());
1641     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
1642     if (mai==NULL) mai=femmai->get_fem_element2id(idele);
1643     if (mai==NULL) mai=femmai->get_fem_element3id(idele);
1644     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
1645     FEM_NOEUD* tab[4];
1646     tab[0]=femmai->get_fem_noeudid(idn1);
1647 francois 380 tab[1]=femmai->get_fem_noeudid(idn2);
1648 francois 399 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
1649 francois 380 femmai->ajouter_xfem_element1(xseg);
1650 francois 399 xseg->change_etat(etat);
1651 francois 380 }
1652 francois 410 if (entite=="XFEM_TRIANGLE3")
1653     {
1654     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1655     unsigned long idtet=cid(param[2].argument[0]);
1656     unsigned long idtopo=cid(param[3].argument[0]);
1657     unsigned long idn1=cid(param[4].argument[0]);
1658     unsigned long idn2=cid(param[5].argument[0]);
1659     unsigned long idn3=cid(param[6].argument[0]);
1660     int etat=atoi(param[7].argument[0].c_str());
1661     FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1662     MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1663     FEM_NOEUD* tab[3];
1664     tab[0]=femmai->get_fem_noeudid(idn1);
1665     tab[1]=femmai->get_fem_noeudid(idn2);
1666     tab[2]=femmai->get_fem_noeudid(idn3);
1667     XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
1668     femmai->ajouter_xfem_element2(xtri);
1669     xtri->change_etat(etat);
1670     }
1671 francois 380 if (entite=="XFEM_TETRA4")
1672     {
1673 francois 399 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1674 francois 339 unsigned long idtet=cid(param[2].argument[0]);
1675 francois 399 unsigned long idtopo=cid(param[3].argument[0]);
1676     unsigned long idn1=cid(param[4].argument[0]);
1677     unsigned long idn2=cid(param[5].argument[0]);
1678     unsigned long idn3=cid(param[6].argument[0]);
1679     unsigned long idn4=cid(param[7].argument[0]);
1680     int etat=atoi(param[8].argument[0].c_str());
1681 francois 408 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
1682 francois 399 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
1683     FEM_NOEUD* tab[4];
1684 francois 378 tab[0]=femmai->get_fem_noeudid(idn1);
1685     tab[1]=femmai->get_fem_noeudid(idn2);
1686     tab[2]=femmai->get_fem_noeudid(idn3);
1687     tab[3]=femmai->get_fem_noeudid(idn4);
1688 francois 399 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
1689 francois 339 femmai->ajouter_xfem_element3(xtet);
1690 francois 383 xtet->change_etat(etat);
1691 francois 339 }
1692 francois 283 if (entite=="FEM_TETRA10")
1693     {
1694     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1695 francois 378 long idtopo=cid(param[2].argument[0]);
1696     long idmai=cid(param[3].argument[0]);
1697 francois 283 long idn1=cid(param[4].argument[0]);
1698     long idn2=cid(param[5].argument[0]);
1699     long idn3=cid(param[6].argument[0]);
1700     long idn4=cid(param[7].argument[0]);
1701     long idn5=cid(param[8].argument[0]);
1702     long idn6=cid(param[9].argument[0]);
1703     long idn7=cid(param[10].argument[0]);
1704     long idn8=cid(param[11].argument[0]);
1705     long idn9=cid(param[12].argument[0]);
1706     long idn10=cid(param[13].argument[0]);
1707     FEM_NOEUD* tab[10];
1708     tab[0]=femmai->get_fem_noeudid(idn1);
1709     tab[1]=femmai->get_fem_noeudid(idn2);
1710     tab[2]=femmai->get_fem_noeudid(idn3);
1711     tab[3]=femmai->get_fem_noeudid(idn4);
1712     tab[4]=femmai->get_fem_noeudid(idn5);
1713     tab[5]=femmai->get_fem_noeudid(idn6);
1714     tab[6]=femmai->get_fem_noeudid(idn7);
1715     tab[7]=femmai->get_fem_noeudid(idn8);
1716     tab[8]=femmai->get_fem_noeudid(idn9);
1717     tab[9]=femmai->get_fem_noeudid(idn10);
1718     MG_ELEMENT_MAILLAGE* elmai;
1719     if (idmai>-1)
1720     elmai=mgmai->get_mg_tetraid(idmai);
1721     else elmai=NULL;
1722 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1723     if (idtopo>-1)
1724 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1725 francois 378 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
1726 francois 309 femmai->ajouter_fem_element3(tet);
1727 francois 283 }
1728 francois 310 if (entite=="FEM_HEXA8")
1729     {
1730     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
1731 francois 378 long idtopo=cid(param[2].argument[0]);
1732     long idmai=cid(param[3].argument[0]);
1733 francois 310 long idn1=cid(param[4].argument[0]);
1734     long idn2=cid(param[5].argument[0]);
1735     long idn3=cid(param[6].argument[0]);
1736     long idn4=cid(param[7].argument[0]);
1737     long idn5=cid(param[8].argument[0]);
1738     long idn6=cid(param[9].argument[0]);
1739     long idn7=cid(param[10].argument[0]);
1740     long idn8=cid(param[11].argument[0]);
1741     FEM_NOEUD* tab[8];
1742     tab[0]=femmai->get_fem_noeudid(idn1);
1743     tab[1]=femmai->get_fem_noeudid(idn2);
1744     tab[2]=femmai->get_fem_noeudid(idn3);
1745     tab[3]=femmai->get_fem_noeudid(idn4);
1746     tab[4]=femmai->get_fem_noeudid(idn5);
1747     tab[5]=femmai->get_fem_noeudid(idn6);
1748     tab[6]=femmai->get_fem_noeudid(idn7);
1749     tab[7]=femmai->get_fem_noeudid(idn8);
1750     MG_ELEMENT_MAILLAGE* elmai;
1751     if (idmai>-1)
1752     elmai=mgmai->get_mg_hexaid(idmai);
1753     else elmai=NULL;
1754 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1755     if (idtopo>-1)
1756 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1757 francois 378 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
1758 francois 310 femmai->ajouter_fem_element3(hex);
1759     }
1760     if (entite=="FEM_HEXA20")
1761     {
1762     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1763 francois 378 long idtopo=cid(param[2].argument[0]);
1764     long idmai=cid(param[3].argument[0]);
1765 francois 310 long idn1=cid(param[4].argument[0]);
1766     long idn2=cid(param[5].argument[0]);
1767     long idn3=cid(param[6].argument[0]);
1768     long idn4=cid(param[7].argument[0]);
1769     long idn5=cid(param[8].argument[0]);
1770     long idn6=cid(param[9].argument[0]);
1771     long idn7=cid(param[10].argument[0]);
1772     long idn8=cid(param[11].argument[0]);
1773     long idn9=cid(param[12].argument[0]);
1774     long idn10=cid(param[13].argument[0]);
1775     long idn11=cid(param[14].argument[0]);
1776     long idn12=cid(param[15].argument[0]);
1777     long idn13=cid(param[16].argument[0]);
1778     long idn14=cid(param[17].argument[0]);
1779     long idn15=cid(param[18].argument[0]);
1780     long idn16=cid(param[19].argument[0]);
1781     long idn17=cid(param[20].argument[0]);
1782     long idn18=cid(param[21].argument[0]);
1783     long idn19=cid(param[22].argument[0]);
1784     long idn20=cid(param[23].argument[0]);
1785     FEM_NOEUD* tab[20];
1786     tab[0]=femmai->get_fem_noeudid(idn1);
1787     tab[1]=femmai->get_fem_noeudid(idn2);
1788     tab[2]=femmai->get_fem_noeudid(idn3);
1789     tab[3]=femmai->get_fem_noeudid(idn4);
1790     tab[4]=femmai->get_fem_noeudid(idn5);
1791     tab[5]=femmai->get_fem_noeudid(idn6);
1792     tab[6]=femmai->get_fem_noeudid(idn7);
1793     tab[7]=femmai->get_fem_noeudid(idn8);
1794     tab[8]=femmai->get_fem_noeudid(idn9);
1795     tab[9]=femmai->get_fem_noeudid(idn10);
1796     tab[10]=femmai->get_fem_noeudid(idn11);
1797     tab[11]=femmai->get_fem_noeudid(idn12);
1798     tab[12]=femmai->get_fem_noeudid(idn13);
1799     tab[13]=femmai->get_fem_noeudid(idn14);
1800     tab[14]=femmai->get_fem_noeudid(idn15);
1801     tab[15]=femmai->get_fem_noeudid(idn16);
1802     tab[16]=femmai->get_fem_noeudid(idn17);
1803     tab[17]=femmai->get_fem_noeudid(idn18);
1804     tab[18]=femmai->get_fem_noeudid(idn19);
1805     tab[19]=femmai->get_fem_noeudid(idn20);
1806     MG_ELEMENT_MAILLAGE* elmai;
1807     if (idmai>-1)
1808     elmai=mgmai->get_mg_hexaid(idmai);
1809     else elmai=NULL;
1810 francois 378 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
1811     if (idtopo>-1)
1812 francois 393 topo=mggeo->get_mg_volumeid(idtopo);
1813 francois 378 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
1814 francois 310 femmai->ajouter_fem_element3(hex);
1815     }
1816 francois 283 if (entite=="SOLUTION")
1817     {
1818 francois 377 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1819 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1820 francois 377 int typesolution=atoi(param[3].argument[0].c_str());
1821     std::string nomsol=param[4].argument[0];
1822     long idmai=cid(param[5].argument[0]);
1823     int nb=atoi(param[6].argument[0].c_str());
1824     std::string chemin=param[7].argument[0];
1825 francois 283 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
1826 francois 377 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1827 francois 283 ajouter_mg_solution(sol);
1828     for (int i=0;i<nb;i++)
1829 francois 377 sol->change_legende(i,param[8].argument[i]);
1830 francois 283 }
1831     if (entite=="FEM_SOLUTION")
1832     {
1833 francois 375 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1834 francois 283 int typeentite=atoi(param[2].argument[0].c_str());
1835 francois 375 int typesolution=atoi(param[3].argument[0].c_str());
1836     std::string nomsol=param[4].argument[0];
1837     long idmai=cid(param[5].argument[0]);
1838     int nb=atoi(param[6].argument[0].c_str());
1839     std::string chemin=param[7].argument[0];
1840 francois 283 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
1841 francois 375 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
1842 francois 283 ajouter_fem_solution(sol);
1843     for (int i=0;i<nb;i++)
1844 francois 375 sol->change_legende(i,param[8].argument[i]);
1845 francois 283 }
1846     #ifdef WINDOWS_VERSION
1847     if (entite=="CAD4FE_MCSEGMENT")
1848     {
1849     parse.decode(data.c_str(),"@,@,@",param+2);
1850     long idtopo=cid(param[2].argument[0]);
1851     long idn1=cid(param[3].argument[0]);
1852     long idn2=cid(param[4].argument[0]);
1853     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1854     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1855     MG_ELEMENT_TOPOLOGIQUE* topo;
1856     if (idtopo>-1)
1857     {
1858     topo=mggeo->get_mg_areteid(idtopo);
1859     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
1860     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
1861     }
1862     else topo=NULL;
1863     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
1864     mgmai->ajouter_mg_segment(seg);
1865     }
1866     if (entite=="CAD4FE_MCNODE")
1867     {
1868     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1869     long idRefTopo=cid(param[2].argument[0]);
1870     long idMCTopo=cid(param[3].argument[0]);
1871     double x=atof(param[4].argument[0].c_str());
1872     double y=atof(param[5].argument[0].c_str());
1873     double z=atof(param[6].argument[0].c_str());
1874     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1875     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1876     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1877     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1878     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1879     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1880     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1881     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1882     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1883     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1884    
1885     if (mcTopo->get_dimension()==0)
1886     {
1887     if (updatedMergedRefVertices == false)
1888     {
1889     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1890     itMergedRefVertices != mapMergedRefVertices.end();
1891     itMergedRefVertices++)
1892     {
1893     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1894     MG_SOMMET * refV = NULL;
1895     unsigned long id = itMergedRefVertices->second;
1896     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1897     v->MergeRefVertex(refV);
1898     }
1899    
1900     updatedMergedRefVertices = true;
1901     }
1902     }
1903    
1904     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1905     mgmai->ajouter_mg_noeud(noeud);
1906     }
1907     if (entite=="CAD4FE_MCTRIANGLE")
1908     {
1909     parse.decode(data.c_str(),"@,@,@,@",param+2);
1910     long idtopo=cid(param[2].argument[0]);
1911     long idn1=cid(param[3].argument[0]);
1912     long idn2=cid(param[4].argument[0]);
1913     long idn3=cid(param[5].argument[0]);
1914     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1915     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1916     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1917     CAD4FE::MCSegment* mgsegment[3];
1918     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1919     // la topo. d'un MCTriangle est obligatoirement une MCFace
1920     CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1921     for (int i=0;i<3;i++)
1922     {
1923     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1924     if (mgsegment[i]==NULL)
1925     {
1926     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1927     mgmai->ajouter_mg_segment(mgsegment[i]);
1928     }
1929     }
1930     CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1931     mgmai->ajouter_mg_triangle(triangle);
1932     }
1933     #endif
1934     }
1935     }
1936     while (param[0].argument[0]!="FIN");
1937 francois 741 LISTE_MG_ARBRE::iterator itarbre;
1938     for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
1939     {
1940     LISTE_MG_ASSEMBLAGE::iterator itass;
1941     for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
1942     ass->ini_donne(arb);
1943     }
1944 francois 526 LISTE_MG_GEOMETRIE::iterator itgeo;
1945     for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
1946     {
1947     LISTE_MG_SOMMET::iterator itsom;
1948     for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
1949     if (som->est_un_sommet_noeud())
1950     {
1951     MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
1952     unsigned long idnoeud=somno->get_id_mg_noeud();
1953     MG_NOEUD* noeud;
1954     LISTE_MG_MAILLAGE::iterator itmai;
1955     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1956     if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
1957     somno->change_mg_noeud(noeud);
1958     }
1959 francois 685 LISTE_MG_COQUE::iterator itcoq;
1960     for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
1961     if (coq->est_une_coque_element())
1962     {
1963     MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
1964     int nbele=coque->get_nb_liste_id();
1965     MG_MAILLAGE* mgmai=NULL;
1966     for (int i=0;i<nbele;i++)
1967     {
1968     unsigned long eleid=coque->get_liste_id(i);
1969     if (i==0)
1970     {
1971     LISTE_MG_MAILLAGE::iterator itmai;
1972     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1973     {
1974     if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
1975     if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
1976     }
1977     }
1978     MG_ELEMENT_MAILLAGE* ele=NULL;
1979     if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
1980     if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
1981     coque->ajouter_element(ele);
1982     }
1983    
1984     }
1985 francois 753 LISTE_MG_POUTRE::iterator itpou;
1986     for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
1987     if (pou->est_une_poutre_element())
1988     {
1989     MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
1990     int nbele=poutre->get_nb_liste_id();
1991     MG_MAILLAGE* mgmai=NULL;
1992     for (int i=0;i<nbele;i++)
1993     {
1994     unsigned long eleid=poutre->get_liste_id(i);
1995     if (i==0)
1996     {
1997     LISTE_MG_MAILLAGE::iterator itmai;
1998     for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
1999     {
2000     if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
2001     }
2002     }
2003     MG_ELEMENT_MAILLAGE* ele=NULL;
2004     if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
2005     poutre->ajouter_element(ele);
2006     }
2007    
2008     }
2009 francois 526 }
2010 francois 283 #ifdef WINDOWS_VERSION
2011     if (updatedMergedRefVertices == false)
2012     {
2013     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
2014     itMergedRefVertices != mapMergedRefVertices.end();
2015     itMergedRefVertices++)
2016     {
2017     CAD4FE::MCVertex * v = itMergedRefVertices->first;
2018     MG_SOMMET * refV = NULL;
2019     unsigned long id = itMergedRefVertices->second;
2020     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
2021     v->MergeRefVertex(refV);
2022     }
2023    
2024     updatedMergedRefVertices = true;
2025     }
2026    
2027     #endif
2028     fclose(in);
2029     return 1;
2030     }
2031    
2032    
2033    
2034