Salome HOME
First publish of HEXABLOCKcomponant
[modules/hexablock.git] / src / HEXABLOCK / HexCrossElements.hxx
1
2 // Class : Gestion des tutaux en T (like castles in scotland)
3
4 #ifndef __CROSS_ELEMENTS_H
5 #define __CROSS_ELEMENTS_H
6
7 #include "HexElements.hxx"
8
9 BEGIN_NAMESPACE_HEXA
10
11 enum {Cyl1=0, Cyl2=1, NbrSlices1=6, NbrSlices2=4, NbrVSlices1=NbrSlices1+1,
12       NbrVSlices2=NbrSlices2+1 };
13
14 class CrossElements : public Elements 
15 {
16 public:
17    virtual int countHexa   () { return nbr_hexas ; }
18    virtual int countQuad   () { return nbr_quads ; }
19    virtual int countEdge   () { return nbr_edges ; }
20    virtual int countVertex () { return nbr_vertex ; }
21
22 public:
23    CrossElements (Document* doc, EnumGrid type=GR_BICYL);
24
25    virtual ~CrossElements () {}
26
27    Hexa*   getHexaIJK   (int part, int nx, int ny, int nz);
28    Quad*   getQuadIJ    (int part, int nx, int ny, int nz);
29    Quad*   getQuadJK    (int part, int nx, int ny, int nz);
30    Quad*   getQuadIK    (int part, int nx, int ny, int nz);
31    Edge*   getEdgeI     (int part, int nx, int ny, int nz);
32    Edge*   getEdgeJ     (int part, int nx, int ny, int nz);
33    Edge*   getEdgeK     (int part, int nx, int ny, int nz);
34    Vertex* getVertexIJK (int part, int nx, int ny, int nz);
35
36                      // Tutaux en T (like castles in scotland)
37    int  crossCylinders (Cylinder* cyl1, Cylinder* cyl2, bool fill=true);
38    void dump ();
39    void dumpVertex ();
40    void dumpHexas  ();
41
42 private :
43  
44    void resize ();
45    void fillGrid   (int cyl, int deb=-1, int fin=-1);
46    void fillCenter (int cyl, int deb, int fin);
47    void createLittleCyl ();
48    void createBigCyl    ();
49    void addLittleSlice (int i, int k, double x, double a, double b, double c);
50    void addBigSlice    (int i, int k, double z, double a, double b, double c);
51
52    void copyVertex (int i1, int j1, int k1, int i2, int j2, int k2);
53    void copyEdge (int d1, int i, int j, int k, int d2, int i2, int j2, int k2);
54    void copyQuad (int d1, int i, int j, int k, int d2, int i2, int j2, int k2);
55
56    void setVertex (int cyl, int nx, int ny, int nz, double px, double py, 
57                                                                double pz);
58
59    void setVertex (Vertex* vv, int cyl, int nx, int ny, int nz);
60    void setEdge   (Edge* edge, int cyl, int dir, int nx, int ny, int nz);
61    void setQuad   (Quad* quad, int cyl, int dir, int nx, int ny, int nz);
62    void setHexa   (Hexa* cell, int cyl, int nx, int ny, int nz);
63
64    Edge* addEdge   (Vertex* v1, Vertex* v2, int cyl, int dir, int nx, 
65                                                     int ny, int nz);
66    Quad* addQuad   (Edge* e1, Edge* e2, Edge* e3, Edge* e4, int cyl, int dir, 
67                    int nx, int ny, int nz);
68    Hexa* addHexa   (Quad* qa, Quad* qb, Quad* qc, Quad* qd, Quad* qe, Quad* qf,
69                    int cyl, int nx, int ny, int nz);
70
71    int  indVertex (int cyl, int nx, int ny, int nz);
72    int  indHexa   (int cyl, int nx, int ny, int nz);
73    int  indQuad   (int cyl, int dir, int nx, int ny, int nz);
74    int  indEdge   (int cyl, int dir, int nx, int ny, int nz);
75
76    Hexa* findHexa1 (Quad*   q1, Quad*   q2);
77    Edge* findEdge1 (Vertex* v1, Vertex* v2);
78    Quad* findQuad1 (Edge*   e1, Edge*   e2);
79
80 private :
81     bool      is_filled;
82     Cylinder* cross_cyl1;
83     Cylinder* cross_cyl2;
84     Vertex*   cross_center;
85     double    cross_gray1, cross_pray1, cross_igray1, cross_ipray1;
86     double    cross_gray2, cross_pray2, cross_igray2, cross_ipray2;
87     double    cross_he1,   cross_hi1,   cross_he2,    cross_hi2; 
88
89     int  size_hiy, size_h1z, size_h2z, size_v1z, size_v2z;
90     int  size_vz[2], size_hz[2];
91     int  nbr_hexas1, nbr_quads1, nbr_edges1, nbr_vertex1;
92 };
93 END_NAMESPACE_HEXA
94 #endif