From: eap Date: Tue, 1 Feb 2005 07:43:14 +0000 (+0000) Subject: PAL7913. Add static ShellPoint() and several methos about sub-shapes indexation X-Git-Tag: V2_2_0b2~6 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=316e159045c14e664bf3004032f0fe3d201fcf9e PAL7913. Add static ShellPoint() and several methos about sub-shapes indexation --- diff --git a/src/SMESH/SMESH_Block.hxx b/src/SMESH/SMESH_Block.hxx index 7258fdeff..155104866 100644 --- a/src/SMESH/SMESH_Block.hxx +++ b/src/SMESH/SMESH_Block.hxx @@ -68,6 +68,16 @@ class SMESH_Block: public math_FunctionSetWithDerivatives 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 ); } @@ -77,13 +87,50 @@ class SMESH_Block: public math_FunctionSetWithDerivatives 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, -// TopTools_IndexedMapOfShape& theShapeIDMap 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 - 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; } - // 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; @@ -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 + static bool ShellPoint(const gp_XYZ& theParams, + const vector& 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); @@ -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 - 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 )); @@ -160,7 +201,10 @@ class SMESH_Block: public math_FunctionSetWithDerivatives 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) ; @@ -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 (); - static ostream& DumpShapeID (const int theBlockShapeID, ostream& stream); - // DEBUG: dump an id of a block sub-shape - private: struct TEdge {