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 
sld_surface.h
MG_MAILLAGE::ajouter_mg_tetra
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)
Definition: mg_maillage.cpp:1158
fem_hexa8.h
MG_TRIANGLE::get_segment1
virtual MG_SEGMENT * get_segment1(void)
Definition: mg_triangle.cpp:142
MG_SEGMENT
Definition: mg_segment.h:38
occ_point.h
M3D_NOEUD
Definition: m3d_noeud.h:32
gestionversion.h
MG_MAILLAGE::ajouter_mg_segment
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)
Definition: mg_maillage.cpp:565
acis_point.h
MG_GEOMETRIE::get_mg_areteid
MG_ARETE * get_mg_areteid(unsigned long num)
Definition: mg_geometrie.cpp:775
sld_point.h
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
M3D_TRIANGLE::change_frontiere
virtual void change_frontiere(void)
Definition: m3d_triangle.cpp:154
M3D_TRIANGLE::ajouter_voisin
virtual int ajouter_voisin(class MG_TETRA *tet)
Definition: m3d_triangle.cpp:84
M3D_TRIANGLE
Definition: m3d_triangle.h:31
fem_tetra10.h
occ_courbe.h
m3d_triangle.h
MG_TRIANGLE::get_segment2
virtual MG_SEGMENT * get_segment2(void)
Definition: mg_triangle.cpp:147
fem_quadrangle8.h
xfem_triangle3.h
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_TRIANGLE::noeud3
class MG_NOEUD * noeud3
Definition: mg_triangle.h:76
MG_TRIANGLE::get_segment3
virtual MG_SEGMENT * get_segment3(void)
Definition: mg_triangle.cpp:152
sld_fonction.h
MG_SEGMENT::change_dimension_topo_null
virtual void change_dimension_topo_null(int num)
Definition: mg_segment.cpp:251
xfem_tetra4.h
CAD4FE_MCTriangle.h
parse.h
fem_segment3.h
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
fem_quadrangle4.h
MG_FILE_RECUPERATION::lire_NOEUD
virtual void lire_NOEUD(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
Definition: mg_file_recuperation.cpp:101
mg_file_recuperation.h
MG_FILE_RECUPERATION::insere_triangle
MG_TRIANGLE * insere_triangle(MG_MAILLAGE *mgmai, MG_ELEMENT_TOPOLOGIQUE *mgvol, MG_NOEUD *noeud1, MG_NOEUD *noeud2, MG_NOEUD *noeud3, int origine)
Definition: mg_file_recuperation.cpp:193
lc_point.h
MG_FILE::lire
virtual int lire(char *chemin)
Definition: mg_file.cpp:1341
MG_MAILLAGE::ajouter_mg_triangle
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)
Definition: mg_maillage.cpp:731
MG_FILE_RECUPERATION::lire_TRIANGLE
virtual void lire_TRIANGLE(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
Definition: mg_file_recuperation.cpp:124
MG_GEOMETRIE::get_mg_volumeid
MG_VOLUME * get_mg_volumeid(unsigned long num)
Definition: mg_geometrie.cpp:1658
MG_NOEUD
Definition: mg_noeud.h:41
step_point.h
M3D_TETRA
Definition: m3d_tetra.h:31
PARSE::decode
void decode(char *code, std::string masque, class PARS_ARGUMENT *arg)
Definition: parse.cpp:71
MG_TRIANGLE::noeud2
class MG_NOEUD * noeud2
Definition: mg_triangle.h:75
CAD4FE_MCVertex.h
MG_TRIANGLE::segment3
class MG_SEGMENT * segment3
Definition: mg_triangle.h:80
CAD4FE_PolySurface.h
PARSE
Definition: parse.h:32
mg_sommet_noeud.h
MG_TRIANGLE::segment1
class MG_SEGMENT * segment1
Definition: mg_triangle.h:78
acis_courbe.h
MG_FILE
Definition: mg_file.h:31
step_surface.h
m3d_noeud.h
CAD4FE_MCSegment.h
CAD4FE_MCEdge.h
MG_MAILLAGE::get_mg_noeudid
MG_NOEUD * get_mg_noeudid(unsigned long num)
Definition: mg_maillage.cpp:451
MG_MAILLAGE::get_mg_segment
MG_SEGMENT * get_mg_segment(unsigned int num)
Definition: mg_maillage.cpp:619
occ_surface.h
m3d_tetra.h
CAD4FE_MCNode.h
xfem_segment2.h
fem_triangle6.h
CAD4FE_m3d_MCTriangle.h
MG_MAILLAGE::get_mg_triangle
MG_TRIANGLE * get_mg_triangle(unsigned int num)
Definition: mg_maillage.cpp:784
CAD4FE_PolyCurve.h
fem_tetra4.h
PARS_ARGUMENT
Definition: pars_argument.h:37
MG_GEOMETRIE::get_mg_faceid
MG_FACE * get_mg_faceid(unsigned long num)
Definition: mg_geometrie.cpp:1226
fem_segment2.h
MG_FILE_RECUPERATION::MG_FILE_RECUPERATION
MG_FILE_RECUPERATION(char *chemin)
Definition: mg_file_recuperation.cpp:90
fem_triangle3.h
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_MAILLAGE
Definition: mg_maillage.h:62
fem_hexa20.h
MG_TRIANGLE::noeud1
class MG_NOEUD * noeud1
Definition: mg_triangle.h:74
step_courbe.h
acis_surface.h
MG_TRIANGLE::segment2
class MG_SEGMENT * segment2
Definition: mg_triangle.h:79
pars_argument.h
occ_fonction.h
CAD4FE_MCFace.h
MG_FILE_RECUPERATION::lire_TETRA
virtual void lire_TETRA(long id, class PARSE &parse, class PARS_ARGUMENT(&param)[100], std::string &data, MG_MAILLAGE *mgmai, MG_GEOMETRIE *mggeo)
Definition: mg_file_recuperation.cpp:156
MG_FILE::code_de_lecture
int code_de_lecture
Definition: mg_file.h:40
MAGIC::ORIGINE::MAILLEUR_AUTO
@ MAILLEUR_AUTO
Definition: mg_definition.h:79
MG_GEOMETRIE::get_mg_sommetid
MG_SOMMET * get_mg_sommetid(unsigned long num)
Definition: mg_geometrie.cpp:513
sld_courbe.h
MG_FILE::cid
virtual long cid(std::string str)
Definition: mg_file.cpp:152
MG_FILE_RECUPERATION::~MG_FILE_RECUPERATION
virtual ~MG_FILE_RECUPERATION()
Definition: mg_file_recuperation.cpp:96
MG_MAILLAGE::ajouter_mg_noeud
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
Definition: mg_maillage.cpp:421