ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_file.cpp
Revision: 187
Committed: Tue Jul 7 21:34:10 2009 UTC (15 years, 10 months ago) by francois
Original Path: magic/lib/fichier/fichier/src/mg_file.cpp
File size: 56229 byte(s)
Log Message:
Parametre epsilon global pour la sensibilite de fermeture du BREP sous OpenCascade

File Contents

# User Rev Content
1 foucault 27 //------------------------------------------------------------
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 francois 169 #include <string.h>
30 foucault 27 #include "mg_file.h"
31     #include "pars_argument.h"
32     #include "parse.h"
33 sablaoui 133 #ifdef BREP_STEP
34 foucault 27 #include "step_surface.h"
35     #include "step_courbe.h"
36     #include "step_point.h"
37 sablaoui 133 #endif
38     #ifdef BREP_SAT
39 foucault 27 #include "acis_surface.h"
40     #include "acis_courbe.h"
41     #include "acis_point.h"
42 sablaoui 133 #endif
43     #ifdef BREP_SLD
44 foucault 27 #include "sld_point.h"
45     #include "sld_courbe.h"
46     #include "sld_surface.h"
47     #include "sld_fonction.h"
48 sablaoui 133 #endif
49 foucault 27 #include "lc_point.h"
50 sablaoui 133
51 souaissa 114 //OCC
52 sablaoui 133 #ifdef BREP_OCC
53 francois 182 #include "occ_surface.h"
54     #include "occ_point.h"
55     #include "occ_courbe.h"
56     #include "occ_fonction1.h"
57 sablaoui 133 #include "TopoDS_Shape.hxx"
58     #include "TopoDS.hxx"
59     #endif
60 foucault 27 //---------------------------------------------------------------------------
61     // CAD4FE Headers
62 sablaoui 133 #ifdef WINDOWS_VERSION
63 foucault 27 #include "CAD4FE_MCEdge.h"
64     #include "CAD4FE_MCFace.h"
65     #include "CAD4FE_MCVertex.h"
66     #include "CAD4FE_PolySurface.h"
67     #include "CAD4FE_PolyCurve.h"
68     #include "CAD4FE_MCNode.h"
69     #include "CAD4FE_MCSegment.h"
70     #include "CAD4FE_MCTriangle.h"
71     #include "CAD4FE_m3d_MCTriangle.h"
72 sablaoui 133 #endif
73 foucault 27 //---------------------------------------------------------------------------
74    
75    
76     //---------------------------------------------------------------------------
77     #pragma package(smart_init)
78    
79     MG_FILE::MG_FILE():MG_GESTIONNAIRE()
80     {
81     }
82    
83     MG_FILE::MG_FILE(char* chemin):MG_GESTIONNAIRE()
84     {
85     code_de_lecture=lire(chemin);
86     }
87    
88     MG_FILE::~MG_FILE()
89     {
90     }
91    
92     int MG_FILE::get_code_de_lecture(void)
93     {
94     return code_de_lecture;
95     }
96    
97     long MG_FILE::cid(std::string str)
98     {
99     const char *p=str.c_str();
100     if (*p=='$') return atol(p+1);
101     return -1;
102     }
103    
104     int MG_FILE::lire(char* chemin)
105     {
106     FILE *in;
107     char ligne[3000];
108     in=fopen(chemin,"rt");
109     if (in==NULL) return 0;
110     PARS_ARGUMENT param[100];
111     PARSE parse;
112    
113 francois 174 MG_GEOMETRIE *mggeo;
114     #ifdef WINDOWS_VERSION
115     std::multimap<CAD4FE::MCVertex*, unsigned long> mapMergedRefVertices;
116 francois 136 #endif
117 foucault 27 bool updatedMergedRefVertices = false;
118 souaissa 114
119 foucault 27 do
120     {
121     int ierr;
122     std::string ligne=parse.lire(in,';',&ierr);
123     parse.decode(ligne.c_str(),"@;",param);
124     const char *chaine=param[0].argument[0].c_str();
125     if ((chaine[0]=='/') && (chaine[1]=='/'))
126     {
127     if ((chaine[2]=='*')&&(chaine[3]=='i'))
128     {
129     unsigned long id;
130     sscanf(chaine,"//*i:%lu;",&id);
131     entiteidmax=id;
132     }
133     }
134     else if (param[0].argument[0]!="FIN")
135     {
136     parse.decode(ligne.c_str(),"%@=@(@);",param);
137     std::string entite=param[1].argument[0];
138     long id=atol(param[0].argument[0].c_str());
139     std::string data=param[2].argument[0] ;
140     MG_MAILLAGE *mgmai;
141     FEM_MAILLAGE *femmai;
142     if (entite=="GEOMETRIE")
143     {
144     parse.decode(data.c_str(),"@,@,@,@",param+2);
145     double unite=atof(param[2].argument[0].c_str());
146     std::string typegeo=param[3].argument[0];
147     std::string chemin=param[4].argument[0];
148     #ifdef BREP_STEP
149     if (typegeo=="STEP")
150     {
151     fichstep.change_nom((char *)chemin.c_str());
152     int code=fichstep.lire();
153     if (code==0) return 0;
154     mggeo=new MG_GEOMETRIE("STEP",id,fichstep.get_nom(),unite);
155     ajouter_mg_geometrie(mggeo);
156     }
157     #endif
158     #ifdef BREP_SAT
159     if (typegeo=="ACIS")
160     {
161     fichsat.change_nom((char *)chemin.c_str());
162     int code=fichsat.lire();
163     if (code==0) return 0;
164     mggeo=new MG_GEOMETRIE("ACIS",id,fichsat.get_nom(),unite);
165     ajouter_mg_geometrie(mggeo);
166     }
167     #endif
168     #ifdef BREP_SLD
169     if (typegeo=="SLD")
170     {
171     fonction->Connection();
172     fonction->OuvrirFichier((char *)chemin.c_str() );
173     mggeo=new MG_GEOMETRIE("SLD",id,chemin.c_str(),unite);
174     ajouter_mg_geometrie(mggeo);
175     ouvertsld=1;
176     }
177     #endif
178 souaissa 114
179 sablaoui 133 #ifdef BREP_OCC
180 souaissa 114 if (typegeo=="OCC")
181     {
182 francois 136 fonction1->OuvrirFichier((char *)chemin.c_str() );
183 sablaoui 133 mggeo=new MG_GEOMETRIE("OCC",id,chemin.c_str(),unite);
184 souaissa 114 ajouter_mg_geometrie(mggeo);
185     }
186     #endif
187    
188 foucault 27 std::string nommat="";
189     if (param[5].argument[0]!="")
190 souaissa 114 nommat=param[5].argument[0];
191     mggeo->change_gest_materiau((char*)nommat.c_str());
192 foucault 27 }
193 francois 187 if (entite=="GEOMETRIE_EPS")
194     {
195     parse.decode(data.c_str(),"@",param+2);
196     double val=atof((char*)param[2].argument[0].c_str());
197     mggeo->change_valeur_precision(val);
198     }
199     if (entite=="VOLUME")
200 foucault 27 {
201     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
202     MG_VOLUME* mgvol=new MG_VOLUME(param[2].argument[0],id);
203     mggeo->ajouter_mg_volume(mgvol);
204     int nummat=atoi((char*)param[4].argument[0].c_str());
205     mgvol->change_num_materiau(nummat);
206     int nb=atoi(param[5].argument[0].c_str());
207     if (nb!=0)
208     {
209     for (int i=0;i<nb;i++)
210     {
211     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
212     char nom[3];
213     double val;
214     strcpy(nom,param[7].argument[0].c_str());
215     val=atof(param[8].argument[0].c_str());
216     mgvol->ajouter_ccf(nom,val);
217     }
218     }
219     }
220     if (entite=="COQUE")
221     {
222     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
223     MG_COQUE* mgcoq=new MG_COQUE(param[2].argument[0],id);
224     mggeo->ajouter_mg_coque(mgcoq);
225     int nummat=atoi((char*)param[4].argument[0].c_str());
226     mgcoq->change_num_materiau(nummat);
227     int nb=atoi(param[5].argument[0].c_str());
228     if (nb!=0)
229     {
230     for (int i=0;i<nb;i++)
231     {
232     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
233     char nom[3];
234     double val;
235     strcpy(nom,param[7].argument[0].c_str());
236     val=atof(param[8].argument[0].c_str());
237     mgcoq->ajouter_ccf(nom,val);
238     }
239     }
240     }
241     if (entite=="POUTRE")
242     {
243     parse.decode(data.c_str(),"@,@,@,@,(&)",param+2);
244     MG_POUTRE* mgpoutre=new MG_POUTRE(param[2].argument[0],id);
245     mggeo->ajouter_mg_poutre(mgpoutre);
246     int nummat=atoi((char*)param[4].argument[0].c_str());
247     mgpoutre->change_num_materiau(nummat);
248     int nb=atoi(param[5].argument[0].c_str());
249     if (nb!=0)
250     {
251     for (int i=0;i<nb;i++)
252     {
253     parse.decode(param[6].argument[i].c_str(),"(@,@)",param+7);
254     char nom[3];
255     double val;
256     strcpy(nom,param[7].argument[0].c_str());
257     val=atof(param[8].argument[0].c_str());
258     mgpoutre->ajouter_ccf(nom,val);
259     }
260     }
261     }
262     if (entite=="COQUILLE")
263     {
264     parse.decode(data.c_str(),"@,@",param+2);
265     long ident=cid(param[2].argument[0]);
266     MG_VOLUME* mgvol=mggeo->get_mg_volumeid(ident);
267     MG_COQUE* mgcoq=mggeo->get_mg_coqueid(ident);
268     if (mgvol!=NULL)
269     {
270     MG_COQUILLE* mgcoq=new MG_COQUILLE(id,mgvol);
271     mggeo->ajouter_mg_coquille(mgcoq,mgvol);
272     }
273     if (mgcoq!=NULL)
274     {
275     MG_COQUILLE* mgcoquille=new MG_COQUILLE(id,mgcoq);
276     mggeo->ajouter_mg_coquille(mgcoquille,mgcoq);
277     }
278    
279     }
280     #ifdef BREP_STEP
281     if (entite=="SURFACE_STEP")
282     {
283     parse.decode(data.c_str(),"@",param+2);
284     long idstepsuf=atol(param[2].argument[0].c_str());
285     ST_SURFACE *stsurf=fichstep.lst_surface.getid(idstepsuf);
286     STEP_SURFACE* stepsurf=new STEP_SURFACE(id,stsurf);
287     mggeo->ajouter_mg_surface(stepsurf);
288     }
289     if (entite=="COURBE_STEP")
290     {
291     parse.decode(data.c_str(),"@",param+2);
292     long idstepcur=atol(param[2].argument[0].c_str());
293     ST_COURBE *stcur=fichstep.lst_courbe.getid(idstepcur);
294     STEP_COURBE* stepcur=new STEP_COURBE(id,stcur);
295     mggeo->ajouter_mg_courbe(stepcur);
296     }
297    
298     if (entite=="POINT_STEP")
299     {
300     parse.decode(data.c_str(),"@",param+2);
301     long idsteppt=atol(param[2].argument[0].c_str());
302     ST_POINT *stpt=fichstep.lst_point.getid(idsteppt);
303     STEP_POINT* steppt=new STEP_POINT(id,stpt);
304     mggeo->ajouter_mg_point(steppt);
305     }
306    
307     #endif
308     #ifdef BREP_SAT
309     if (entite=="SURFACE_SAT")
310     {
311     parse.decode(data.c_str(),"@",param+2);
312     long idsatsuf=atol(param[2].argument[0].c_str());
313     SAT_SURFACE *satsurf=fichsat.lst_surface.getid(idsatsuf);
314     ACIS_SURFACE* acissurf=new ACIS_SURFACE(id,satsurf);
315     mggeo->ajouter_mg_surface(acissurf);
316     }
317     if (entite=="COURBE_SAT")
318     {
319     parse.decode(data.c_str(),"@",param+2);
320     long idsatcur=atol(param[2].argument[0].c_str());
321     SAT_COURBE *satcur=fichsat.lst_courbe.getid(idsatcur);
322     ACIS_COURBE* aciscur=new ACIS_COURBE(id,satcur);
323     mggeo->ajouter_mg_courbe(aciscur);
324     }
325    
326     if (entite=="POINT_SAT")
327     {
328     parse.decode(data.c_str(),"@",param+2);
329     long idsatpt=atol(param[2].argument[0].c_str());
330     SAT_POINT *satpt=fichsat.lst_point.getid(idsatpt);
331     ACIS_POINT* acispt=new ACIS_POINT(id,satpt);
332     mggeo->ajouter_mg_point(acispt);
333     }
334    
335     #endif
336     #ifdef BREP_SLD
337     if (entite=="SURFACE_SLD")
338     {
339     parse.decode(data.c_str(),"@",param+2);
340     CComPtr<IFace2> swface;
341     char* idsld=(char*)param[2].argument[0].c_str();
342     SLD_SURFACE* sldsurf=new SLD_SURFACE(id,idsld,*fonction);
343     mggeo->ajouter_mg_surface(sldsurf);
344     }
345     if (entite=="COURBE_SLD")
346     {
347     parse.decode(data.c_str(),"@",param+2);
348     CComPtr<IEdge> swedge;
349     char* idsld=(char*)param[2].argument[0].c_str();
350     SLD_COURBE* sldcrb=new SLD_COURBE(id,idsld,*fonction);
351     mggeo->ajouter_mg_courbe(sldcrb);
352     }
353    
354     if (entite=="POINT_SLD")
355     {
356     parse.decode(data.c_str(),"@",param+2);
357     CComPtr<IVertex> swvertex;
358     char* idsld=(char*)param[2].argument[0].c_str();
359     SLD_POINT* sldpoint=new SLD_POINT(id,idsld,*fonction);
360     mggeo->ajouter_mg_point(sldpoint);
361     }
362    
363     #endif
364 souaissa 114
365     #ifdef BREP_OCC
366     if (entite=="SURFACE_OCC")
367     {
368     parse.decode(data.c_str(),"@",param+2);
369 sablaoui 133 long idocc=atol(param[2].argument[0].c_str());
370     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
371     TopoDS_Face occface=TopoDS::Face(occshape);
372     OCC_SURFACE* occsurf=new OCC_SURFACE(id,occface, *fonction1);
373 souaissa 114 mggeo->ajouter_mg_surface(occsurf);
374     }
375     if (entite=="COURBE_OCC")
376     {
377     parse.decode(data.c_str(),"@",param+2);
378 sablaoui 133 long idocc=atol(param[2].argument[0].c_str());
379     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
380     TopoDS_Edge occedge=TopoDS::Edge(occshape);
381     OCC_COURBE* occcrb=new OCC_COURBE(id,occedge, *fonction1);
382 souaissa 114 mggeo->ajouter_mg_courbe(occcrb);
383     }
384     if (entite=="POINT_OCC")
385     {
386     parse.decode(data.c_str(),"@",param+2);
387 sablaoui 133 long idocc=atol(param[2].argument[0].c_str());
388     const TopoDS_Shape& occshape=fonction1->GetShape(idocc);
389     TopoDS_Vertex occvertex=TopoDS::Vertex(occshape);
390     OCC_POINT* occpoint=new OCC_POINT(id,occvertex, *fonction1);
391 souaissa 114 mggeo->ajouter_mg_point(occpoint);
392     }
393 francois 174 #endif
394 francois 136 #ifdef WINDOWS_VERSION
395 foucault 27 if (entite=="CAD4FE_POLYCURVE")
396     {
397 francois 174 CAD4FE::PolyCurve * polycurve = NULL;
398     parse.decode(data.c_str(),"@,(&)",param+2);
399     int nb = atoi(param[2].argument[0].c_str());
400    
401     if (nb == 0)
402     {
403     printf("PolyCurve %d is formed with reference vertex : ", id);
404     parse.decode(param[3].argument[0].c_str(),"@",param+4);
405     int idRefVertex;
406     idRefVertex=cid(param[4].argument[0].c_str());
407     printf("%d ;\n ", idRefVertex);
408     MG_SOMMET * refVertex = mggeo->get_mg_sommetid(idRefVertex);
409     polycurve = new CAD4FE::PolyCurve(refVertex);
410     }
411     else
412     {
413     printf("PolyCurve %d is formed with reference edges : ", id);
414 foucault 27 polycurve = new CAD4FE::PolyCurve;
415     for (int i=0;i<nb;i++)
416     {
417     parse.decode(param[3].argument[i].c_str(),"@",param+4);
418     int idRefEdge;
419     idRefEdge=cid(param[4].argument[0].c_str());
420     printf("%d ; ", idRefEdge);
421     MG_ARETE * refEdge = mggeo->get_mg_areteid(idRefEdge);
422 francois 174 CAD4FE::PolyCurve tmpPC(refEdge);
423 foucault 27 polycurve->Merge(tmpPC);
424     }
425     printf("\n");
426 francois 174 }
427    
428 foucault 27 polycurve->change_id(id);
429     mggeo->ajouter_mg_courbe(polycurve);
430     }
431    
432    
433     if (entite=="CAD4FE_POLYSURFACE")
434     {
435     CAD4FE::PolySurface * polysurface = new CAD4FE::PolySurface;
436     polysurface->change_id(id);
437     mggeo->ajouter_mg_surface(polysurface);
438    
439     parse.decode(data.c_str(),"@,(&)",param+2);
440    
441     int nb = atoi(param[2].argument[0].c_str());
442     printf("PolySurface %d is formed with reference faces : ", id);
443     for (int i=0;i<nb;i++)
444     {
445     parse.decode(param[3].argument[i].c_str(),"@",param+4);
446     int idRefFace;
447     idRefFace=cid(param[4].argument[0].c_str());
448     printf("%d ; ", idRefFace);
449    
450     MG_FACE * refFace = mggeo->get_mg_faceid(idRefFace);
451     CAD4FE::PolySurface tmpSF(refFace);
452     polysurface->Merge(tmpSF);
453     }
454    
455     printf("\n");
456     }
457     if (entite=="CAD4FE_MCEDGE")
458     {
459     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
460    
461     std::string idOriginal = param[2].argument[0];
462     long idPolyCurve=cid(param[3].argument[0]);
463     CAD4FE::PolyCurve * polycurve = (CAD4FE::PolyCurve *) mggeo->get_mg_courbeid(idPolyCurve);
464    
465     // sense is not used because a MCEdge always has
466     // a sense = 1 !
467     // (because polycurve domain is equal to mcEdge domain)
468     CAD4FE::MCEdge * mcEdge = new CAD4FE::MCEdge(idOriginal, polycurve);
469     mcEdge->change_id(id);
470     mggeo->ajouter_mg_arete(mcEdge);
471    
472     int nb=atoi(param[7].argument[0].c_str());
473     if (nb!=0)
474     {
475     for (int i=0;i<nb;i++)
476     {
477     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
478     char nom[3];
479     double val;
480     strcpy(nom,param[9].argument[0].c_str());
481     val=atof(param[10].argument[0].c_str());
482     mcEdge->ajouter_ccf(nom,val);
483     }
484     }
485     }
486     if (entite=="CAD4FE_MCFACE")
487     {
488 foucault 64 parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
489 foucault 27
490     std::string idOriginal = param[2].argument[0];
491     long idPolySurface=cid(param[3].argument[0]);
492     CAD4FE::PolySurface * polysurface = (CAD4FE::PolySurface *) mggeo->get_mg_surfaceid(idPolySurface);
493    
494     CAD4FE::MCFace * mcFace = new CAD4FE::MCFace(idOriginal, polysurface);
495     mcFace->change_id(id);
496     mggeo->ajouter_mg_face(mcFace);
497    
498     int nb=atoi(param[6].argument[0].c_str());
499     if (nb!=0)
500     {
501     for (int i=0;i<nb;i++)
502     {
503     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
504     char nom[3];
505     double val;
506     strcpy(nom,param[8].argument[0].c_str());
507     val=atof(param[9].argument[0].c_str());
508     mcFace->ajouter_ccf(nom,val);
509     }
510     }
511     }
512     if (entite=="CAD4FE_MCVERTEX")
513     {
514     parse.decode(data.c_str(),"@,@,@,(&),@,(&)",param+2);
515     std::string idOriginal = param[2].argument[0];
516     long idsom=cid(param[3].argument[0]);
517     MG_SOMMET * mgsom = mggeo->get_mg_sommetid(idsom);
518     CAD4FE::MCVertex * mcVertex = new CAD4FE::MCVertex(mgsom);
519     mcVertex->change_id(id);
520     mggeo->ajouter_mg_sommet(mcVertex);
521     int nb_ref_vertex=atoi(param[4].argument[0].c_str());
522     if (nb_ref_vertex!=0)
523     {
524     for (int i=0;i<nb_ref_vertex;i++)
525     {
526     unsigned long idRefVertex=cid(param[5].argument[i]);
527     mcVertex->GetMergedRefVertices()[idRefVertex] = NULL;
528     mapMergedRefVertices.insert(std::make_pair(mcVertex,idRefVertex));
529     }
530     }
531     int nb_ccf=atoi(param[4+2].argument[0].c_str());
532     if (nb_ccf!=0)
533     {
534     for (int i=0;i<nb_ccf;i++)
535     {
536     parse.decode(param[5+2].argument[i].c_str(),"(@,@)",param+6+2);
537     char nom_ccf[3];
538     double val_ccf;
539     strcpy(nom_ccf,param[6+2].argument[0].c_str());
540     val_ccf=atof(param[7+2].argument[0].c_str());
541     mgsom->ajouter_ccf(nom_ccf,val_ccf);
542     }
543     }
544     }
545 francois 136 #endif
546 foucault 27 if (entite=="FACE")
547     {
548     parse.decode(data.c_str(),"@,@,(@),@,@,(&)",param+2);
549     long idsurf=cid(param[3].argument[0]);
550     int sens=atoi(param[5].argument[0].c_str());
551     MG_SURFACE* mgsurf=mggeo->get_mg_surfaceid(idsurf);
552     MG_FACE* mgface=new MG_FACE(param[2].argument[0],id,mgsurf,sens);
553     mggeo->ajouter_mg_face(mgface);
554     int nb=atoi(param[6].argument[0].c_str());
555     if (nb!=0)
556     {
557     for (int i=0;i<nb;i++)
558     {
559     parse.decode(param[7].argument[i].c_str(),"(@,@)",param+8);
560     char nom[3];
561     double val;
562     strcpy(nom,param[8].argument[0].c_str());
563     val=atof(param[9].argument[0].c_str());
564     mgface->ajouter_ccf(nom,val);
565     }
566     }
567     }
568     if (entite=="COFACE")
569     {
570     parse.decode(data.c_str(),"@,@,@",param+2);
571     long idface=cid(param[2].argument[0]);
572     long idcoq=cid(param[3].argument[0]);
573     int sens=atoi(param[4].argument[0].c_str());
574     MG_FACE* mgface=mggeo->get_mg_faceid(idface);
575     MG_COQUILLE* mgcoq=mggeo->get_mg_coquilleid(idcoq);
576     MG_COFACE* mgcoface=mggeo->ajouter_mg_coface(id,mgface,mgcoq,sens);
577     mgcoq->ajouter_mg_coface(mgcoface);
578     }
579     if (entite=="BOUCLE")
580     {
581     parse.decode(data.c_str(),"@,(@)",param+2);
582     long ident=cid(param[2].argument[0]);
583     MG_FACE* mgface=mggeo->get_mg_faceid(ident);
584     MG_POUTRE* mgpoutre=mggeo->get_mg_poutreid(ident);
585     if (mgface!=NULL)
586     {
587     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgface);
588     mggeo->ajouter_mg_boucle(mgbou,mgface);
589     }
590     if (mgpoutre!=NULL)
591     {
592     MG_BOUCLE* mgbou=new MG_BOUCLE(id,mgpoutre);
593     mggeo->ajouter_mg_boucle(mgbou,mgpoutre);
594     }
595     }
596     if (entite=="POINT")
597     {
598     parse.decode(data.c_str(),"@,@,@",param+2);
599     double xyz[3];
600     xyz[0]=atof(param[2].argument[0].c_str());
601     xyz[1]=atof(param[3].argument[0].c_str());
602     xyz[2]=atof(param[4].argument[0].c_str());
603     LC_POINT* point=new LC_POINT(id,xyz);
604     mggeo->ajouter_mg_point(point);
605     }
606     if (entite=="SOMMET")
607     {
608     parse.decode(data.c_str(),"@,@,@,(&)",param+2);
609     long idpoint=cid(param[3].argument[0]);
610     MG_POINT* mgpt=mggeo->get_mg_pointid(idpoint);
611     MG_SOMMET* mgsom=new MG_SOMMET(param[2].argument[0],id,mgpt);
612     mggeo->ajouter_mg_sommet(mgsom);
613     int nb=atoi(param[4].argument[0].c_str());
614     if (nb!=0)
615     {
616     for (int i=0;i<nb;i++)
617     {
618     parse.decode(param[5].argument[i].c_str(),"(@,@)",param+6);
619     char nom[3];
620     double val;
621     strcpy(nom,param[6].argument[0].c_str());
622     val=atof(param[7].argument[0].c_str());
623     mgsom->ajouter_ccf(nom,val);
624     }
625     }
626     }
627     if (entite=="ARETE")
628     {
629     parse.decode(data.c_str(),"@,@,@,@,@,@,(&)",param+2);
630     long idcur=cid(param[3].argument[0]);
631     int sens=atoi(param[6].argument[0].c_str());
632     MG_COURBE* mgcur=mggeo->get_mg_courbeid(idcur);
633     MG_ARETE* mgarete=new MG_ARETE(param[2].argument[0],id,mgcur,sens);
634     mggeo->ajouter_mg_arete(mgarete);
635     int nb=atoi(param[7].argument[0].c_str());
636     if (nb!=0)
637     {
638     for (int i=0;i<nb;i++)
639     {
640     parse.decode(param[8].argument[i].c_str(),"(@,@)",param+9);
641     char nom[3];
642     double val;
643     strcpy(nom,param[9].argument[0].c_str());
644     val=atof(param[10].argument[0].c_str());
645     mgarete->ajouter_ccf(nom,val);
646     }
647     }
648     }
649     if (entite=="COSOMMET")
650     {
651     parse.decode(data.c_str(),"@,@,@",param+2);
652     long idsom=cid(param[2].argument[0]);
653     long idarete=cid(param[3].argument[0]);
654     int num=atoi(param[4].argument[0].c_str());
655     MG_SOMMET* mgsom=mggeo->get_mg_sommetid(idsom);
656     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
657     MG_COSOMMET* mgcosom=mggeo->ajouter_mg_cosommet(id,mgarete,mgsom);
658     if (num==1) mgarete->changer_cosommet1(mgcosom);
659     if (num==2) mgarete->changer_cosommet2(mgcosom);
660     }
661     if (entite=="COARETE")
662     {
663     parse.decode(data.c_str(),"@,@,@",param+2);
664     long idarete=cid(param[2].argument[0]);
665     long idboucle=cid(param[3].argument[0]);
666     int sens=atoi(param[4].argument[0].c_str());
667     MG_ARETE* mgarete=mggeo->get_mg_areteid(idarete);
668     MG_BOUCLE* mgboucle=mggeo->get_mg_boucleid(idboucle);
669     MG_COARETE* mgcoarete=mggeo->ajouter_mg_coarete(id,mgarete,mgboucle,sens);
670     mgboucle->ajouter_mg_coarete(mgcoarete);
671     }
672     if (entite=="VISU_COURBE")
673     {
674     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
675     double xyz1[3];
676     double xyz2[3];
677     xyz1[0]=atof(param[2].argument[0].c_str());
678     xyz1[1]=atof(param[3].argument[0].c_str());
679     xyz1[2]=atof(param[4].argument[0].c_str());
680     xyz2[0]=atof(param[5].argument[0].c_str());
681     xyz2[1]=atof(param[6].argument[0].c_str());
682     xyz2[2]=atof(param[7].argument[0].c_str());
683     MG_VISU_COURBE* mgcrb=new MG_VISU_COURBE(id,xyz1,xyz2);
684     mggeo->ajouter_mg_visu_courbe(mgcrb);
685     }
686     if (entite=="MAILLAGE")
687     {
688     parse.decode(data.c_str(),"@",param+2);
689     long idgeo=cid(param[2].argument[0]);
690     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
691     mgmai=new MG_MAILLAGE(id,mggeo);
692     ajouter_mg_maillage(mgmai);
693     }
694     if (entite=="FEM_MAILLAGE")
695     {
696     parse.decode(data.c_str(),"@,@,@",param+2);
697     int degre=atoi(param[2].argument[0].c_str());
698     long idmai=cid(param[3].argument[0]);
699     long idgeo=cid(param[4].argument[0]);
700     MG_GEOMETRIE* mggeo=get_mg_geometrieid(idgeo);
701     MG_MAILLAGE* mgmai=get_mg_maillageid(idmai);
702     femmai=new FEM_MAILLAGE(id,mggeo,mgmai,degre);
703     ajouter_fem_maillage(femmai);
704     }
705     if (entite=="NOEUD")
706     {
707 francois 35 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
708 foucault 27 long idtopo=cid(param[2].argument[0]);
709     double x=atof(param[3].argument[0].c_str());
710     double y=atof(param[4].argument[0].c_str());
711     double z=atof(param[5].argument[0].c_str());
712 francois 35 int ori=atoi(param[6].argument[0].c_str());
713 foucault 27 MG_ELEMENT_TOPOLOGIQUE* topo;
714     if (idtopo>-1)
715     {
716     topo=mggeo->get_mg_sommetid(idtopo);
717     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
718     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
719     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
720     }
721     else topo=NULL;
722 francois 35 MG_NOEUD* noeud=new MG_NOEUD(id,topo,x,y,z,ori);
723 foucault 27 mgmai->ajouter_mg_noeud(noeud);
724     }
725     if (entite=="FEM_NOEUD")
726     {
727     parse.decode(data.c_str(),"@,@,@,@,@,@,@",param+2);
728     long idtopo=cid(param[2].argument[0]);
729     long idmai=cid(param[3].argument[0]);
730     double x=atof(param[4].argument[0].c_str());
731     double y=atof(param[5].argument[0].c_str());
732     double z=atof(param[6].argument[0].c_str());
733     int num=atoi(param[7].argument[0].c_str());
734     int numopt=atoi(param[8].argument[0].c_str());
735     MG_ELEMENT_MAILLAGE* elmai;
736     if (idmai>-1)
737     {
738     elmai=mgmai->get_mg_noeudid(idmai);
739     if (elmai==NULL) elmai=mgmai->get_mg_segmentid(idmai);
740     if (elmai==NULL) elmai=mgmai->get_mg_triangleid(idmai);
741     if (elmai==NULL) elmai=mgmai->get_mg_tetraid(idmai);
742     }
743     else elmai=NULL;
744     FEM_NOEUD* noeud;
745     if (elmai!=NULL) noeud=new FEM_NOEUD(id,elmai,x,y,z);
746     else
747     {
748     MG_ELEMENT_TOPOLOGIQUE* topo;
749     if (idtopo>-1)
750     {
751     topo=mggeo->get_mg_sommetid(idtopo);
752     if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
753     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
754     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
755     }
756     else topo=NULL;
757     noeud=new FEM_NOEUD(id,topo,x,y,z);
758     }
759     noeud->change_numero(num);
760     noeud->change_numero_opt(numopt);
761     femmai->ajouter_fem_noeud(noeud);
762     }
763     if (entite=="SEGMENT")
764     {
765 francois 35 parse.decode(data.c_str(),"@,@,@,@",param+2);
766 foucault 27 long idtopo=cid(param[2].argument[0]);
767     long idn1=cid(param[3].argument[0]);
768     long idn2=cid(param[4].argument[0]);
769 francois 35 int ori=atoi(param[5].argument[0].c_str());
770 foucault 27 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
771     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
772     MG_ELEMENT_TOPOLOGIQUE* topo;
773     if (idtopo>-1)
774     {
775     topo=mggeo->get_mg_areteid(idtopo);
776     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
777     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
778     }
779     else topo=NULL;
780 francois 35 MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2,ori);
781 foucault 27 mgmai->ajouter_mg_segment(seg);
782     }
783     if (entite=="FEM_SEGMENT2")
784     {
785     parse.decode(data.c_str(),"@,@,@,@",param+2);
786     long idmai=cid(param[3].argument[0]);
787     long idn1=cid(param[4].argument[0]);
788     long idn2=cid(param[5].argument[0]);
789     FEM_NOEUD* tab[2];
790     tab[0]=femmai->get_fem_noeudid(idn1);
791     tab[1]=femmai->get_fem_noeudid(idn2);
792     MG_ELEMENT_MAILLAGE* elmai;
793     if (idmai>-1)
794     elmai=mgmai->get_mg_segmentid(idmai);
795     else elmai=NULL;
796     FEM_SEGMENT2* seg=new FEM_SEGMENT2(id,elmai,tab);
797     femmai->ajouter_fem_segment(seg);
798     }
799     if (entite=="FEM_SEGMENT3")
800     {
801     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
802     long idmai=cid(param[3].argument[0]);
803     long idn1=cid(param[4].argument[0]);
804     long idn2=cid(param[5].argument[0]);
805     long idn3=cid(param[6].argument[0]);
806     FEM_NOEUD* tab[3];
807     tab[0]=femmai->get_fem_noeudid(idn1);
808     tab[1]=femmai->get_fem_noeudid(idn2);
809     tab[2]=femmai->get_fem_noeudid(idn3);
810     MG_ELEMENT_MAILLAGE* elmai;
811     if (idmai>-1)
812     elmai=mgmai->get_mg_segmentid(idmai);
813     else elmai=NULL;
814     FEM_SEGMENT3* seg=new FEM_SEGMENT3(id,elmai,tab);
815     femmai->ajouter_fem_segment(seg);
816     }
817     if (entite=="TRIANGLE")
818     {
819 francois 35 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
820 foucault 27 long idtopo=cid(param[2].argument[0]);
821     long idn1=cid(param[3].argument[0]);
822     long idn2=cid(param[4].argument[0]);
823     long idn3=cid(param[5].argument[0]);
824 francois 35 int ori=atoi(param[6].argument[0].c_str());
825 foucault 27 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
826     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
827     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
828     MG_ELEMENT_TOPOLOGIQUE* topo;
829     if (idtopo>-1)
830     {
831     topo=mggeo->get_mg_faceid(idtopo);
832     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
833     }
834     else topo=NULL;
835 francois 35 mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,ori,id);
836 foucault 27 }
837     if (entite=="FEM_TRIANGLE3")
838     {
839     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
840     long idmai=cid(param[3].argument[0]);
841     long idn1=cid(param[4].argument[0]);
842     long idn2=cid(param[5].argument[0]);
843     long idn3=cid(param[6].argument[0]);
844     FEM_NOEUD* tab[3];
845     tab[0]=femmai->get_fem_noeudid(idn1);
846     tab[1]=femmai->get_fem_noeudid(idn2);
847     tab[2]=femmai->get_fem_noeudid(idn3);
848     MG_ELEMENT_MAILLAGE* elmai;
849     if (idmai>-1)
850     elmai=mgmai->get_mg_triangleid(idmai);
851     else elmai=NULL;
852     FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(id,elmai,tab);
853     femmai->ajouter_fem_triangle(tri);
854     }
855     if (entite=="FEM_TRIANGLE6")
856     {
857     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@",param+2);
858     long idmai=cid(param[3].argument[0]);
859     long idn1=cid(param[4].argument[0]);
860     long idn2=cid(param[5].argument[0]);
861     long idn3=cid(param[6].argument[0]);
862     long idn4=cid(param[7].argument[0]);
863     long idn5=cid(param[8].argument[0]);
864     long idn6=cid(param[9].argument[0]);
865     FEM_NOEUD* tab[6];
866     tab[0]=femmai->get_fem_noeudid(idn1);
867     tab[1]=femmai->get_fem_noeudid(idn2);
868     tab[2]=femmai->get_fem_noeudid(idn3);
869     tab[3]=femmai->get_fem_noeudid(idn4);
870     tab[4]=femmai->get_fem_noeudid(idn5);
871     tab[5]=femmai->get_fem_noeudid(idn6);
872     MG_ELEMENT_MAILLAGE* elmai;
873     if (idmai>-1)
874     elmai=mgmai->get_mg_triangleid(idmai);
875     else elmai=NULL;
876     FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(id,elmai,tab);
877     femmai->ajouter_fem_triangle(tri);
878     }
879     if (entite=="TETRAEDRE")
880     {
881 francois 35 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
882 foucault 27 long idtopo=cid(param[2].argument[0]);
883     long idn1=cid(param[3].argument[0]);
884     long idn2=cid(param[4].argument[0]);
885     long idn3=cid(param[5].argument[0]);
886     long idn4=cid(param[6].argument[0]);
887 francois 35 int ori=atoi(param[7].argument[0].c_str());
888 foucault 27 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
889     MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
890     MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
891     MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
892     MG_ELEMENT_TOPOLOGIQUE* topo;
893     if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
894     else topo=NULL;
895 francois 35 if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,ori,id);
896 foucault 27 }
897     if (entite=="FEM_TETRA4")
898     {
899     parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
900     long idmai=cid(param[3].argument[0]);
901     long idn1=cid(param[4].argument[0]);
902     long idn2=cid(param[5].argument[0]);
903     long idn3=cid(param[6].argument[0]);
904     long idn4=cid(param[7].argument[0]);
905     FEM_NOEUD* tab[4];
906     tab[0]=femmai->get_fem_noeudid(idn1);
907     tab[1]=femmai->get_fem_noeudid(idn2);
908     tab[2]=femmai->get_fem_noeudid(idn3);
909     tab[3]=femmai->get_fem_noeudid(idn4);
910     MG_ELEMENT_MAILLAGE* elmai;
911     if (idmai>-1)
912     elmai=mgmai->get_mg_tetraid(idmai);
913     else elmai=NULL;
914     FEM_TETRA4* tet=new FEM_TETRA4(id,elmai,tab);
915     femmai->ajouter_fem_tetra(tet);
916     }
917     if (entite=="FEM_TETRA10")
918     {
919     parse.decode(data.c_str(),"@,@,@,@,@,@,@,@,@,@,@,@",param+2);
920     long idmai=cid(param[3].argument[0]);
921     long idn1=cid(param[4].argument[0]);
922     long idn2=cid(param[5].argument[0]);
923     long idn3=cid(param[6].argument[0]);
924     long idn4=cid(param[7].argument[0]);
925     long idn5=cid(param[8].argument[0]);
926     long idn6=cid(param[9].argument[0]);
927     long idn7=cid(param[10].argument[0]);
928     long idn8=cid(param[11].argument[0]);
929     long idn9=cid(param[12].argument[0]);
930     long idn10=cid(param[13].argument[0]);
931     FEM_NOEUD* tab[10];
932     tab[0]=femmai->get_fem_noeudid(idn1);
933     tab[1]=femmai->get_fem_noeudid(idn2);
934     tab[2]=femmai->get_fem_noeudid(idn3);
935     tab[3]=femmai->get_fem_noeudid(idn4);
936     tab[4]=femmai->get_fem_noeudid(idn5);
937     tab[5]=femmai->get_fem_noeudid(idn6);
938     tab[6]=femmai->get_fem_noeudid(idn7);
939     tab[7]=femmai->get_fem_noeudid(idn8);
940     tab[8]=femmai->get_fem_noeudid(idn9);
941     tab[9]=femmai->get_fem_noeudid(idn10);
942     MG_ELEMENT_MAILLAGE* elmai;
943     if (idmai>-1)
944     elmai=mgmai->get_mg_tetraid(idmai);
945     else elmai=NULL;
946     FEM_TETRA10* tet=new FEM_TETRA10(id,elmai,tab);
947     femmai->ajouter_fem_tetra(tet);
948     }
949     if (entite=="SOLUTION")
950     {
951 francois 174 parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
952     int typeentite=atoi(param[2].argument[0].c_str());
953     std::string nomsol=param[3].argument[0];
954     long idmai=cid(param[4].argument[0]);
955     int nb=atoi(param[5].argument[0].c_str());
956     std::string chemin=param[6].argument[0];
957 foucault 27 MG_MAILLAGE* mai=get_mg_maillageid(idmai);
958 francois 174 MG_SOLUTION* sol=new MG_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite);
959 foucault 27 ajouter_mg_solution(sol);
960     for (int i=0;i<nb;i++)
961 francois 174 sol->change_legende(i,param[7].argument[i]);
962 foucault 27 }
963     if (entite=="FEM_SOLUTION")
964     {
965 francois 174 parse.decode(data.c_str(),"@,@,@,@,@,(&)",param+2);
966     int typeentite=atoi(param[2].argument[0].c_str());
967     std::string nomsol=param[3].argument[0];
968     long idmai=cid(param[4].argument[0]);
969     int nb=atoi(param[5].argument[0].c_str());
970     std::string chemin=param[6].argument[0];
971 foucault 27 FEM_MAILLAGE* mai=get_fem_maillageid(idmai);
972 francois 174 FEM_SOLUTION* sol=new FEM_SOLUTION(id,mai,nb,(char*)chemin.c_str(),SOL_EXISTANTE,nomsol,typeentite);
973 foucault 27 ajouter_fem_solution(sol);
974     for (int i=0;i<nb;i++)
975 francois 174 sol->change_legende(i,param[7].argument[i]);
976 foucault 27 }
977 francois 174 #ifdef WINDOWS_VERSION
978 francois 136 if (entite=="CAD4FE_MCSEGMENT")
979 foucault 27 {
980     parse.decode(data.c_str(),"@,@,@",param+2);
981     long idtopo=cid(param[2].argument[0]);
982     long idn1=cid(param[3].argument[0]);
983     long idn2=cid(param[4].argument[0]);
984     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
985     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
986     MG_ELEMENT_TOPOLOGIQUE* topo;
987     if (idtopo>-1)
988     {
989     topo=mggeo->get_mg_areteid(idtopo);
990     if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
991     if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
992     }
993     else topo=NULL;
994     CAD4FE::MCSegment * seg = new CAD4FE::MCSegment(id,topo,noeud1,noeud2);
995     mgmai->ajouter_mg_segment(seg);
996     }
997     if (entite=="CAD4FE_MCNODE")
998     {
999     parse.decode(data.c_str(),"@,@,@,@,@",param+2);
1000     long idRefTopo=cid(param[2].argument[0]);
1001     long idMCTopo=cid(param[3].argument[0]);
1002     double x=atof(param[4].argument[0].c_str());
1003     double y=atof(param[5].argument[0].c_str());
1004     double z=atof(param[6].argument[0].c_str());
1005     MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
1006     if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
1007     if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
1008     if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
1009     if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
1010     MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
1011     if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
1012     if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
1013     if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
1014     if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
1015    
1016     if (mcTopo->get_dimension()==0)
1017     {
1018     if (updatedMergedRefVertices == false)
1019     {
1020     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1021     itMergedRefVertices != mapMergedRefVertices.end();
1022     itMergedRefVertices++)
1023     {
1024     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1025     MG_SOMMET * refV = NULL;
1026     unsigned long id = itMergedRefVertices->second;
1027     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1028     v->MergeRefVertex(refV);
1029     }
1030    
1031     updatedMergedRefVertices = true;
1032     }
1033     }
1034    
1035     CAD4FE::MCNode* noeud=new CAD4FE::MCNode(id,mcTopo,refTopo,x,y,z);
1036     mgmai->ajouter_mg_noeud(noeud);
1037     }
1038     if (entite=="CAD4FE_MCTRIANGLE")
1039     {
1040     parse.decode(data.c_str(),"@,@,@,@",param+2);
1041     long idtopo=cid(param[2].argument[0]);
1042     long idn1=cid(param[3].argument[0]);
1043     long idn2=cid(param[4].argument[0]);
1044     long idn3=cid(param[5].argument[0]);
1045     CAD4FE::MCNode* noeud1=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn1);
1046     CAD4FE::MCNode* noeud2=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn2);
1047     CAD4FE::MCNode* noeud3=(CAD4FE::MCNode*)mgmai->get_mg_noeudid(idn3);
1048 francois 174 CAD4FE::MCSegment* mgsegment[3];
1049     CAD4FE::MCNode *mgnoeud[3]={noeud1,noeud2,noeud3};
1050     // la topo. d'un MCTriangle est obligatoirement une MCFace
1051 foucault 27 CAD4FE::MCFace* mcFace=(CAD4FE::MCFace*)mggeo->get_mg_faceid(idtopo);
1052     for (int i=0;i<3;i++)
1053 francois 174 {
1054     mgsegment[i]=(CAD4FE::MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id());
1055     if (mgsegment[i]==NULL)
1056     {
1057     mgsegment[i]=new CAD4FE::MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]);
1058     mgmai->ajouter_mg_segment(mgsegment[i]);
1059     }
1060     }
1061 foucault 27 CAD4FE::M3D_MCTriangle *triangle = new CAD4FE::M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
1062     mgmai->ajouter_mg_triangle(triangle);
1063 francois 174 }
1064 francois 136 #endif
1065 foucault 27 }
1066     }
1067     while (param[0].argument[0]!="FIN");
1068 francois 136 #ifdef WINDOWS_VERSION
1069 foucault 27 if (updatedMergedRefVertices == false)
1070     {
1071     for (std::multimap<CAD4FE::MCVertex * , unsigned long>::iterator itMergedRefVertices = mapMergedRefVertices.begin();
1072     itMergedRefVertices != mapMergedRefVertices.end();
1073     itMergedRefVertices++)
1074     {
1075     CAD4FE::MCVertex * v = itMergedRefVertices->first;
1076     MG_SOMMET * refV = NULL;
1077     unsigned long id = itMergedRefVertices->second;
1078     refV = (MG_SOMMET *) mggeo->get_mg_sommetid(id);
1079     v->MergeRefVertex(refV);
1080     }
1081    
1082     updatedMergedRefVertices = true;
1083     }
1084    
1085 francois 136 #endif
1086 foucault 27 fclose(in);
1087     #ifdef BREP_SLD
1088     fonction->Fermer();
1089     #endif
1090     return 1;
1091     }
1092    
1093    
1094    
1095