MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
CAD4FE_mg_utils.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 //####// CAD4FE_mg_utils.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include <set>
24 
25 #pragma hdrstop
26 
27 #include <vector>
28 using namespace std;
29 
30 #include "gestionversion.h"
31 #include "CAD4FE_mg_utils.h"
33 
34 
35 #pragma package(smart_init)
36 
37 
38 
39 
40 void MG_UTILS::MG_MAILLAGE_GetBoundingBox (MG_MAILLAGE * __mesh, double __bbox [6] )
41 {
42  MG_NOEUD * node;
43  double point[3];
44 
45  node = __mesh->get_mg_noeud(0);
47 
48  for (int i=0; i<3; i++)
49  {
50  __bbox[i] = point[i];
51  __bbox[i+3] = point[i];
52  }
53  LISTE_MG_NOEUD::iterator itNode;
54  for (MG_NOEUD * node = __mesh->get_premier_noeud(itNode); node; node = __mesh->get_suivant_noeud(itNode))
55  {
57 
58  for (int i=0; i<3; i++)
59  {
60  if (point[i] < __bbox[i])
61  __bbox[i+0] = point[i];
62  if (point[i] > __bbox[i+3])
63  __bbox[i+3] = point[i];
64  }
65  }
66 }
67 
68 double
70 {
71  double V;
72  V = 0;
73 
74  MG_TRIANGLE * T;
75  LISTE_MG_TRIANGLE::iterator itTriang;
76  for (MG_TRIANGLE * T = __mesh->get_premier_triangle(itTriang); T; T = __mesh->get_suivant_triangle(itTriang))
77  {
78  MG_NOEUD * N [3];
79  MG_TRIANGLE_GET_NOEUDS ( T, N);
80 
81  double x[3][3];
82 
83  for (unsigned it_node = 0; it_node < 3; it_node ++)
84  {
85  MG_UTILS::MG_NOEUD_GET_XYZ( N[it_node] , x[it_node]);
86  }
87 
88 
89  double temp = 0;
90  for (unsigned it_node = 0; it_node < 3; it_node ++)
91  {
92  unsigned i = (it_node + 0)%3;
93  unsigned j = (it_node + 1)%3;
94  unsigned k = (it_node + 2)%3;
95 
96  temp += x[i][0]*(x[j][1]-x[k][1]);
97  }
98  temp *= (x[0][2]+x[1][2]+x[2][2]);
99 
100  V += temp;
101  }
102 
103  return V;
104 }
105 
106 
107 double
109 {
110  double S;
111  S = 0;
112 
113  MG_TRIANGLE * T;
114  LISTE_MG_TRIANGLE::iterator itTriang;
115  for (MG_TRIANGLE * T = __mesh->get_premier_triangle(itTriang); T; T = __mesh->get_suivant_triangle(itTriang))
116  {
117  MG_NOEUD * N [3];
118  MG_TRIANGLE_GET_NOEUDS ( T, N);
119 
120  double x[3][3];
121 
122  for (unsigned it_node = 0; it_node < 3; it_node ++)
123  {
124  MG_UTILS::MG_NOEUD_GET_XYZ( N[it_node] , x[it_node]);
125  }
126 
127  double E[3][3];
128  for (unsigned i=0; i<2; i++)
129  {
130  unsigned j = (i + 1)%3;
131 
132  for (unsigned k=0; k<3; k++)
133  E[i][k] = x[j][k]-x[i][k];
134  }
136 
138  }
139 
140  return S;
141 
142 }
143 
144 void MG_UTILS::GetFEVCount(MG_VOLUME * __volume, int * __faceCount,int * __edgeCount,int * __vertexCount)
145 {
147  std::set < MG_FACE * > lst_mg_faces;
148  std::set < MG_ARETE * > lst_mg_edges;
149  std::set < MG_SOMMET * > lst_mg_vertices;
150  std::set < MG_COQUILLE * > lst_mg_shell;
151  std::set < MG_BOUCLE * > lst_mg_loop;
152 
153  // initialize MC face, MC edge, MC loop, MC shell, and MC vertices lists
154  unsigned nb_shells = __volume->get_nb_mg_coquille ();
155  for (unsigned it_shells = 0; it_shells < nb_shells; it_shells++)
156  {
157  MG_COQUILLE * shell = __volume->get_mg_coquille(it_shells);
158  lst_mg_shell.insert(shell);
159  unsigned nb_coface = shell->get_nb_mg_coface();
160  for (unsigned it_coface = 0; it_coface < nb_coface; it_coface++)
161  {
162  MG_FACE * face = (MG_FACE *)shell->get_mg_coface(it_coface)->get_face();
163  lst_mg_faces.insert(face);
164 
165  unsigned nb_loop = face->get_nb_mg_boucle();
166  for (unsigned it_loop = 0; it_loop < nb_loop; it_loop++)
167  {
168  MG_BOUCLE * loop = face->get_mg_boucle(it_loop);
169  lst_mg_loop.insert(loop);
170  unsigned nb_edge = loop->get_nb_mg_coarete();
171 
172  for (unsigned it_edge = 0; it_edge < nb_edge; it_edge++)
173  {
174  MG_ARETE * edge = (MG_ARETE*)loop->get_mg_coarete(it_edge)->get_arete();
175  lst_mg_edges.insert(edge);
176 
177  lst_mg_vertices.insert ((MG_SOMMET*)edge->get_cosommet1()->get_sommet());
178  lst_mg_vertices.insert ((MG_SOMMET*)edge->get_cosommet2()->get_sommet());
179  }
180  }
181  }
182  }
183 
184  *__faceCount = lst_mg_faces.size();
185  *__edgeCount = lst_mg_edges.size();
186  *__vertexCount = lst_mg_vertices.size();
187 }
MG_ARETE::get_cosommet2
virtual class MG_COSOMMET * get_cosommet2(void)
Definition: mg_arete.cpp:85
MG_UTILS::MG_MAILLAGE_GetBoundingBox
static void MG_MAILLAGE_GetBoundingBox(MG_MAILLAGE *__mesh, double __bbox[6])
Definition: CAD4FE_mg_utils.cpp:40
MG_VOLUME::get_nb_mg_coquille
virtual int get_nb_mg_coquille(void)
Definition: mg_volume.cpp:65
MG_UTILS::MG_MAILLAGE_GetSurface
static double MG_MAILLAGE_GetSurface(MG_MAILLAGE *__mesh)
Definition: CAD4FE_mg_utils.cpp:108
MG_MAILLAGE::get_premier_noeud
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:548
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_BOUCLE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_boucle.cpp:78
MG_TRIANGLE_GET_NOEUDS
#define MG_TRIANGLE_GET_NOEUDS(triang, vec_nodes)
Definition: CAD4FE_mg_utils.h:34
OT_ALGORITHME_GEOMETRIQUE::VEC3_CROSS_VEC3
static void VEC3_CROSS_VEC3(double a[3], double b[3], double c[3])
Definition: ot_algorithme_geometrique.h:76
MG_COFACE::get_face
virtual MG_FACE * get_face(void)
Definition: mg_coface.cpp:58
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_VOLUME
Definition: mg_volume.h:33
MG_COQUILLE
Definition: mg_coquille.h:34
MG_FACE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_face.cpp:67
MG_UTILS::GetFEVCount
static void GetFEVCount(MG_VOLUME *__volume, int *__faceCount, int *__edgeCount, int *__vertexCount)
Definition: CAD4FE_mg_utils.cpp:144
MG_VOLUME::get_mg_coquille
virtual MG_COQUILLE * get_mg_coquille(int num)
Definition: mg_volume.cpp:70
MG_MAILLAGE::get_mg_noeud
MG_NOEUD * get_mg_noeud(unsigned int num)
Definition: mg_maillage.cpp:463
OT_ALGORITHME_GEOMETRIQUE::VEC3_NORM
static double VEC3_NORM(double a[3])
Definition: ot_algorithme_geometrique.h:94
MG_UTILS::MG_MAILLAGE_GetVolume
static double MG_MAILLAGE_GetVolume(MG_MAILLAGE *__mesh)
Definition: CAD4FE_mg_utils.cpp:69
MG_MAILLAGE::get_premier_triangle
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:912
MG_NOEUD
Definition: mg_noeud.h:41
MG_UTILS::MG_NOEUD_GET_XYZ
static void MG_NOEUD_GET_XYZ(MG_NOEUD *node, double *xyz)
Definition: CAD4FE_mg_utils.h:57
V
void V(MCAA *mcaa)
Definition: CAD4FE_MCAA.cpp:1794
node
#define node(i, j)
MG_COSOMMET::get_sommet
virtual MG_SOMMET * get_sommet(void)
Definition: mg_cosommet.cpp:83
MG_BOUCLE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_boucle.cpp:84
ot_algorithme_geometrique.h
MG_MAILLAGE::get_suivant_triangle
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:920
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_COQUILLE::get_nb_mg_coface
virtual int get_nb_mg_coface(void)
Definition: mg_coquille.cpp:76
MG_COQUILLE::get_mg_coface
virtual MG_COFACE * get_mg_coface(int num)
Definition: mg_coquille.cpp:90
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
MG_FACE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_face.cpp:72
MG_ARETE::get_cosommet1
virtual class MG_COSOMMET * get_cosommet1(void)
Definition: mg_arete.cpp:81
MG_SOMMET
Definition: mg_sommet.h:35
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
MG_MAILLAGE::get_suivant_noeud
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:556
CAD4FE_mg_utils.h