1 // Copyright (C) 2009-2016 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // C++ : Initialisation du singleton
22 #include "HexGlobale.hxx"
26 static bool db = false;
28 /* -----------------------------------------------------
30 // ---- Numerotation des faces (%x)
32 6=bed +----bd-----+ bdf=7
36 4=bce +----bc-----+...|...bcf=5
40 2=ade...|...+----ad-|---+ adf=3 | y
44 0=ace +----ac-----+ acf=1 +-----> x
46 * ----------------------------------------------------- */
48 Globale* Globale::unique_instance = NULL;
50 // ====================================================== Constructeur
55 setCoordVertex ( V_ACE, 0, 0, 0 );
56 setCoordVertex ( V_ACF, 1, 0, 0 );
57 setCoordVertex ( V_ADF, 1, 1, 0 );
58 setCoordVertex ( V_ADE, 0, 1, 0 );
60 setCoordVertex ( V_BCE, 0, 0, 1 );
61 setCoordVertex ( V_BCF, 1, 0, 1 );
62 setCoordVertex ( V_BDF, 1, 1, 1 );
63 setCoordVertex ( V_BDE, 0, 1, 1 );
65 setEdgeVertex ( E_AC, V_ACE, V_ACF );
66 setEdgeVertex ( E_AF, V_ACF, V_ADF );
67 setEdgeVertex ( E_AD, V_ADF, V_ADE );
68 setEdgeVertex ( E_AE, V_ADE, V_ACE );
70 setEdgeVertex ( E_BC, V_BCE, V_BCF );
71 setEdgeVertex ( E_BF, V_BCF, V_BDF );
72 setEdgeVertex ( E_BD, V_BDF, V_BDE );
73 setEdgeVertex ( E_BE, V_BDE, V_BCE );
75 setEdgeVertex ( E_CE, V_ACE, V_BCE );
76 setEdgeVertex ( E_CF, V_ACF, V_BCF );
77 setEdgeVertex ( E_DF, V_ADF, V_BDF );
78 setEdgeVertex ( E_DE, V_ADE, V_BDE );
80 setQuadEdge ( Q_A, E_AC, E_AF, E_AD, E_AE );
81 setQuadEdge ( Q_B, E_BC, E_BF, E_BD, E_BE );
82 setQuadEdge ( Q_C, E_AC, E_CF, E_BC, E_CE );
83 setQuadEdge ( Q_D, E_AD, E_DF, E_BD, E_DE );
84 setQuadEdge ( Q_E, E_AE, E_DE, E_BE, E_CE );
85 setQuadEdge ( Q_F, E_AF, E_DF, E_BF, E_CF );
87 setOpposedVertex ( V_ACE, V_BDF);
88 setOpposedVertex ( V_ACF, V_BDE);
89 setOpposedVertex ( V_ADF, V_BCE);
90 setOpposedVertex ( V_ADE, V_BCF);
92 setOpposedQuad ( Q_A, Q_B );
93 setOpposedQuad ( Q_C, Q_D );
94 setOpposedQuad ( Q_E, Q_F );
96 dump.setWitness (&mess);
99 dump_study = DumpActif;
101 // ====================================================== getInstance
102 Globale* Globale::getInstance ()
104 if (unique_instance==NULL)
105 unique_instance = new Globale ();
107 return unique_instance;
109 // ====================================================== setCoordVertex
110 void Globale::setCoordVertex (EnumHVertex node, int px, int py, int pz)
112 coord_vertex [node] [dir_x] = 2*px-1;
113 coord_vertex [node] [dir_y] = 2*py-1;
114 coord_vertex [node] [dir_z] = 2*pz-1;
116 // ====================================================== setEdgeVertex
117 void Globale::setEdgeVertex (EnumHEdge edge, EnumHVertex v1, EnumHVertex v2)
119 edge_vertex [edge] [V_AMONT] = v1;
120 edge_vertex [edge] [V_AVAL ] = v2;
123 printf (" %s = %2d = [%s, %s] = [%d,%d]\n", h_edge_name[edge], edge,
124 h_vertex_name[v1], h_vertex_name[v2], v1, v2);
126 // ====================================================== setQuadEdge
127 void Globale::setQuadEdge (EnumHQuad face, EnumHEdge c1, EnumHEdge c2,
128 EnumHEdge c3, EnumHEdge c4)
130 quad_edge [face] [E_A] = c1;
131 quad_edge [face] [E_B] = c2;
132 quad_edge [face] [E_C] = c3;
133 quad_edge [face] [E_D] = c4;
135 // ====================================================== setopposedVertex
136 void Globale::setOpposedVertex (EnumHVertex lun, EnumHVertex lautre)
138 h_opposed_vertex [lun] = lautre;
139 h_opposed_vertex [lautre] = lun;
141 // ====================================================== setopposedQuad
142 void Globale::setOpposedQuad (EnumHQuad lun, EnumHQuad lautre)
144 h_opposed_quad [lun] = lautre;
145 h_opposed_quad [lautre] = lun;
147 // ====================================================== setNames
148 void Globale::setNames ()
150 #define SetNameHexaVertex(v) h_vertex_name [v] = #v
151 #define SetNameHexaEdge(e) h_edge_name [e] = #e
152 #define SetNameHexaQuad(q) h_quad_name [q] = #q
154 SetNameHexaVertex ( V_ACE );
155 SetNameHexaVertex ( V_ACF );
156 SetNameHexaVertex ( V_ADF );
157 SetNameHexaVertex ( V_ADE );
158 SetNameHexaVertex ( V_BCE );
159 SetNameHexaVertex ( V_BCF );
160 SetNameHexaVertex ( V_BDF );
161 SetNameHexaVertex ( V_BDE );
163 SetNameHexaEdge ( E_AC );
164 SetNameHexaEdge ( E_AF );
165 SetNameHexaEdge ( E_AD );
166 SetNameHexaEdge ( E_AE );
167 SetNameHexaEdge ( E_BC );
168 SetNameHexaEdge ( E_BF );
169 SetNameHexaEdge ( E_BD );
170 SetNameHexaEdge ( E_BE );
171 SetNameHexaEdge ( E_CE );
172 SetNameHexaEdge ( E_CF );
173 SetNameHexaEdge ( E_DF );
174 SetNameHexaEdge ( E_DE );
176 SetNameHexaQuad ( Q_A );
177 SetNameHexaQuad ( Q_B );
178 SetNameHexaQuad ( Q_C );
179 SetNameHexaQuad ( Q_D );
180 SetNameHexaQuad ( Q_E );
181 SetNameHexaQuad ( Q_F );