Salome HOME
PAL7913. Add static ShellPoint() and several methos about sub-shapes indexation
authoreap <eap@opencascade.com>
Tue, 1 Feb 2005 07:43:14 +0000 (07:43 +0000)
committereap <eap@opencascade.com>
Tue, 1 Feb 2005 07:43:14 +0000 (07:43 +0000)
src/SMESH/SMESH_Block.hxx

index 7258fdeff7d656cc7f50d7dcf43ddd0b472fcfa4..155104866ea5c0a09bde4a6c075d3e26b02ba10a 100644 (file)
@@ -68,6 +68,16 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
 
     ID_Shell
     };
 
     ID_Shell
     };
+
+
+ public: // methods about ids of the block sub-shapes
+
+  static int NbVertices()  { return  8; }
+  static int NbEdges()     { return 12; }
+  static int NbFaces()     { return  6; }
+  static int NbSubShapes() { return ID_Shell; }
+  // to avoid magic numbers when allocating memory for subshapes
+
   static inline bool IsVertexID( int theShapeID )
   { return ( theShapeID >= ID_V000 && theShapeID <= ID_V111 ); }
 
   static inline bool IsVertexID( int theShapeID )
   { return ( theShapeID >= ID_V000 && theShapeID <= ID_V111 ); }
 
@@ -77,13 +87,50 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   static inline bool IsFaceID( int theShapeID )
   { return ( theShapeID >= ID_Fxy0 && theShapeID <= ID_F1yz ); }
 
   static inline bool IsFaceID( int theShapeID )
   { return ( theShapeID >= ID_Fxy0 && theShapeID <= ID_F1yz ); }
 
+  static int ShapeIndex( int theShapeID )
+  {
+    if ( IsVertexID( theShapeID )) return theShapeID - ID_V000;
+    if ( IsEdgeID( theShapeID ))   return theShapeID - ID_Ex00;
+    if ( IsFaceID( theShapeID ))   return theShapeID - ID_Fxy0;
+    return 0;
+  }
+  // return index [0-...] for each type of sub-shapes,
+  // for example :
+  // ShapeIndex( ID_Ex00 ) == 0
+  // ShapeIndex( ID_Ex10 ) == 1
+
+  static void GetFaceEdgesIDs (const int faceID, vector< int >& edgeVec );
+  // return edges IDs of a face in the order u0, u1, 0v, 1v
+
+  static void GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec );
+  // return vertex IDs of an edge
+
+  static int GetCoordIndOnEdge (const int theEdgeID)
+  { return (theEdgeID < ID_E0y0) ? 1 : (theEdgeID < ID_E00z) ? 2 : 3; }
+  // return an index of a coordinate which varies along the edge
+
+  static double* GetShapeCoef (const int theShapeID);
+  // for theShapeID( TShapeID ), returns 3 coefficients used
+  // to compute an addition of an on-theShape point to coordinates
+  // of an in-shell point. If an in-shell point has parameters (Px,Py,Pz),
+  // then the addition of a point P is computed as P*kx*ky*kz and ki is
+  // defined by the returned coef like this:
+  // ki = (coef[i] == 0) ? 1 : (coef[i] < 0) ? 1 - Pi : Pi
+
+  static int GetShapeIDByParams ( const gp_XYZ& theParams );
+  // define an id of the block sub-shape by point parameters
+
+  static ostream& DumpShapeID (const int theBlockShapeID, ostream& stream);
+  // DEBUG: dump an id of a block sub-shape
+
+
+ public: // initialization
 
   SMESH_Block (): myNbIterations(0), mySumDist(0.) {}
 
   bool LoadBlockShapes(const TopoDS_Shell&         theShell,
                        const TopoDS_Vertex&        theVertex000,
                        const TopoDS_Vertex&        theVertex001,
 
   SMESH_Block (): myNbIterations(0), mySumDist(0.) {}
 
   bool LoadBlockShapes(const TopoDS_Shell&         theShell,
                        const TopoDS_Vertex&        theVertex000,
                        const TopoDS_Vertex&        theVertex001,
-//                       TopTools_IndexedMapOfShape& theShapeIDMap
                        TopTools_IndexedMapOfOrientedShape& theShapeIDMap );
   // add sub-shapes of theBlock to theShapeIDMap so that they get
   // IDs acoording to enum TShapeID
                        TopTools_IndexedMapOfOrientedShape& theShapeIDMap );
   // add sub-shapes of theBlock to theShapeIDMap so that they get
   // IDs acoording to enum TShapeID
@@ -95,14 +142,14 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   // prepare to work with theVolume and
   // return nodes in the order of TShapeID enum
 
   // prepare to work with theVolume and
   // return nodes in the order of TShapeID enum
 
-  static int GetShapeIDByParams ( const gp_XYZ& theParams );
 // define an id of the block sub-shape by point parameters
