mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-12 09:40:35 +05:00
PAL7358. Add VertexParameters() and EdgeParameters()
This commit is contained in:
parent
efdf984e40
commit
a4f98fe737
@ -26,6 +26,9 @@
|
|||||||
#include <BRepTools.hxx>
|
#include <BRepTools.hxx>
|
||||||
#include <BRepTools_WireExplorer.hxx>
|
#include <BRepTools_WireExplorer.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
|
#include <Extrema_ExtPC.hxx>
|
||||||
|
#include <Extrema_POnCurv.hxx>
|
||||||
|
#include <GeomAdaptor_Curve.hxx>
|
||||||
#include <TopAbs_ShapeEnum.hxx>
|
#include <TopAbs_ShapeEnum.hxx>
|
||||||
#include <TopExp_Explorer.hxx>
|
#include <TopExp_Explorer.hxx>
|
||||||
#include <TopLoc_Location.hxx>
|
#include <TopLoc_Location.hxx>
|
||||||
@ -381,9 +384,24 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
|
|||||||
gp_XYZ& theParams,
|
gp_XYZ& theParams,
|
||||||
const int theShapeID)
|
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( "
|
// MESSAGE( endl<<"SMESH_Block::ComputeParameters( "
|
||||||
// <<thePoint.X()<<", "<<thePoint.Y()<<", "<<thePoint.Z()<<")");
|
// <<thePoint.X()<<", "<<thePoint.Y()<<", "<<thePoint.Z()<<")");
|
||||||
|
|
||||||
myPoint = thePoint.XYZ();
|
myPoint = thePoint.XYZ();
|
||||||
|
|
||||||
myParam.SetCoord( -1,-1,-1 );
|
myParam.SetCoord( -1,-1,-1 );
|
||||||
@ -493,6 +511,42 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
|
|||||||
return true;
|
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
|
//function : GetStateNumber
|
||||||
//purpose :
|
//purpose :
|
||||||
|
@ -122,7 +122,14 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
|
|||||||
bool ComputeParameters (const gp_Pnt& thePoint,
|
bool ComputeParameters (const gp_Pnt& thePoint,
|
||||||
gp_XYZ& theParams,
|
gp_XYZ& theParams,
|
||||||
const int theShapeID = ID_Shell);
|
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 );
|
static void GetFaceEdgesIDs (const int faceID, vector< int >& edgeVec );
|
||||||
// return edges IDs of a face in the order u0, u1, 0v, 1v
|
// return edges IDs of a face in the order u0, u1, 0v, 1v
|
||||||
|
Loading…
Reference in New Issue
Block a user