TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Marching_Cubes.h
1/****************************************************************************
2* Copyright (c) 2015 - 2016, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Marching_Cubes_included
17#define Marching_Cubes_included
18
19#include <TRUSTTabs.h>
20#include <Maillage_FT_Disc.h>
21#include <TRUSTArray.h>
22#include <TRUSTTabFT_forward.h>
23#include <TRUSTTabs_forward.h>
24#include <Domaine_forward.h>
25#include <ArrOfBit.h>
26#include <TRUST_Ref.h>
27
28class Domaine_VF;
30
31class Marching_Cubes : public Objet_U
32{
33 Declare_instanciable_sans_constructeur(Marching_Cubes);
34public:
36
37 void associer_domaine_vf(const Domaine_VF& domaine_vf);
38
39 int construire_iso(const DoubleVect& valeurs_sommets,
40 double isovaleur,
41 Maillage_FT_Disc& maillage,
42 DoubleVect& indicatrice_approchee,
44 int ignorer_collision = 0) const;
45
46 int construire_iso(const Nom& expression, double isovaleur,
47 Maillage_FT_Disc& maillage,
48 DoubleVect& indicatrice_approchee,
50 DoubleTab& eval_expression_sommets,
51 int ignorer_collision = 0) const;
52
53protected:
54 void remplir_data_marching_cubes(const Domaine& domaine);
55
56 // Ces deux fonctions seraient mieux a leur place dans Joint ou Domaine...
57 void remplir_renum_virt_loc(const Domaine& domaine);
58 void renum_sommets_dist_loc(const int pe_voisin,
59 ArrOfInt& num_sommets) const;
60
61 void calculer_signe(const DoubleVect& valeurs_sommets,
62 const double isovaleur,
63 ArrOfBit& signe) const;
64
65 int construire_noeuds_et_facettes(const ArrOfBit& signe,
66 IntTab& def_noeud,
67 IntTab& facettes,
68 DoubleVect& indicatrice_approchee,
69 const Maillage_FT_Disc::AjoutPhase phase) const;
70
71 void construire_noeuds_liste_faces(const ArrOfBit& signe,
72 const IntTab& faces_sommets,
73 const int nb_faces_a_traiter,
74 const int numero_PE,
75 IntTab& def_noeud) const;
76
77 void construire_noeuds_joints(const ArrOfBit& signe,
78 IntTab& def_noeud) const;
79
80 void trier_les_noeuds(IntTab& def_noeud) const;
81
82 void construire_noeuds_uniques(IntTab& def_noeud,
83 Maillage_FT_Disc& maillage) const;
84
85 void calculer_coord_noeuds(const DoubleVect& valeurs_sommets,
86 const double isovaleur,
87 const IntTab& def_noeud,
88 Maillage_FT_Disc& maillage) const;
89
90 void correspondance_espaces_distant_virtuel(const IntTab& def_noeud,
91 Desc_Structure_FT& desc) const;
92
93 // Champs remplis lors de l'association avec le domaine
94 // *********** DEBUT
95 OBS_PTR(Domaine_VF) ref_domaine_vf_;
96
98 // Definition des aretes de l'element de base eulerien
99 // (exemple pour des triangles 2D {{0,1},{1,2},{2,0}}
102 // Definition des aretes des faces
106 // Definition des facettes a creer en fonction du cas marching_cubes
107 // voir Marching_cubes_data.h
110 ArrOfIntFT mcubes_facettes;
112
113 // La structure suivante est utilisee dans renum_sommets_dist_loc :
114 VECT(IntTab) renum_virt_loc_;
115 // Pour i=0..nproc(), indice_joint[i] est l'indice du joint eulerien avec le proc i
116 // (-1 si pas de joint avec le proc i)
118 // *********** FIN
119
120 // Taille du tableau a la derniere construction d'une iso...
121 mutable int last_def_noeud_size = 0;
122
123private:
124 Marching_Cubes(const Marching_Cubes&): Objet_U() { throw; } // Interdit !
125 const Marching_Cubes& operator=(const Marching_Cubes& a) { throw; } // Interdit !
126};
127
128#endif
: class Desc_Structure_FT
class Domaine_VF
Definition Domaine_VF.h:44
: class Maillage_FT_Disc Cette classe decrit un maillage:
int construire_noeuds_et_facettes(const ArrOfBit &signe, IntTab &def_noeud, IntTab &facettes, DoubleVect &indicatrice_approchee, const Maillage_FT_Disc::AjoutPhase phase) const
void construire_noeuds_uniques(IntTab &def_noeud, Maillage_FT_Disc &maillage) const
ArrOfIntFT mcubes_nb_facettes
VECT(IntTab) renum_virt_loc_
void remplir_data_marching_cubes(const Domaine &domaine)
void calculer_coord_noeuds(const DoubleVect &valeurs_sommets, const double isovaleur, const IntTab &def_noeud, Maillage_FT_Disc &maillage) const
ArrOfInt indice_joint_
void correspondance_espaces_distant_virtuel(const IntTab &def_noeud, Desc_Structure_FT &desc) const
void remplir_renum_virt_loc(const Domaine &domaine)
void trier_les_noeuds(IntTab &def_noeud) const
int construire_iso(const DoubleVect &valeurs_sommets, double isovaleur, Maillage_FT_Disc &maillage, DoubleVect &indicatrice_approchee, const Maillage_FT_Disc::AjoutPhase phase, int ignorer_collision=0) const
Construction d'un maillage en segments ou en triangles comme l'isovaleur d'une fonction discretisee a...
void renum_sommets_dist_loc(const int pe_voisin, ArrOfInt &num_sommets) const
OBS_PTR(Domaine_VF) ref_domaine_vf_
void construire_noeuds_joints(const ArrOfBit &signe, IntTab &def_noeud) const
void construire_noeuds_liste_faces(const ArrOfBit &signe, const IntTab &faces_sommets, const int nb_faces_a_traiter, const int numero_PE, IntTab &def_noeud) const
Ajout des sommets situes sur des faces (bords ou joints) dans le tableau def_noeud.
void calculer_signe(const DoubleVect &valeurs_sommets, const double isovaleur, ArrOfBit &signe) const
IntTabFT mcubes_def_aretes_faces
ArrOfIntFT mcubes_facettes
void associer_domaine_vf(const Domaine_VF &domaine_vf)
ArrOfIntFT mcubes_index_facettes
IntTabFT mcubes_def_aretes
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55