ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 906
Committed: Mon Nov 13 22:30:18 2017 UTC (7 years, 9 months ago) by couturad
File size: 144347 byte(s)
Log Message:
Nouveau opencascade commit 1

File Contents

# Content
1 //------------------------------------------------------------
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 #include "mg_sommet_noeud.h"
32 #include "mg_arete_element.h"
33 #include "mg_face_element.h"
34 #include "mg_volume_element.h"
35 #include "mg_coque_element.h"
36 #include "mg_poutre_element.h"
37 #include "pars_argument.h"
38 #include "parse.h"
39 #include "ot_chaine.h"
40 #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 #include "fem_segment2.h"
52 #include "fem_mini_segment2.h"
53 #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 #include "xfem_segment2.h"
60 #include "xfem_triangle3.h"
61 #include "xfem_tetra4.h"
62 #include "fem_tetra10.h"
63 #include "fem_hexa8.h"
64 #include "fem_hexa20.h"
65 #include "fem_penta6.h"
66 #include "fem_penta15.h"
67 //OCC
68 #ifdef BREP_OCC
69 #include "occ_surface.h"
70 #include "occ_point.h"
71 #include "occ_courbe.h"
72 #include "occ_fonction.h"
73 #include "TopoDS_Shape.hxx"
74 #include "TopoDS.hxx"
75 #include "occ_sommet.h"
76 #endif
77 #ifdef CSG_OCC
78 #include "mg_assemblage.h"
79 #include "mg_primitive_boite.h"
80 #include "mg_primitive_sphere.h"
81 #include "mg_primitive_ellipsoide_revolution.h"
82 #include "mg_primitive_cylindre.h"
83 #include "mg_primitive_cone.h"
84 #include "mg_primitive_tore.h"
85 #include "mg_primitive_complexe.h"
86 #include "mg_operateur_boolean_union.h"
87 #include "mg_operateur_boolean_difference.h"
88 #include "mg_operateur_boolean_intersection.h"
89
90 #endif
91 #include "occ_fonction_v2017.h"
92 #include "mg_cg_forme.h"
93 #include "mg_cg_forme_arete_droite.h"
94 #include "mg_cg_forme_volume_boite.h"
95 #include "mg_cg_forme_volume_sphere.h"
96 #include "mg_cg_forme_volume_ellipsoide.h"
97 #include "mg_cg_forme_volume_cylindre.h"
98 #include "mg_cg_forme_volume_cone.h"
99 #include "mg_cg_forme_volume_tore.h"
100 #include "mg_cg_forme_multiple.h"
101 #include "mg_cg_forme_multi_volume.h"
102 #include "mg_cg_op_bool_union.h"
103 #include "mg_cg_op_bool_difference.h"
104 #include "mg_cg_op_bool_intersection.h"
105 #include "mg_cg_op_bool_fragment.h"
106 #include "mg_cg_op_inclusion_matrice.h"
107 #include "mg_cg_op_transf_rotation.h"
108 #include "mg_cg_op_transf_translation.h"
109 #include "mg_cg_op_transf_echelle.h"
110 #include "mg_cg_modele.h"
111 #include "mg_cg_assemblage.h"
112 #include "mg_cg_op_bool_union.h"
113 #include "mg_cg.h"
114 #include "mg_sous_geometrie.h"
115
116 //---------------------------------------------------------------------------
117 // CAD4FE Headers
118 #ifdef WINDOWS_VERSION
119 #include "CAD4FE_MCEdge.h"
120 #include "CAD4FE_MCFace.h"
121 #include "CAD4FE_MCVertex.h"
122 #include "CAD4FE_PolySurface.h"
123 #include "CAD4FE_PolyCurve.h"
124 #include "CAD4FE_MCNode.h"
125 #include "CAD4FE_MCSegment.h"
126 #include "CAD4FE_MCTriangle.h"
127 #include "CAD4FE_m3d_MCTriangle.h"
128 #endif
129 //---------------------------------------------------------------------------
130
131
132 //---------------------------------------------------------------------------
133 #pragma package(smart_init)
134
135
136 MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
137 {
138 code_de_lecture=lire(chemin);
139 }
140
141 MG_FILE::MG_FILE():MG_GESTIONNAIRE()
142 {
143 }
144
145 MG_FILE::~MG_FILE()
146 {
147 }
148
149 int MG_FILE::get_code_de_lecture(void)
150 {
151 return code_de_lecture;
152 }
153
154 long MG_FILE::cid(std::string str)
155 {
156 const char *p=str.c_str();
157 if (*p=='$') return atol(p+1);
158 return -1;
159 }
160
161
162 void MG_FILE::lire_ccf(double version,int nb,int numparam,class PARSE& parse,class PARS_ARGUMENT (&param)[100],MG_ELEMENT_TOPOLOGIQUE *ele)
163 {
164 if (version<2.0)
165 {
166 for (int i=0;i<nb;i++)
167 {
168 parse.decode(param[numparam].argument[i].c_str(),"(@,@)",param+numparam+1);
169 char nom[3];
170 strcpy(nom,param[numparam+1].argument[0].c_str());
171 if (strcmp(nom,"CM")==0)
172 {
173 unsigned long val;
174 val=atol(param[numparam+2].argument[0].c_str());
175 ele->ajouter_ccf(nom,val);
176 }
177 else
178 {
179 double val;
180 val=atof(param[numparam+2].argument[0].c_str());
181 ele->ajouter_ccf(nom,val);
182 }
183 }
184 }
185 else if (version<2.1)
186 {
187 for (int i=0;i<nb;i++)
188 {
189 char test[500];
190 strcpy(test,param[numparam].argument[i].c_str());
191 parse.decode(param[numparam].argument[i].c_str(),"(@,@,@)",param+numparam+1);
192 char formulation[10];
193 strcpy(formulation,param[numparam+1].argument[0].c_str());
194 char nom[3];
195 strcpy(nom,param[numparam+2].argument[0].c_str());
196 if (formulation[0]=='N')
197 {
198 double val;
199 val=atof(param[numparam+3].argument[0].c_str());
200 ele->ajouter_ccf(nom,val);
201 }
202 if (formulation[0]=='I')
203 {
204 unsigned long val;
205 val=atol(param[numparam+3].argument[0].c_str());
206 ele->ajouter_ccf(nom,val);
207 }
208 if (formulation[0]=='F')
209 {
210 parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,@,(@))",param+numparam+1);
211 char formule[500];
212 strcpy(formule,param[numparam+3].argument[0].c_str());
213 char variable[500];
214 strcpy(variable,param[numparam+5].argument[0].c_str());
215 OT_CHAINE ot;
216 std::vector<std::string> listvariable=ot.split(variable,',');
217 ele->ajouter_ccf(nom,formule,listvariable);
218 }
219 }
220 }
221 else
222 {
223 for (int i=0;i<nb;i++)
224 {
225 char test[500];
226 strcpy(test,param[numparam].argument[i].c_str());
227 parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,@)",param+numparam+1);
228 char formulation[10];
229 strcpy(formulation,param[numparam+1].argument[0].c_str());
230 char nom[3];
231 strcpy(nom,param[numparam+2].argument[0].c_str());
232 char suiv[10];
233 strcpy(suiv,param[numparam+3].argument[0].c_str());
234 if (formulation[0]=='N')
235 {
236 double val;
237 val=atof(param[numparam+4].argument[0].c_str());
238 ele->ajouter_ccf(nom,val,suiv);
239 }
240 if (formulation[0]=='I')
241 {
242 unsigned long val;
243 val=atol(param[numparam+4].argument[0].c_str());
244 ele->ajouter_ccf(nom,val,suiv);
245 }
246 if (formulation[0]=='F')
247 {
248 parse.decode(param[numparam].argument[i].c_str(),"(@,@,@,,@@,(@))",param+numparam+1);
249 char formule[500];
250 strcpy(formule,param[numparam+4].argument[0].c_str());
251 char variable[500];
252 strcpy(variable,param[numparam+6].argument[0].c_str());
253 OT_CHAINE ot;
254 std::vector<std::string> listvariable=ot.split(variable,',');
255 ele->ajouter_ccf(nom,formule,listvariable,suiv);
256 }
257 }
258 }
259 }
260
261 void MG_FILE::lire_NOEUD(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
262 {
263 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
264 long idtopo=cid(param[2].argument[0]);
265 double x=atof(param[3].argument[0].c_str());
266 double y=atof(param[4].argument[0].c_str());
267 double z=atof(param[5].argument[0].c_str());
268 int ori=atoi(param[6].argument[0].c_str());
269 MG_ELEMENT_TOPOLOGIQUE* topo;
270 if (idtopo>-1)
271 {
272 topo=mggeo->get_mg_sommetid(idtopo);
273 if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
274 if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
275 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
276 }
277 else topo=NULL;
278 MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
279 mgmai->ajouter_mg_noeud(noeud);
280 }
281
282 void MG_FILE::lire_SEGMENT(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
283 {
284 parse.decode(data.c_str(),"@,@,@,@",param+2);
285 long idtopo=cid(param[2].argument[0]);
286 long idn1=cid(param[3].argument[0]);
287 long idn2=cid(param[4].argument[0]);
288 int ori=atoi(param[5].argument[0].c_str());
289 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
290 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
291 MG_ELEMENT_TOPOLOGIQUE* topo;
292 if (idtopo>-1)
293 {
294 topo=mggeo->get_mg_areteid(idtopo);
295 if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
296 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
297 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
298 }
299 else topo=NULL;
300 MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
301 mgmai->ajouter_mg_segment(seg);
302 }
303
304
305 void MG_FILE::lire_TRIANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
306 {
307 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
308 long idtopo=cid(param[2].argument[0]);
309 long idn1=cid(param[3].argument[0]);
310 long idn2=cid(param[4].argument[0]);
311 long idn3=cid(param[5].argument[0]);
312 int ori=atoi(param[6].argument[0].c_str());
313 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
314 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
315 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
316 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
317 if (idtopo>-1)
318 {
319 topo=mggeo->get_mg_faceid(idtopo);
320 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
321 }
322 mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
323 }
324
325 void MG_FILE::lire_QUADRANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
326 {
327 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
328 long idtopo=cid(param[2].argument[0]);
329 long idn1=cid(param[3].argument[0]);
330 long idn2=cid(param[4].argument[0]);
331 long idn3=cid(param[5].argument[0]);
332 long idn4=cid(param[6].argument[0]);
333 int ori=atoi(param[7].argument[0].c_str());
334 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
335 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
336 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
337 MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
338 MG_ELEMENT_TOPOLOGIQUE* topo;
339 if (idtopo>-1)
340 {
341 topo=mggeo->get_mg_faceid(idtopo);
342 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
343 }
344 else topo=NULL;
345 mgmai->ajouter_mg_quadrangle(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
346 }
347
348
349 void MG_FILE::lire_TETRA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
350 {
351 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
352 long idtopo=cid(param[2].argument[0]);
353 long idn1=cid(param[3].argument[0]);
354 long idn2=cid(param[4].argument[0]);
355 long idn3=cid(param[5].argument[0]);
356 long idn4=cid(param[6].argument[0]);
357 int ori=atoi(param[7].argument[0].c_str());
358 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
359 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
360 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
361 MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
362 MG_ELEMENT_TOPOLOGIQUE* topo;
363 if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
364 else topo=NULL;
365 if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
366 }
367
368 void MG_FILE::lire_HEXA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
369 {
370 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
371 long idtopo=cid(param[2].argument[0]);
372 long idn1=cid(param[3].argument[0]);
373 long idn2=cid(param[4].argument[0]);
374 long idn3=cid(param[5].argument[0]);
375 long idn4=cid(param[6].argument[0]);
376 long idn5=cid(param[7].argument[0]);
377 long idn6=cid(param[8].argument[0]);
378 long idn7=cid(param[9].argument[0]);
379 long idn8=cid(param[10].argument[0]);
380 int ori=atoi(param[11].argument[0].c_str());
381 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
382 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
383 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
384 MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
385 MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
386 MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
387 MG_NOEUD* noeud7=mgmai->get_mg_noeudid(idn7);
388 MG_NOEUD* noeud8=mgmai->get_mg_noeudid(idn8);
389 MG_ELEMENT_TOPOLOGIQUE* topo;
390 if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
391 else topo=NULL;
392 mgmai->ajouter_mg_hexa(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,noeud7,noeud8,ori,id);
393 }
394
395
396 void MG_FILE::lire_PENTA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
397 {
398 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
399 long idtopo=cid(param[2].argument[0]);
400 long idn1=cid(param[3].argument[0]);
401 long idn2=cid(param[4].argument[0]);
402 long idn3=cid(param[5].argument[0]);
403 long idn4=cid(param[6].argument[0]);
404 long idn5=cid(param[7].argument[0]);
405 long idn6=cid(param[8].argument[0]);
406 int ori=atoi(param[9].argument[0].c_str());
407 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
408 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
409 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
410 MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
411 MG_NOEUD* noeud5=mgmai->get_mg_noeudid(idn5);
412 MG_NOEUD* noeud6=mgmai->get_mg_noeudid(idn6);
413 MG_ELEMENT_TOPOLOGIQUE* topo;
414 if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
415 else topo=NULL;
416 mgmai->ajouter_mg_penta(topo,noeud1,noeud2,noeud3,noeud4,noeud5,noeud6,ori,id);
417 }
418
419
420 void MG_FILE::lire_MG_SOUS_GEOMETRIE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
421 {
422 // PARAM # 2 3 4 5 6 7
423 parse.decode(data.c_str(),"@,@,@,@,@,@,",param+2);
424 long id_mg_geometrie = cid(param[2].argument[0]);
425 long id_parent = cid(param[3].argument[0]);
426 std::string type_geo = param[4].argument[0];
427 std::string nom_fichier = param[5].argument[0];
428 double precision = atof(param[6].argument[0].c_str());
429 double valeur_unitee = atof(param[7].argument[0].c_str());
430 MG_GEOMETRIE* mg_geometrie = get_mg_geometrieid(id_mg_geometrie);
431 MG_SOUS_GEOMETRIE* mg_sous_geometrie;
432 if(type_geo=="MGCG_ASS")
433 {
434 MG_CG_ASSEMBLAGE* mgcg_assemblage;
435 LISTE_MGCG_MODELE::iterator it_modele;
436 bool trouve=false;
437 it_modele=lst_mgcg_modele.begin();
438 while(trouve==false && it_modele!=lst_mgcg_modele.end())
439 {
440 MG_CG_MODELE* mgcg_modele = it_modele->second;
441 if(mgcg_modele->get_mgcg_assemblageid(id_parent)!=NULL)
442 {
443 mgcg_assemblage = mgcg_modele->get_mgcg_assemblageid(id_parent);
444 trouve=true;
445 }
446 }
447 mg_sous_geometrie=new MG_SOUS_GEOMETRIE(mg_geometrie,id_parent,(char*)type_geo.c_str(),id,(char*)nom_fichier.c_str(),valeur_unitee,precision);
448 mgcg_assemblage->change_mg_sous_geometrie(mg_sous_geometrie);
449 mgcg_assemblage->actualiser_mg_sous_geometrie();
450 ajouter_mg_geometrie(mg_sous_geometrie);
451 }
452 }
453
454
455
456 void MG_FILE::lire_MG_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo,std::vector<unsigned long> &volumemince)
457 {
458 if (version_fichier<2)
459 {
460 parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
461 MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
462 mggeo->ajouter_mg_volume(mgvol);
463 int nummat=atoi((char*)param[4].argument[0].c_str());
464 mgvol->change_num_materiau(nummat);
465 int nb=atoi(param[5].argument[0].c_str());
466 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
467 }
468 else if (version_fichier<2.3)
469 {
470 parse.decode(data.c_str(),"@,@,@,(&)",param+2);
471 MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
472 mggeo->ajouter_mg_volume(mgvol);
473 int nb=atoi(param[4].argument[0].c_str());
474 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgvol);
475 }
476 else
477 {
478 parse.decode(data.c_str(),"@,@,@,@",param+2);
479 MG_VOLUME* mgvol;
480 #ifdef BREP_OCC
481 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
482 {
483 TopoDS_Solid topods_solid;
484 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
485 topods_solid=occ_fonction_v2017->get_TopoDS_Solid_id(atol(param[2].argument[0].c_str()));
486 mgvol = new OCC_VOLUME(param[2].argument[0],id,topods_solid,&mggeo->get_occ_fonction());
487 occ_fonction_v2017->ajouter_OCC_VOLUME((OCC_VOLUME*)mgvol);
488 }
489 else mgvol=new MG_VOLUME(param[2].argument[0],id);
490 #else
491 mgvol=new MG_VOLUME(param[2].argument[0],id);
492 #endif
493 mggeo->ajouter_mg_volume(mgvol);
494 int mince=atoi(param[4].argument[0].c_str());
495 if (mince==0)
496 {
497 std::string data2=param[5].argument[0];
498 parse.decode(data2.c_str(),"@,(&)",param+5);
499 int nb=atoi(param[5].argument[0].c_str());
500 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
501 }
502 else
503 {
504 std::string data2=param[5].argument[0];
505 parse.decode(data2.c_str(),"(&),@,(&)",param+5);
506 int nb_face=param[5].argument.size();
507 for (int i=0;i<nb_face;i=i+2)
508 {
509 unsigned long idn1=cid(param[5].argument[i]);
510 unsigned long idn2=cid(param[5].argument[i+1]);
511 volumemince.push_back(id);
512 volumemince.push_back(idn1);
513 volumemince.push_back(idn2);
514 }
515 int nb=atoi(param[6].argument[0].c_str());
516 if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
517 }
518 }
519 }
520
521 void MG_FILE::lire_MG_COQUILLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
522 {
523 bool import_occ_2017=false;
524 #ifdef BREP_OCC
525 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
526 {
527 import_occ_2017=true;
528 parse.decode(data.c_str(),"@,@,@",param+2);
529 long ident=cid(param[2].argument[0]);
530 long idori = stol(param[3].argument[0]);
531 TopoDS_Shell topods_shell;
532 OCC_COQUILLE* occ_coquille;
533 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
534 topods_shell=occ_fonction_v2017->get_TopoDS_Shell_id(idori);
535 if(idori!=-1)
536 {
537 MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
538 MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
539 if (mgvol!=NULL)
540 {
541 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgvol,topods_shell,&mggeo->get_occ_fonction());
542 mggeo->ajouter_mg_coquille(occ_coquille,mgvol);
543 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
544 }
545 if (mgcoq!=NULL)
546 {
547 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgcoq,topods_shell,&mggeo->get_occ_fonction());
548 mggeo->ajouter_mg_coquille(occ_coquille,mgcoq);
549 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
550 }
551 }
552 else
553 {
554 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,topods_shell,&mggeo->get_occ_fonction());
555 mggeo->ajouter_mg_coquille(occ_coquille);
556 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
557 }
558 }
559 #endif
560 if(!import_occ_2017)
561 {
562 parse.decode(data.c_str(),"@,@",param+2);
563 long ident=cid(param[2].argument[0]);
564 MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
565 MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
566 if(mgvol!=NULL)
567 {
568 MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
569 mggeo->ajouter_mg_coquille(mgcoq,mgvol);
570 }
571 if(mgcoq!=NULL)
572 {
573 MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
574 mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
575 }
576 }
577 }
578
579 void MG_FILE::lire_MG_FACE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
580 {
581 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
582 else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
583 long idsurf=cid(param[3].argument[0]);
584 int sens=atoi(param[5].argument[0].c_str());
585 MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
586 MG_FACE* mgface;
587 #ifdef BREP_OCC
588 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
589 {
590 TopoDS_Face topods_face;
591 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
592 topods_face=occ_fonction_v2017->get_TopoDS_Face_id(atol(param[2].argument[0].c_str()));
593 mgface = new OCC_FACE(param[2].argument[0],id,mgsurf,sens,topods_face,&mggeo->get_occ_fonction());
594 occ_fonction_v2017->ajouter_OCC_FACE((OCC_FACE*)mgface);
595 }
596 else mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
597 #else
598 mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
599 #endif
600 mggeo->ajouter_mg_face(mgface);
601 int argccf=7;
602 if (version_fichier>2.1)
603 {
604 argccf=8;
605 int nbpole=atoi(param[6].argument[0].c_str());
606 mgface->change_nb_pole(nbpole);
607 }
608 int nb=atoi(param[argccf-1].argument[0].c_str());
609 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
610 }
611
612 void MG_FILE::lire_MG_BOUCLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
613 {
614 bool import_occ_2017=false;
615 MG_BOUCLE* mgbou;
616 #ifdef BREP_OCC
617 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
618 {
619 import_occ_2017=true;
620 parse.decode(data.c_str(),"@,@,(@)",param+2);
621 long ident=cid(param[2].argument[0]);
622 long idori=stol(param[3].argument[0]);
623 TopoDS_Wire topods_wire;
624 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
625 topods_wire=occ_fonction_v2017->get_TopoDS_Wire_id(idori);
626 if(ident!=-1)
627 {
628 MG_FACE* mgface=mggeo->get_mg_faceid(ident);
629 MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
630 if (mgface!=NULL)
631 {
632 mgbou=new OCC_BOUCLE(param[3].argument[0],id,mgface,topods_wire,&mggeo->get_occ_fonction());
633 mggeo->ajouter_mg_boucle(mgbou,mgface);
634 occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
635 }
636 if (mgpoutre!=NULL)
637 {
638 mgbou=new OCC_BOUCLE(param[3].argument[0],id,mgpoutre,topods_wire,&mggeo->get_occ_fonction());
639 mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
640 occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
641 }
642 }
643 else
644 {
645 mgbou=new OCC_BOUCLE(param[3].argument[0],id,topods_wire,&mggeo->get_occ_fonction());
646 mggeo->ajouter_mg_boucle(mgbou);
647 occ_fonction_v2017->ajouter_OCC_BOUCLE((OCC_BOUCLE*)mgbou);
648 }
649 }
650 #endif
651 if(!import_occ_2017)
652 {
653 parse.decode(data.c_str(),"@,(@)",param+2);
654 long ident=cid(param[2].argument[0]);
655 MG_FACE* mgface=mggeo->get_mg_faceid(ident);
656 MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
657 if (mgface!=NULL)
658 {
659 mgbou=new MG_BOUCLE(id,mgface);
660 mggeo->ajouter_mg_boucle(mgbou,mgface);
661 }
662 if (mgpoutre!=NULL)
663 {
664 mgbou=new MG_BOUCLE(id,mgpoutre);
665 mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
666 }
667 }
668 }
669
670 void MG_FILE::lire_MG_ARETE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
671 {
672 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
673 long idcur=cid(param[3].argument[0]);
674 int sens=atol(param[6].argument[0].c_str());
675 long idori = stoi(param[2].argument[0]);
676 MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
677 MG_ARETE* mgarete;
678 #ifdef BREP_OCC
679 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
680 {
681 TopoDS_Edge topods_edge;
682 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
683 topods_edge=occ_fonction_v2017->get_TopoDS_Edge_id(idori);
684 mgarete= new OCC_ARETE(param[2].argument[0],id,mgcur,sens,topods_edge,&mggeo->get_occ_fonction());
685 occ_fonction_v2017->ajouter_OCC_ARETE((OCC_ARETE*)mgarete);
686 }
687 else mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
688 #else
689 MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
690 #endif
691 mggeo->ajouter_mg_arete(mgarete);
692 int nb=atoi(param[7].argument[0].c_str());
693 if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
694 }
695
696 void MG_FILE::lire_MG_SOMMET(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_GEOMETRIE *mggeo)
697 {
698 if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
699 else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
700 long idpoint=cid(param[3].argument[0]);
701 long idori = stol(param[2].argument[0]);
702 MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
703 MG_SOMMET* mgsom;
704 #ifdef BREP_OCC
705 if(strcmp(mggeo->get_type_geometrie(),"OCCV2017")==0)
706 {
707 TopoDS_Vertex topods_vertex;
708 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
709 topods_vertex=occ_fonction_v2017->get_TopoDS_Vertex_id(idori);
710 mgsom = new OCC_SOMMET(param[2].argument[0],id,mgpt,topods_vertex,&mggeo->get_occ_fonction());
711 mggeo->ajouter_mg_sommet(mgsom);
712 occ_fonction_v2017->ajouter_OCC_SOMMET((OCC_SOMMET*)mgsom);
713 }
714 else mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
715 #else
716 mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
717 #endif
718 mggeo->ajouter_mg_sommet(mgsom);
719 int argccf=5;
720 if (version_fichier>2.1)
721 {
722 argccf=6;
723 int ipole=atoi(param[4].argument[0].c_str());
724 if (ipole==1) mgsom->change_pole(true);
725 }
726 int nb=atoi(param[argccf-1].argument[0].c_str());
727 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
728 }
729
730
731
732
733
734 void MG_FILE::lire_MG_CG_MODELE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
735 {
736 #ifdef ALL_OCC
737 parse.decode(data.c_str(),"@,@",param+2);
738 std::string nom=param[2].argument[0];
739 long id_mg_geometrie = cid((char*)param[3].argument[0].c_str());
740 int fusionner_entite_similaire = atoi((char*)param[4].argument[0].c_str());
741 int importer_triangulation = atoi((char*)param[5].argument[0].c_str());
742 double epsilon_triangulation = atof((char*)param[5].argument[0].c_str());
743 MG_GEOMETRIE* mg_geometrie = get_mg_geometrieid(id_mg_geometrie);
744 MG_CG_MODELE* mgcg_modele=new MG_CG_MODELE(this,nom,mg_geometrie,id);
745 mgcg_modele->change_fusionner_entite_similaire(fusionner_entite_similaire);
746 mgcg_modele->change_importer_triangulation(importer_triangulation);
747 mgcg_modele->change_epsilon_triangulation(epsilon_triangulation);
748 ajouter_mgcg_modele(mgcg_modele);
749 #endif
750 }
751
752 void MG_FILE::lire_MG_CG_ASSEMBLAGE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
753 {
754 #ifdef ALL_OCC
755 parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
756 long id_modele = cid((char*)param[2].argument[0].c_str());
757 std::string nom=param[3].argument[0];
758 long id_mg_sous_geometrie = cid((char*)param[4].argument[0].c_str());
759 int nb_mgcg_forme = atoi((char*)param[5].argument[0].c_str());
760 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
761 MG_SOUS_GEOMETRIE* mg_sous_geometrie;
762 MG_GEOMETRIE* mg_geometrie = get_mg_geometrieid(id_mg_sous_geometrie);
763 if(mg_geometrie!=NULL) mg_sous_geometrie = (MG_SOUS_GEOMETRIE*)mg_geometrie;
764 else mg_sous_geometrie=NULL;
765 MG_CG_ASSEMBLAGE *mgcg_assemblage=new MG_CG_ASSEMBLAGE(mgcg_modele,id,nom.c_str(),mg_sous_geometrie);
766 for(int i=0;i<nb_mgcg_forme;i++)
767 {
768 unsigned long id2 = cid(param[6].argument[i]);
769 mgcg_assemblage->ajouter_mgcg_forme(mgcg_modele->get_mgcg_formeid(id2),false);
770 }
771 mgcg_modele->ajouter_mgcg_assemblage(mgcg_assemblage);
772 #endif
773 }
774
775 void MG_FILE::lire_MG_CG_FORME_ARETE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
776 {
777 #ifdef ALL_OCC
778 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
779 long id_modele = cid((char*)param[2].argument[0].c_str());
780 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
781 int provenance_forme = atoi((char*)param[3].argument[0].c_str());
782 int etat_forme = atoi((char*)param[4].argument[0].c_str());
783 MG_ARETE* mg_arete;
784 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_arete = mgcg_modele->get_mg_geometrie()->get_mg_areteid(cid((char*)param[5].argument[0].c_str()));
785 MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[6].argument[0].c_str()));
786 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_ARETE(provenance_forme,etat_forme,id,mg_arete);
787 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
788 mgcg_operateur_parent->ajouter_mgcg_forme_sortie(forme);
789 mgcg_modele->ajouter_mgcg_forme(forme);
790 #endif
791 }
792
793 void MG_FILE::lire_MG_CG_FORME_ARETE_DROITE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
794 {
795 #ifdef ALL_OCC
796 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
797 long id_modele = cid((char*)param[2].argument[0].c_str());
798 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
799 int etat_forme = atoi((char*)param[3].argument[0].c_str());
800 MG_ARETE* mg_arete;
801 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_arete = mgcg_modele->get_mg_geometrie()->get_mg_areteid(cid((char*)param[4].argument[0].c_str()));
802 double x1 = atof((char*)param[5].argument[0].c_str());
803 double y1 = atof((char*)param[6].argument[0].c_str());
804 double z1 = atof((char*)param[7].argument[0].c_str());
805 double x2 = atof((char*)param[8].argument[0].c_str());
806 double y2 = atof((char*)param[9].argument[0].c_str());
807 double z2 = atof((char*)param[10].argument[0].c_str());
808 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_ARETE_DROITE(etat_forme,id,mg_arete,x1,y1,z1,x2,y2,z2);
809 mgcg_modele->ajouter_mgcg_forme(forme);
810 #endif
811 }
812
813 void MG_FILE::lire_MG_CG_FORME_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
814 {
815 #ifdef ALL_OCC
816 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
817 long id_modele = cid((char*)param[2].argument[0].c_str());
818 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
819 int provenance_forme = atoi((char*)param[3].argument[0].c_str());
820 int etat_forme = atoi((char*)param[4].argument[0].c_str());
821 MG_VOLUME* mg_volume;
822 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[5].argument[0].c_str()));
823 MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[6].argument[0].c_str()));
824 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME(provenance_forme,etat_forme,id,mg_volume);
825 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
826 mgcg_operateur_parent->ajouter_mgcg_forme_sortie(forme);
827 mgcg_modele->ajouter_mgcg_forme(forme);
828 #endif
829 }
830
831 void MG_FILE::lire_MG_CG_FORME_VOLUME_BOITE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
832 {
833 #ifdef ALL_OCC
834 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
835 long id_modele = cid((char*)param[2].argument[0].c_str());
836 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
837 int etat_forme = atoi((char*)param[3].argument[0].c_str());
838 MG_VOLUME* mg_volume;
839 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
840 double x1 = atof((char*)param[5].argument[0].c_str());
841 double y1 = atof((char*)param[6].argument[0].c_str());
842 double z1 = atof((char*)param[7].argument[0].c_str());
843 double x2 = atof((char*)param[8].argument[0].c_str());
844 double y2 = atof((char*)param[9].argument[0].c_str());
845 double z2 = atof((char*)param[10].argument[0].c_str());
846 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_BOITE(etat_forme,id,mg_volume,x1,y1,z1,x2,y2,z2);
847 mgcg_modele->ajouter_mgcg_forme(forme);
848 #endif
849 }
850
851 void MG_FILE::lire_MG_CG_FORME_VOLUME_SPHERE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
852 {
853 #ifdef ALL_OCC
854 // PARAM # 2 3 4 5 6 7 8
855 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,(&)",param+2);
856 long id_modele = cid((char*)param[2].argument[0].c_str());
857 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
858 int etat_forme = atoi((char*)param[3].argument[0].c_str());
859 MG_VOLUME* mg_volume;
860 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
861 double centre_x = atof((char*)param[5].argument[0].c_str());
862 double centre_y = atof((char*)param[6].argument[0].c_str());
863 double centre_z = atof((char*)param[7].argument[0].c_str());
864 double rayon = atof((char*)param[8].argument[0].c_str());
865 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_SPHERE(etat_forme,id,mg_volume,centre_x,centre_y,centre_z,rayon);
866 mgcg_modele->ajouter_mgcg_forme(forme);
867 #endif
868 }
869
870 void MG_FILE::lire_MG_CG_FORME_VOLUME_ELLIPSOIDE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
871 {
872 #ifdef ALL_OCC
873 // PARAM # 2 3 4 5 6 7 8 9 101112
874 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
875 long id_modele = cid((char*)param[2].argument[0].c_str());
876 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
877 int etat_forme = atoi((char*)param[3].argument[0].c_str());
878 MG_VOLUME* mg_volume;
879 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
880 double centre_x = atof((char*)param[5].argument[0].c_str());
881 double centre_y = atof((char*)param[6].argument[0].c_str());
882 double centre_z = atof((char*)param[7].argument[0].c_str());
883 double direction_x = atof((char*)param[8].argument[0].c_str());
884 double direction_y = atof((char*)param[9].argument[0].c_str());
885 double direction_z = atof((char*)param[10].argument[0].c_str());
886 double rayon_majeur = atof((char*)param[11].argument[0].c_str());
887 double rayon_mineur = atof((char*)param[12].argument[0].c_str());
888 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_ELLIPSOIDE(etat_forme,id,mg_volume,centre_x,centre_y,centre_z,direction_x,direction_y,direction_z,rayon_majeur,rayon_mineur);
889 mgcg_modele->ajouter_mgcg_forme(forme);
890 #endif
891 }
892
893 void MG_FILE::lire_MG_CG_FORME_VOLUME_CYLINDRE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
894 {
895 #ifdef ALL_OCC
896 // PARAM # 2 3 4 5 6 7 8 9 101112
897 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
898 long id_modele = cid((char*)param[2].argument[0].c_str());
899 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
900 int etat_forme = atoi((char*)param[3].argument[0].c_str());
901 MG_VOLUME* mg_volume;
902 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
903 double extremite_x = atof((char*)param[5].argument[0].c_str());
904 double extremite_y = atof((char*)param[6].argument[0].c_str());
905 double extremite_z = atof((char*)param[7].argument[0].c_str());
906 double direction_x = atof((char*)param[8].argument[0].c_str());
907 double direction_y = atof((char*)param[9].argument[0].c_str());
908 double direction_z = atof((char*)param[10].argument[0].c_str());
909 double rayon = atof((char*)param[11].argument[0].c_str());
910 double longueur = atof((char*)param[12].argument[0].c_str());
911 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_CYLINDRE(etat_forme,id,mg_volume,extremite_x,extremite_y,extremite_z,direction_x,direction_y,direction_z,rayon,longueur);
912 mgcg_modele->ajouter_mgcg_forme(forme);
913 #endif
914 }
915
916 void MG_FILE::lire_MG_CG_FORME_VOLUME_CONE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
917 {
918 #ifdef ALL_OCC
919 // PARAM # 2 3 4 5 6 7 8 9 101112
920 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
921 long id_modele = cid((char*)param[2].argument[0].c_str());
922 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
923 int etat_forme = atoi((char*)param[3].argument[0].c_str());
924 MG_VOLUME* mg_volume;
925 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
926 double extremite_x = atof((char*)param[5].argument[0].c_str());
927 double extremite_y = atof((char*)param[6].argument[0].c_str());
928 double extremite_z = atof((char*)param[7].argument[0].c_str());
929 double direction_x = atof((char*)param[8].argument[0].c_str());
930 double direction_y = atof((char*)param[9].argument[0].c_str());
931 double direction_z = atof((char*)param[10].argument[0].c_str());
932 double rayon = atof((char*)param[11].argument[0].c_str());
933 double longueur = atof((char*)param[12].argument[0].c_str());
934 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_CONE(etat_forme,id,mg_volume,extremite_x,extremite_y,extremite_z,direction_x,direction_y,direction_z,rayon,longueur);
935 mgcg_modele->ajouter_mgcg_forme(forme);
936 #endif
937 }
938
939 void MG_FILE::lire_MG_CG_FORME_VOLUME_TORE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
940 {
941 #ifdef ALL_OCC
942 // PARAM # 2 3 4 5 6 7 8 9 101112
943 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,(&)",param+2);
944 long id_modele = cid((char*)param[2].argument[0].c_str());
945 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
946 int etat_forme = atoi((char*)param[3].argument[0].c_str());
947 MG_VOLUME* mg_volume;
948 if(etat_forme==MG_CG_FORME::ETAT_FORME::CONSTRUITE || etat_forme==MG_CG_FORME::ETAT_FORME::ATTENTE_RECONSTRUCTION) mg_volume = mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[4].argument[0].c_str()));
949 double centre_x = atof((char*)param[5].argument[0].c_str());
950 double centre_y = atof((char*)param[6].argument[0].c_str());
951 double centre_z = atof((char*)param[7].argument[0].c_str());
952 double direction_x = atof((char*)param[8].argument[0].c_str());
953 double direction_y = atof((char*)param[9].argument[0].c_str());
954 double direction_z = atof((char*)param[10].argument[0].c_str());
955 double rayon_cercle = atof((char*)param[11].argument[0].c_str());
956 double rayon_tore = atof((char*)param[12].argument[0].c_str());
957 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_VOLUME_TORE(etat_forme,id,mg_volume,centre_x,centre_y,centre_z,direction_x,direction_y,direction_z,rayon_cercle,rayon_tore);
958 mgcg_modele->ajouter_mgcg_forme(forme);
959 #endif
960 }
961
962 void MG_FILE::lire_MG_CG_FORME_MULTIPLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
963 {
964 #ifdef ALL_OCC
965 // PARAM # 2 3 4 5 6 7 8 9
966 parse.decode(data.c_str(),"@,@,@,@,(&),@,(&),@",param+2);
967 long id_modele = cid((char*)param[2].argument[0].c_str());
968 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
969 int provenance_forme = atoi((char*)param[3].argument[0].c_str());
970 int etat_forme = atoi((char*)param[4].argument[0].c_str());
971 std::vector<MG_ELEMENT_TOPOLOGIQUE*> vector_mg_element_topologique;
972 std::vector<MG_ELEMENT_COTOPOLOGIQUE*> vector_mg_element_cotopologique;
973 long nb_mg_element_topologique = atol((char*)param[5].argument[0].c_str());
974 for(long i=0;i<nb_mg_element_topologique;i++)
975 {
976 vector_mg_element_topologique.push_back(mgcg_modele->get_mg_geometrie()->get_mg_element_topologiqueid(cid((char*)param[6].argument[i].c_str())));
977 }
978 long nb_mg_element_cotopologique = atol((char*)param[7].argument[0].c_str());
979 for(long i=0;i<nb_mg_element_cotopologique;i++)
980 {
981 vector_mg_element_cotopologique.push_back(mgcg_modele->get_mg_geometrie()->get_mg_element_cotopologiqueid(cid((char*)param[8].argument[i].c_str())));
982 }
983 MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[9].argument[0].c_str()));
984 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_MULTIPLE(provenance_forme,etat_forme,id,vector_mg_element_topologique,vector_mg_element_cotopologique);
985 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
986 mgcg_modele->ajouter_mgcg_forme(forme);
987 #endif
988 }
989
990 void MG_FILE::lire_MG_CG_FORME_MULTI_VOLUME(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
991 {
992 #ifdef ALL_OCC
993 // PARAM # 2 3 4 5 6 7
994 parse.decode(data.c_str(),"@,@,@,@,(&),@",param+2);
995 long id_modele = cid((char*)param[2].argument[0].c_str());
996 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
997 int provenance_forme = atoi((char*)param[3].argument[0].c_str());
998 int etat_forme = atoi((char*)param[4].argument[0].c_str());
999 std::vector<MG_VOLUME*> vector_mg_volume;
1000 long nb_mg_volume = atol((char*)param[5].argument[0].c_str());
1001 for(long i=0;i<nb_mg_volume;i++)
1002 {
1003 vector_mg_volume.push_back(mgcg_modele->get_mg_geometrie()->get_mg_volumeid(cid((char*)param[6].argument[i].c_str())));
1004 }
1005 MG_CG_OPERATEUR* mgcg_operateur_parent = mgcg_modele->get_mgcg_operateurid(cid((char*)param[7].argument[0].c_str()));
1006 MG_CG_FORME* forme = MG_CG::creer_MG_CG_FORME_MULTI_VOLUME(provenance_forme,etat_forme,id,vector_mg_volume);
1007 forme->change_mgcg_operateur_parent(mgcg_operateur_parent);
1008 mgcg_modele->ajouter_mgcg_forme(forme);
1009 #endif
1010 }
1011
1012 void MG_FILE::lire_MG_CG_OP_BOOL_UNION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1013 {
1014 #ifdef ALL_OCC
1015 // PARAM # 2 3 4 5 6 7
1016 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1017 long id_modele = cid((char*)param[2].argument[0].c_str());
1018 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1019 int semantique = atoi((char*)param[3].argument[0].c_str());
1020 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1021 MG_CG_FORME* mgcg_forme_entree_1=NULL;
1022 MG_CG_FORME* mgcg_forme_entree_2=NULL;
1023 long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1024 if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1025 long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1026 if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1027 long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1028 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_UNION(semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1029 mgcg_modele->ajouter_mgcg_operateur(mgcg_operateur);
1030 #endif
1031 }
1032
1033 void MG_FILE::lire_MG_CG_OP_BOOL_DIFFERENCE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1034 {
1035 #ifdef ALL_OCC
1036 // PARAM # 2 3 4 5 6 7
1037 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1038 long id_modele = cid((char*)param[2].argument[0].c_str());
1039 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1040 int semantique = atoi((char*)param[3].argument[0].c_str());
1041 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1042 MG_CG_FORME* mgcg_forme_entree_1=NULL;
1043 MG_CG_FORME* mgcg_forme_entree_2=NULL;
1044 long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1045 if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1046 long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1047 if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1048 long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1049 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_DIFFERENCE(semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1050 mgcg_modele->ajouter_mgcg_operateur(mgcg_operateur);
1051 #endif
1052 }
1053
1054 void MG_FILE::lire_MG_CG_OP_BOOL_INTERSECTION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1055 {
1056 #ifdef ALL_OCC
1057 // PARAM # 2 3 4 5 6 7
1058 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1059 long id_modele = cid((char*)param[2].argument[0].c_str());
1060 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1061 int semantique = atoi((char*)param[3].argument[0].c_str());
1062 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1063 MG_CG_FORME* mgcg_forme_entree_1=NULL;
1064 MG_CG_FORME* mgcg_forme_entree_2=NULL;
1065 long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1066 if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1067 long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1068 if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1069 long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1070 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_INTERSECTION(semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1071 mgcg_modele->ajouter_mgcg_operateur(mgcg_operateur);
1072 #endif
1073 }
1074
1075 void MG_FILE::lire_MG_CG_OP_BOOL_FRAGMENT(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1076 {
1077 #ifdef ALL_OCC
1078 // PARAM # 2 3 4 5 6 7
1079 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1080 long id_modele = cid((char*)param[2].argument[0].c_str());
1081 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1082 int semantique = atoi((char*)param[3].argument[0].c_str());
1083 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1084 MG_CG_FORME* mgcg_forme_entree_1=NULL;
1085 MG_CG_FORME* mgcg_forme_entree_2=NULL;
1086 long id_forme_entree_1 = cid((char*)param[5].argument[0].c_str());
1087 if(id_forme_entree_1!=0) mgcg_forme_entree_1=mgcg_modele->get_mgcg_formeid(id_forme_entree_1);
1088 long id_forme_entree_2 = cid((char*)param[6].argument[0].c_str());
1089 if(id_forme_entree_2!=0) mgcg_forme_entree_2=mgcg_modele->get_mgcg_formeid(id_forme_entree_2);
1090 long id_forme_sortie = cid((char*)param[7].argument[0].c_str());
1091 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_BOOL_FRAGMENT(semantique,etat_operateur,id,mgcg_forme_entree_1,mgcg_forme_entree_2,id_forme_sortie);
1092 mgcg_modele->ajouter_mgcg_operateur(mgcg_operateur);
1093 #endif
1094 }
1095
1096 void MG_FILE::lire_MG_CG_OP_INCLUSION_MATRICE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1097 {
1098 #ifdef ALL_OCC
1099 // PARAM # 2 3 4 5 6 7 8
1100 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1101 long id_modele = cid((char*)param[2].argument[0].c_str());
1102 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1103 int semantique = atoi((char*)param[3].argument[0].c_str());
1104 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1105 MG_CG_FORME* mgcg_forme_inclusion_entree=NULL;
1106 MG_CG_FORME* mgcg_forme_matrice_entree=NULL;
1107 long id_forme_inclusion_entree = cid((char*)param[5].argument[0].c_str());
1108 if(id_forme_inclusion_entree!=0) mgcg_forme_inclusion_entree=mgcg_modele->get_mgcg_formeid(id_forme_inclusion_entree);
1109 long id_forme_matrice_entree = cid((char*)param[6].argument[0].c_str());
1110 if(id_forme_matrice_entree!=0) mgcg_forme_matrice_entree=mgcg_modele->get_mgcg_formeid(id_forme_matrice_entree);
1111 long id_forme_inclusion_sortie = cid((char*)param[7].argument[0].c_str());
1112 long id_forme_matrice_sortie = cid((char*)param[8].argument[0].c_str());
1113 MG_CG_OPERATEUR* mgcg_operateur = MG_CG::creer_MG_CG_OP_INCLUSION_MATRICE(semantique,etat_operateur,id,mgcg_forme_inclusion_entree,mgcg_forme_matrice_entree,id_forme_inclusion_sortie,id_forme_matrice_sortie);
1114 mgcg_modele->ajouter_mgcg_operateur(mgcg_operateur);
1115 #endif
1116 }
1117
1118 void MG_FILE::lire_MG_CG_OP_TRANSF_ROTATION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1119 {
1120 #ifdef ALL_OCC
1121 // PARAM # 2 3 4 5 6 7 8 9 10 12
1122 // PARAM # 11 13
1123 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
1124 long id_modele = cid((char*)param[2].argument[0].c_str());
1125 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1126 int semantique = atoi((char*)param[3].argument[0].c_str());
1127 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1128 MG_CG_FORME* mgcg_forme_entree=NULL;
1129 long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1130 if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1131 long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1132 MG_CG_OP_TRANSF_ROTATION* mgcg_op_transf_rotation = MG_CG::creer_MG_CG_OP_TRANSF_ROTATION(semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1133 mgcg_modele->ajouter_mgcg_operateur(mgcg_op_transf_rotation);
1134 double x = atof((char*)param[7].argument[0].c_str());
1135 double y = atof((char*)param[8].argument[0].c_str());
1136 double z = atof((char*)param[9].argument[0].c_str());
1137 double w = atof((char*)param[10].argument[0].c_str());
1138 double centre_x = atof((char*)param[11].argument[0].c_str());
1139 double centre_y = atof((char*)param[12].argument[0].c_str());
1140 double centre_z = atof((char*)param[13].argument[0].c_str());
1141 OT_QUATERNION ot_quaternion(x,y,z,w);
1142 mgcg_op_transf_rotation->change_rotation(ot_quaternion);
1143 mgcg_op_transf_rotation->change_centre_rotation(centre_x,centre_y,centre_z);
1144 #endif
1145 }
1146
1147 void MG_FILE::lire_MG_CG_OP_TRANSF_TRANSLATION(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1148 {
1149 #ifdef ALL_OCC
1150 // PARAM # 2 3 4 5 6 7 8 9
1151 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,",param+2);
1152 long id_modele = cid((char*)param[2].argument[0].c_str());
1153 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1154 int semantique = atoi((char*)param[3].argument[0].c_str());
1155 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1156 MG_CG_FORME* mgcg_forme_entree=NULL;
1157 long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1158 if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1159 long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1160 MG_CG_OP_TRANSF_TRANSLATION* mgcg_op_transf_translation = MG_CG::creer_MG_CG_OP_TRANSF_TRANSLATION(semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1161 mgcg_modele->ajouter_mgcg_operateur(mgcg_op_transf_translation);
1162 double x = atof((char*)param[7].argument[0].c_str());
1163 double y = atof((char*)param[8].argument[0].c_str());
1164 double z = atof((char*)param[9].argument[0].c_str());
1165 mgcg_op_transf_translation->change_translation(x,y,z);
1166 #endif
1167 }
1168
1169 void MG_FILE::lire_MG_CG_OP_TRANSF_ECHELLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data)
1170 {
1171 #ifdef ALL_OCC
1172 // PARAM # 2 3 4 5 6 7 8 9 10
1173 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,",param+2);
1174 long id_modele = cid((char*)param[2].argument[0].c_str());
1175 MG_CG_MODELE* mgcg_modele = get_mgcg_modeleid(id_modele);
1176 int semantique = atoi((char*)param[3].argument[0].c_str());
1177 int etat_operateur = atoi((char*)param[4].argument[0].c_str());
1178 MG_CG_FORME* mgcg_forme_entree=NULL;
1179 long id_forme_entree = cid((char*)param[5].argument[0].c_str());
1180 if(id_forme_entree!=0) mgcg_forme_entree=mgcg_modele->get_mgcg_formeid(id_forme_entree);
1181 long id_forme_sortie = cid((char*)param[6].argument[0].c_str());
1182 MG_CG_OP_TRANSF_ECHELLE* mgcg_op_transf_echelle = MG_CG::creer_MG_CG_OP_TRANSF_ECHELLE(semantique,etat_operateur,id,mgcg_forme_entree,id_forme_sortie);
1183 mgcg_modele->ajouter_mgcg_operateur(mgcg_op_transf_echelle);
1184 double x = atof((char*)param[7].argument[0].c_str());
1185 double y = atof((char*)param[8].argument[0].c_str());
1186 double z = atof((char*)param[9].argument[0].c_str());
1187 double facteur = atof((char*)param[10].argument[0].c_str());
1188 mgcg_op_transf_echelle->change_centre_echelle(x,y,z);
1189 mgcg_op_transf_echelle->change_facteur_echelle(facteur);
1190 #endif
1191 }
1192
1193 int MG_FILE::lire(char* chemin)
1194 {
1195 FILE *in;
1196 //char ligne[3000];
1197 in=fopen(chemin,"rt");
1198 if (in==NULL) return 0;
1199 PARS_ARGUMENT param[100];
1200 PARSE parse;
1201
1202 MG_GEOMETRIE *mggeo;
1203 MG_ARBRE* arbre;
1204 #ifdef WINDOWS_VERSION
1205 std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
1206 #endif
1207 bool updatedMergedRefVertices = false;
1208 version_fichier=1.0;
1209 std::vector<unsigned long> volumemince;
1210 do
1211 {
1212 int ierr;
1213 std::string ligne=parse.lire(in,';',&ierr);
1214 parse.decode(ligne.c_str(),"@;",param);
1215 const char *chaine=param[0].argument[0].c_str();
1216 if ((chaine[0]=='/') && (chaine[1]=='/'))
1217 {
1218 if ((chaine[2]=='*')&&(chaine[3]=='i'))
1219 {
1220 unsigned long id;
1221 sscanf(chaine,"//*i:%lu;",&id);
1222 entiteidmax=id;
1223 }
1224 if ((chaine[2]=='*')&&(chaine[3]=='v'))
1225 sscanf(chaine,"//*v:%lf;",&version_fichier);
1226 }
1227 else if (param[0].argument[0]!="FIN")
1228 {
1229 parse.decode(ligne.c_str(),"%@=@(@);",param);
1230 std::string entite=param[1].argument[0];
1231 long id=atol(param[0].argument[0].c_str());
1232 std::string data=param[2].argument[0] ;
1233 MG_MAILLAGE *mgmai;
1234 FEM_MAILLAGE *femmai;
1235 if (entite=="GEOMETRIE")
1236 {
1237 parse.decode(data.c_str(),"@,@,@,@",param+2);
1238 double unite=atof(param[2].argument[0].c_str());
1239 std::string typegeo=param[3].argument[0];
1240 std::string chemin=param[4].argument[0];
1241 if (typegeo=="VIRTUEL")
1242 {
1243 mggeo=new MG_GEOMETRIE((char*)typegeo.c_str(),id,(char*)chemin.c_str(),unite);
1244 ajouter_mg_geometrie(mggeo);
1245 }
1246 #ifdef BREP_STEP
1247 if (typegeo=="STEP")
1248 {
1249 mggeo=new MG_GEOMETRIE((char*)"STEP",id,(char *)chemin.c_str(),unite);
1250 ajouter_mg_geometrie(mggeo);
1251 }
1252 #endif
1253 #ifdef BREP_SAT
1254 if (typegeo=="ACIS")
1255 {
1256 mggeo=new MG_GEOMETRIE((char*)"ACIS",id,(char *)chemin.c_str(),unite);
1257 ajouter_mg_geometrie(mggeo);
1258 }
1259 #endif
1260
1261 #ifdef BREP_OCC
1262 if (typegeo=="OCC")
1263 {
1264 mggeo=new MG_GEOMETRIE((char*)"OCC",id,chemin.c_str(),unite);
1265 ajouter_mg_geometrie(mggeo);
1266 }
1267 if (typegeo=="OCCV2015")
1268 {
1269 mggeo=new MG_GEOMETRIE((char*)"OCCV2015",id,chemin.c_str(),unite);
1270 ajouter_mg_geometrie(mggeo);
1271 }
1272 if (typegeo=="OCCV2017")
1273 {
1274 mggeo=new MG_GEOMETRIE((char*)"OCCV2017",id,chemin.c_str(),unite);
1275 ajouter_mg_geometrie(mggeo);
1276 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1277 std::string chemin_caf = chemin + ".ocaf";
1278 char* chemin_caf_char = (char*)chemin_caf.c_str();
1279 occ_fonction_v2017->ouvrir_fichier_OCAF(chemin_caf_char);
1280 }
1281 #endif
1282
1283 std::string nommat="";
1284 if (param[5].argument[0]!="")
1285 nommat=param[5].argument[0];
1286 mggeo->change_gest_materiau((char*)nommat.c_str());
1287 }
1288 #ifdef CSG_OCC
1289 if (entite=="ARBRE")
1290 {
1291 parse.decode(data.c_str(),"@",param+2);
1292 std::string nom=param[2].argument[0];
1293 arbre=new MG_ARBRE(id,nom.c_str());
1294 ajouter_mg_arbre(arbre);
1295 }
1296 if (entite == "ASSEMBLAGE")
1297 {
1298 parse.decode(data.c_str(),"@,@,(&)",param+2);
1299 std::string nom=param[2].argument[0];
1300 int nb_primitive = atoi((char*)param[3].argument[0].c_str());
1301 MG_ASSEMBLAGE *mgassembl=new MG_ASSEMBLAGE(id,nom.c_str());
1302 for(int i=0;i<nb_primitive;i++)
1303 {
1304 unsigned long id2 = cid(param[4].argument[i]);
1305 mgassembl->ajouter_mg_primitive(id2);
1306 }
1307 arbre->ajouter_mg_assemblage(mgassembl);
1308 }
1309 if (entite=="BOITE")
1310 {
1311 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
1312 double x1=atof((char*)param[2].argument[0].c_str());
1313 double y1=atof((char*)param[3].argument[0].c_str());
1314 double z1=atof((char*)param[4].argument[0].c_str());
1315 double x2=atof((char*)param[5].argument[0].c_str());
1316 double y2=atof((char*)param[6].argument[0].c_str());
1317 double z2=atof((char*)param[7].argument[0].c_str());
1318 MG_PRIMITIVE_BOITE *b=new MG_PRIMITIVE_BOITE(id,x1,y1,z1,x2,y2,z2);
1319 b->construit();
1320 arbre->ajouter_mg_primitive(b);
1321 }
1322 if (entite=="SPHERE")
1323 {
1324 parse.decode(data.c_str(),"@,@,@,@",param+2);
1325 double centre_x=atof((char*)param[2].argument[0].c_str());
1326 double centre_y=atof((char*)param[3].argument[0].c_str());
1327 double centre_z=atof((char*)param[4].argument[0].c_str());
1328 double rayon=atof((char*)param[5].argument[0].c_str());
1329 MG_PRIMITIVE_SPHERE *b=new MG_PRIMITIVE_SPHERE(id,centre_x,centre_y,centre_z,rayon);
1330 b->construit();
1331 arbre->ajouter_mg_primitive(b);
1332 }
1333 if (entite=="ELLIPSOIDE_REVOLUTION")
1334 {
1335 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
1336 double centre_x=atof((char*)param[2].argument[0].c_str());
1337 double centre_y=atof((char*)param[3].argument[0].c_str());
1338 double centre_z=atof((char*)param[4].argument[0].c_str());
1339 double axe_x=atof((char*)param[5].argument[0].c_str());
1340 double axe_y=atof((char*)param[6].argument[0].c_str());
1341 double axe_z=atof((char*)param[7].argument[0].c_str());
1342 double rayon_majeur=atof((char*)param[8].argument[0].c_str());
1343 double rayon_mineur=atof((char*)param[9].argument[0].c_str());
1344 MG_PRIMITIVE_ELLIPSOIDE_REVOLUTION *b=new MG_PRIMITIVE_ELLIPSOIDE_REVOLUTION(id,centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon_majeur,rayon_mineur);
1345 b->construit();
1346 arbre->ajouter_mg_primitive(b);
1347 }
1348 if (entite=="CYLINDRE")
1349 {
1350 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1351 double extremite_x=atof((char*)param[2].argument[0].c_str());
1352 double extremite_y=atof((char*)param[3].argument[0].c_str());
1353 double extremite_z=atof((char*)param[4].argument[0].c_str());
1354 double longitude=atof((char*)param[5].argument[0].c_str());
1355 double latitude=atof((char*)param[6].argument[0].c_str());
1356 double rayon=atof((char*)param[7].argument[0].c_str());
1357 double longueur=atof((char*)param[8].argument[0].c_str());
1358 MG_PRIMITIVE_CYLINDRE *b=new MG_PRIMITIVE_CYLINDRE(id,extremite_x,extremite_y,extremite_z,longitude,latitude,rayon,longueur);
1359 b->construit();
1360 arbre->ajouter_mg_primitive(b);
1361 }
1362 if (entite=="TORE")
1363 {
1364 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1365 double centre_x=atof((char*)param[2].argument[0].c_str());
1366 double centre_y=atof((char*)param[3].argument[0].c_str());
1367 double centre_z=atof((char*)param[4].argument[0].c_str());
1368 double longitude=atof((char*)param[5].argument[0].c_str());
1369 double latitude=atof((char*)param[6].argument[0].c_str());
1370 double rayon_cercle=atof((char*)param[7].argument[0].c_str());
1371 double rayon_tore=atof((char*)param[8].argument[0].c_str());
1372 MG_PRIMITIVE_TORE *b=new MG_PRIMITIVE_TORE(id,centre_x,centre_y,centre_z,longitude,latitude,rayon_cercle,rayon_tore);
1373 b->construit();
1374 arbre->ajouter_mg_primitive(b);
1375 }
1376 if (entite=="CONE")
1377 {
1378 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
1379 double base_x=atof((char*)param[2].argument[0].c_str());
1380 double base_y=atof((char*)param[3].argument[0].c_str());
1381 double base_z=atof((char*)param[4].argument[0].c_str());
1382 double longitude=atof((char*)param[5].argument[0].c_str());
1383 double latitude=atof((char*)param[6].argument[0].c_str());
1384 double rayon=atof((char*)param[7].argument[0].c_str());
1385 double hauteur=atof((char*)param[8].argument[0].c_str());
1386 MG_PRIMITIVE_CONE *b=new MG_PRIMITIVE_CONE(id,base_x,base_y,base_z,longitude,latitude,rayon,hauteur);
1387 b->construit();
1388 arbre->ajouter_mg_primitive(b);
1389 }
1390 if (entite=="UNION")
1391 {
1392 parse.decode(data.c_str(),"@,@,@",param+2);
1393 int sem=atoi((char*)param[2].argument[0].c_str());
1394 long id1=cid((char*)param[3].argument[0].c_str());
1395 long id2=cid((char*)param[4].argument[0].c_str());
1396 MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1397 MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1398 MG_OPERATEUR_BOOLEAN_UNION *op=new MG_OPERATEUR_BOOLEAN_UNION(id,sem,p1,p2);
1399 arbre->ajouter_mg_operateur_boolean(op);
1400 }
1401 if (entite=="DIFFERENCE")
1402 {
1403 parse.decode(data.c_str(),"@,@,@",param+2);
1404 int sem=atoi((char*)param[2].argument[0].c_str());
1405 long id1=cid((char*)param[3].argument[0].c_str());
1406 long id2=cid((char*)param[4].argument[0].c_str());
1407 MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1408 MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1409 MG_OPERATEUR_BOOLEAN_DIFFERENCE *op=new MG_OPERATEUR_BOOLEAN_DIFFERENCE(id,sem,p1,p2);
1410 arbre->ajouter_mg_operateur_boolean(op);
1411 }
1412 if (entite=="INTERSECTION")
1413 {
1414 parse.decode(data.c_str(),"@,@,@",param+2);
1415 int sem=atoi((char*)param[2].argument[0].c_str());
1416 long id1=cid((char*)param[3].argument[0].c_str());
1417 long id2=cid((char*)param[4].argument[0].c_str());
1418 MG_PRIMITIVE *p1=arbre->get_mg_primitiveid(id1);
1419 MG_PRIMITIVE *p2=arbre->get_mg_primitiveid(id2);
1420 MG_OPERATEUR_BOOLEAN_INTERSECTION *op=new MG_OPERATEUR_BOOLEAN_INTERSECTION(id,sem,p1,p2);
1421 arbre->ajouter_mg_operateur_boolean(op);
1422 }
1423 if (entite=="PRIM_COMPLEXE")
1424 {
1425 parse.decode(data.c_str(),"@",param+2);
1426 long id1=cid((char*)param[2].argument[0].c_str());
1427 MG_OPERATEUR_BOOLEAN *op=arbre->get_mg_operateur_booleanid(id1);
1428 MG_PRIMITIVE* p=op->construit(id);
1429 arbre->ajouter_mg_primitive(p);
1430 }
1431
1432 if (entite=="MG_CG_MODELE")
1433 {
1434 lire_MG_CG_MODELE(id,parse,param,data);
1435 }
1436 if (entite =="MG_CG_ASSEMBLAGE")
1437 {
1438 lire_MG_CG_ASSEMBLAGE(id,parse,param,data);
1439 }
1440 if (entite =="MG_CG_FORME_ARETE")
1441 {
1442 lire_MG_CG_FORME_ARETE(id,parse,param,data);
1443 }
1444 if (entite =="MG_CG_FORME_ARETE_DROITE")
1445 {
1446 lire_MG_CG_FORME_ARETE_DROITE(id,parse,param,data);
1447 }
1448 if (entite =="MG_CG_FORME_VOLUME")
1449 {
1450 lire_MG_CG_FORME_VOLUME(id,parse,param,data);
1451 }
1452 if (entite =="MG_CG_FORME_VOLUME_BOITE")
1453 {
1454 lire_MG_CG_FORME_VOLUME_BOITE(id,parse,param,data);
1455 }
1456 if (entite =="MG_CG_FORME_VOLUME_SPHERE")
1457 {
1458 lire_MG_CG_FORME_VOLUME_SPHERE(id,parse,param,data);
1459 }
1460 if (entite =="MG_CG_FORME_VOLUME_ELLIPSOIDE")
1461 {
1462 lire_MG_CG_FORME_VOLUME_ELLIPSOIDE(id,parse,param,data);
1463 }
1464 if (entite =="MG_CG_FORME_VOLUME_CYLINDRE")
1465 {
1466 lire_MG_CG_FORME_VOLUME_CYLINDRE(id,parse,param,data);
1467 }
1468 if (entite =="MG_CG_FORME_VOLUME_CONE")
1469 {
1470 lire_MG_CG_FORME_VOLUME_CONE(id,parse,param,data);
1471 }
1472 if (entite =="MG_CG_FORME_VOLUME_TORE")
1473 {
1474 lire_MG_CG_FORME_VOLUME_TORE(id,parse,param,data);
1475 }
1476 if (entite =="MG_CG_FORME_MULTIPLE")
1477 {
1478 lire_MG_CG_FORME_MULTIPLE(id,parse,param,data);
1479 }
1480 if (entite =="MG_CG_FORME_MULTI_VOLUME")
1481 {
1482 lire_MG_CG_FORME_MULTI_VOLUME(id,parse,param,data);
1483 }
1484 if (entite =="MG_CG_OP_BOOL_UNION")
1485 {
1486 lire_MG_CG_OP_BOOL_UNION(id,parse,param,data);
1487 }
1488 if (entite =="MG_CG_OP_BOOL_DIFFERENCE")
1489 {
1490 lire_MG_CG_OP_BOOL_DIFFERENCE(id,parse,param,data);
1491 }
1492 if (entite =="MG_CG_OP_BOOL_INTERSECTION")
1493 {
1494 lire_MG_CG_OP_BOOL_INTERSECTION(id,parse,param,data);
1495 }
1496 if (entite =="MG_CG_OP_BOOL_FRAGMENT")
1497 {
1498 lire_MG_CG_OP_BOOL_FRAGMENT(id,parse,param,data);
1499 }
1500 if (entite =="MG_CG_OP_INCLUSION_MATRICE")
1501 {
1502 lire_MG_CG_OP_INCLUSION_MATRICE(id,parse,param,data);
1503 }
1504 if (entite =="MG_CG_OP_TRANSF_ROTATION")
1505 {
1506 lire_MG_CG_OP_TRANSF_ROTATION(id,parse,param,data);
1507 }
1508 if (entite =="MG_CG_OP_TRANSF_TRANSLATION")
1509 {
1510 lire_MG_CG_OP_TRANSF_TRANSLATION(id,parse,param,data);
1511 }
1512 if (entite =="MG_CG_OP_TRANSF_ECHELLE")
1513 {
1514 lire_MG_CG_OP_TRANSF_ECHELLE(id,parse,param,data);
1515 }
1516
1517 #endif
1518 if (entite =="MG_SOUS_GEOMETRIE")
1519 {
1520 lire_MG_SOUS_GEOMETRIE(id,parse,param,data);
1521 }
1522 if (entite=="GEOMETRIE_EPS")
1523 {
1524 parse.decode(data.c_str(),"@",param+2);
1525 double val=atof((char*)param[2].argument[0].c_str());
1526 mggeo->change_valeur_precision(val);
1527 }
1528 if (entite=="GROUPE_TOPOLOGIQUE")
1529 {
1530 parse.decode(data.c_str(),"@,(&)",param+2);
1531 MG_GROUPE_TOPOLOGIQUE* mggt=new MG_GROUPE_TOPOLOGIQUE(id);
1532 mggeo->ajouter_mg_groupe_topologique(mggt);
1533 int nb=atoi(param[2].argument[0].c_str());
1534 for (int i=0;i<nb;i++)
1535 {
1536 unsigned long id2=cid(param[3].argument[i].c_str());
1537 MG_ELEMENT_TOPOLOGIQUE* ele;
1538 ele=mggeo->get_mg_sommetid(id2);
1539 if (ele==NULL) ele=mggeo->get_mg_areteid(id2);
1540 if (ele==NULL) ele=mggeo->get_mg_faceid(id2);
1541 if (ele==NULL) ele=mggeo->get_mg_volumeid(id2);
1542 if (ele!=NULL) mggt->ajouter(ele);
1543 }
1544
1545 }
1546 if (entite=="GEOM_FONCTION")
1547 {
1548 parse.decode(data.c_str(),"@,@,(&)",param+2);
1549 int dim=atoi((char*)param[2].argument[0].c_str());
1550 MG_GEOM_FONCTION *gf=new MG_GEOM_FONCTION(id,dim);
1551 mggeo->ajouter_mg_geom_fonction(gf);
1552 int nb=atoi(param[3].argument[0].c_str());
1553 for (int i=0;i<nb;i++)
1554 {
1555 parse.decode(param[4].argument[i].c_str(),"(&)",param+5);
1556 double *coo=new double[dim];
1557 for (int j=0;j<dim;j++)
1558 coo[j]=atof(param[5].argument[j].c_str());
1559 gf->ajouter_point(coo);
1560 delete [] coo;
1561 }
1562
1563 }
1564
1565 if (entite=="VOLUME")
1566 {
1567 lire_MG_VOLUME(id,parse,param,data,mggeo,volumemince);
1568
1569 // if (version_fichier<2)
1570 // {
1571 // parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1572 // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1573 // mggeo->ajouter_mg_volume(mgvol);
1574 // int nummat=atoi((char*)param[4].argument[0].c_str());
1575 // mgvol->change_num_materiau(nummat);
1576 // int nb=atoi(param[5].argument[0].c_str());
1577 // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1578 // }
1579 // else if (version_fichier<2.3)
1580 // {
1581 // parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1582 // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1583 // mggeo->ajouter_mg_volume(mgvol);
1584 // int nb=atoi(param[4].argument[0].c_str());
1585 // if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgvol);
1586 // }
1587 // else
1588 // {
1589 // parse.decode(data.c_str(),"@,@,@,@",param+2);
1590 // MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
1591 // mggeo->ajouter_mg_volume(mgvol);
1592 // int mince=atoi(param[4].argument[0].c_str());
1593 // if (mince==0)
1594 // {
1595 // std::string data2=param[5].argument[0];
1596 // parse.decode(data2.c_str(),"@,(&)",param+5);
1597 // int nb=atoi(param[5].argument[0].c_str());
1598 // if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgvol);
1599 // }
1600 // else
1601 // {
1602 // std::string data2=param[5].argument[0];
1603 // parse.decode(data2.c_str(),"(&),@,(&)",param+5);
1604 // int nb_face=param[5].argument.size();
1605 // for (int i=0;i<nb_face;i=i+2)
1606 // {
1607 // unsigned long idn1=cid(param[5].argument[i]);
1608 // unsigned long idn2=cid(param[5].argument[i+1]);
1609 // volumemince.push_back(id);
1610 // volumemince.push_back(idn1);
1611 // volumemince.push_back(idn2);
1612 // }
1613 // int nb=atoi(param[6].argument[0].c_str());
1614 // if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,mgvol);
1615 // }
1616 // }
1617 /*{
1618 for (int i=0;i<nb;i++)
1619 {
1620 parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1621 char nom[3];
1622 double val;
1623 strcpy(nom,param[7].argument[0].c_str());
1624 val=atof(param[8].argument[0].c_str());
1625 mgvol->ajouter_ccf(nom,val);
1626 }
1627 }*/
1628 }
1629 if (entite=="COQUE")
1630 {
1631 if (version_fichier<2)
1632 {
1633 parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1634 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1635 mggeo->ajouter_mg_coque(mgcoq);
1636 int nummat=atoi((char*)param[4].argument[0].c_str());
1637 mgcoq->change_num_materiau(nummat);
1638 int nb=atoi(param[5].argument[0].c_str());
1639 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgcoq);
1640 }
1641 else
1642 {
1643 parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1644 MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
1645 mggeo->ajouter_mg_coque(mgcoq);
1646 int nb=atoi(param[4].argument[0].c_str());
1647 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgcoq);
1648 }
1649 /*if (nb!=0)
1650 {
1651 for (int i=0;i<nb;i++)
1652 {
1653 parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1654 char nom[3];
1655 double val;
1656 strcpy(nom,param[7].argument[0].c_str());
1657 val=atof(param[8].argument[0].c_str());
1658 mgcoq->ajouter_ccf(nom,val);
1659 }
1660 }*/
1661 }
1662 if (entite=="POUTRE")
1663 {
1664 if (version_fichier<2)
1665 {
1666 parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
1667 MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
1668 mggeo->ajouter_mg_poutre(mgpoutre);
1669 int nummat=atoi((char*)param[4].argument[0].c_str());
1670 mgpoutre->change_num_materiau(nummat);
1671 int nb=atoi(param[5].argument[0].c_str());
1672 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,mgpoutre);
1673 }
1674 else
1675 {
1676 parse.decode(data.c_str(),"@,@,@,(&)",param+2);
1677 MG_POUTRE* mgpou=new MG_POUTRE(param[2].argument[0],id);
1678 mggeo->ajouter_mg_poutre(mgpou);
1679 int nb=atoi(param[4].argument[0].c_str());
1680 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,mgpou);
1681 }
1682
1683 /*if (nb!=0)
1684 {
1685 for (int i=0;i<nb;i++)
1686 {
1687 parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
1688 char nom[3];
1689 double val;
1690 strcpy(nom,param[7].argument[0].c_str());
1691 val=atof(param[8].argument[0].c_str());
1692 mgpoutre->ajouter_ccf(nom,val);
1693 }
1694 }*/
1695 }
1696 if (entite=="COQUILLE")
1697 {
1698 lire_MG_COQUILLE(id,parse,param,data,mggeo);
1699 // parse.decode(data.c_str(),"@,@",param+2);
1700 // long ident=cid(param[2].argument[0]);
1701 // MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
1702 // MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
1703 // if (mgvol!=NULL)
1704 // {
1705 // MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
1706 // mggeo->ajouter_mg_coquille(mgcoq,mgvol);
1707 // }
1708 // if (mgcoq!=NULL)
1709 // {
1710 // MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
1711 // mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
1712 // }
1713 }
1714
1715 #ifdef BREP_STEP
1716 if (entite=="SURFACE_STEP")
1717 {
1718 parse.decode(data.c_str(),"@",param+2);
1719 long idstepsuf=atol(param[2].argument[0].c_str());
1720 ST_SURFACE *stsurf=mggeo->get_gest_step().lst_surface.getid(idstepsuf);
1721 STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
1722 mggeo->ajouter_mg_surface(stepsurf);
1723 }
1724 if (entite=="COURBE_STEP")
1725 {
1726 parse.decode(data.c_str(),"@",param+2);
1727 long idstepcur=atol(param[2].argument[0].c_str());
1728 ST_COURBE *stcur=mggeo->get_gest_step().lst_courbe.getid(idstepcur);
1729 STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
1730 mggeo->ajouter_mg_courbe(stepcur);
1731 }
1732
1733 if (entite=="POINT_STEP")
1734 {
1735 parse.decode(data.c_str(),"@",param+2);
1736 long idsteppt=atol(param[2].argument[0].c_str());
1737 ST_POINT *stpt=mggeo->get_gest_step().lst_point.getid(idsteppt);
1738 STEP_POINT* steppt=new STEP_POINT(id,stpt);
1739 mggeo->ajouter_mg_point(steppt);
1740 }
1741
1742 #endif
1743 #ifdef BREP_SAT
1744 if (entite=="SURFACE_SAT")
1745 {
1746 parse.decode(data.c_str(),"@",param+2);
1747 long idsatsuf=atol(param[2].argument[0].c_str());
1748 SAT_SURFACE *satsurf=mggeo->get_gest_sat().lst_surface.getid(idsatsuf);
1749 ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
1750 mggeo->ajouter_mg_surface(acissurf);
1751 }
1752 if (entite=="COURBE_SAT")
1753 {
1754 parse.decode(data.c_str(),"@",param+2);
1755 long idsatcur=atol(param[2].argument[0].c_str());
1756 SAT_COURBE *satcur=mggeo->get_gest_sat().lst_courbe.getid(idsatcur);
1757 ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
1758 mggeo->ajouter_mg_courbe(aciscur);
1759 }
1760
1761 if (entite=="POINT_SAT")
1762 {
1763 parse.decode(data.c_str(),"@",param+2);
1764 long idsatpt=atol(param[2].argument[0].c_str());
1765 SAT_POINT *satpt=mggeo->get_gest_sat().lst_point.getid(idsatpt);
1766 ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
1767 mggeo->ajouter_mg_point(acispt);
1768 }
1769
1770 #endif
1771
1772 #ifdef BREP_OCC
1773
1774 if (entite=="SURFACE_OCC")
1775 {
1776 parse.decode(data.c_str(),"@",param+2);
1777 long idocc=atol(param[2].argument[0].c_str());
1778 TopoDS_Face occface;
1779 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1780 {
1781 OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1782 occface=occ_fonction_2017->get_TopoDS_Face_id(idocc);
1783 }
1784 else
1785 {
1786 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
1787 occface=TopoDS::Face(occshape);
1788 }
1789 OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface,&mggeo->get_occ_fonction());
1790 occsurf->change_idoriginal(std::to_string(idocc));
1791 mggeo->ajouter_mg_surface(occsurf);
1792 }
1793 if (entite=="COURBE_OCC")
1794 {
1795 parse.decode(data.c_str(),"@",param+2);
1796 long idocc=atol(param[2].argument[0].c_str());
1797 TopoDS_Edge occedge;
1798 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1799 {
1800 OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1801 occedge=occ_fonction_2017->get_TopoDS_Edge_id(idocc);
1802 }
1803 else
1804 {
1805 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
1806 occedge=TopoDS::Edge(occshape);
1807 }
1808 OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, &mggeo->get_occ_fonction());
1809 mggeo->ajouter_mg_courbe(occcrb);
1810 occcrb->change_idoriginal(std::to_string(idocc));
1811 }
1812 if (entite=="POINT_OCC")
1813 {
1814 parse.decode(data.c_str(),"@",param+2);
1815 long idocc=atol(param[2].argument[0].c_str());
1816 TopoDS_Vertex occvertex;
1817 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
1818 {
1819 OCC_FONCTION_V2017* occ_fonction_2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
1820 occvertex = occ_fonction_2017->get_TopoDS_Vertex_id(idocc);
1821 }
1822 else
1823 {
1824 const TopoDS_Shape& occshape=mggeo->get_occ_fonction().GetShape(idocc);
1825 occvertex=TopoDS::Vertex(occshape);
1826 }
1827
1828 OCC_POINT* occpoint=new OCC_POINT(id,occvertex, &mggeo->get_occ_fonction());
1829 mggeo->ajouter_mg_point(occpoint);
1830 occpoint->change_idoriginal((std::to_string(idocc)));
1831 }
1832 #endif
1833 #ifdef WINDOWS_VERSION
1834 if (entite=="CAD4FE_POLYCURVE")
1835 {
1836 CAD4FE::PolyCurve * polycurve = NULL;
1837 parse.decode(data.c_str(),"@,(&)",param+2);
1838 int nb = atoi(param[2].argument[0].c_str());
1839
1840 if (nb == 0)
1841 {
1842 printf("PolyCurve %d is formed with reference vertex : ", id);
1843 parse.decode(param[3].argument[0].c_str(),"@",param+4);
1844 int idRefVertex;
1845 idRefVertex=cid(param[4].argument[0].c_str());
1846 printf("%d ;\n ", idRefVertex);
1847 MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
1848 polycurve = new CAD4FE::PolyCurve(refVertex);
1849 }
1850 else
1851 {
1852 printf("PolyCurve %d is formed with reference edges : ", id);
1853 polycurve = new CAD4FE::PolyCurve;
1854 for (int i=0;i<nb;i++)
1855 {
1856 parse.decode(param[3].argument[i].c_str(),"@",param+4);
1857 int idRefEdge;
1858 idRefEdge=cid(param[4].argument[0].c_str());
1859 printf("%d ; ", idRefEdge);
1860 MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
1861 CAD4FE::PolyCurve tmpPC(refEdge);
1862 polycurve->Merge(tmpPC);
1863 }
1864 printf("\n");
1865 }
1866
1867 polycurve->change_id(id);
1868 mggeo->ajouter_mg_courbe(polycurve);
1869 }
1870
1871
1872 if (entite=="CAD4FE_POLYSURFACE")
1873 {
1874 CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
1875 polysurface->change_id(id);
1876 mggeo->ajouter_mg_surface(polysurface);
1877
1878 parse.decode(data.c_str(),"@,(&)",param+2);
1879
1880 int nb = atoi(param[2].argument[0].c_str());
1881 printf("PolySurface %d is formed with reference faces : ", id);
1882 for (int i=0;i<nb;i++)
1883 {
1884 parse.decode(param[3].argument[i].c_str(),"@",param+4);
1885 int idRefFace;
1886 idRefFace=cid(param[4].argument[0].c_str());
1887 printf("%d ; ", idRefFace);
1888
1889 MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
1890 CAD4FE::PolySurface tmpSF(refFace);
1891 polysurface->Merge(tmpSF);
1892 }
1893
1894 printf("\n");
1895 }
1896 if (entite=="CAD4FE_MCEDGE")
1897 {
1898 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
1899
1900 std::string idOriginal = param[2].argument[0];
1901 long idPolyCurve=cid(param[3].argument[0]);
1902 CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
1903
1904 // sense is not used because a MCEdge always has
1905 // a sense = 1 !
1906 // (because polycurve domain is equal to mcEdge domain)
1907 CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
1908 mcEdge->change_id(id);
1909 mggeo->ajouter_mg_arete(mcEdge);
1910
1911 int nb=atoi(param[7].argument[0].c_str());
1912 if (nb!=0)
1913 {
1914 for (int i=0;i<nb;i++)
1915 {
1916 parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
1917 char nom[3];
1918 double val;
1919 strcpy(nom,param[9].argument[0].c_str());
1920 val=atof(param[10].argument[0].c_str());
1921 mcEdge->ajouter_ccf(nom,val);
1922 }
1923 }
1924 }
1925 if (entite=="CAD4FE_MCFACE")
1926 {
1927 parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
1928
1929 std::string idOriginal = param[2].argument[0];
1930 long idPolySurface=cid(param[3].argument[0]);
1931 CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
1932
1933 CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
1934 mcFace->change_id(id);
1935 mggeo->ajouter_mg_face(mcFace);
1936
1937 int nb=atoi(param[6].argument[0].c_str());
1938 if (nb!=0)
1939 {
1940 for (int i=0;i<nb;i++)
1941 {
1942 parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
1943 char nom[3];
1944 double val;
1945 strcpy(nom,param[8].argument[0].c_str());
1946 val=atof(param[9].argument[0].c_str());
1947 mcFace->ajouter_ccf(nom,val);
1948 }
1949 }
1950 }
1951 if (entite=="CAD4FE_MCVERTEX")
1952 {
1953 parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
1954 std::string idOriginal = param[2].argument[0];
1955 long idsom=cid(param[3].argument[0]);
1956 MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
1957 CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
1958 mcVertex->change_id(id);
1959 mggeo->ajouter_mg_sommet(mcVertex);
1960 int nb_ref_vertex=atoi(param[4].argument[0].c_str());
1961 if (nb_ref_vertex!=0)
1962 {
1963 for (int i=0;i<nb_ref_vertex;i++)
1964 {
1965 unsigned long idRefVertex=cid(param[5].argument[i]);
1966 mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
1967 mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
1968 }
1969 }
1970 int nb_ccf=atoi(param[4+2].argument[0].c_str());
1971 if (nb_ccf!=0)
1972 {
1973 for (int i=0;i<nb_ccf;i++)
1974 {
1975 parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
1976 char nom_ccf[3];
1977 double val_ccf;
1978 strcpy(nom_ccf,param[6+2].argument[0].c_str());
1979 val_ccf=atof(param[7+2].argument[0].c_str());
1980 mgsom->ajouter_ccf(nom_ccf,val_ccf);
1981 }
1982 }
1983 }
1984 #endif
1985 if (entite=="FACE")
1986 {
1987 lire_MG_FACE(id,parse,param,data,mggeo);
1988 // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
1989 // else parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
1990 // long idsurf=cid(param[3].argument[0]);
1991 // int sens=atoi(param[5].argument[0].c_str());
1992 // MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
1993 // MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
1994 // mggeo->ajouter_mg_face(mgface);
1995 // int argccf=7;
1996 // if (version_fichier>2.1)
1997 // {
1998 // argccf=8;
1999 // int nbpole=atoi(param[6].argument[0].c_str());
2000 // mgface->change_nb_pole(nbpole);
2001 // }
2002 // int nb=atoi(param[argccf-1].argument[0].c_str());
2003 // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgface);
2004 /*if (nb!=0)
2005 {
2006 for (int i=0;i<nb;i++)
2007 {
2008 parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
2009 char nom[3];
2010 double val;
2011 strcpy(nom,param[8].argument[0].c_str());
2012 val=atof(param[9].argument[0].c_str());
2013 mgface->ajouter_ccf(nom,val);
2014 }
2015 }*/
2016 }
2017 if (entite=="COFACE")
2018 {
2019 parse.decode(data.c_str(),"@,@,@",param+2);
2020 long idface=cid(param[2].argument[0]);
2021 long idcoq=cid(param[3].argument[0]);
2022 int sens=atoi(param[4].argument[0].c_str());
2023 MG_FACE* mgface=mggeo->get_mg_faceid(idface);
2024 MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
2025 MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
2026 mgcoq->ajouter_mg_coface(mgcoface);
2027 }
2028 if (entite=="BOUCLE")
2029 {
2030 lire_MG_BOUCLE(id,parse,param,data,mggeo);
2031 // parse.decode(data.c_str(),"@,(@)",param+2);
2032 // long ident=cid(param[2].argument[0]);
2033 // MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2034 // MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2035 // if (mgface!=NULL)
2036 // {
2037 // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
2038 // mggeo->ajouter_mg_boucle(mgbou,mgface);
2039 // }
2040 // if (mgpoutre!=NULL)
2041 // {
2042 // MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
2043 // mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
2044 // }
2045 }
2046 if (entite=="POINT")
2047 {
2048 parse.decode(data.c_str(),"@,@,@",param+2);
2049 double xyz[3];
2050 xyz[0]=atof(param[2].argument[0].c_str());
2051 xyz[1]=atof(param[3].argument[0].c_str());
2052 xyz[2]=atof(param[4].argument[0].c_str());
2053 LC_POINT* point=new LC_POINT(id,xyz);
2054 mggeo->ajouter_mg_point(point);
2055 }
2056 if (entite=="SOMMET")
2057 {
2058 lire_MG_SOMMET(id,parse,param,data,mggeo);
2059 // if (version_fichier<2.2) parse.decode(data.c_str(),"@,@,@,(&)",param+2);
2060 // else parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2061 // long idpoint=cid(param[3].argument[0]);
2062 // MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2063 // MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
2064 // mggeo->ajouter_mg_sommet(mgsom);
2065 // int argccf=5;
2066 // if (version_fichier>2.1)
2067 // {
2068 // argccf=6;
2069 // int ipole=atoi(param[4].argument[0].c_str());
2070 // if (ipole==1) mgsom->change_pole(true);
2071 // }
2072 // int nb=atoi(param[argccf-1].argument[0].c_str());
2073 // if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,mgsom);
2074 // /*if (nb!=0)
2075 // {
2076 // for (int i=0;i<nb;i++)
2077 // {
2078 // parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2079 // char nom[3];
2080 // double val;
2081 // strcpy(nom,param[6].argument[0].c_str());
2082 // val=atof(param[7].argument[0].c_str());
2083 // mgsom->ajouter_ccf(nom,val);
2084 // }
2085 // }*/
2086 }
2087 #ifdef BREP_OCC
2088 if (entite=="OCC_SOMMET")
2089 {
2090 parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
2091 long idpoint=cid(param[3].argument[0]);
2092 MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
2093 TopoDS_Vertex topods_vertex;
2094 long idori = stol(param[2].argument[0]);
2095 OCC_SOMMET* occ_sommet;
2096 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2097 {
2098 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2099 topods_vertex=occ_fonction_v2017->get_TopoDS_Vertex_id(idori);
2100 occ_sommet = new OCC_SOMMET(param[2].argument[0],id,mgpt,topods_vertex,&mggeo->get_occ_fonction());
2101 mggeo->ajouter_mg_sommet(occ_sommet);
2102 occ_fonction_v2017->ajouter_OCC_SOMMET(occ_sommet);
2103 }
2104 else
2105 {
2106 std::cout << "*** MG_FILE : ERREUR lecture OCC_SOMMET : Mauvaise OCC_FONCTION ! ***" << std::endl;
2107 }
2108 int argccf=5;
2109 if (version_fichier>2.1)
2110 {
2111 argccf=6;
2112 int ipole=atoi(param[4].argument[0].c_str());
2113 if (ipole==1) occ_sommet->change_pole(true);
2114 }
2115 int nb=atoi(param[argccf-1].argument[0].c_str());
2116 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_sommet);
2117 }
2118 if (entite=="OCC_ARETE")
2119 {
2120 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2121 long idcur=cid(param[3].argument[0]);
2122 int sens=atol(param[6].argument[0].c_str());
2123 long idori = stoi(param[2].argument[0]);
2124 TopoDS_Edge topods_edge;
2125 OCC_ARETE* occ_arete;
2126 MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2127 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2128 {
2129 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2130 topods_edge=occ_fonction_v2017->get_TopoDS_Edge_id(idori);
2131 occ_arete= new OCC_ARETE(param[2].argument[0],id,mgcur,sens,topods_edge,&mggeo->get_occ_fonction());
2132 mggeo->ajouter_mg_arete(occ_arete);
2133 occ_fonction_v2017->ajouter_OCC_ARETE(occ_arete);
2134 }
2135 else
2136 {
2137 std::cout << "*** MG_FILE : ERREUR lecture OCC_ARETE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2138 }
2139 int nb=atoi(param[7].argument[0].c_str());
2140 if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,occ_arete);
2141 }
2142 if (entite=="OCC_BOUCLE")
2143 {
2144 parse.decode(data.c_str(),"@,@,(@)",param+2);
2145 long ident=cid(param[2].argument[0]);
2146 long idori=stol(param[3].argument[0]);
2147 TopoDS_Wire topods_wire;
2148 OCC_BOUCLE* occ_boucle;
2149 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2150 {
2151 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2152 topods_wire=occ_fonction_v2017->get_TopoDS_Wire_id(idori);
2153 if(ident!=-1)
2154 {
2155 MG_FACE* mgface=mggeo->get_mg_faceid(ident);
2156 MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
2157 if (mgface!=NULL)
2158 {
2159 OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgface,topods_wire,&mggeo->get_occ_fonction());
2160 mggeo->ajouter_mg_boucle(occ_boucle,mgface);
2161 occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2162 }
2163 if (mgpoutre!=NULL)
2164 {
2165 OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,mgpoutre,topods_wire,&mggeo->get_occ_fonction());
2166 mggeo->ajouter_mg_boucle(occ_boucle,mgpoutre);
2167 occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2168 }
2169 }
2170 else
2171 {
2172 OCC_BOUCLE* occ_boucle=new OCC_BOUCLE(param[3].argument[0],id,topods_wire,&mggeo->get_occ_fonction());
2173 mggeo->ajouter_mg_boucle(occ_boucle);
2174 occ_fonction_v2017->ajouter_OCC_BOUCLE(occ_boucle);
2175 }
2176 }
2177 else
2178 {
2179 std::cout << "*** MG_FILE : ERREUR lecture OCC_BOUCLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2180 }
2181
2182 }
2183 if (entite=="OCC_FACE")
2184 {
2185 parse.decode(data.c_str(),"@,@,(@),@,@,@,(&)",param+2);
2186 long idsurf=cid(param[3].argument[0]);
2187 int sens=atoi(param[5].argument[0].c_str());
2188 long idori = stol(param[2].argument[0]);
2189 TopoDS_Face topods_face;
2190 OCC_FACE* occ_face;
2191 MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
2192 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2193 {
2194 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2195 topods_face=occ_fonction_v2017->get_TopoDS_Face_id(idori);
2196 occ_face = new OCC_FACE(param[2].argument[0],id,mgsurf,sens,topods_face,&mggeo->get_occ_fonction());
2197 mggeo->ajouter_mg_face(occ_face);
2198 occ_fonction_v2017->ajouter_OCC_FACE(occ_face);
2199 }
2200 else
2201 {
2202 std::cout << "*** MG_FILE : ERREUR lecture OCC_FACE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2203 }
2204 int argccf=7;
2205 if (version_fichier>2.1)
2206 {
2207 argccf=8;
2208 int nbpole=atoi(param[6].argument[0].c_str());
2209 occ_face->change_nb_pole(nbpole);
2210 }
2211 int nb=atoi(param[argccf-1].argument[0].c_str());
2212 if (nb!=0) lire_ccf(version_fichier,nb,argccf,parse,param,occ_face);
2213 }
2214 if (entite=="OCC_COQUILLE")
2215 {
2216 parse.decode(data.c_str(),"@,@,@",param+2);
2217 long ident=cid(param[2].argument[0]);
2218 long idori = stol(param[3].argument[0]);
2219 TopoDS_Shell topods_shell;
2220 OCC_COQUILLE* occ_coquille;
2221 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2222 {
2223 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2224 topods_shell=occ_fonction_v2017->get_TopoDS_Shell_id(idori);
2225 if(idori!=-1)
2226 {
2227 MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
2228 MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
2229 if (mgvol!=NULL)
2230 {
2231 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgvol,topods_shell,&mggeo->get_occ_fonction());
2232 mggeo->ajouter_mg_coquille(occ_coquille,mgvol);
2233 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2234 }
2235 if (mgcoq!=NULL)
2236 {
2237 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,mgcoq,topods_shell,&mggeo->get_occ_fonction());
2238 mggeo->ajouter_mg_coquille(occ_coquille,mgcoq);
2239 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2240 }
2241 }
2242 else
2243 {
2244 OCC_COQUILLE* occ_coquille = new OCC_COQUILLE(param[3].argument[0],id,topods_shell,&mggeo->get_occ_fonction());
2245 mggeo->ajouter_mg_coquille(occ_coquille);
2246 occ_fonction_v2017->ajouter_OCC_COQUILLE(occ_coquille);
2247 }
2248 }
2249 else
2250 {
2251 std::cout << "*** MG_FILE : ERREUR lecture OCC_COQUILLE : Mauvaise OCC_FONCTION ! ***" << std::endl;
2252 }
2253 }
2254 if (entite=="OCC_VOLUME")
2255 {
2256
2257 parse.decode(data.c_str(),"@,@,@,@",param+2);
2258 long idori = stol(param[2].argument[0]);
2259 TopoDS_Solid topods_solid;
2260 OCC_VOLUME* occ_volume;
2261 if(mggeo->get_occ_fonction().get_version()=="OCCV2017")
2262 {
2263 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)&mggeo->get_occ_fonction();
2264 topods_solid=occ_fonction_v2017->get_TopoDS_Solid_id(idori);
2265 occ_volume = new OCC_VOLUME(param[2].argument[0],id,topods_solid,&mggeo->get_occ_fonction());
2266 mggeo->ajouter_mg_volume(occ_volume);
2267 occ_fonction_v2017->ajouter_OCC_VOLUME(occ_volume);
2268 }
2269 else
2270 {
2271 std::cout << "*** MG_FILE : ERREUR lecture OCC_VOLUME : Mauvaise OCC_FONCTION ! ***" << std::endl;
2272 }
2273 int mince=atoi(param[4].argument[0].c_str());
2274 if (mince==0)
2275 {
2276 std::string data2=param[5].argument[0];
2277 parse.decode(data2.c_str(),"@,(&)",param+5);
2278 int nb=atoi(param[5].argument[0].c_str());
2279 if (nb!=0) lire_ccf(version_fichier,nb,6,parse,param,occ_volume);
2280 }
2281 else
2282 {
2283 std::string data2=param[5].argument[0];
2284 parse.decode(data2.c_str(),"(&),@,(&)",param+5);
2285 int nb_face=param[5].argument.size();
2286 for (int i=0;i<nb_face;i=i+2)
2287 {
2288 unsigned long idn1=cid(param[5].argument[i]);
2289 unsigned long idn2=cid(param[5].argument[i+1]);
2290 volumemince.push_back(id);
2291 volumemince.push_back(idn1);
2292 volumemince.push_back(idn2);
2293 }
2294 int nb=atoi(param[6].argument[0].c_str());
2295 if (nb!=0) lire_ccf(version_fichier,nb,7,parse,param,occ_volume);
2296 }
2297 }
2298
2299
2300 #endif
2301 if (entite=="ARETE_ELEMENT")
2302 {
2303 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2304 MG_ARETE_ELEMENT* are=new MG_ARETE_ELEMENT(id);
2305 mggeo->ajouter_mg_arete(are);
2306 int nb=atoi(param[4].argument[0].c_str());
2307 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,are);
2308 /* if (nb!=0)
2309 {
2310 for (int i=0;i<nb;i++)
2311 {
2312 parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2313 char nom[3];
2314 double val;
2315 strcpy(nom,param[6].argument[0].c_str());
2316 val=atof(param[7].argument[0].c_str());
2317 are->ajouter_ccf(nom,val);
2318 }
2319 }*/
2320 }
2321 if (entite=="FACE_ELEMENT")
2322 {
2323 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2324 MG_FACE_ELEMENT* face=new MG_FACE_ELEMENT(id);
2325 mggeo->ajouter_mg_face(face);
2326 int nb=atoi(param[4].argument[0].c_str());
2327 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,face);
2328 /*if (nb!=0)
2329 {
2330 for (int i=0;i<nb;i++)
2331 {
2332 parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2333 char nom[3];
2334 double val;
2335 strcpy(nom,param[6].argument[0].c_str());
2336 val=atof(param[7].argument[0].c_str());
2337 face->ajouter_ccf(nom,val);
2338 }
2339 }*/
2340 }
2341 if (entite=="COQUE_ELEMENT")
2342 {
2343 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2344 MG_COQUE_ELEMENT* coq=new MG_COQUE_ELEMENT(id);
2345 mggeo->ajouter_mg_coque(coq);
2346 int nbele=atoi(param[2].argument[0].c_str());
2347 for (int i=0;i<nbele;i++)
2348 {
2349 unsigned long idele=cid(param[3].argument[i].c_str());
2350 coq->ajouter_element(idele);
2351 }
2352 int nb=atoi(param[4].argument[0].c_str());
2353 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,coq);
2354 /* if (nb!=0)
2355 {
2356 for (int i=0;i<nb;i++)
2357 {
2358 parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2359 char nom[3];
2360 double val;
2361 strcpy(nom,param[6].argument[0].c_str());
2362 val=atof(param[7].argument[0].c_str());
2363 coq->ajouter_ccf(nom,val);
2364 }
2365 }*/
2366 }
2367 if (entite=="POUTRE_ELEMENT")
2368 {
2369 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2370 MG_POUTRE_ELEMENT* pou=new MG_POUTRE_ELEMENT(id);
2371 mggeo->ajouter_mg_poutre(pou);
2372 int nbele=atoi(param[2].argument[0].c_str());
2373 for (int i=0;i<nbele;i++)
2374 {
2375 unsigned long idele=cid(param[3].argument[i].c_str());
2376 pou->ajouter_element(idele);
2377 }
2378 int nb=atoi(param[4].argument[0].c_str());
2379 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,pou);
2380 /*if (nb!=0)
2381 {
2382 for (int i=0;i<nb;i++)
2383 {
2384 parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2385 char nom[3];
2386 double val;
2387 strcpy(nom,param[6].argument[0].c_str());
2388 val=atof(param[7].argument[0].c_str());
2389 pou->ajouter_ccf(nom,val);
2390 }
2391 }*/
2392 }
2393 if (entite=="VOLUME_ELEMENT")
2394 {
2395 parse.decode(data.c_str(),"@,(&),@,(&)",param+2);
2396 MG_VOLUME_ELEMENT* vol=new MG_VOLUME_ELEMENT(id);
2397 mggeo->ajouter_mg_volume(vol);
2398 int nb=atoi(param[4].argument[0].c_str());
2399 if (nb!=0) lire_ccf(version_fichier,nb,5,parse,param,vol);
2400 /* if (nb!=0)
2401 {
2402 for (int i=0;i<nb;i++)
2403 {
2404 parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
2405 char nom[3];
2406 double val;
2407 strcpy(nom,param[6].argument[0].c_str());
2408 val=atof(param[7].argument[0].c_str());
2409 vol->ajouter_ccf(nom,val);
2410 }
2411 }*/
2412 }
2413 if (entite=="SOMMET_NOEUD")
2414 {
2415 parse.decode(data.c_str(),"@,@,(&)",param+2);
2416 long idnoeud=cid(param[2].argument[0]);
2417 MG_SOMMET_NOEUD* mgsom=new MG_SOMMET_NOEUD(id,idnoeud);
2418 mggeo->ajouter_mg_sommet(mgsom);
2419 int nb=atoi(param[3].argument[0].c_str());
2420 if (nb!=0) lire_ccf(version_fichier,nb,4,parse,param,mgsom);
2421 /*if (nb!=0)
2422 {
2423 for (int i=0;i<nb;i++)
2424 {
2425 parse.decode(param[4].argument[i].c_str(),"(@,@)",param+5);
2426 char nom[3];
2427 double val;
2428 strcpy(nom,param[5].argument[0].c_str());
2429 val=atof(param[6].argument[0].c_str());
2430 mgsom->ajouter_ccf(nom,val);
2431 }
2432 }*/
2433 }
2434 if (entite=="ARETE")
2435 {
2436 lire_MG_ARETE(id,parse,param,data,mggeo);
2437 // parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
2438 // long idcur=cid(param[3].argument[0]);
2439 // int sens=atoi(param[6].argument[0].c_str());
2440 // MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
2441 // MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
2442 // mggeo->ajouter_mg_arete(mgarete);
2443 // int nb=atoi(param[7].argument[0].c_str());
2444 // if (nb!=0) lire_ccf(version_fichier,nb,8,parse,param,mgarete);
2445 // /*if (nb!=0)
2446 // {
2447 // for (int i=0;i<nb;i++)
2448 // {
2449 // parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
2450 // char nom[3];
2451 // double val;
2452 // strcpy(nom,param[9].argument[0].c_str());
2453 // val=atof(param[10].argument[0].c_str());
2454 // mgarete->ajouter_ccf(nom,val);
2455 // }
2456 // }*/
2457 }
2458 if (entite=="COSOMMET")
2459 {
2460 parse.decode(data.c_str(),"@,@,@",param+2);
2461 long idsom=cid(param[2].argument[0]);
2462 long idarete=cid(param[3].argument[0]);
2463 int num=atoi(param[4].argument[0].c_str());
2464 MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
2465 MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2466 MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
2467 if (num==1) mgarete->changer_cosommet1(mgcosom);
2468 if (num==2) mgarete->changer_cosommet2(mgcosom);
2469 }
2470 if (entite=="COARETE")
2471 {
2472 parse.decode(data.c_str(),"@,@,@",param+2);
2473 long idarete=cid(param[2].argument[0]);
2474 long idboucle=cid(param[3].argument[0]);
2475 int sens=atoi(param[4].argument[0].c_str());
2476 MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
2477 MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
2478 MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
2479 mgboucle->ajouter_mg_coarete(mgcoarete);
2480 }
2481 if (entite=="VISU_COURBE")
2482 {
2483 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2484 double xyz1[3];
2485 double xyz2[3];
2486 xyz1[0]=atof(param[2].argument[0].c_str());
2487 xyz1[1]=atof(param[3].argument[0].c_str());
2488 xyz1[2]=atof(param[4].argument[0].c_str());
2489 xyz2[0]=atof(param[5].argument[0].c_str());
2490 xyz2[1]=atof(param[6].argument[0].c_str());
2491 xyz2[2]=atof(param[7].argument[0].c_str());
2492 MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
2493 mggeo->ajouter_mg_visu_courbe(mgcrb);
2494 }
2495 if (entite=="MAILLAGE")
2496 {
2497 parse.decode(data.c_str(),"@",param+2);
2498 long idgeo=cid(param[2].argument[0]);
2499 mggeo=get_mg_geometrieid(idgeo);
2500 mgmai=new MG_MAILLAGE(id,mggeo);
2501 ajouter_mg_maillage(mgmai);
2502 }
2503 if (entite=="MAILLAGE_STRUCTURE")
2504 {
2505 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2506 long idgeo=cid(param[2].argument[0]);
2507 mggeo=get_mg_geometrieid(idgeo);
2508 mgmai=new MG_MAILLAGE(id,mggeo);
2509 ajouter_mg_maillage(mgmai);
2510 double xmin=atof(param[3].argument[0].c_str());
2511 double ymin=atof(param[4].argument[0].c_str());
2512 double zmin=atof(param[5].argument[0].c_str());
2513 double xmax=atof(param[6].argument[0].c_str());
2514 double ymax=atof(param[7].argument[0].c_str());
2515 double zmax=atof(param[8].argument[0].c_str());
2516 int nx=atoi(param[9].argument[0].c_str());
2517 int ny=atoi(param[10].argument[0].c_str());
2518 int nz=atoi(param[11].argument[0].c_str());
2519 BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2520 mgmai->change_param_structure(b,nx,ny,nz);
2521 }
2522 if (entite=="FEM_MAILLAGE")
2523 {
2524 parse.decode(data.c_str(),"@,@,@",param+2);
2525 int degre=atoi(param[2].argument[0].c_str());
2526 long idmai=cid(param[3].argument[0]);
2527 long idgeo=cid(param[4].argument[0]);
2528 mggeo=get_mg_geometrieid(idgeo);
2529 mgmai=get_mg_maillageid(idmai);
2530 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2531 ajouter_fem_maillage(femmai);
2532 }
2533 if (entite=="FEM_MAILLAGE_STRUCTURE")
2534 {
2535 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2536 int degre=atoi(param[2].argument[0].c_str());
2537 long idmai=cid(param[3].argument[0]);
2538 long idgeo=cid(param[4].argument[0]);
2539 mggeo=get_mg_geometrieid(idgeo);
2540 mgmai=get_mg_maillageid(idmai);
2541 femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
2542 ajouter_fem_maillage(femmai);
2543 double xmin=atof(param[5].argument[0].c_str());
2544 double ymin=atof(param[6].argument[0].c_str());
2545 double zmin=atof(param[7].argument[0].c_str());
2546 double xmax=atof(param[8].argument[0].c_str());
2547 double ymax=atof(param[9].argument[0].c_str());
2548 double zmax=atof(param[10].argument[0].c_str());
2549 int nx=atoi(param[11].argument[0].c_str());
2550 int ny=atoi(param[12].argument[0].c_str());
2551 int nz=atoi(param[13].argument[0].c_str());
2552 BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax);
2553 femmai->change_param_structure(b,nx,ny,nz);
2554 }
2555 if (entite=="NOEUD") lire_NOEUD(id,parse,param,data,mgmai,mggeo);
2556 if (entite=="FEM_NOEUD")
2557 {
2558 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2559 long idtopo=cid(param[2].argument[0]);
2560 long idmai=cid(param[3].argument[0]);
2561 double x=atof(param[4].argument[0].c_str());
2562 double y=atof(param[5].argument[0].c_str());
2563 double z=atof(param[6].argument[0].c_str());
2564 int num=atoi(param[7].argument[0].c_str());
2565 int numopt=atoi(param[8].argument[0].c_str());
2566 MG_ELEMENT_MAILLAGE* elmai;
2567 if (idmai>-1)
2568 {
2569 elmai=mgmai->get_mg_noeudid(idmai);
2570 if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
2571 if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
2572 if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
2573 }
2574 else elmai=NULL;
2575 FEM_NOEUD* noeud;
2576 if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
2577 else
2578 {
2579 MG_ELEMENT_TOPOLOGIQUE* topo;
2580 if (idtopo>-1)
2581 {
2582 topo=mggeo->get_mg_sommetid(idtopo);
2583 if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
2584 if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
2585 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
2586 }
2587 else topo=NULL;
2588 noeud=new FEM_NOEUD(id,topo,x,y,z);
2589 }
2590 noeud->change_numero(num);
2591 noeud->change_numero_opt(numopt);
2592 femmai->ajouter_fem_noeud(noeud);
2593 }
2594 if (entite=="FEM_NOEUD_DEF")
2595 {
2596 parse.decode(data.c_str(),"@,@,@",param+2);
2597 double x=atof(param[2].argument[0].c_str());
2598 double y=atof(param[3].argument[0].c_str());
2599 double z=atof(param[4].argument[0].c_str());
2600 FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2601 noeud->change_dx(x);
2602 noeud->change_dy(y);
2603 noeud->change_dz(z);
2604 femmai->active_deforme();
2605 }
2606 if (entite=="FEM_NOEUD_REAC")
2607 {
2608 parse.decode(data.c_str(),"@,@,@",param+2);
2609 double x=atof(param[2].argument[0].c_str());
2610 double y=atof(param[3].argument[0].c_str());
2611 double z=atof(param[4].argument[0].c_str());
2612 FEM_NOEUD* noeud=femmai->get_fem_noeudid(id);
2613 noeud->change_rx(x);
2614 noeud->change_ry(y);
2615 noeud->change_rz(z);
2616 femmai->active_reaction();;
2617 }
2618 if (entite=="SEGMENT") lire_SEGMENT(id,parse,param,data,mgmai,mggeo);
2619 if (entite=="FEM_ELEMENT_NOEUD")
2620 {
2621 parse.decode(data.c_str(),"@,@,@",param+2);
2622 long idtopo=cid(param[2].argument[0]);
2623 long idmai=cid(param[3].argument[0]);
2624 long idn1=cid(param[4].argument[0]);
2625 FEM_NOEUD* tab[1];
2626 tab[0]=femmai->get_fem_noeudid(idn1);
2627 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2628 if (idtopo>-1)
2629 topo=mggeo->get_mg_sommetid(idtopo);
2630 MG_ELEMENT_MAILLAGE* elmai;
2631 if (idmai>-1)
2632 elmai=mgmai->get_mg_noeudid(idmai);
2633 else elmai=NULL;
2634 FEM_ELEMENT0* fem=new FEM_ELEMENT0(id,topo,elmai,tab);
2635 femmai->ajouter_fem_element0(fem);
2636 }
2637 if (entite=="FEM_SEGMENT2")
2638 {
2639 parse.decode(data.c_str(),"@,@,@,@",param+2);
2640 long idtopo=cid(param[2].argument[0]);
2641 long idmai=cid(param[3].argument[0]);
2642 long idn1=cid(param[4].argument[0]);
2643 long idn2=cid(param[5].argument[0]);
2644 FEM_NOEUD* tab[2];
2645 tab[0]=femmai->get_fem_noeudid(idn1);
2646 tab[1]=femmai->get_fem_noeudid(idn2);
2647 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2648 if (idtopo>-1)
2649 topo=mggeo->get_mg_areteid(idtopo);
2650 if (topo==NULL) topo=mggeo->get_mg_poutreid(idtopo);
2651 MG_ELEMENT_MAILLAGE* elmai;
2652 if (idmai>-1)
2653 elmai=mgmai->get_mg_segmentid(idmai);
2654 else elmai=NULL;
2655 FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,topo,elmai,tab);
2656 femmai->ajouter_fem_element1(seg);
2657 }
2658 if (entite=="FEM_MINI_SEGMENT2")
2659 {
2660 parse.decode(data.c_str(),"@,@",param+2);
2661 long idn1=cid(param[2].argument[0]);
2662 long idn2=cid(param[3].argument[0]);
2663 FEM_NOEUD* tab[2];
2664 tab[0]=femmai->get_fem_noeudid(idn1);
2665 tab[1]=femmai->get_fem_noeudid(idn2);
2666 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());
2667 FEM_MINI_SEGMENT2* seg=new FEM_MINI_SEGMENT2(id,mseg,tab);
2668 femmai->ajouter_fem_element1(seg);
2669 }
2670 if (entite=="FEM_SEGMENT3")
2671 {
2672 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2673 long idtopo=cid(param[2].argument[0]);
2674 long idmai=cid(param[3].argument[0]);
2675 long idn1=cid(param[4].argument[0]);
2676 long idn2=cid(param[5].argument[0]);
2677 long idn3=cid(param[6].argument[0]);
2678 FEM_NOEUD* tab[3];
2679 tab[0]=femmai->get_fem_noeudid(idn1);
2680 tab[1]=femmai->get_fem_noeudid(idn2);
2681 tab[2]=femmai->get_fem_noeudid(idn3);
2682 MG_ELEMENT_MAILLAGE* elmai;
2683 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2684 if (idtopo>-1)
2685 topo=mggeo->get_mg_areteid(idtopo);
2686 if (idmai>-1)
2687 elmai=mgmai->get_mg_segmentid(idmai);
2688 else elmai=NULL;
2689 FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,topo,elmai,tab);
2690 femmai->ajouter_fem_element1(seg);
2691 }
2692 if (entite=="TRIANGLE") lire_TRIANGLE(id,parse,param,data,mgmai,mggeo);
2693 if (entite=="QUADRANGLE") lire_QUADRANGLE(id,parse,param,data,mgmai,mggeo);
2694 if (entite=="FEM_TRIANGLE3")
2695 {
2696 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2697 long idtopo=cid(param[2].argument[0]);
2698 long idmai=cid(param[3].argument[0]);
2699 long idn1=cid(param[4].argument[0]);
2700 long idn2=cid(param[5].argument[0]);
2701 long idn3=cid(param[6].argument[0]);
2702 FEM_NOEUD* tab[3];
2703 tab[0]=femmai->get_fem_noeudid(idn1);
2704 tab[1]=femmai->get_fem_noeudid(idn2);
2705 tab[2]=femmai->get_fem_noeudid(idn3);
2706 MG_ELEMENT_MAILLAGE* elmai;
2707 if (idmai>-1)
2708 elmai=mgmai->get_mg_triangleid(idmai);
2709 else elmai=NULL;
2710 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2711 if (idtopo>-1)
2712 topo=mggeo->get_mg_faceid(idtopo);
2713 FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,topo,elmai,tab);
2714 femmai->ajouter_fem_element2(tri);
2715 }
2716 if (entite=="FEM_TRIANGLE6")
2717 {
2718 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
2719 long idtopo=cid(param[2].argument[0]);
2720 long idmai=cid(param[3].argument[0]);
2721 long idn1=cid(param[4].argument[0]);
2722 long idn2=cid(param[5].argument[0]);
2723 long idn3=cid(param[6].argument[0]);
2724 long idn4=cid(param[7].argument[0]);
2725 long idn5=cid(param[8].argument[0]);
2726 long idn6=cid(param[9].argument[0]);
2727 FEM_NOEUD* tab[6];
2728 tab[0]=femmai->get_fem_noeudid(idn1);
2729 tab[1]=femmai->get_fem_noeudid(idn2);
2730 tab[2]=femmai->get_fem_noeudid(idn3);
2731 tab[3]=femmai->get_fem_noeudid(idn4);
2732 tab[4]=femmai->get_fem_noeudid(idn5);
2733 tab[5]=femmai->get_fem_noeudid(idn6);
2734 MG_ELEMENT_MAILLAGE* elmai;
2735 if (idmai>-1)
2736 elmai=mgmai->get_mg_triangleid(idmai);
2737 else elmai=NULL;
2738 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2739 if (idtopo>-1)
2740 topo=mggeo->get_mg_faceid(idtopo);
2741 FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,topo,elmai,tab);
2742 femmai->ajouter_fem_element2(tri);
2743 }
2744 if (entite=="FEM_QUADRANGLE4")
2745 {
2746 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2747 long idtopo=cid(param[2].argument[0]);
2748 long idmai=cid(param[3].argument[0]);
2749 long idn1=cid(param[4].argument[0]);
2750 long idn2=cid(param[5].argument[0]);
2751 long idn3=cid(param[6].argument[0]);
2752 long idn4=cid(param[7].argument[0]);
2753 FEM_NOEUD* tab[4];
2754 tab[0]=femmai->get_fem_noeudid(idn1);
2755 tab[1]=femmai->get_fem_noeudid(idn2);
2756 tab[2]=femmai->get_fem_noeudid(idn3);
2757 tab[3]=femmai->get_fem_noeudid(idn4);
2758 MG_ELEMENT_MAILLAGE* elmai;
2759 if (idmai>-1)
2760 elmai=mgmai->get_mg_quadrangleid(idmai);
2761 else elmai=NULL;
2762 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2763 if (idtopo>-1)
2764 topo=mggeo->get_mg_faceid(idtopo);
2765 FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(id,topo,elmai,tab);
2766 femmai->ajouter_fem_element2(quad);
2767 }
2768 if (entite=="FEM_QUADRANGLE8")
2769 {
2770 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2771 long idtopo=cid(param[2].argument[0]);
2772 long idmai=cid(param[3].argument[0]);
2773 long idn1=cid(param[4].argument[0]);
2774 long idn2=cid(param[5].argument[0]);
2775 long idn3=cid(param[6].argument[0]);
2776 long idn4=cid(param[7].argument[0]);
2777 long idn5=cid(param[8].argument[0]);
2778 long idn6=cid(param[9].argument[0]);
2779 long idn7=cid(param[10].argument[0]);
2780 long idn8=cid(param[11].argument[0]);
2781 FEM_NOEUD* tab[8];
2782 tab[0]=femmai->get_fem_noeudid(idn1);
2783 tab[1]=femmai->get_fem_noeudid(idn2);
2784 tab[2]=femmai->get_fem_noeudid(idn3);
2785 tab[3]=femmai->get_fem_noeudid(idn4);
2786 tab[4]=femmai->get_fem_noeudid(idn5);
2787 tab[5]=femmai->get_fem_noeudid(idn6);
2788 tab[6]=femmai->get_fem_noeudid(idn7);
2789 tab[7]=femmai->get_fem_noeudid(idn8);
2790 MG_ELEMENT_MAILLAGE* elmai;
2791 if (idmai>-1)
2792 elmai=mgmai->get_mg_quadrangleid(idmai);
2793 else elmai=NULL;
2794 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2795 if (idtopo>-1)
2796 topo=mggeo->get_mg_faceid(idtopo);
2797 FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(id,topo,elmai,tab);
2798 femmai->ajouter_fem_element2(quad);
2799 }
2800 if (entite=="TETRAEDRE") lire_TETRA(id,parse,param,data,mgmai,mggeo);
2801
2802 if (entite=="HEXAEDRE") lire_HEXA(id,parse,param,data,mgmai,mggeo);
2803 if (entite=="PENTAEDRE") lire_PENTA(id,parse,param,data,mgmai,mggeo);
2804 if (entite=="FEM_TETRA4")
2805 {
2806 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2807 long idtopo=cid(param[2].argument[0]);
2808 long idmai=cid(param[3].argument[0]);
2809 long idn1=cid(param[4].argument[0]);
2810 long idn2=cid(param[5].argument[0]);
2811 long idn3=cid(param[6].argument[0]);
2812 long idn4=cid(param[7].argument[0]);
2813 long etat=atoi(param[8].argument[0].c_str());
2814 FEM_NOEUD* tab[4];
2815 tab[0]=femmai->get_fem_noeudid(idn1);
2816 tab[1]=femmai->get_fem_noeudid(idn2);
2817 tab[2]=femmai->get_fem_noeudid(idn3);
2818 tab[3]=femmai->get_fem_noeudid(idn4);
2819 MG_ELEMENT_MAILLAGE* elmai;
2820 if (idmai>-1)
2821 elmai=mgmai->get_mg_tetraid(idmai);
2822 else elmai=NULL;
2823 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2824 if (idtopo>-1)
2825 topo=mggeo->get_mg_volumeid(idtopo);
2826 FEM_TETRA4* tet=new FEM_TETRA4(id,topo,elmai,tab);
2827 tet->change_etat(0,etat);
2828 femmai->ajouter_fem_element3(tet);
2829 }
2830 if (entite=="XFEM_ELEMENT_NOEUD")
2831 {
2832 parse.decode(data.c_str(),"@,@,@,@",param+2);
2833 unsigned long idele=cid(param[2].argument[0]);
2834 unsigned long idtopo=cid(param[3].argument[0]);
2835 unsigned long idn1=cid(param[4].argument[0]);
2836 int etat=atoi(param[5].argument[0].c_str());
2837 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_sommetid(idtopo);
2838 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element0id(idele);
2839 if (mai==NULL) mai=femmai->get_fem_element1id(idele);
2840 if (mai==NULL) mai=femmai->get_fem_element2id(idele);
2841 if (mai==NULL) mai=femmai->get_fem_element3id(idele);
2842 FEM_NOEUD* tab[4];
2843 tab[0]=femmai->get_fem_noeudid(idn1);
2844 XFEM_ELEMENT0* xele=new XFEM_ELEMENT0(id,mai,topo,tab);
2845 femmai->ajouter_xfem_element0(xele);
2846 xele->change_etat(etat);
2847 }
2848 if (entite=="XFEM_SEGMENT2")
2849 {
2850 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
2851 unsigned long idele=cid(param[2].argument[0]);
2852 unsigned long idtopo=cid(param[3].argument[0]);
2853 unsigned long idn1=cid(param[4].argument[0]);
2854 unsigned long idn2=cid(param[5].argument[0]);
2855 int etat=atoi(param[6].argument[0].c_str());
2856 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element1id(idele);
2857 if (mai==NULL) mai=femmai->get_fem_element2id(idele);
2858 if (mai==NULL) mai=femmai->get_fem_element3id(idele);
2859 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_areteid(idtopo);
2860 FEM_NOEUD* tab[4];
2861 tab[0]=femmai->get_fem_noeudid(idn1);
2862 tab[1]=femmai->get_fem_noeudid(idn2);
2863 XFEM_SEGMENT2* xseg=new XFEM_SEGMENT2(id,mai,topo,tab);
2864 femmai->ajouter_xfem_element1(xseg);
2865 xseg->change_etat(etat);
2866 }
2867 if (entite=="XFEM_TRIANGLE3")
2868 {
2869 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
2870 unsigned long idtet=cid(param[2].argument[0]);
2871 unsigned long idtopo=cid(param[3].argument[0]);
2872 unsigned long idn1=cid(param[4].argument[0]);
2873 unsigned long idn2=cid(param[5].argument[0]);
2874 unsigned long idn3=cid(param[6].argument[0]);
2875 int etat=atoi(param[7].argument[0].c_str());
2876 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
2877 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
2878 FEM_NOEUD* tab[3];
2879 tab[0]=femmai->get_fem_noeudid(idn1);
2880 tab[1]=femmai->get_fem_noeudid(idn2);
2881 tab[2]=femmai->get_fem_noeudid(idn3);
2882 XFEM_TRIANGLE3* xtri=new XFEM_TRIANGLE3(id,mai,topo,tab);
2883 femmai->ajouter_xfem_element2(xtri);
2884 xtri->change_etat(etat);
2885 }
2886 if (entite=="XFEM_TETRA4")
2887 {
2888 parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
2889 unsigned long idtet=cid(param[2].argument[0]);
2890 unsigned long idtopo=cid(param[3].argument[0]);
2891 unsigned long idn1=cid(param[4].argument[0]);
2892 unsigned long idn2=cid(param[5].argument[0]);
2893 unsigned long idn3=cid(param[6].argument[0]);
2894 unsigned long idn4=cid(param[7].argument[0]);
2895 int etat=atoi(param[8].argument[0].c_str());
2896 FEM_ELEMENT_MAILLAGE* mai=femmai->get_fem_element3id(idtet);
2897 MG_ELEMENT_TOPOLOGIQUE* topo=mggeo->get_mg_volumeid(idtopo);
2898 FEM_NOEUD* tab[4];
2899 tab[0]=femmai->get_fem_noeudid(idn1);
2900 tab[1]=femmai->get_fem_noeudid(idn2);
2901 tab[2]=femmai->get_fem_noeudid(idn3);
2902 tab[3]=femmai->get_fem_noeudid(idn4);
2903 XFEM_TETRA4* xtet=new XFEM_TETRA4(id,mai,topo,tab);
2904 femmai->ajouter_xfem_element3(xtet);
2905 xtet->change_etat(etat);
2906 }
2907 if (entite=="FEM_TETRA10")
2908 {
2909 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2910 long idtopo=cid(param[2].argument[0]);
2911 long idmai=cid(param[3].argument[0]);
2912 long idn1=cid(param[4].argument[0]);
2913 long idn2=cid(param[5].argument[0]);
2914 long idn3=cid(param[6].argument[0]);
2915 long idn4=cid(param[7].argument[0]);
2916 long idn5=cid(param[8].argument[0]);
2917 long idn6=cid(param[9].argument[0]);
2918 long idn7=cid(param[10].argument[0]);
2919 long idn8=cid(param[11].argument[0]);
2920 long idn9=cid(param[12].argument[0]);
2921 long idn10=cid(param[13].argument[0]);
2922 FEM_NOEUD* tab[10];
2923 tab[0]=femmai->get_fem_noeudid(idn1);
2924 tab[1]=femmai->get_fem_noeudid(idn2);
2925 tab[2]=femmai->get_fem_noeudid(idn3);
2926 tab[3]=femmai->get_fem_noeudid(idn4);
2927 tab[4]=femmai->get_fem_noeudid(idn5);
2928 tab[5]=femmai->get_fem_noeudid(idn6);
2929 tab[6]=femmai->get_fem_noeudid(idn7);
2930 tab[7]=femmai->get_fem_noeudid(idn8);
2931 tab[8]=femmai->get_fem_noeudid(idn9);
2932 tab[9]=femmai->get_fem_noeudid(idn10);
2933 MG_ELEMENT_MAILLAGE* elmai;
2934 if (idmai>-1)
2935 elmai=mgmai->get_mg_tetraid(idmai);
2936 else elmai=NULL;
2937 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2938 if (idtopo>-1)
2939 topo=mggeo->get_mg_volumeid(idtopo);
2940 FEM_TETRA10* tet=new FEM_TETRA10(id,topo,elmai,tab);
2941 femmai->ajouter_fem_element3(tet);
2942 }
2943 if (entite=="FEM_HEXA8")
2944 {
2945 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@",param+2);
2946 long idtopo=cid(param[2].argument[0]);
2947 long idmai=cid(param[3].argument[0]);
2948 long idn1=cid(param[4].argument[0]);
2949 long idn2=cid(param[5].argument[0]);
2950 long idn3=cid(param[6].argument[0]);
2951 long idn4=cid(param[7].argument[0]);
2952 long idn5=cid(param[8].argument[0]);
2953 long idn6=cid(param[9].argument[0]);
2954 long idn7=cid(param[10].argument[0]);
2955 long idn8=cid(param[11].argument[0]);
2956 FEM_NOEUD* tab[8];
2957 tab[0]=femmai->get_fem_noeudid(idn1);
2958 tab[1]=femmai->get_fem_noeudid(idn2);
2959 tab[2]=femmai->get_fem_noeudid(idn3);
2960 tab[3]=femmai->get_fem_noeudid(idn4);
2961 tab[4]=femmai->get_fem_noeudid(idn5);
2962 tab[5]=femmai->get_fem_noeudid(idn6);
2963 tab[6]=femmai->get_fem_noeudid(idn7);
2964 tab[7]=femmai->get_fem_noeudid(idn8);
2965 MG_ELEMENT_MAILLAGE* elmai;
2966 if (idmai>-1)
2967 elmai=mgmai->get_mg_hexaid(idmai);
2968 else elmai=NULL;
2969 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
2970 if (idtopo>-1)
2971 topo=mggeo->get_mg_volumeid(idtopo);
2972 FEM_HEXA8* hex=new FEM_HEXA8(id,topo,elmai,tab);
2973 femmai->ajouter_fem_element3(hex);
2974 }
2975 if (entite=="FEM_HEXA20")
2976 {
2977 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
2978 long idtopo=cid(param[2].argument[0]);
2979 long idmai=cid(param[3].argument[0]);
2980 long idn1=cid(param[4].argument[0]);
2981 long idn2=cid(param[5].argument[0]);
2982 long idn3=cid(param[6].argument[0]);
2983 long idn4=cid(param[7].argument[0]);
2984 long idn5=cid(param[8].argument[0]);
2985 long idn6=cid(param[9].argument[0]);
2986 long idn7=cid(param[10].argument[0]);
2987 long idn8=cid(param[11].argument[0]);
2988 long idn9=cid(param[12].argument[0]);
2989 long idn10=cid(param[13].argument[0]);
2990 long idn11=cid(param[14].argument[0]);
2991 long idn12=cid(param[15].argument[0]);
2992 long idn13=cid(param[16].argument[0]);
2993 long idn14=cid(param[17].argument[0]);
2994 long idn15=cid(param[18].argument[0]);
2995 long idn16=cid(param[19].argument[0]);
2996 long idn17=cid(param[20].argument[0]);
2997 long idn18=cid(param[21].argument[0]);
2998 long idn19=cid(param[22].argument[0]);
2999 long idn20=cid(param[23].argument[0]);
3000 FEM_NOEUD* tab[20];
3001 tab[0]=femmai->get_fem_noeudid(idn1);
3002 tab[1]=femmai->get_fem_noeudid(idn2);
3003 tab[2]=femmai->get_fem_noeudid(idn3);
3004 tab[3]=femmai->get_fem_noeudid(idn4);
3005 tab[4]=femmai->get_fem_noeudid(idn5);
3006 tab[5]=femmai->get_fem_noeudid(idn6);
3007 tab[6]=femmai->get_fem_noeudid(idn7);
3008 tab[7]=femmai->get_fem_noeudid(idn8);
3009 tab[8]=femmai->get_fem_noeudid(idn9);
3010 tab[9]=femmai->get_fem_noeudid(idn10);
3011 tab[10]=femmai->get_fem_noeudid(idn11);
3012 tab[11]=femmai->get_fem_noeudid(idn12);
3013 tab[12]=femmai->get_fem_noeudid(idn13);
3014 tab[13]=femmai->get_fem_noeudid(idn14);
3015 tab[14]=femmai->get_fem_noeudid(idn15);
3016 tab[15]=femmai->get_fem_noeudid(idn16);
3017 tab[16]=femmai->get_fem_noeudid(idn17);
3018 tab[17]=femmai->get_fem_noeudid(idn18);
3019 tab[18]=femmai->get_fem_noeudid(idn19);
3020 tab[19]=femmai->get_fem_noeudid(idn20);
3021 MG_ELEMENT_MAILLAGE* elmai;
3022 if (idmai>-1)
3023 elmai=mgmai->get_mg_hexaid(idmai);
3024 else elmai=NULL;
3025 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3026 if (idtopo>-1)
3027 topo=mggeo->get_mg_volumeid(idtopo);
3028 FEM_HEXA20* hex=new FEM_HEXA20(id,topo,elmai,tab);
3029 femmai->ajouter_fem_element3(hex);
3030 }
3031 if (entite=="FEM_PENTA6")
3032 {
3033 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
3034 long idtopo=cid(param[2].argument[0]);
3035 long idmai=cid(param[3].argument[0]);
3036 long idn1=cid(param[4].argument[0]);
3037 long idn2=cid(param[5].argument[0]);
3038 long idn3=cid(param[6].argument[0]);
3039 long idn4=cid(param[7].argument[0]);
3040 long idn5=cid(param[8].argument[0]);
3041 long idn6=cid(param[9].argument[0]);
3042 FEM_NOEUD* tab[6];
3043 tab[0]=femmai->get_fem_noeudid(idn1);
3044 tab[1]=femmai->get_fem_noeudid(idn2);
3045 tab[2]=femmai->get_fem_noeudid(idn3);
3046 tab[3]=femmai->get_fem_noeudid(idn4);
3047 tab[4]=femmai->get_fem_noeudid(idn5);
3048 tab[5]=femmai->get_fem_noeudid(idn6);
3049 MG_ELEMENT_MAILLAGE* elmai;
3050 if (idmai>-1)
3051 elmai=mgmai->get_mg_pentaid(idmai);
3052 else elmai=NULL;
3053 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3054 if (idtopo>-1)
3055 topo=mggeo->get_mg_volumeid(idtopo);
3056 FEM_PENTA6* pen=new FEM_PENTA6(id,topo,elmai,tab);
3057 femmai->ajouter_fem_element3(pen);
3058 }
3059 if (entite=="FEM_PENTA15")
3060 {
3061 parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@",param+2);
3062 long idtopo=cid(param[2].argument[0]);
3063 long idmai=cid(param[3].argument[0]);
3064 long idn1=cid(param[4].argument[0]);
3065 long idn2=cid(param[5].argument[0]);
3066 long idn3=cid(param[6].argument[0]);
3067 long idn4=cid(param[7].argument[0]);
3068 long idn5=cid(param[8].argument[0]);
3069 long idn6=cid(param[9].argument[0]);
3070 long idn7=cid(param[10].argument[0]);
3071 long idn8=cid(param[11].argument[0]);
3072 long idn9=cid(param[12].argument[0]);
3073 long idn10=cid(param[13].argument[0]);
3074 long idn11=cid(param[14].argument[0]);
3075 long idn12=cid(param[15].argument[0]);
3076 long idn13=cid(param[16].argument[0]);
3077 long idn14=cid(param[17].argument[0]);
3078 long idn15=cid(param[18].argument[0]);
3079 FEM_NOEUD* tab[15];
3080 tab[0]=femmai->get_fem_noeudid(idn1);
3081 tab[1]=femmai->get_fem_noeudid(idn2);
3082 tab[2]=femmai->get_fem_noeudid(idn3);
3083 tab[3]=femmai->get_fem_noeudid(idn4);
3084 tab[4]=femmai->get_fem_noeudid(idn5);
3085 tab[5]=femmai->get_fem_noeudid(idn6);
3086 tab[6]=femmai->get_fem_noeudid(idn7);
3087 tab[7]=femmai->get_fem_noeudid(idn8);
3088 tab[8]=femmai->get_fem_noeudid(idn9);
3089 tab[9]=femmai->get_fem_noeudid(idn10);
3090 tab[10]=femmai->get_fem_noeudid(idn11);
3091 tab[11]=femmai->get_fem_noeudid(idn12);
3092 tab[12]=femmai->get_fem_noeudid(idn13);
3093 tab[13]=femmai->get_fem_noeudid(idn14);
3094 tab[14]=femmai->get_fem_noeudid(idn15);
3095 MG_ELEMENT_MAILLAGE* elmai;
3096 if (idmai>-1)
3097 elmai=mgmai->get_mg_pentaid(idmai);
3098 else elmai=NULL;
3099 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
3100 if (idtopo>-1)
3101 topo=mggeo->get_mg_volumeid(idtopo);
3102 FEM_PENTA15* pen=new FEM_PENTA15(id,topo,elmai,tab);
3103 femmai->ajouter_fem_element3(pen);
3104 }
3105 if (entite=="SOLUTION")
3106 {
3107 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3108 int typeentite=atoi(param[2].argument[0].c_str());
3109 int typesolution=atoi(param[3].argument[0].c_str());
3110 std::string nomsol=param[4].argument[0];
3111 long idmai=cid(param[5].argument[0]);
3112 int nb=atoi(param[6].argument[0].c_str());
3113 std::string chemin=param[7].argument[0];
3114 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
3115 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3116 ajouter_mg_solution(sol);
3117 for (int i=0;i<nb;i++)
3118 sol->change_legende(i,param[8].argument[i]);
3119 }
3120 if (entite=="FEM_SOLUTION")
3121 {
3122 parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
3123 int typeentite=atoi(param[2].argument[0].c_str());
3124 int typesolution=atoi(param[3].argument[0].c_str());
3125 std::string nomsol=param[4].argument[0];
3126 long idmai=cid(param[5].argument[0]);
3127 int nb=atoi(param[6].argument[0].c_str());
3128 std::string chemin=param[7].argument[0];
3129 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
3130 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite,typesolution);
3131 ajouter_fem_solution(sol);
3132 for (int i=0;i<nb;i++)
3133 sol->change_legende(i,param[8].argument[i]);
3134 }
3135 #ifdef WINDOWS_VERSION
3136 if (entite=="CAD4FE_MCSEGMENT")
3137 {
3138 parse.decode(data.c_str(),"@,@,@",param+2);
3139 long idtopo=cid(param[2].argument[0]);
3140 long idn1=cid(param[3].argument[0]);
3141 long idn2=cid(param[4].argument[0]);
3142 CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3143 CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3144 MG_ELEMENT_TOPOLOGIQUE* topo;
3145 if (idtopo>-1)
3146 {
3147 topo=mggeo->get_mg_areteid(idtopo);
3148 if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
3149 if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
3150 }
3151 else topo=NULL;
3152 CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
3153 mgmai->ajouter_mg_segment(seg);
3154 }
3155 if (entite=="CAD4FE_MCNODE")
3156 {
3157 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
3158 long idRefTopo=cid(param[2].argument[0]);
3159 long idMCTopo=cid(param[3].argument[0]);
3160 double x=atof(param[4].argument[0].c_str());
3161 double y=atof(param[5].argument[0].c_str());
3162 double z=atof(param[6].argument[0].c_str());
3163 MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
3164 if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
3165 if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
3166 if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
3167 if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
3168 MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
3169 if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
3170 if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
3171 if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
3172 if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
3173
3174 if (mcTopo->get_dimension()==0)
3175 {
3176 if (updatedMergedRefVertices == false)
3177 {
3178 for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3179 itMergedRefVertices != mapMergedRefVertices.end();
3180 itMergedRefVertices++)
3181 {
3182 CAD4FE::MCVertex * v = itMergedRefVertices->first;
3183 MG_SOMMET * refV = NULL;
3184 unsigned long id = itMergedRefVertices->second;
3185 refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3186 v->MergeRefVertex(refV);
3187 }
3188
3189 updatedMergedRefVertices = true;
3190 }
3191 }
3192
3193 CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
3194 mgmai->ajouter_mg_noeud(noeud);
3195 }
3196 if (entite=="CAD4FE_MCTRIANGLE")
3197 {
3198 parse.decode(data.c_str(),"@,@,@,@",param+2);
3199 long idtopo=cid(param[2].argument[0]);
3200 long idn1=cid(param[3].argument[0]);
3201 long idn2=cid(param[4].argument[0]);
3202 long idn3=cid(param[5].argument[0]);
3203 CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
3204 CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
3205 CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
3206 CAD4FE::MCSegment* mgsegment[3];
3207 CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
3208 // la topo. d'un MCTriangle est obligatoirement une MCFace
3209 CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
3210 for (int i=0;i<3;i++)
3211 {
3212 mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
3213 if (mgsegment[i]==NULL)
3214 {
3215 mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
3216 mgmai->ajouter_mg_segment(mgsegment[i]);
3217 }
3218 }
3219 CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
3220 mgmai->ajouter_mg_triangle(triangle);
3221 }
3222 #endif
3223 }
3224 }
3225 while (param[0].argument[0]!="FIN");
3226
3227 for (int i=0;i<volumemince.size();i=i+3)
3228 {
3229 MG_VOLUME *vol=mggeo->get_mg_volumeid(volumemince[i]);
3230 MG_FACE* face1=mggeo->get_mg_faceid(volumemince[i+1]);
3231 MG_FACE* face2=mggeo->get_mg_faceid(volumemince[i+2]);
3232 vol->ajouter_face_correspondante(face1,face2);
3233 }
3234
3235
3236 LISTE_MG_ARBRE::iterator itarbre;
3237 for (MG_ARBRE* arb=get_premier_arbre(itarbre);arb!=NULL;arb=get_suivant_arbre(itarbre))
3238 {
3239 LISTE_MG_ASSEMBLAGE::iterator itass;
3240 for (MG_ASSEMBLAGE *ass=arb->get_premier_assemblage(itass);ass!=NULL;ass=arb->get_suivant_assemblage(itass))
3241 ass->ini_donne(arb);
3242 }
3243 LISTE_MG_GEOMETRIE::iterator itgeo;
3244 for (MG_GEOMETRIE* geo=get_premier_geometrie(itgeo);geo;geo=get_suivant_geometrie(itgeo))
3245 {
3246 LISTE_MG_SOMMET::iterator itsom;
3247 for (MG_SOMMET* som=geo->get_premier_sommet(itsom);som;som=geo->get_suivant_sommet(itsom))
3248 if (som->est_un_sommet_noeud())
3249 {
3250 MG_SOMMET_NOEUD* somno=(MG_SOMMET_NOEUD*)som;
3251 unsigned long idnoeud=somno->get_id_mg_noeud();
3252 MG_NOEUD* noeud;
3253 LISTE_MG_MAILLAGE::iterator itmai;
3254 for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3255 if (mai->get_mg_noeudid(idnoeud)!=NULL) noeud=mai->get_mg_noeudid(idnoeud);
3256 somno->change_mg_noeud(noeud);
3257 }
3258 LISTE_MG_COQUE::iterator itcoq;
3259 for (MG_COQUE* coq=geo->get_premier_coque(itcoq);coq;coq=geo->get_suivant_coque(itcoq))
3260 if (coq->est_une_coque_element())
3261 {
3262 MG_COQUE_ELEMENT* coque=(MG_COQUE_ELEMENT*)coq;
3263 int nbele=coque->get_nb_liste_id();
3264 MG_MAILLAGE* mgmai=NULL;
3265 for (int i=0;i<nbele;i++)
3266 {
3267 unsigned long eleid=coque->get_liste_id(i);
3268 if (i==0)
3269 {
3270 LISTE_MG_MAILLAGE::iterator itmai;
3271 for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3272 {
3273 if (mai->get_mg_triangleid(eleid)!=NULL) mgmai=mai;
3274 if (mai->get_mg_quadrangleid(eleid)!=NULL) mgmai=mai;
3275 }
3276 }
3277 MG_ELEMENT_MAILLAGE* ele=NULL;
3278 if (ele==NULL) ele=mgmai->get_mg_triangleid(eleid);
3279 if (ele==NULL) ele=mgmai->get_mg_quadrangleid(eleid);
3280 coque->ajouter_element(ele);
3281 }
3282
3283 }
3284 LISTE_MG_POUTRE::iterator itpou;
3285 for (MG_POUTRE* pou=geo->get_premier_poutre(itpou);pou;pou=geo->get_suivant_poutre(itpou))
3286 if (pou->est_une_poutre_element())
3287 {
3288 MG_POUTRE_ELEMENT* poutre=(MG_POUTRE_ELEMENT*)pou;
3289 int nbele=poutre->get_nb_liste_id();
3290 MG_MAILLAGE* mgmai=NULL;
3291 for (int i=0;i<nbele;i++)
3292 {
3293 unsigned long eleid=poutre->get_liste_id(i);
3294 if (i==0)
3295 {
3296 LISTE_MG_MAILLAGE::iterator itmai;
3297 for (MG_MAILLAGE* mai=get_premier_mg_maillage(itmai);mai;mai=get_suivant_mg_maillage(itmai))
3298 {
3299 if (mai->get_mg_segmentid(eleid)!=NULL) mgmai=mai;
3300 }
3301 }
3302 MG_ELEMENT_MAILLAGE* ele=NULL;
3303 if (ele==NULL) ele=mgmai->get_mg_segmentid(eleid);
3304 poutre->ajouter_element(ele);
3305 }
3306
3307 }
3308 }
3309 #ifdef WINDOWS_VERSION
3310 if (updatedMergedRefVertices == false)
3311 {
3312 for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
3313 itMergedRefVertices != mapMergedRefVertices.end();
3314 itMergedRefVertices++)
3315 {
3316 CAD4FE::MCVertex * v = itMergedRefVertices->first;
3317 MG_SOMMET * refV = NULL;
3318 unsigned long id = itMergedRefVertices->second;
3319 refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
3320 v->MergeRefVertex(refV);
3321 }
3322
3323 updatedMergedRefVertices = true;
3324 }
3325
3326 #endif
3327 fclose(in);
3328 return 1;
3329 }
3330
3331
3332
3333