mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-22 14:50:33 +05:00
Mantis issue 0021454: [CEA] non regression test fails : problem with group creation. A fix by Peter Kurnev.
This commit is contained in:
parent
03a8be76be
commit
d394961f4a
@ -18,16 +18,14 @@
|
|||||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
//
|
//
|
||||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
//
|
|
||||||
|
|
||||||
// File: GEOMAlgo_FinderShapeOn1.cxx
|
// File: GEOMAlgo_FinderShapeOn1.cxx
|
||||||
// Created: Fri Mar 4 10:31:06 2005
|
// Created: Fri Mar 4 10:31:06 2005
|
||||||
// Author: Peter KURNEV
|
// Author: Peter KURNEV
|
||||||
// <pkv@irinox>
|
|
||||||
//
|
|
||||||
#include <GEOMAlgo_FinderShapeOn1.ixx>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
|
#include <GEOMAlgo_FinderShapeOn1.ixx>
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include <Precision.hxx>
|
#include <Precision.hxx>
|
||||||
#include <TColStd_Array1OfInteger.hxx>
|
#include <TColStd_Array1OfInteger.hxx>
|
||||||
@ -81,7 +79,7 @@
|
|||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GEOMAlgo_FinderShapeOn1
|
//function : GEOMAlgo_FinderShapeOn1
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
GEOMAlgo_FinderShapeOn1::GEOMAlgo_FinderShapeOn1()
|
GEOMAlgo_FinderShapeOn1::GEOMAlgo_FinderShapeOn1()
|
||||||
:
|
:
|
||||||
@ -95,14 +93,14 @@ GEOMAlgo_FinderShapeOn1::GEOMAlgo_FinderShapeOn1()
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ~
|
//function : ~
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
GEOMAlgo_FinderShapeOn1::~GEOMAlgo_FinderShapeOn1()
|
GEOMAlgo_FinderShapeOn1::~GEOMAlgo_FinderShapeOn1()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetSurface
|
//function : SetSurface
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::SetSurface(const Handle(Geom_Surface)& aS)
|
void GEOMAlgo_FinderShapeOn1::SetSurface(const Handle(Geom_Surface)& aS)
|
||||||
{
|
{
|
||||||
@ -110,7 +108,7 @@ void GEOMAlgo_FinderShapeOn1::SetSurface(const Handle(Geom_Surface)& aS)
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Surface
|
//function : Surface
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
const Handle(Geom_Surface)& GEOMAlgo_FinderShapeOn1::Surface() const
|
const Handle(Geom_Surface)& GEOMAlgo_FinderShapeOn1::Surface() const
|
||||||
{
|
{
|
||||||
@ -118,7 +116,7 @@ const Handle(Geom_Surface)& GEOMAlgo_FinderShapeOn1::Surface() const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetShapeType
|
//function : SetShapeType
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::SetShapeType(const TopAbs_ShapeEnum aType)
|
void GEOMAlgo_FinderShapeOn1::SetShapeType(const TopAbs_ShapeEnum aType)
|
||||||
{
|
{
|
||||||
@ -126,7 +124,7 @@ void GEOMAlgo_FinderShapeOn1::SetShapeType(const TopAbs_ShapeEnum aType)
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ShapeType
|
//function : ShapeType
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
TopAbs_ShapeEnum GEOMAlgo_FinderShapeOn1::ShapeType()const
|
TopAbs_ShapeEnum GEOMAlgo_FinderShapeOn1::ShapeType()const
|
||||||
{
|
{
|
||||||
@ -134,7 +132,7 @@ TopAbs_ShapeEnum GEOMAlgo_FinderShapeOn1::ShapeType()const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetState
|
//function : SetState
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::SetState(const GEOMAlgo_State aState)
|
void GEOMAlgo_FinderShapeOn1::SetState(const GEOMAlgo_State aState)
|
||||||
{
|
{
|
||||||
@ -142,7 +140,7 @@ void GEOMAlgo_FinderShapeOn1::SetState(const GEOMAlgo_State aState)
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : State
|
//function : State
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
GEOMAlgo_State GEOMAlgo_FinderShapeOn1::State() const
|
GEOMAlgo_State GEOMAlgo_FinderShapeOn1::State() const
|
||||||
{
|
{
|
||||||
@ -150,7 +148,7 @@ GEOMAlgo_State GEOMAlgo_FinderShapeOn1::State() const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetNbPntsMin
|
//function : SetNbPntsMin
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::SetNbPntsMin(const Standard_Integer aNb)
|
void GEOMAlgo_FinderShapeOn1::SetNbPntsMin(const Standard_Integer aNb)
|
||||||
{
|
{
|
||||||
@ -158,7 +156,7 @@ void GEOMAlgo_FinderShapeOn1::SetNbPntsMin(const Standard_Integer aNb)
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : NbPntsMin
|
//function : NbPntsMin
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMin()const
|
Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMin()const
|
||||||
{
|
{
|
||||||
@ -166,7 +164,7 @@ Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMin()const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SetNbPntsMax
|
//function : SetNbPntsMax
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::SetNbPntsMax(const Standard_Integer aNb)
|
void GEOMAlgo_FinderShapeOn1::SetNbPntsMax(const Standard_Integer aNb)
|
||||||
{
|
{
|
||||||
@ -174,7 +172,7 @@ void GEOMAlgo_FinderShapeOn1::SetNbPntsMax(const Standard_Integer aNb)
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : NbPntsMax
|
//function : NbPntsMax
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMax()const
|
Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMax()const
|
||||||
{
|
{
|
||||||
@ -182,7 +180,7 @@ Standard_Integer GEOMAlgo_FinderShapeOn1::NbPntsMax()const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: MSS
|
// function: MSS
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
const GEOMAlgo_IndexedDataMapOfShapeState& GEOMAlgo_FinderShapeOn1::MSS() const
|
const GEOMAlgo_IndexedDataMapOfShapeState& GEOMAlgo_FinderShapeOn1::MSS() const
|
||||||
{
|
{
|
||||||
@ -190,7 +188,7 @@ const GEOMAlgo_IndexedDataMapOfShapeState& GEOMAlgo_FinderShapeOn1::MSS() const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: Shapes
|
// function: Shapes
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
const TopTools_ListOfShape& GEOMAlgo_FinderShapeOn1::Shapes() const
|
const TopTools_ListOfShape& GEOMAlgo_FinderShapeOn1::Shapes() const
|
||||||
{
|
{
|
||||||
@ -211,7 +209,7 @@ const TopTools_ListOfShape& GEOMAlgo_FinderShapeOn1::Shapes() const
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Perform
|
//function : Perform
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::Perform()
|
void GEOMAlgo_FinderShapeOn1::Perform()
|
||||||
{
|
{
|
||||||
@ -253,12 +251,12 @@ void GEOMAlgo_FinderShapeOn1::Perform()
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
// 4
|
// 4
|
||||||
ProcessSolids();
|
ProcessSolids();
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ProcessVertices
|
//function : ProcessVertices
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::ProcessVertices()
|
void GEOMAlgo_FinderShapeOn1::ProcessVertices()
|
||||||
{
|
{
|
||||||
@ -291,7 +289,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessVertices()
|
|||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ProcessEdges
|
//function : ProcessEdges
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
||||||
{
|
{
|
||||||
@ -334,13 +332,13 @@ void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (BRep_Tool::Degenerated(aE)) {
|
if (BRep_Tool::Degenerated(aE)) {
|
||||||
myMSS.Add(aE, aSt);
|
myMSS.Add(aE, aSt);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (myState==GEOMAlgo_ST_ON && aType1==GeomAbs_Sphere) {
|
if (myState==GEOMAlgo_ST_ON && aType1==GeomAbs_Sphere) {
|
||||||
Standard_Real aT1, aT2;
|
Standard_Real aT1, aT2;
|
||||||
Handle(Geom_Curve) aC;
|
Handle(Geom_Curve) aC;
|
||||||
GeomAdaptor_Curve aGAC;
|
GeomAdaptor_Curve aGAC;
|
||||||
GeomAbs_CurveType aType2;
|
GeomAbs_CurveType aType2;
|
||||||
//
|
//
|
||||||
@ -355,7 +353,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
|||||||
//
|
//
|
||||||
InnerPoints(aE, aLP);
|
InnerPoints(aE, aLP);
|
||||||
if (myErrorStatus) {
|
if (myErrorStatus) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
bIsConformState=Standard_True;
|
bIsConformState=Standard_True;
|
||||||
@ -375,7 +373,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aSt=aSC.State();
|
aSt=aSC.State();
|
||||||
//
|
//
|
||||||
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
||||||
if (myShapeType==TopAbs_EDGE) {
|
if (myShapeType==TopAbs_EDGE) {
|
||||||
@ -386,11 +384,11 @@ void GEOMAlgo_FinderShapeOn1::ProcessEdges()
|
|||||||
else if (bIsConformState || aSt==TopAbs_ON) {
|
else if (bIsConformState || aSt==TopAbs_ON) {
|
||||||
myMSS.Add(aE, aSt);
|
myMSS.Add(aE, aSt);
|
||||||
}
|
}
|
||||||
} // for (i=1; i<=aNb; ++i) next edge
|
} // for (i=1; i<=aNb; ++i) next edge
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ProcessFaces
|
//function : ProcessFaces
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::ProcessFaces()
|
void GEOMAlgo_FinderShapeOn1::ProcessFaces()
|
||||||
{
|
{
|
||||||
@ -465,7 +463,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessFaces()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aSt=aSC.State();
|
aSt=aSC.State();
|
||||||
//
|
//
|
||||||
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
||||||
if (myShapeType==TopAbs_FACE) {
|
if (myShapeType==TopAbs_FACE) {
|
||||||
@ -476,11 +474,11 @@ void GEOMAlgo_FinderShapeOn1::ProcessFaces()
|
|||||||
else if (bIsConformState || aSt==TopAbs_ON) {
|
else if (bIsConformState || aSt==TopAbs_ON) {
|
||||||
myMSS.Add(aF, aSt);
|
myMSS.Add(aF, aSt);
|
||||||
}
|
}
|
||||||
}// for (i=1; i<=aNb; ++i) next face
|
}// for (i=1; i<=aNb; ++i) next face
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ProcessSolids
|
//function : ProcessSolids
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::ProcessSolids()
|
void GEOMAlgo_FinderShapeOn1::ProcessSolids()
|
||||||
{
|
{
|
||||||
@ -516,7 +514,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessSolids()
|
|||||||
continue; // face has non-conformed state,skip solid
|
continue; // face has non-conformed state,skip solid
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aSt=aSC.State();
|
aSt=aSC.State();
|
||||||
//
|
//
|
||||||
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
bIsConformState=GEOMAlgo_SurfaceTools::IsConformState(aSt, myState);
|
||||||
if (bIsConformState) {
|
if (bIsConformState) {
|
||||||
@ -527,7 +525,7 @@ void GEOMAlgo_FinderShapeOn1::ProcessSolids()
|
|||||||
//
|
//
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : InnerPoints
|
//function : InnerPoints
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
||||||
GEOMAlgo_ListOfPnt& aLP)
|
GEOMAlgo_ListOfPnt& aLP)
|
||||||
@ -585,24 +583,15 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
|||||||
iCnt=aIt.Value();
|
iCnt=aIt.Value();
|
||||||
if (iCnt==1) {
|
if (iCnt==1) {
|
||||||
const GEOMAlgo_PassKey& aPK=aIt.Key();
|
const GEOMAlgo_PassKey& aPK=aIt.Key();
|
||||||
//qf
|
//
|
||||||
/*
|
|
||||||
aNbMax=aPK.NbMax();
|
|
||||||
pIds=(Standard_Integer*)aPK.Key();
|
|
||||||
for (k=1; k<3; ++k) {
|
|
||||||
aNx=*(pIds+aNbMax-k);
|
|
||||||
aMBN.Add(aNx);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
aNx=(Standard_Integer)aPK.Id(1);
|
aNx=(Standard_Integer)aPK.Id(1);
|
||||||
aMBN.Add(aNx);
|
aMBN.Add(aNx);
|
||||||
aNx=(Standard_Integer)aPK.Id(2);
|
aNx=(Standard_Integer)aPK.Id(2);
|
||||||
aMBN.Add(aNx);
|
aMBN.Add(aNx);
|
||||||
//qt
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// inner nodes=all_nodes - boundary_nodes
|
// inner nodes=all_nodes - boundary_nodes
|
||||||
j1=aNodes.Lower();
|
j1=aNodes.Lower();
|
||||||
j2=aNodes.Upper();
|
j2=aNodes.Upper();
|
||||||
for (j=j1; j<=j2; ++j) {
|
for (j=j1; j<=j2; ++j) {
|
||||||
@ -614,7 +603,7 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
|||||||
//
|
//
|
||||||
aNb=aLP.Extent();
|
aNb=aLP.Extent();
|
||||||
//
|
//
|
||||||
if (!aNb && myNbPntsMin) {
|
if (!aNb && myNbPntsMin) {
|
||||||
// try to fill it yourself
|
// try to fill it yourself
|
||||||
Standard_Boolean bIsDone;
|
Standard_Boolean bIsDone;
|
||||||
Standard_Integer aN1, aN2;
|
Standard_Integer aN1, aN2;
|
||||||
@ -635,17 +624,10 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
|||||||
// take the first having occured inner link
|
// take the first having occured inner link
|
||||||
// and discretize it
|
// and discretize it
|
||||||
const GEOMAlgo_PassKey& aPK=aIt.Key();
|
const GEOMAlgo_PassKey& aPK=aIt.Key();
|
||||||
//qf
|
|
||||||
/*
|
|
||||||
aNbMax=aPK.NbMax();
|
|
||||||
pIds=(Standard_Integer*)aPK.Key();
|
|
||||||
aN1=*(pIds+aNbMax-1);
|
|
||||||
aN2=*(pIds+aNbMax-2);
|
|
||||||
*/
|
|
||||||
//
|
//
|
||||||
aN1=(Standard_Integer)aPK.Id(1);
|
aN1=(Standard_Integer)aPK.Id(1);
|
||||||
aN2=(Standard_Integer)aPK.Id(2);
|
aN2=(Standard_Integer)aPK.Id(2);
|
||||||
//qt
|
//
|
||||||
aP1=aNodes(aN1).Transformed(aTrsf);
|
aP1=aNodes(aN1).Transformed(aTrsf);
|
||||||
aP2=aNodes(aN2).Transformed(aTrsf);
|
aP2=aNodes(aN2).Transformed(aTrsf);
|
||||||
//
|
//
|
||||||
@ -674,12 +656,144 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
|||||||
break;
|
break;
|
||||||
}// if (iCnt>1)
|
}// if (iCnt>1)
|
||||||
}// for (; aIt.More(); aIt.Next())
|
}// for (; aIt.More(); aIt.Next())
|
||||||
}// if (aType==GeomAbs_Plane || aType==GeomAbs_Cylinder)
|
}// if (aType==GeomAbs_Plane || aType==GeomAbs_Cylinder)
|
||||||
}// if (!aNb && myNbPntsMin) {
|
}// if (!aNb && myNbPntsMin) {
|
||||||
}
|
}
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 09:56:20 2012f
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : InnerPoints
|
//function : InnerPoints
|
||||||
//purpose :
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
||||||
|
GEOMAlgo_ListOfPnt& aLP)
|
||||||
|
{
|
||||||
|
Standard_Integer aNbPntsMin;
|
||||||
|
//
|
||||||
|
myErrorStatus=0;
|
||||||
|
aNbPntsMin=21;
|
||||||
|
//
|
||||||
|
aLP.Clear();
|
||||||
|
InnerPoints(aE, aNbPntsMin, aLP);
|
||||||
|
}
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 09:56:32 2012t
|
||||||
|
//=======================================================================
|
||||||
|
//function : InnerPoints
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
||||||
|
const Standard_Integer aNbPntsMin,
|
||||||
|
GEOMAlgo_ListOfPnt& aLP)
|
||||||
|
{
|
||||||
|
Standard_Boolean bInf1, bInf2;
|
||||||
|
Standard_Integer j, aNbT;
|
||||||
|
Standard_Real dT, aT, aT1, aT2;
|
||||||
|
gp_Pnt aP;
|
||||||
|
Handle(Geom_Curve) aC3D;
|
||||||
|
//
|
||||||
|
aC3D=BRep_Tool::Curve(aE, aT1, aT2);
|
||||||
|
if (aC3D.IsNull()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
bInf1=Precision::IsNegativeInfinite(aT1);
|
||||||
|
bInf2=Precision::IsPositiveInfinite(aT2);
|
||||||
|
if (bInf1 || bInf2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 09:51:20 2012f
|
||||||
|
/*
|
||||||
|
aNbT=myNbPntsMin+1;
|
||||||
|
dT=(aT2-aT1)/aNbT;
|
||||||
|
for (j=1; j<=aNbPntsMin; ++j) {
|
||||||
|
aT=aT1+j*dT;
|
||||||
|
aC3D->D0(aT, aP);
|
||||||
|
aLP.Append(aP);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
aNbT=aNbPntsMin+1;
|
||||||
|
dT=(aT2-aT1)/aNbT;
|
||||||
|
for (j=1; j<aNbT; ++j) {
|
||||||
|
aT=aT1+j*dT;
|
||||||
|
aC3D->D0(aT, aP);
|
||||||
|
aLP.Append(aP);
|
||||||
|
}
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 09:51:24 2012t
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : CheckData
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void GEOMAlgo_FinderShapeOn1::CheckData()
|
||||||
|
{
|
||||||
|
myErrorStatus=0;
|
||||||
|
//
|
||||||
|
if(mySurface.IsNull()) {
|
||||||
|
myErrorStatus=10; // mySurface=NULL
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (myShape.IsNull()) {
|
||||||
|
myErrorStatus=11; // myShape=NULL
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (!(myShapeType==TopAbs_VERTEX ||
|
||||||
|
myShapeType==TopAbs_EDGE ||
|
||||||
|
myShapeType==TopAbs_FACE ||
|
||||||
|
myShapeType==TopAbs_SOLID)) {
|
||||||
|
myErrorStatus=12; // unallowed subshape type
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (myState==GEOMAlgo_ST_UNKNOWN ||
|
||||||
|
myState==GEOMAlgo_ST_INOUT) {
|
||||||
|
myErrorStatus=13; // unallowed state type
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
GeomAbs_SurfaceType aType;
|
||||||
|
//
|
||||||
|
myGAS.Load(mySurface);
|
||||||
|
aType=myGAS.GetType();
|
||||||
|
if (!(aType==GeomAbs_Plane ||
|
||||||
|
aType==GeomAbs_Cylinder ||
|
||||||
|
aType==GeomAbs_Sphere)) {
|
||||||
|
myErrorStatus=14; // unallowed surface type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetPointState
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
TopAbs_State GEOMAlgo_FinderShapeOn1::GetPointState(const gp_Pnt& aP)
|
||||||
|
{
|
||||||
|
TopAbs_State aSt;
|
||||||
|
GEOMAlgo_SurfaceTools::GetState(aP, myGAS, myTolerance, aSt);
|
||||||
|
return aSt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// myErrorStatus :
|
||||||
|
//
|
||||||
|
// 10 -mySurface=NULL
|
||||||
|
// 11 -myShape=NULL
|
||||||
|
// 12 -unallowed type of subshapes
|
||||||
|
// 13 -unallowed state
|
||||||
|
// 14 -unallowed surface type
|
||||||
|
// 15 -unallowed surface type
|
||||||
|
// 20- no triangulation found
|
||||||
|
// 30- can not obtain the line from the link
|
||||||
|
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 10:01:14 2012f
|
||||||
|
/*
|
||||||
|
//=======================================================================
|
||||||
|
//function : InnerPoints
|
||||||
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
||||||
GEOMAlgo_ListOfPnt& aLP)
|
GEOMAlgo_ListOfPnt& aLP)
|
||||||
@ -727,165 +841,11 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
aNb=aLP.Extent();
|
aNb=aLP.Extent();
|
||||||
if (!aNb && myNbPntsMin) {
|
if (!aNb && myNbPntsMin) {
|
||||||
// try to fill it yourself
|
// try to fill it yourself
|
||||||
InnerPoints(aE, myNbPntsMin, aLP);
|
InnerPoints(aE, myNbPntsMin, aLP);
|
||||||
aNb=aLP.Extent();
|
aNb=aLP.Extent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//=======================================================================
|
|
||||||
//function : InnerPoints
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Edge& aE,
|
|
||||||
const Standard_Integer aNbPntsMin,
|
|
||||||
GEOMAlgo_ListOfPnt& aLP)
|
|
||||||
{
|
|
||||||
// try to fill it yourself
|
|
||||||
Standard_Boolean bInf1, bInf2;
|
|
||||||
Standard_Integer j, aNbT;
|
|
||||||
Standard_Real dT, aT, aT1, aT2;
|
|
||||||
gp_Pnt aP;
|
|
||||||
Handle(Geom_Curve) aC3D;
|
|
||||||
//
|
|
||||||
aC3D=BRep_Tool::Curve(aE, aT1, aT2);
|
|
||||||
if (aC3D.IsNull()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
bInf1=Precision::IsNegativeInfinite(aT1);
|
|
||||||
bInf2=Precision::IsPositiveInfinite(aT2);
|
|
||||||
if (bInf1 || bInf2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
aNbT=myNbPntsMin+1;
|
|
||||||
dT=(aT2-aT1)/aNbT;
|
|
||||||
for (j=1; j<=aNbPntsMin; ++j) {
|
|
||||||
aT=aT1+j*dT;
|
|
||||||
aC3D->D0(aT, aP);
|
|
||||||
aLP.Append(aP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : CheckData
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void GEOMAlgo_FinderShapeOn1::CheckData()
|
|
||||||
{
|
|
||||||
myErrorStatus=0;
|
|
||||||
//
|
|
||||||
if(mySurface.IsNull()) {
|
|
||||||
myErrorStatus=10; // mySurface=NULL
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if (myShape.IsNull()) {
|
|
||||||
myErrorStatus=11; // myShape=NULL
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if (!(myShapeType==TopAbs_VERTEX ||
|
|
||||||
myShapeType==TopAbs_EDGE ||
|
|
||||||
myShapeType==TopAbs_FACE ||
|
|
||||||
myShapeType==TopAbs_SOLID)) {
|
|
||||||
myErrorStatus=12; // unallowed sub-shape type
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if (myState==GEOMAlgo_ST_UNKNOWN ||
|
|
||||||
myState==GEOMAlgo_ST_INOUT) {
|
|
||||||
myErrorStatus=13; // unallowed state type
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
GeomAbs_SurfaceType aType;
|
|
||||||
//
|
|
||||||
myGAS.Load(mySurface);
|
|
||||||
aType=myGAS.GetType();
|
|
||||||
if (!(aType==GeomAbs_Plane ||
|
|
||||||
aType==GeomAbs_Cylinder ||
|
|
||||||
aType==GeomAbs_Sphere)) {
|
|
||||||
myErrorStatus=14; // unallowed surface type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : GetPointState
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
|
|
||||||
TopAbs_State GEOMAlgo_FinderShapeOn1::GetPointState(const gp_Pnt& aP)
|
|
||||||
{
|
|
||||||
TopAbs_State aSt;
|
|
||||||
GEOMAlgo_SurfaceTools::GetState(aP, myGAS, myTolerance, aSt);
|
|
||||||
return aSt;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// myErrorStatus :
|
|
||||||
//
|
|
||||||
// 10 -mySurface=NULL
|
|
||||||
// 11 -myShape=NULL
|
|
||||||
// 12 -unallowed type of sub-shapes
|
|
||||||
// 13 -unallowed state
|
|
||||||
// 14 -unallowed surface type
|
|
||||||
// 15 -unallowed surface type
|
|
||||||
// 20- no triangulation found
|
|
||||||
// 30- can not obtain the line from the link
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Chronometer
|
|
||||||
#include <OSD_Chronometer.hxx>
|
|
||||||
#include <Standard_Static.hxx>
|
|
||||||
|
|
||||||
Standard_STATIC(OSD_Chronometer, x_S_Chrono);
|
|
||||||
static void x_StartChrono();
|
|
||||||
static void x_StopChrono();
|
|
||||||
static Standard_Boolean x_IsToShow();
|
|
||||||
//
|
|
||||||
//=======================================================================
|
|
||||||
//function : x_StartChrono
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void x_StartChrono()
|
|
||||||
{
|
|
||||||
if (x_IsToShow()){
|
|
||||||
x_S_Chrono().Reset();
|
|
||||||
x_S_Chrono().Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//=======================================================================
|
|
||||||
//function : x_StopChrono
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void x_StopChrono()
|
|
||||||
{
|
|
||||||
if (x_IsToShow()){
|
|
||||||
Standard_Real Chrono;
|
|
||||||
x_S_Chrono().Stop();
|
|
||||||
x_S_Chrono().Show(Chrono);
|
|
||||||
printf(" Tps: %lf\n", Chrono);
|
|
||||||
//cout << "Tps: " << Chrono << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//=======================================================================
|
|
||||||
//function : x_IsToShow
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
Standard_Boolean x_IsToShow()
|
|
||||||
{
|
|
||||||
Standard_Boolean bFlag=Standard_False;
|
|
||||||
//
|
|
||||||
char *xr=getenv ("STDCHRONO");
|
|
||||||
if (xr!=NULL){
|
|
||||||
if (!strcmp (xr, "yes")) {
|
|
||||||
bFlag=!bFlag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return bFlag;
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
//modified by NIZNHY-PKV Thu Jan 26 10:01:17 2012t
|
||||||
|
Loading…
Reference in New Issue
Block a user