+
public: // define coordinates by parameters
 
   bool VertexPoint( const int theVertexID, gp_XYZ& thePoint ) const {
     if ( !IsVertexID( theVertexID ))           return false;
     thePoint = myPnt[ theVertexID - ID_V000 ]; return true;
   }
 
   bool VertexPoint( const int theVertexID, gp_XYZ& thePoint ) const {
     if ( !IsVertexID( theVertexID ))           return false;
     thePoint = myPnt[ theVertexID - ID_V000 ]; return true;
   }
-  // return vertex coordinates
+  // return vertex coordinates, parameters are defined by theVertexID
 
   bool EdgePoint( const int theEdgeID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsEdgeID( theEdgeID ))                                 return false;
 
   bool EdgePoint( const int theEdgeID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsEdgeID( theEdgeID ))                                 return false;
@@ -119,6 +166,16 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   bool ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const;
   // return coordinates of a point in shell
 
   bool ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const;
   // return coordinates of a point in shell
 
+  static bool ShellPoint(const gp_XYZ&         theParams,
+                         const vector<gp_XYZ>& thePointOnShape,
+                         gp_XYZ&               thePoint );
+  // computes coordinates of a point in shell by points on sub-shapes;
+  // thePointOnShape[ subShapeID ] must be a point on a subShape;
+  // thePointOnShape.size() == ID_Shell, thePointOnShape[0] not used
+
+
+ public: // define parameters by coordinates
+
   bool ComputeParameters (const gp_Pnt& thePoint,
                           gp_XYZ&       theParams,
                           const int     theShapeID = ID_Shell);
   bool ComputeParameters (const gp_Pnt& thePoint,
                           gp_XYZ&       theParams,
                           const int     theShapeID = ID_Shell);
@@ -131,26 +188,10 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   bool EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& theParams);
   // return parameters of a point given by theU on edge
 
   bool EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& theParams);
   // return parameters of a point given by theU on edge
 
-  static void GetFaceEdgesIDs (const int faceID, vector< int >& edgeVec );
-  // return edges IDs of a face in the order u0, u1, 0v, 1v
 
 
-  static void GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec );
-  // return vertex IDs of an edge
+ public: // services
 
 
-  static int GetCoordIndOnEdge (const int theEdgeID)
-  { return (theEdgeID < ID_E0y0) ? 1 : (theEdgeID < ID_E00z) ? 2 : 3; }
-  // return an index of a coordinate which varies along the edge
-
-  static double* GetShapeCoef (const int theShapeID);
-  // for theShapeID( TShapeID ), returns 3 coefficients used
-  // to compute an addition of an on-theShape point to coordinates
-  // of an in-shell point. If an in-shell point has parameters (Px,Py,Pz),
-  // then the addition of a point P is computed as P*kx*ky*kz and ki is
-  // defined by the returned coef like this:
-  // ki = (coef[i] == 0) ? 1 : (coef[i] < 0) ? 1 - Pi : Pi
-
-  static bool IsForwardEdge (const TopoDS_Edge &         theEdge, 
-                             //TopTools_IndexedMapOfShape& theShapeIDMap
+  static bool IsForwardEdge (const TopoDS_Edge &                 theEdge,
                              TopTools_IndexedMapOfOrientedShape& theShapeIDMap) {
     int v1ID = theShapeIDMap.FindIndex( TopExp::FirstVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     int v2ID = theShapeIDMap.FindIndex( TopExp::LastVertex( theEdge ).Oriented( TopAbs_FORWARD ));
                              TopTools_IndexedMapOfOrientedShape& theShapeIDMap) {
     int v1ID = theShapeIDMap.FindIndex( TopExp::FirstVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     int v2ID = theShapeIDMap.FindIndex( TopExp::LastVertex( theEdge ).Oriented( TopAbs_FORWARD ));
@@ -160,7 +201,10 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
 
   static void Swap(double& a, double& b) { double tmp = a; a = b; b = tmp; }
 
 
   static void Swap(double& a, double& b) { double tmp = a; a = b; b = tmp; }
 
-  // methods of math_FunctionSetWithDerivatives
+
+ public:
+  // methods of math_FunctionSetWithDerivatives used internally
+  // to define parameters by coordinates
   Standard_Integer NbVariables() const;
   Standard_Integer NbEquations() const;
   Standard_Boolean Value(const math_Vector& X,math_Vector& F) ;
   Standard_Integer NbVariables() const;
   Standard_Integer NbEquations() const;
   Standard_Boolean Value(const math_Vector& X,math_Vector& F) ;
@@ -168,9 +212,6 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   Standard_Boolean Values(const math_Vector& X,math_Vector& F,math_Matrix& D) ;
   Standard_Integer GetStateNumber ();
 
   Standard_Boolean Values(const math_Vector& X,math_Vector& F,math_Matrix& D) ;
   Standard_Integer GetStateNumber ();
 
-  static ostream& DumpShapeID (const int theBlockShapeID, ostream& stream);
-  // DEBUG: dump an id of a block sub-shape
-
  private:
 
   struct TEdge {
  private:
 
   struct TEdge {