MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_file_recuperation.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mg_file_recuperation.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 
26 #pragma hdrstop
27 
28 #include <string.h>
29 #include "mg_file_recuperation.h"
30 #include "mg_sommet_noeud.h"
31 #include "pars_argument.h"
32 #include "parse.h"
33 #ifdef BREP_STEP
34 #include "step_surface.h"
35 #include "step_courbe.h"
36 #include "step_point.h"
37 #endif
38 #ifdef BREP_SAT
39 #include "acis_surface.h"
40 #include "acis_courbe.h"
41 #include "acis_point.h"
42 #endif
43 #ifdef BREP_SLD
44 #include "sld_point.h"
45 #include "sld_courbe.h"
46 #include "sld_surface.h"
47 #include "sld_fonction.h"
48 #endif
49 #include "lc_point.h"
50 #include "m3d_noeud.h"
51 #include "m3d_triangle.h"
52 #include "m3d_tetra.h"
53 #include "fem_segment2.h"
54 #include "fem_segment3.h"
55 #include "fem_triangle3.h"
56 #include "fem_triangle6.h"
57 #include "fem_quadrangle4.h"
58 #include "fem_quadrangle8.h"
59 #include "fem_tetra4.h"
60 #include "xfem_segment2.h"
61 #include "xfem_triangle3.h"
62 #include "xfem_tetra4.h"
63 #include "fem_tetra10.h"
64 #include "fem_hexa8.h"
65 #include "fem_hexa20.h"
66 #ifdef BREP_OCC
67 #include "occ_surface.h"
68 #include "occ_point.h"
69 #include "occ_courbe.h"
70 #include "occ_fonction.h"
71 #include "TopoDS_Shape.hxx"
72 #include "TopoDS.hxx"
73 #endif
74 #ifdef WINDOWS_VERSION
75 #include "CAD4FE_MCEdge.h"
76 #include "CAD4FE_MCFace.h"
77 #include "CAD4FE_MCVertex.h"
78 #include "CAD4FE_PolySurface.h"
79 #include "CAD4FE_PolyCurve.h"
80 #include "CAD4FE_MCNode.h"
81 #include "CAD4FE_MCSegment.h"
82 #include "CAD4FE_MCTriangle.h"
83 #include "CAD4FE_m3d_MCTriangle.h"
84 #endif
85 
86 
87 #pragma package(smart_init)
88 
89 
91 {
92  code_de_lecture=lire(chemin);
93 
94 }
95 
97 {
98 }
99 
100 
101 void MG_FILE_RECUPERATION::lire_NOEUD(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
102 {
103 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
104 long idtopo=cid(param[2].argument[0]);
105 double x=atof(param[3].argument[0].c_str());
106 double y=atof(param[4].argument[0].c_str());
107 double z=atof(param[5].argument[0].c_str());
108 int ori=atoi(param[6].argument[0].c_str());
110 if (idtopo>-1)
111  {
112  topo=mggeo->get_mg_sommetid(idtopo);
113  if (topo==NULL) topo=mggeo->get_mg_areteid(idtopo);
114  if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
115  if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
116  }
117 else topo=NULL;
118 MG_NOEUD* noeud=new M3D_NOEUD(id,topo,x,y,z,ori);
119 mgmai->ajouter_mg_noeud(noeud);
120 }
121 
122 
123 
124 void MG_FILE_RECUPERATION::lire_TRIANGLE(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
125 {
126 parse.decode(data.c_str(),"@,@,@,@,@",param+2);
127 long idtopo=cid(param[2].argument[0]);
128 long idn1=cid(param[3].argument[0]);
129 long idn2=cid(param[4].argument[0]);
130 long idn3=cid(param[5].argument[0]);
131 int ori=atoi(param[6].argument[0].c_str());
132 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
133 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
134 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
135 MG_ELEMENT_TOPOLOGIQUE* topo=NULL;
136 if (idtopo>-1)
137  {
138  topo=mggeo->get_mg_faceid(idtopo);
139  if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
140  }
141 MG_SEGMENT* mgsegment1=mgmai->get_mg_segment(noeud1->get_id(),noeud2->get_id());
142 MG_SEGMENT* mgsegment2=mgmai->get_mg_segment(noeud2->get_id(),noeud3->get_id());
143 MG_SEGMENT* mgsegment3=mgmai->get_mg_segment(noeud3->get_id(),noeud1->get_id());
144 if (mgsegment1==NULL) mgsegment1=mgmai->ajouter_mg_segment(topo,noeud1,noeud2,ori);
145 if (mgsegment2==NULL) mgsegment2=mgmai->ajouter_mg_segment(topo,noeud2,noeud3,ori);
146 if (mgsegment3==NULL) mgsegment3=mgmai->ajouter_mg_segment(topo,noeud3,noeud1,ori);
147 M3D_TRIANGLE* mgtriangle=new M3D_TRIANGLE(id,topo,noeud1,noeud2,noeud3,mgsegment1,mgsegment2,mgsegment3,ori);
148 mgtriangle->change_frontiere();
149 mgtriangle->get_segment1()->change_dimension_topo_null(2);
150 mgtriangle->get_segment2()->change_dimension_topo_null(2);
151 mgtriangle->get_segment3()->change_dimension_topo_null(2);
152 mgmai->ajouter_mg_triangle(mgtriangle);
153 }
154 
155 
156 void MG_FILE_RECUPERATION::lire_TETRA(long id,class PARSE& parse,class PARS_ARGUMENT (&param)[100],std::string& data,MG_MAILLAGE *mgmai,MG_GEOMETRIE *mggeo)
157 {
158 parse.decode(data.c_str(),"@,@,@,@,@,@",param+2);
159 long idtopo=cid(param[2].argument[0]);
160 long idn1=cid(param[3].argument[0]);
161 long idn2=cid(param[4].argument[0]);
162 long idn3=cid(param[5].argument[0]);
163 long idn4=cid(param[6].argument[0]);
164 int ori=atoi(param[7].argument[0].c_str());
165 MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
166 MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
167 MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
168 MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
170 if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
171 else topo=NULL;
172 MG_TRIANGLE* triangle1=mgmai->get_mg_triangle(noeud1->get_id(),noeud3->get_id(),noeud2->get_id());
173 MG_TRIANGLE* triangle2=mgmai->get_mg_triangle(noeud1->get_id(),noeud2->get_id(),noeud4->get_id());
174 MG_TRIANGLE* triangle3=mgmai->get_mg_triangle(noeud2->get_id(),noeud3->get_id(),noeud4->get_id());
175 MG_TRIANGLE* triangle4=mgmai->get_mg_triangle(noeud1->get_id(),noeud4->get_id(),noeud3->get_id());
176 if (triangle1==NULL) triangle1=insere_triangle(mgmai,topo,noeud1,noeud3,noeud2,MAGIC::ORIGINE::MAILLEUR_AUTO);
177 if (triangle2==NULL) triangle2=insere_triangle(mgmai,topo,noeud1,noeud2,noeud4,MAGIC::ORIGINE::MAILLEUR_AUTO);
178 if (triangle3==NULL) triangle3=insere_triangle(mgmai,topo,noeud2,noeud3,noeud4,MAGIC::ORIGINE::MAILLEUR_AUTO);
179 if (triangle4==NULL) triangle4=insere_triangle(mgmai,topo,noeud1,noeud4,noeud3,MAGIC::ORIGINE::MAILLEUR_AUTO);
180 M3D_TETRA* tetra=new M3D_TETRA(topo,noeud1,noeud2,noeud3,noeud4,triangle1,triangle2,triangle3,triangle4,ori);
181 mgmai->ajouter_mg_tetra(tetra);
182 M3D_TRIANGLE* tri=(M3D_TRIANGLE*)triangle1;
183 tri->ajouter_voisin(tetra);
184 tri=(M3D_TRIANGLE*)triangle2;
185 tri->ajouter_voisin(tetra);
186 tri=(M3D_TRIANGLE*)triangle3;
187 tri->ajouter_voisin(tetra);
188 tri=(M3D_TRIANGLE*)triangle4;
189 tri->ajouter_voisin(tetra);
190 }
191 
192 
194 {
198  if (segment1==NULL) segment1=mgmai->ajouter_mg_segment(mgvol,noeud1,noeud2,origine);
199  if (segment2==NULL) segment2=mgmai->ajouter_mg_segment(mgvol,noeud1,noeud3,origine);
200  if (segment3==NULL) segment3=mgmai->ajouter_mg_segment(mgvol,noeud2,noeud3,origine);
202  mgmai->ajouter_mg_triangle(tri);
203  return tri;
204 }
205 
206 
207 
208 
209 
virtual void change_frontiere(void)
virtual int ajouter_voisin(class MG_TETRA *tet)
virtual void lire_TETRA(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
MG_FILE_RECUPERATION(char *chemin)
MG_TRIANGLE * insere_triangle(MG_MAILLAGE *mgmai, MG_ELEMENT_TOPOLOGIQUE *mgvol, MG_NOEUD *noeud1, MG_NOEUD *noeud2, MG_NOEUD *noeud3, int origine)
virtual void lire_NOEUD(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
virtual void lire_TRIANGLE(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
virtual long cid(std::string str)
Definition: mg_file.cpp:152
virtual int lire(char *chemin)
Definition: mg_file.cpp:1341
int code_de_lecture
Definition: mg_file.h:40
MG_FACE * get_mg_faceid(unsigned long num)
MG_SOMMET * get_mg_sommetid(unsigned long num)
MG_ARETE * get_mg_areteid(unsigned long num)
MG_VOLUME * get_mg_volumeid(unsigned long num)
unsigned long get_id()
MG_NOEUD * get_mg_noeudid(unsigned long num)
MG_TRIANGLE * ajouter_mg_triangle(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, int origine, unsigned long num=0)
MG_TETRA * ajouter_mg_tetra(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, int origine, unsigned long num=0)
MG_TRIANGLE * get_mg_triangle(unsigned int num)
MG_SEGMENT * get_mg_segment(unsigned int num)
MG_SEGMENT * ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, int origine, double longue=0.0, unsigned long num=0)
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
virtual void change_dimension_topo_null(int num)
Definition: mg_segment.cpp:251
class MG_NOEUD * noeud1
Definition: mg_triangle.h:74
class MG_SEGMENT * segment3
Definition: mg_triangle.h:80
class MG_SEGMENT * segment2
Definition: mg_triangle.h:79
class MG_NOEUD * noeud3
Definition: mg_triangle.h:76
virtual MG_SEGMENT * get_segment2(void)
class MG_NOEUD * noeud2
Definition: mg_triangle.h:75
virtual MG_SEGMENT * get_segment3(void)
virtual MG_SEGMENT * get_segment1(void)
class MG_SEGMENT * segment1
Definition: mg_triangle.h:78
Definition: parse.h:33
void decode(char *code, std::string masque, class PARS_ARGUMENT *arg)
Definition: parse.cpp:71