Salome HOME
Updated copyright comment
[modules/hexablock.git] / src / HEXABLOCK / hexa_base.hxx
old mode 100755 (executable)
new mode 100644 (file)
index 20e0cd0..aee9961
@@ -1,12 +1,12 @@
 
 // Incl : Common definitions for HEXA-BLOCK
 
-// Copyright (C) 2009-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2024  CEA, EDF
 //
 // 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
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+#define DumpActif true
+
 #ifndef _HEXA_BASE_H_
 #define _HEXA_BASE_H_
 
+#include "Hex_defines.hxx"
+
 #include <cstdio>
 #include <cstring>
 
@@ -37,16 +41,19 @@ typedef FILE*       pfile;
 #define Cestnonvide(c1)  c1[0]
 
                      // Pour rendre les operateurs plus visibles
-#define NOT    !  
+                     // ... mais ne passe pas avec ce @#! de swig
+#ifndef SWIG
+#define NOT    !
 #define XOR    ^
 #define MODULO %
 #define INOT   `
 // #define IOR    |
 #define IAND   &
-                    // Chaines de bits 
+#endif    // Swig
+                    // Chaines de bits
 #define DeuxPuissance(n) (1 << (n))
 
-                     // Codes retour d'une fonction 
+                     // Codes retour d'une fonction
 #define HOK  0       // Code retour=0 :  deroulement correct
 #define HERR 1       // Code retour>0 = numero d'erreur, 1 par defaut
 #define NOTHING -1   // Code retour fonction de recherche d'un index
@@ -64,35 +71,38 @@ typedef FILE*       pfile;
 // typedef double Real;
 // typedef double Real3 [DIM3];
 
-#ifndef PI
-#define PI    3.1415926535898
+#ifndef M_PI
+#define M_PI  3.14159265358979323846
 #endif
+#define Degre2Radian M_PI/180
+
                        // Conventions C++
 #include <string>
 #include <vector>
+
+typedef const std::string& rcstring;
                        // Impressions de mise au point
 #include <iostream>
-using namespace std;
 
-#define HexDisplay(x)      cout << " ... " #x " = " << x << endl
-#define PutData(x)      cout << " ... " #x " = " << x << endl
-#define PutCoord(x)      cout << " ... " #x " = (" << x[0] << ", " \
-                              << x[1] << ", " << x[2] << ")"  << endl
-#define Echo(m)         cout << " _______________ " << m << endl
+#define HexDisplay(x)   std::cout << " ... " #x " = " << x << std::endl
+#define PutData(x)      std::cout << " ... " #x " = " << x << std::endl
+#define PutCoord(x)     std::cout << " ... " #x " = (" << x[0] << ", " \
+                              << x[1] << ", " << x[2] << ")"  << std::endl
+#define Echo(m)         std::cout << " _______________ " << m << std::endl
 
 //  #define Libere(obj)     { if (obj!=NULL) free (obj)      ;  obj=NULL; }
 //  #define Destroy(obj)    { delete obj       ;  obj=NULL   ;            }
 //  #define Deltable(table) { delete [] table  ;  table=NULL ;            }
 
-// ---------------------------------- Definitions propres a HEXA 
+// ---------------------------------- Definitions propres a HEXA
 #define HEXA_NS Hex
 #define BEGIN_NAMESPACE_HEXA namespace Hex {
 #define END_NAMESPACE_HEXA   }
 
 /* -----------------------------------------------------
 
-                // ---- Numerotation des faces (%x) 
-                   
+                // ---- Numerotation des faces (%x)
+
        6=bed  +----bd-----+ bdf=7
              /|          /|
            be |   B    bf |
@@ -106,23 +116,35 @@ using namespace std;
           | ae    A   | af              | /
           |/          |/                |/
     0=ace +----ac-----+ acf=1           +----->  x
-                
+
  * ----------------------------------------------------- */
 
 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
+
+class  TopoDS_Shape;
+class  BRepAdaptor_Curve;
+
 BEGIN_NAMESPACE_HEXA
 
 enum EnumCoord  { dir_x, dir_y, dir_z, DIM3 };
