Salome HOME
Copyright update 2022
[modules/hexablock.git] / src / HEXABLOCK / HexBiCylinder.hxx
old mode 100755 (executable)
new mode 100644 (file)
index 59b6d28..ed43b95
@@ -1,12 +1,12 @@
 
 // Class : Gestion des tutaux en T (like castles in scotland)
 
-// Copyright (C) 2009-2013  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2022  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 BEGIN_NAMESPACE_HEXA
 
-class BiCylinder : public Elements 
+class HexaExport BiCylinder : public Elements
 {
-public:
-   virtual int countHexa   () { return nbr_hexas ; }
-   virtual int countQuad   () { return nbr_quads ; }
-   virtual int countEdge   () { return nbr_edges ; }
-   virtual int countVertex () { return nbr_vertex ; }
-
 public:
    BiCylinder (Document* doc);
 
-   virtual ~BiCylinder () {}
-
    Hexa*   getHexaIJK   (int part, int nx, int ny, int nz);
    Quad*   getQuadIJ    (int part, int nx, int ny, int nz);
    Quad*   getQuadJK    (int part, int nx, int ny, int nz);
@@ -49,22 +41,38 @@ public:
    Edge*   getEdgeK     (int part, int nx, int ny, int nz);
    Vertex* getVertexIJK (int part, int nx, int ny, int nz);
 
+#ifndef SWIG
+public :
+   virtual ~BiCylinder () {}
                      // Tutaux en T (like castles in scotland)
-   int  crossCylinders (Cylinder* cyl1, Cylinder* cyl2);
+   int makeCylinders (Vertex* ori1, double* vz1, double ray1, double h1, 
+                      Vertex* ori2, double* vz2, double ray2, double h2);
+
+   int makePipes (Vertex* ori1, double* z1, double ri1, double rx1, double h1, 
+                  Vertex* ori2, double* z2, double ri2, double rx2, double h2, 
+                  bool fill=false);
+
+   virtual int countHexa   () { return nbr_hexas ; }
+   virtual int countQuad   () { return nbr_quads ; }
+   virtual int countEdge   () { return nbr_edges ; }
+   virtual int countVertex () { return nbr_vertex ; }
+
+   // int  crossCylinders (Cylinder* cyl1, Cylinder* cyl2); // perime
 
 private :
+
    enum { NbrSlices=5, NbrVslices=NbrSlices+1, NbrCotes=4 };
 
-   void createLittleCyl ();
-   void createBigCyl    ();
-   void adjustLittleSlice (int nx, int nzs);
+   void createLittlePipe ();
+   void createBigPipe    ();
+   void adjustLittleSlice  (int nx, int nzs);
+   void adjustLittleSquare (int nk);
 
-   Vertex* addVertex (double px, double py, double pz, 
+   Vertex* addVertex (double px, double py, double pz,
                       int cyl, int ni, int nj, int nk);
-   Edge* addEdge (Vertex* v1, Vertex* v2, 
+   Edge* addEdge (Vertex* v1, Vertex* v2,
                   int cyl, int dir, int nx, int ny, int nz);
-   Quad* addQuad (Edge* e1, Edge* e2, Edge* e3, Edge* e4, 
+   Quad* addQuad (Edge* e1, Edge* e2, Edge* e3, Edge* e4,
                   int cyl, int dir, int nx, int ny, int nz);
    Hexa* addHexa (Quad* qa, Quad* qb, Quad* qc, Quad* qd, Quad* qe, Quad* qf,
                   int cyl, int nx, int ny, int nz);
@@ -75,33 +83,33 @@ private :
    Quad*   findQuad (Edge* e1, Edge* e2, int dir, int nx, int ny, int nz);
    Hexa*   findHexa (Quad* qa, Quad* qb, int nx, int ny, int nz);
 
-   Edge* findEdge (Vertex* v1, Vertex* v2);
-   Quad* findQuad (Edge*   e1, Edge*   e2);
+   Edge* findEdge (Vertex* v1, Vertex* v2);    // A replacer dans HexElements
 
-   void assoCylinder  (int cyl, double* normal);
-   void assoCylinders (double* snormal, double* gnormal);
+   void assoCylinders ();
    void assoSlice    (int cyl, int nx, int nzs, double* norm);
-   void assoArc (int cyl, int nx, int ny, int nz, string& brep, double ray);
-   int  assoIntersection (int nx, int nzlice, double* snorm, double* bnorm);
+   void assoArc (int cyl, int nx, int ny, int nz, int subid);
+   void assoArc (int cyl, int ny, Vertex* v1, Vertex* v2, int subid);
+   int  assoIntersection (int nx, int nzlice);
 
 
    void addSlice  (int cyl, int i, int k, double h, double r, bool find=false);
-   void fillSlice (int cyl, int nia, int nka, int nib, int nkb, int nic, 
+   void addCarre  (int cyl, int k, double h, double r, bool find=false);
+   void addCube   (int cyl, int k, int i=0, int k1=-1);
+   void fillSlice (int cyl, int nia, int nka, int nib, int nkb, int nic,
                             int nkc, int nid, int nkd, bool med=false);
-   void fillSmallCyl ();
 
    double getAngle (int nj)             { return  (2*((nj)%4)+1)*M_PI/4; }
-   int getKey (int cyl, int ni, int nj, int nk) 
+   int getKey (int cyl, int ni, int nj, int nk)
               { return 1000*(cyl+1) + 100*ni + 10*nj + nk; }
-   int getKey (int cyl, int dd, int ni, int nj, int nk) 
+   int getKey (int cyl, int dd, int ni, int nj, int nk)
               { return 10000*(cyl+1) + 1000*dd + 100*ni + 10*nj + nk; }
 private :
-    Cylinder* cross_cyl1;    // Petit
-    Cylinder* cross_cyl2;    // gros
     Real3     cross_center;
-   
-    map <int,int> map_vertex, map_edge, map_quad, map_hexa;
-    map <int,int> :: iterator it_map;
+    Real3     cross_oribig,   cross_dirbig;
+    Real3     cross_orismall, cross_dirsmall;
+
+    std::map <int,int> map_vertex, map_edge, map_quad, map_hexa;
+    std::map <int,int> :: iterator it_map;
 
     int    nbr_hexas1, nbr_quads1, nbr_edges1, nbr_vertex1;
     double cross_rayext  [V_TWO];
@@ -109,6 +117,9 @@ private :
     double cross_hauteur [V_TWO];
 
     bool   at_right, at_left;
+
+    NewShape* grid_geom;
+#endif
 };
 END_NAMESPACE_HEXA
 #endif