PAL7358. Add VertexParameters() and EdgeParameters()

This commit is contained in:
eap 2005-01-26 08:32:21 +00:00
parent efdf984e40
commit a4f98fe737
2 changed files with 63 additions and 2 deletions

View File

@ -26,6 +26,9 @@
#include <BRepTools.hxx>
#include <BRepTools_WireExplorer.hxx>
#include <BRep_Tool.hxx>
#include <Extrema_ExtPC.hxx>
#include <Extrema_POnCurv.hxx>
#include <GeomAdaptor_Curve.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopExp_Explorer.hxx>
#include <TopLoc_Location.hxx>
@ -381,9 +384,24 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
gp_XYZ& theParams,
const int theShapeID)
{
if ( VertexParameters( theShapeID, theParams ))
return true;
if ( IsEdgeID( theShapeID )) {
TEdge& e = myEdge[ theShapeID - ID_Ex00 ];
GeomAdaptor_Curve curve( e.myC3d );
double f = Min( e.myFirst, e.myLast ), l = Max( e.myFirst, e.myLast );
Extrema_ExtPC anExtPC( thePoint, curve, f, l );
int i, nb = anExtPC.IsDone() ? anExtPC.NbExt() : 0;
for ( i = 1; i <= nb; i++ ) {
if ( anExtPC.IsMin( i ))
return EdgeParameters( theShapeID, anExtPC.Point( i ).Parameter(), theParams );
}
return false;
}
// MESSAGE( endl<<"SMESH_Block::ComputeParameters( "
// <<thePoint.X()<<", "<<thePoint.Y()<<", "<<thePoint.Z()<<")");
myPoint = thePoint.XYZ();
myParam.SetCoord( -1,-1,-1 );
@ -493,6 +511,42 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
return true;
}
//=======================================================================
//function : VertexParameters
//purpose : return parameters of a vertex given by TShapeID
//=======================================================================
bool SMESH_Block::VertexParameters(const int theVertexID, gp_XYZ& theParams)
{
switch ( theVertexID ) {
case ID_V000: theParams.SetCoord(0., 0., 0.); return true;
case ID_V100: theParams.SetCoord(1., 0., 0.); return true;
case ID_V110: theParams.SetCoord(1., 1., 0.); return true;
case ID_V010: theParams.SetCoord(0., 1., 0.); return true;
default:;
}
return false;
}
//=======================================================================
//function : EdgeParameters
//purpose : return parameters of a point given by theU on edge
//=======================================================================
bool SMESH_Block::EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& theParams)
{
if ( IsEdgeID( theEdgeID )) {
vector< int > vertexVec;
GetEdgeVertexIDs( theEdgeID, vertexVec );
VertexParameters( vertexVec[0], theParams );
TEdge& e = myEdge[ theEdgeID - ID_Ex00 ];
double param = ( theU - e.myFirst ) / ( e.myLast - e.myFirst );
theParams.SetCoord( e.myCoordInd, param );
return true;
}
return false;
}
//=======================================================================
//function : GetStateNumber
//purpose :

View File

@ -122,7 +122,14 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
bool ComputeParameters (const gp_Pnt& thePoint,
gp_XYZ& theParams,
const int theShapeID = ID_Shell);
// compute point parameters in the block
// compute point parameters in the block.
// Note: for edges, it is better to use EdgeParameters()
bool VertexParameters(const int theVertexID, gp_XYZ& theParams);
// return parameters of a vertex given by TShapeID
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