-enum EnumElt    { EL_NONE, EL_VERTEX, EL_EDGE, EL_QUAD, EL_HEXA, EL_VECTOR, 
-                  EL_GRID, EL_CYLINDER, EL_PIPE, EL_REMOVED, EL_MAXI };
+enum EnumElt    { EL_NONE, EL_VERTEX, EL_EDGE, EL_QUAD, EL_HEXA, EL_VECTOR,
+                  EL_GRID, EL_CYLINDER, EL_PIPE, EL_GROUP, EL_LAW,
+                  EL_SHAPE, EL_SUBSHAPE, EL_PROPAGATION,
+                  EL_DOCU,  EL_REMOVED, EL_MAXI };
+
+const cpchar ABR_TYPES = "xveqhwtcpglsupdz???";
 
-enum EnumGroup  { HexaCell, QuadCell, EdgeCell, 
+enum EnumGroup  { HexaCell, QuadCell, EdgeCell,
                   HexaNode, QuadNode, EdgeNode, VertexNode};
 
+                  // Origine des shapes
+enum EnumShape { SH_NONE,  SH_IMPORT, SH_CYLINDER, SH_INTER, SH_SPHERE,
+                 SH_CLOUD, SH_EXTRUD };
+
                 //  Modes de remplissage des grilles cylindriques
 enum EnumCyl   { CYL_NOFILL, CYL_CL4, CYL_CL6, CYL_CLOSED, CYL_PEER, CYL_ODD};
-enum EnumGrid   { GR_NONE, GR_CARTESIAN, GR_CYLINDRIC, GR_SPHERIC, GR_JOINT, 
-                  GR_BICYL, GR_BIPIPE, GR_REPLACE, 
+enum EnumGrid   { GR_NONE, GR_CARTESIAN, GR_CYLINDRIC, GR_SPHERIC, GR_JOINT,
+                  GR_BICYL, GR_BIPIPE, GR_REPLACE,
                   GR_HEMISPHERIC, GR_RIND, GR_PART_SPHERIC, GR_PART_RIND };
                 //  Sommets de la decomposition canonique du bicylindre
                 // 0    1     2    3     4    5     6    7     8
@@ -140,17 +162,22 @@ enum EnumQuad   { E_A, E_B, E_C, E_D, QUAD4 };
           //      z=0   z=1   y=0   y=1   x=0  x=1
 enum EnumHQuad   {Q_A,  Q_B,  Q_C,  Q_D,  Q_E, Q_F,  HQ_MAXI};
 
-enum EnumHEdge   {E_AC, E_AD, E_BC, E_BD, 
+enum EnumHEdge   {E_AC, E_AD, E_BC, E_BD,
                   E_AE, E_AF, E_BE, E_BF,
                   E_CE, E_CF, E_DE, E_DF,  HE_MAXI };
 
-enum EnumHVertex {V_ACE, V_ACF, V_ADE, V_ADF, V_BCE, V_BCF, V_BDE, V_BDF, 
+enum EnumHVertex {V_ACE, V_ACF, V_ADE, V_ADF, V_BCE, V_BCF, V_BDE, V_BDF,
                   HV_MAXI };
 
 enum EnumQDirection {Q_INSIDE, Q_DIRECT, Q_INVERSE, Q_UNDEFINED, Q_WAITING };
 
+enum EnumKindOfShape {KS_Line, KS_Circle, KS_Ellipse, KS_Hyperbola,
+                      KS_Parabola, KS_BezierCurve, KS_BSplineCurve,
+                      KS_OtherCurve, KS_None=-1 };
+
 enum { CylSmall=0, CylBig=1, NxInt=1, NxExt=2 };
 
+class Hex;
 class Document;
 class EltBase;
 
@@ -170,12 +197,9 @@ class XmlWriter;
 class XmlTree;
 
 class  Elements;
-class  GridElements;
-class  SphericalGrid;
-class  CrossElements;
+class  BiCylinder;
 
 struct  StrOrient;
-class   Shape;
 class   Globale;
 class   Propagation;
 class   Law;
@@ -184,46 +208,90 @@ class   Group;
 class   AnaQuads;
 class   Pattern;
 
+class   Shape;
+class   SubShape;
+class   VertexShape;
+class   BiCylinderShape;
+class   EdgeShape;
+class   FaceShape;
+class   AssoEdge;
+class   NewShape;  // 1) Shape -> OldShape, 2) NewShape->Shape
+typedef Shape OldShape;
+
 typedef std::vector <Hexa*>  Hexas;
 typedef std::vector <Quad*>  Quads;
 typedef std::vector <Edge*>  Edges;
 typedef std::vector <Shape*> Shapes;
-typedef std::vector <double> RealVector;
+typedef std::vector <Vertex*> Vertices;
+
+typedef std::vector <NewShape*>  NewShapes;
+typedef std::vector <SubShape*>  SubShapes;
+typedef std::vector <AssoEdge*>  AssoEdges;
+typedef std::vector <FaceShape*> FaceShapes;
+typedef std::vector <EdgeShape*> EdgeShapes;
+
+typedef std::vector <EltBase*>    TabElts;
+typedef std::vector <double>      RealVector;
+typedef std::vector <int>         IntVector;
+typedef std::vector <std::string> TabText;
 
 typedef double Real;
 typedef double Real3 [DIM3];
 
+                                  // a cause de Swig
+#ifndef HEXABLOCKENGINE_EXPORT 
+#define HEXABLOCKENGINE_EXPORT 
+#endif 
+
+#ifndef HexaExport 
+#define HexaExport 
+#endif 
+
                         // Quelques fonctions :
 
-pchar   get_temp_name (cpchar format, pchar nomfic);
-void    fatal_error   (cpchar format, cpchar info1=NULL, cpchar info2=NULL);
+HexaExport pchar   get_temp_name (cpchar format, pchar nomfic);
+HexaExport void    fatal_error   (cpchar format, cpchar info1=NULL, cpchar info2=NULL);
+
+HexaExport double  prod_scalaire  (double v1[], double v2[]);
+HexaExport double* prod_vectoriel (double v1[], double v2[], double v3[]);
+HexaExport double  prod_mixte     (double vi[], double vj[], double vk[]);
+
+HexaExport inline  double deg2radians (double angle) {  return (angle*M_PI/180.0); }
+HexaExport inline  double rad2degres  (double angle) {  return (angle*180.0/M_PI); }
 
-double  prod_scalaire  (double v1[], double v2[]);
-double* prod_vectoriel (double v1[], double v2[], double v3[]);
-double  prod_mixte     (double vi[], double vj[], double vk[]);
+HexaExport double  calc_norme     (double v1[]);
+HexaExport double  calc_distance  (double v1[],  double v2[]);
+HexaExport double  calc_d2        (double v1[],  double v2[]);
+HexaExport double  calc_d2        (double v1[], double v2[]);
+HexaExport void    calc_vecteur   (double pta[], double ptb[], double vab[]);
+HexaExport void    copy_vecteur   (double va [], double vb []);
+HexaExport void    calc_milieu    (double pta[], double ptb[], double milieu[]);
+HexaExport int     normer_vecteur (double v1[]);
 
-double  calc_norme     (double v1[]);
-double  calc_distance  (double v1[], double v2[]);
-void    calc_vecteur   (double pta[], double ptb[], double vab[]);
-void    calc_milieu    (double pta[], double ptb[], double milieu[]);
-int     normer_vecteur (double v1[]);
+HexaExport double  carre       (double val);
+HexaExport bool    same_coords (double* pa, double* pb, double epsilon=1e-6);
 
-double carre       (double val);
-bool   same_coords (double* pa, double* pb, double epsilon=1e-6);
+HexaExport bool requals (const double  v1, const double  v2);
+HexaExport bool requals (const double* v1, const double* v2);
 
-bool   on_debug();
-int    niv_debug();
+HexaExport bool   on_debug();     // == getenv ("HEXA_DB") > 0
+HexaExport bool   in_test ();     // == getenv ("HEXA_TEST") > 0
+HexaExport int    niv_debug();    // Implemente prochainement
 
-void   set_minus (string& chaine);
+HexaExport void   set_minus (std::string& chaine);
 
-bool   special_option ();
-void   set_special_option (bool opt);
+HexaExport bool   special_option ();
+HexaExport void   set_special_option (bool opt);
+
+HexaExport int    sizeof_file (cpchar filename);
+HexaExport char*  read_file   (cpchar filename, int& size);
+HexaExport cpchar get_time   (std::string& buffer);
+HexaExport int make_basename (cpchar filename, std::string& base);
 
 const double Epsil   = 1e-6;
 const double UnEpsil = 0.999999;
 const double Epsil2  = 1e-12;
 
-
 END_NAMESPACE_HEXA
 
 #endif