Salome HOME
First publish of HEXABLOCKcomponant
[modules/hexablock.git] / src / HEXABLOCK / hexa_base.hxx
1
2 // Incl : Common definitions for HEXA-BLOCK
3
4 #ifndef _HEXA_BASE_H_
5 #define _HEXA_BASE_H_
6
7 #include <cstdio>
8 #include <cstring>
9
10                     // Conventions C Ansi compatibles
11 typedef char*       pchar;
12 typedef const char* cpchar;
13 typedef FILE*       pfile;
14
15
16 #define Cestegal(c1,c2)      !strcmp(c1,c2)
17 #define Cestdifferent(c1,c2)  strcmp(c1,c2)
18 #define Cestvide(c1)    !c1[0]
19 #define Cestnonvide(c1)  c1[0]
20
21                      // Pour rendre les operateurs plus visibles
22 #define NOT    !  
23 #define XOR    ^
24 #define MODULO %
25 #define INOT   `
26 // #define IOR    |
27 #define IAND   &
28                     // Chaines de bits 
29 #define DeuxPuissance(n) (1 << (n))
30
31                      // Codes retour d'une fonction 
32 #define HOK  0       // Code retour=0 :  deroulement correct
33 #define HERR 1       // Code retour>0 = numero d'erreur, 1 par defaut
34 #define NOTHING -1   // Code retour fonction de recherche d'un index
35
36 #define EOL '\n'
37 #define EOS 0
38 #define CHVIDE ""
39                       // Calculs reels en 3D
40 typedef double Real;
41 #define ZEROR 0.0
42 #define UNR   1.0
43 #define DEMI  0.5
44 #define DIM2  2
45
46 // enum EnumCoord { dir_x, dir_y, dir_z, DIM3 };
47
48 #ifndef PI
49 #define PI    3.1415926535898
50 #endif
51                        // Conventions C++
52 #include <string>
53 #include <vector>
54                        // Impressions de mise au point
55 #include <iostream>
56 using namespace std;
57
58 #define Display(x)      cout << " ... " #x " = " << x << endl
59 #define Echo(m)         cout << " _______________ " << m << endl
60
61 //  #define Libere(obj)     { if (obj!=NULL) free (obj)      ;  obj=NULL; }
62 //  #define Destroy(obj)    { delete obj       ;  obj=NULL   ;            }
63 //  #define Deltable(table) { delete [] table  ;  table=NULL ;            }
64
65 // ---------------------------------- Definitions propres a HEXA 
66 #define HEXA_NS Hex
67 #define BEGIN_NAMESPACE_HEXA namespace Hex {
68 #define END_NAMESPACE_HEXA   }
69
70 /* -----------------------------------------------------
71
72                 // ---- Numerotation des faces (%x) 
73                    
74               +----bf-----+
75              /|          /|
76            bc |   B    bd |
77            /  |        /  |
78           +----be-----+   |   
79           |  cf     F |   df
80           | C |       | D |             z
81          ce   | E     de  |             ^
82           |   +----af-|---+             |   y
83           |  /        |  /              |  /
84           | ac    A   | ad              | /
85           |/          |/                |/
86           +----ae-----+                 +----->  x
87                 
88  * ----------------------------------------------------- */
89 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
90 BEGIN_NAMESPACE_HEXA
91
92 pchar get_temp_name (cpchar format, pchar nomfic);
93
94 enum EnumCoord  { dir_x, dir_y, dir_z, DIM3 };
95 enum EnumElt    { EL_NONE, EL_VERTEX, EL_EDGE, EL_QUAD, EL_HEXA, 
96                   EL_REMOVED, EL_MAXI };
97
98 enum EnumGroup  { HexaCell, QuadCell, EdgeCell, 
99                   HexaNode, QuadNode, EdgeNode, Vertex_Node};
100
101                 //  Modes de remplissage des grilles cylindriques
102 enum EnumCyl   { CYL_NOFILL, CYL_CL4, CYL_CL6, CYL_CLOSED, CYL_PEER, CYL_ODD};
103 enum EnumGrid   { GR_NONE, GR_CARTESIAN, GR_CYLINDRIC, GR_SPHERIC, GR_JOINT, 
104                   GR_BICYL, GR_BIPIPE };
105                 //  Sommets de la decomposition canonique du bicylindre
106                 // 0    1     2    3     4    5     6    7     8
107 enum EnumVCyl   { S_E, S_NE, S_N, S_NW, S_W, S_SW, S_S, S_SE, S_MAXI };
108
109 enum KindLaw    { Uniform, Arithmetic, Geometric };
110
111 enum EnumOrient { OR_FRONT, OR_LEFT, OR_RIGHT, OR_BACK }; // respecter l'ordre
112 enum EnumMark   { IS_NONE=-1,  IS_MARRIED=-2 };
113 enum EnumCount  { NO_COUNTED=-3, NO_USED=-2, IS_USED=-1};
114
115 enum EnumVertex { V_AMONT, V_AVAL, V_TWO };
116 enum EnumQuad   { E_A, E_B, E_C, E_D, QUAD4 };
117
118           //      z=0   z=1   y=0   y=1   x=0  x=1
119 enum EnumHQuad   {Q_A,  Q_B,  Q_C,  Q_D,  Q_E, Q_F,  HQ_MAXI};
120
121 enum EnumHEdge   {E_AC, E_AD, E_BC, E_BD, 
122                   E_AE, E_AF, E_BE, E_BF,
123                   E_CE, E_CF, E_DE, E_DF,  HE_MAXI };
124
125 enum EnumHVertex {V_ACE, V_ACF, V_ADE, V_ADF, V_BCE, V_BCF, V_BDE, V_BDF, 
126                   HV_MAXI };
127
128 class Document;
129 class EltBase;
130
131 class Hexa;
132 class Quad;
133 class Edge;
134 class Vertex;
135
136 class Cylinder;
137 class Pipe;
138 class Prism;
139
140 class Vector;
141 class Matrix;
142 class Cloner;
143 class XmlWriter;
144
145 class  Elements;
146 class  GridElements;
147 class  SphericalGrid;
148 class  CrossElements;
149
150 typedef std::vector <Quad*> Quads;
151 typedef std::vector <Edge*> Edges;
152
153 struct  StrOrient;
154 struct  Globale;
155 class   Shape;
156 class   Propagation;
157 class   Law;
158 class   Group;
159
160 END_NAMESPACE_HEXA
161
162 #endif