mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-06 18:26:22 +03:00
0024618: Embedding vertex in BOP depends on the order of arguments
Changes: class BOPDS_DS - method: void BOPDS_DS::AloneVertices(const Standard_Integer theI, BOPCol_ListOfInteger& theLI)const The condition for DS-index of a vertex has been corrected class BOPTools_AlgoTools3D - static function: Standard_Boolean HasGeometry(const TopoDS_Shape& aS) The returnig value has been corrected for shapes of vertex type Modified entities: packages: BOPDS BOPTools Test cases for issue CR24618
This commit is contained in:
parent
1896126e35
commit
362dec17cf
@ -272,7 +272,8 @@ Standard_Integer BOPDS_DS::Append(const TopoDS_Shape& theS)
|
|||||||
//function : ShapeInfo
|
//function : ShapeInfo
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
const BOPDS_ShapeInfo& BOPDS_DS::ShapeInfo(const Standard_Integer theI)const
|
const BOPDS_ShapeInfo& BOPDS_DS::ShapeInfo
|
||||||
|
(const Standard_Integer theI)const
|
||||||
{
|
{
|
||||||
return myLines(theI);
|
return myLines(theI);
|
||||||
}
|
}
|
||||||
@ -318,8 +319,8 @@ Standard_Integer BOPDS_DS::Index(const TopoDS_Shape& theS)const
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPDS_DS::Init()
|
void BOPDS_DS::Init()
|
||||||
{
|
{
|
||||||
Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx, nV, nW, nE, aNbF;
|
Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx;
|
||||||
Standard_Integer n1, n2, n3;
|
Standard_Integer n1, n2, n3, nV, nW, nE, aNbF;
|
||||||
Standard_Real aTol;
|
Standard_Real aTol;
|
||||||
TopAbs_ShapeEnum aTS;
|
TopAbs_ShapeEnum aTS;
|
||||||
TopoDS_Iterator aItS;
|
TopoDS_Iterator aItS;
|
||||||
@ -618,7 +619,8 @@ void BOPDS_DS::Init()
|
|||||||
//function : InitShape
|
//function : InitShape
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPDS_DS::InitShape(const Standard_Integer aI,
|
void BOPDS_DS::InitShape
|
||||||
|
(const Standard_Integer aI,
|
||||||
const TopoDS_Shape& aS,
|
const TopoDS_Shape& aS,
|
||||||
Handle(NCollection_BaseAllocator)& theAllocator,
|
Handle(NCollection_BaseAllocator)& theAllocator,
|
||||||
BOPCol_DataMapOfShapeInteger& aMSI)
|
BOPCol_DataMapOfShapeInteger& aMSI)
|
||||||
@ -718,7 +720,8 @@ Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes
|
|||||||
//function : HasInterfSubShapes
|
//function : HasInterfSubShapes
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPDS_DS::HasInterfSubShapes(const Standard_Integer theI1,
|
Standard_Boolean BOPDS_DS::HasInterfSubShapes
|
||||||
|
(const Standard_Integer theI1,
|
||||||
const Standard_Integer theI2)const
|
const Standard_Integer theI2)const
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
@ -768,7 +771,8 @@ Standard_Boolean BOPDS_DS::HasPaveBlocks(const Standard_Integer theI)const
|
|||||||
//function : PaveBlocks
|
//function : PaveBlocks
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks(const Standard_Integer theI)const
|
const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks
|
||||||
|
(const Standard_Integer theI)const
|
||||||
{
|
{
|
||||||
static BOPDS_ListOfPaveBlock sLPB;
|
static BOPDS_ListOfPaveBlock sLPB;
|
||||||
Standard_Integer aRef;
|
Standard_Integer aRef;
|
||||||
@ -784,7 +788,8 @@ const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks(const Standard_Integer theI)co
|
|||||||
//function : ChangePaveBlocks
|
//function : ChangePaveBlocks
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks(const Standard_Integer theI)
|
BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks
|
||||||
|
(const Standard_Integer theI)
|
||||||
{
|
{
|
||||||
Standard_Boolean bHasReference;
|
Standard_Boolean bHasReference;
|
||||||
Standard_Integer aRef;
|
Standard_Integer aRef;
|
||||||
@ -1387,7 +1392,8 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
|||||||
const BOPDS_FaceInfo& aFI=FaceInfo(theI);
|
const BOPDS_FaceInfo& aFI=FaceInfo(theI);
|
||||||
//
|
//
|
||||||
for (i=0; i<2; ++i) {
|
for (i=0; i<2; ++i) {
|
||||||
const BOPDS_IndexedMapOfPaveBlock& aMPB=(!i) ? aFI.PaveBlocksIn() : aFI.PaveBlocksSc();
|
const BOPDS_IndexedMapOfPaveBlock& aMPB=
|
||||||
|
(!i) ? aFI.PaveBlocksIn() : aFI.PaveBlocksSc();
|
||||||
aItMPB.Initialize(aMPB);
|
aItMPB.Initialize(aMPB);
|
||||||
for (; aItMPB.More(); aItMPB.Next()) {
|
for (; aItMPB.More(); aItMPB.Next()) {
|
||||||
const Handle(BOPDS_PaveBlock)& aPB=aItMPB.Value();
|
const Handle(BOPDS_PaveBlock)& aPB=aItMPB.Value();
|
||||||
@ -1398,11 +1404,12 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
for (i=0; i<2; ++i) {
|
for (i=0; i<2; ++i) {
|
||||||
const BOPCol_MapOfInteger& aMIV=(!i) ? aFI.VerticesIn() : aFI.VerticesSc();
|
const BOPCol_MapOfInteger& aMIV=
|
||||||
|
(!i) ? aFI.VerticesIn() : aFI.VerticesSc();
|
||||||
aItMI.Initialize(aMIV);
|
aItMI.Initialize(aMIV);
|
||||||
for (; aItMI.More(); aItMI.Next()) {
|
for (; aItMI.More(); aItMI.Next()) {
|
||||||
nV=aItMI.Value();
|
nV=aItMI.Value();
|
||||||
if (nV>0) {
|
if (nV>=0) {
|
||||||
if (aMI.Add(nV)) {
|
if (aMI.Add(nV)) {
|
||||||
theLI.Append(nV);
|
theLI.Append(nV);
|
||||||
}
|
}
|
||||||
@ -1415,7 +1422,8 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
|||||||
//function : VerticesOnIn
|
//function : VerticesOnIn
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
|
void BOPDS_DS::VerticesOnIn
|
||||||
|
(const Standard_Integer nF1,
|
||||||
const Standard_Integer nF2,
|
const Standard_Integer nF2,
|
||||||
BOPCol_MapOfInteger& aMI,
|
BOPCol_MapOfInteger& aMI,
|
||||||
BOPDS_MapOfPaveBlock& aMPB)const
|
BOPDS_MapOfPaveBlock& aMPB)const
|
||||||
@ -1548,7 +1556,8 @@ void BOPDS_DS::AddShapeSD(const Standard_Integer theIndex,
|
|||||||
//function : HasShapeSD
|
//function : HasShapeSD
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPDS_DS::HasShapeSD(const Standard_Integer theIndex,
|
Standard_Boolean BOPDS_DS::HasShapeSD
|
||||||
|
(const Standard_Integer theIndex,
|
||||||
Standard_Integer& theIndexSD)const
|
Standard_Integer& theIndexSD)const
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
@ -1595,7 +1604,8 @@ void BOPDS_DS::Dump()const
|
|||||||
// function: CheckCoincidence
|
// function: CheckCoincidence
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
|
Standard_Boolean BOPDS_DS::CheckCoincidence
|
||||||
|
(const Handle(BOPDS_PaveBlock)& aPB1,
|
||||||
const Handle(BOPDS_PaveBlock)& aPB2)
|
const Handle(BOPDS_PaveBlock)& aPB2)
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
@ -1635,7 +1645,6 @@ Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
|
|||||||
}
|
}
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: SortPaveBlocks
|
// function: SortPaveBlocks
|
||||||
// purpose:
|
// purpose:
|
||||||
@ -1670,12 +1679,12 @@ void BOPDS_DS::SortPaveBlocks(const Handle(BOPDS_CommonBlock)& aCB)
|
|||||||
//
|
//
|
||||||
aCB->AddPaveBlocks(aLPBN);
|
aCB->AddPaveBlocks(aLPBN);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: IsToSort
|
// function: IsToSort
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
|
Standard_Boolean BOPDS_DS::IsToSort
|
||||||
|
(const Handle(BOPDS_CommonBlock)& aCB,
|
||||||
Standard_Integer& theI)
|
Standard_Integer& theI)
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
@ -1712,12 +1721,12 @@ Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
|
|||||||
|
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: IsSubShape
|
// function: IsSubShape
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPDS_DS::IsSubShape(const Standard_Integer theI1,
|
Standard_Boolean BOPDS_DS::IsSubShape
|
||||||
|
(const Standard_Integer theI1,
|
||||||
const Standard_Integer theI2)
|
const Standard_Integer theI2)
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
Standard_Boolean bRet;
|
||||||
@ -1862,8 +1871,6 @@ void ResetShapes(const TopoDS_Shape& aS)
|
|||||||
ResetShape(aSx);
|
ResetShape(aSx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#include <Geom_Curve.hxx>
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ComputeParameter
|
//function : ComputeParameter
|
||||||
//purpose :
|
//purpose :
|
||||||
|
@ -83,13 +83,12 @@ static
|
|||||||
//function : DoSplitSEAMOnFace
|
//function : DoSplitSEAMOnFace
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::DoSplitSEAMOnFace (const TopoDS_Edge& aSplit,
|
void BOPTools_AlgoTools3D::DoSplitSEAMOnFace (const TopoDS_Edge& aSplit,
|
||||||
const TopoDS_Face& aF)
|
const TopoDS_Face& aF)
|
||||||
{
|
{
|
||||||
Standard_Boolean bIsUPeriodic, bIsVPeriodic, bIsLeft = Standard_False;
|
Standard_Boolean bIsUPeriodic, bIsVPeriodic, bIsLeft;
|
||||||
Standard_Real aTol, a, b, anUPeriod, anVPeriod, aT, anU, dU/*=1.e-7*/, anU1,
|
Standard_Real aTol, a, b, anUPeriod, anVPeriod, aT, anU, dU, anU1;
|
||||||
anV, dV/*=1.e-7*/, anV1;
|
Standard_Real aScPr, anV, dV, anV1;
|
||||||
Standard_Real aScPr;
|
|
||||||
gp_Pnt2d aP2D;
|
gp_Pnt2d aP2D;
|
||||||
gp_Vec2d aVec2D;
|
gp_Vec2d aVec2D;
|
||||||
Handle(Geom2d_Curve) aTmpC1, aTmpC2;
|
Handle(Geom2d_Curve) aTmpC1, aTmpC2;
|
||||||
@ -99,6 +98,7 @@ static
|
|||||||
BRep_Builder BB;
|
BRep_Builder BB;
|
||||||
TopoDS_Edge aSp;
|
TopoDS_Edge aSp;
|
||||||
//
|
//
|
||||||
|
bIsLeft = Standard_False;
|
||||||
aSp=aSplit;
|
aSp=aSplit;
|
||||||
aSp.Orientation(TopAbs_FORWARD);
|
aSp.Orientation(TopAbs_FORWARD);
|
||||||
aTol=BRep_Tool::Tolerance(aSp);
|
aTol=BRep_Tool::Tolerance(aSp);
|
||||||
@ -188,10 +188,12 @@ static
|
|||||||
aScPr = (anU1==anU) ? aDir2D1*aDOX : aDir2D1*aDOY;
|
aScPr = (anU1==anU) ? aDir2D1*aDOX : aDir2D1*aDOY;
|
||||||
//
|
//
|
||||||
aTmpC1=Handle(Geom2d_Curve)::DownCast(C2D1->Copy());
|
aTmpC1=Handle(Geom2d_Curve)::DownCast(C2D1->Copy());
|
||||||
Handle(Geom2d_TrimmedCurve) aC1 = new Geom2d_TrimmedCurve(aTmpC1, a, b);
|
Handle(Geom2d_TrimmedCurve) aC1 =
|
||||||
|
new Geom2d_TrimmedCurve(aTmpC1, a, b);
|
||||||
//
|
//
|
||||||
aTmpC2=Handle(Geom2d_Curve)::DownCast(C2D1->Copy());
|
aTmpC2=Handle(Geom2d_Curve)::DownCast(C2D1->Copy());
|
||||||
Handle(Geom2d_TrimmedCurve) aC2 = new Geom2d_TrimmedCurve(aTmpC2, a, b);
|
Handle(Geom2d_TrimmedCurve) aC2 =
|
||||||
|
new Geom2d_TrimmedCurve(aTmpC2, a, b);
|
||||||
gp_Vec2d aTrV(anU1-anU, anV1-anV);
|
gp_Vec2d aTrV(anU1-anU, anV1-anV);
|
||||||
aC2->Translate(aTrV);
|
aC2->Translate(aTrV);
|
||||||
//
|
//
|
||||||
@ -212,12 +214,11 @@ static
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetNormalToFaceOnEdge
|
//function : GetNormalToFaceOnEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
gp_Dir& aDNF)
|
gp_Dir& aDNF)
|
||||||
{
|
{
|
||||||
@ -232,12 +233,11 @@ static
|
|||||||
aDNF.Reverse();
|
aDNF.Reverse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetNormalToFaceOnEdge
|
//function : GetNormalToFaceOnEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF1,
|
const TopoDS_Face& aF1,
|
||||||
const Standard_Real aT,
|
const Standard_Real aT,
|
||||||
gp_Dir& aDNF1)
|
gp_Dir& aDNF1)
|
||||||
@ -262,15 +262,15 @@ static
|
|||||||
|
|
||||||
aDNF1=aDD1U^aDD1V;
|
aDNF1=aDD1U^aDD1V;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : SenseFlag
|
//function : SenseFlag
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer BOPTools_AlgoTools3D::SenseFlag (const gp_Dir& aDNF1,
|
Standard_Integer BOPTools_AlgoTools3D::SenseFlag (const gp_Dir& aDNF1,
|
||||||
const gp_Dir& aDNF2)
|
const gp_Dir& aDNF2)
|
||||||
{
|
{
|
||||||
Standard_Boolean bIsDirsCoinside;
|
Standard_Boolean bIsDirsCoinside;
|
||||||
|
//
|
||||||
bIsDirsCoinside=IntTools_Tools::IsDirsCoinside(aDNF1, aDNF2);
|
bIsDirsCoinside=IntTools_Tools::IsDirsCoinside(aDNF1, aDNF2);
|
||||||
if (!bIsDirsCoinside) {
|
if (!bIsDirsCoinside) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -287,12 +287,12 @@ static
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetNormalToSurface
|
//function : GetNormalToSurface
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPTools_AlgoTools3D::GetNormalToSurface (const Handle(Geom_Surface)& aS,
|
Standard_Boolean BOPTools_AlgoTools3D::GetNormalToSurface
|
||||||
|
(const Handle(Geom_Surface)& aS,
|
||||||
const Standard_Real U,
|
const Standard_Real U,
|
||||||
const Standard_Real V,
|
const Standard_Real V,
|
||||||
gp_Dir& aDNS)
|
gp_Dir& aDNS)
|
||||||
@ -315,13 +315,12 @@ static
|
|||||||
aDNS=aDD1U^aDD1V;
|
aDNS=aDD1U^aDD1V;
|
||||||
return bFlag;
|
return bFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetApproxNormalToFaceOnEdge
|
//function : GetApproxNormalToFaceOnEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge
|
||||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(const TopoDS_Edge& aE,
|
(const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
const Standard_Real aT,
|
const Standard_Real aT,
|
||||||
gp_Pnt& aPNear,
|
gp_Pnt& aPNear,
|
||||||
@ -329,7 +328,8 @@ static
|
|||||||
Standard_Real aDt2D)
|
Standard_Real aDt2D)
|
||||||
{
|
{
|
||||||
Standard_Real aFirst, aLast;
|
Standard_Real aFirst, aLast;
|
||||||
Handle(Geom2d_Curve) aC2D= BRep_Tool::CurveOnSurface (aE, aF, aFirst, aLast);
|
Handle(Geom2d_Curve) aC2D=
|
||||||
|
BRep_Tool::CurveOnSurface (aE, aF, aFirst, aLast);
|
||||||
|
|
||||||
if (aC2D.IsNull()) {
|
if (aC2D.IsNull()) {
|
||||||
return;
|
return;
|
||||||
@ -338,19 +338,19 @@ static
|
|||||||
PointNearEdge (aE, aF, aT, aDt2D, aPx2DNear, aPNear);
|
PointNearEdge (aE, aF, aT, aDt2D, aPx2DNear, aPNear);
|
||||||
Handle(Geom_Surface) aS=BRep_Tool::Surface(aF);
|
Handle(Geom_Surface) aS=BRep_Tool::Surface(aF);
|
||||||
|
|
||||||
BOPTools_AlgoTools3D::GetNormalToSurface (aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
BOPTools_AlgoTools3D::GetNormalToSurface
|
||||||
|
(aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
||||||
|
|
||||||
if (aF.Orientation()==TopAbs_REVERSED){
|
if (aF.Orientation()==TopAbs_REVERSED){
|
||||||
aDNF.Reverse();
|
aDNF.Reverse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetApproxNormalToFaceOnEdge
|
//function : GetApproxNormalToFaceOnEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge
|
||||||
|
(const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
const Standard_Real aT,
|
const Standard_Real aT,
|
||||||
gp_Pnt& aPNear,
|
gp_Pnt& aPNear,
|
||||||
@ -358,29 +358,31 @@ static
|
|||||||
Handle(BOPInt_Context)& theContext)
|
Handle(BOPInt_Context)& theContext)
|
||||||
{
|
{
|
||||||
Standard_Real aFirst, aLast;
|
Standard_Real aFirst, aLast;
|
||||||
Handle(Geom2d_Curve) aC2D= BRep_Tool::CurveOnSurface (aE, aF, aFirst, aLast);
|
Handle(Geom2d_Curve) aC2D=
|
||||||
|
BRep_Tool::CurveOnSurface (aE, aF, aFirst, aLast);
|
||||||
|
|
||||||
if (aC2D.IsNull()) {
|
if (aC2D.IsNull()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//gp_Pnt aPNear;
|
//gp_Pnt aPNear;
|
||||||
gp_Pnt2d aPx2DNear;
|
gp_Pnt2d aPx2DNear;
|
||||||
BOPTools_AlgoTools3D::PointNearEdge (aE, aF, aT, aPx2DNear, aPNear, theContext);
|
BOPTools_AlgoTools3D::PointNearEdge
|
||||||
|
(aE, aF, aT, aPx2DNear, aPNear, theContext);
|
||||||
|
|
||||||
Handle(Geom_Surface) aS=BRep_Tool::Surface(aF);
|
Handle(Geom_Surface) aS=BRep_Tool::Surface(aF);
|
||||||
|
|
||||||
BOPTools_AlgoTools3D::GetNormalToSurface (aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
BOPTools_AlgoTools3D::GetNormalToSurface
|
||||||
|
(aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
||||||
|
|
||||||
if (aF.Orientation()==TopAbs_REVERSED){
|
if (aF.Orientation()==TopAbs_REVERSED){
|
||||||
aDNF.Reverse();
|
aDNF.Reverse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PointNearEdge
|
//function : PointNearEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
const Standard_Real aT,
|
const Standard_Real aT,
|
||||||
const Standard_Real aDt2D,
|
const Standard_Real aDt2D,
|
||||||
@ -448,21 +450,23 @@ static
|
|||||||
aPx2DNear = aPx2D.Translated( transVec );
|
aPx2DNear = aPx2D.Translated( transVec );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aPx2DNear.SetCoord (aPx2D.X()+aDt2D*aDP.X(), aPx2D.Y()+aDt2D*aDP.Y());
|
aPx2DNear.SetCoord
|
||||||
|
(aPx2D.X()+aDt2D*aDP.X(), aPx2D.Y()+aDt2D*aDP.Y());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aPx2DNear.SetCoord (aPx2D.X()+aDt2D*aDP.X(), aPx2D.Y()+aDt2D*aDP.Y());
|
aPx2DNear.SetCoord
|
||||||
|
(aPx2D.X()+aDt2D*aDP.X(), aPx2D.Y()+aDt2D*aDP.Y());
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aS->D0(aPx2DNear.X(), aPx2DNear.Y(), aPxNear);
|
aS->D0(aPx2DNear.X(), aPx2DNear.Y(), aPxNear);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PointNearEdge
|
//function : PointNearEdge
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::PointNearEdge
|
||||||
|
(const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
const Standard_Real aT,
|
const Standard_Real aT,
|
||||||
gp_Pnt2d& aPx2DNear,
|
gp_Pnt2d& aPx2DNear,
|
||||||
@ -489,7 +493,8 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
|||||||
dT2D=dTx;
|
dT2D=dTx;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
BOPTools_AlgoTools3D::PointNearEdge (aE, aF, aT, dT2D, aPx2DNear, aPxNear);
|
BOPTools_AlgoTools3D::PointNearEdge
|
||||||
|
(aE, aF, aT, dT2D, aPx2DNear, aPxNear);
|
||||||
if (!theContext->IsPointInOnFace(aF, aPx2DNear)) {
|
if (!theContext->IsPointInOnFace(aF, aPx2DNear)) {
|
||||||
Standard_Integer iErr;
|
Standard_Integer iErr;
|
||||||
Standard_Real aU1, aU2, aV1, aV2, dV, dU, dTresh;
|
Standard_Real aU1, aU2, aV1, aV2, dV, dU, dTresh;
|
||||||
@ -507,7 +512,8 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (dU < dTresh || dV < dTresh) {
|
if (dU < dTresh || dV < dTresh) {
|
||||||
iErr = BOPTools_AlgoTools3D::PointInFace(aF, aP, aP2d, theContext);
|
iErr = BOPTools_AlgoTools3D::PointInFace
|
||||||
|
(aF, aP, aP2d, theContext);
|
||||||
if (!iErr) {
|
if (!iErr) {
|
||||||
aPxNear = aP;
|
aPxNear = aP;
|
||||||
aPx2DNear = aP2d;
|
aPx2DNear = aP2d;
|
||||||
@ -515,12 +521,12 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
// function: PointNearEdge
|
// function: PointNearEdge
|
||||||
// purpose:
|
// purpose:
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::PointNearEdge
|
||||||
|
(const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
gp_Pnt2d& aPInFace2D,
|
gp_Pnt2d& aPInFace2D,
|
||||||
gp_Pnt& aPInFace,
|
gp_Pnt& aPInFace,
|
||||||
@ -538,24 +544,24 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
|||||||
aFF.Orientation(TopAbs_FORWARD);
|
aFF.Orientation(TopAbs_FORWARD);
|
||||||
BOPTools_AlgoTools3D::OrientEdgeOnFace (aE, aFF, aERight);
|
BOPTools_AlgoTools3D::OrientEdgeOnFace (aE, aFF, aERight);
|
||||||
|
|
||||||
BOPTools_AlgoTools3D::PointNearEdge (aERight, aFF, aT, aPInFace2D, aPInFace, theContext);
|
BOPTools_AlgoTools3D::PointNearEdge
|
||||||
|
(aERight, aFF, aT, aPInFace2D, aPInFace, theContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : MinStepIn2d
|
//function : MinStepIn2d
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Real BOPTools_AlgoTools3D::MinStepIn2d()
|
Standard_Real BOPTools_AlgoTools3D::MinStepIn2d()
|
||||||
{
|
{
|
||||||
Standard_Real dt=1.e-5;
|
Standard_Real dt=1.e-5;
|
||||||
return dt;
|
return dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsEmptyShape
|
//function : IsEmptyShape
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean BOPTools_AlgoTools3D::IsEmptyShape(const TopoDS_Shape& aS)
|
Standard_Boolean BOPTools_AlgoTools3D::IsEmptyShape
|
||||||
|
(const TopoDS_Shape& aS)
|
||||||
{
|
{
|
||||||
Standard_Boolean bHasGeometry=Standard_False;
|
Standard_Boolean bHasGeometry=Standard_False;
|
||||||
//
|
//
|
||||||
@ -565,7 +571,6 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
|||||||
|
|
||||||
return !bHasGeometry;
|
return !bHasGeometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : Add
|
//function : Add
|
||||||
//purpose :
|
//purpose :
|
||||||
@ -606,39 +611,18 @@ void Add(const TopoDS_Shape& aS,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : HasGeometry
|
//function : HasGeometry
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean HasGeometry(const TopoDS_Shape& aS)
|
Standard_Boolean HasGeometry(const TopoDS_Shape& aS)
|
||||||
{
|
{
|
||||||
Standard_Boolean bHasGeometry=Standard_True;
|
Standard_Boolean bHasGeometry=Standard_True;
|
||||||
TopAbs_ShapeEnum aType= aS.ShapeType();
|
TopAbs_ShapeEnum aType= aS.ShapeType();
|
||||||
|
|
||||||
if (aType == TopAbs_VERTEX) {
|
if (aType == TopAbs_VERTEX) {
|
||||||
|
|
||||||
Handle(BRep_TVertex) TV = Handle(BRep_TVertex)::DownCast(aS.TShape());
|
|
||||||
BRep_ListIteratorOfListOfPointRepresentation itrp(TV->Points());
|
|
||||||
|
|
||||||
while (itrp.More()) {
|
|
||||||
const Handle(BRep_PointRepresentation)& PR = itrp.Value();
|
|
||||||
|
|
||||||
if (PR->IsPointOnCurve()) {
|
|
||||||
return bHasGeometry;
|
return bHasGeometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (PR->IsPointOnCurveOnSurface()) {
|
|
||||||
return bHasGeometry;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (PR->IsPointOnSurface()) {
|
|
||||||
return bHasGeometry;
|
|
||||||
}
|
|
||||||
itrp.Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
else if (aType == TopAbs_EDGE) {
|
else if (aType == TopAbs_EDGE) {
|
||||||
Handle(BRep_TEdge) TE = Handle(BRep_TEdge)::DownCast(aS.TShape());
|
Handle(BRep_TEdge) TE = Handle(BRep_TEdge)::DownCast(aS.TShape());
|
||||||
@ -683,13 +667,11 @@ void Add(const TopoDS_Shape& aS,
|
|||||||
|
|
||||||
return !bHasGeometry;
|
return !bHasGeometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : OrientEdgeOnFace
|
//function : OrientEdgeOnFace
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools3D::OrientEdgeOnFace (const TopoDS_Edge& aE,
|
void BOPTools_AlgoTools3D::OrientEdgeOnFace (const TopoDS_Edge& aE,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
TopoDS_Edge& aERight)
|
TopoDS_Edge& aERight)
|
||||||
{
|
{
|
||||||
@ -728,12 +710,12 @@ void Add(const TopoDS_Shape& aS,
|
|||||||
aERight=aE;
|
aERight=aE;
|
||||||
aERight.Orientation(aE.Orientation());
|
aERight.Orientation(aE.Orientation());
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PointInFace
|
//function : PointInFace
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer BOPTools_AlgoTools3D::PointInFace(const TopoDS_Face& aF,
|
Standard_Integer BOPTools_AlgoTools3D::PointInFace
|
||||||
|
(const TopoDS_Face& aF,
|
||||||
gp_Pnt& theP,
|
gp_Pnt& theP,
|
||||||
gp_Pnt2d& theP2D,
|
gp_Pnt2d& theP2D,
|
||||||
Handle(BOPInt_Context)& theContext)
|
Handle(BOPInt_Context)& theContext)
|
||||||
@ -783,7 +765,7 @@ void Add(const TopoDS_Shape& aS,
|
|||||||
//
|
//
|
||||||
aNbDomains=aHatcher.NbDomains(aIx);
|
aNbDomains=aHatcher.NbDomains(aIx);
|
||||||
if (aNbDomains > 0) {
|
if (aNbDomains > 0) {
|
||||||
const HatchGen_Domain& aDomain=aHatcher.Domain (aIx, 1) ;
|
const HatchGen_Domain& aDomain=aHatcher.Domain (aIx, 1);
|
||||||
bHasFirstPoint=aDomain.HasFirstPoint();
|
bHasFirstPoint=aDomain.HasFirstPoint();
|
||||||
if (!bHasFirstPoint) {
|
if (!bHasFirstPoint) {
|
||||||
iErr=3;
|
iErr=3;
|
||||||
|
42
tests/bugs/modalg_5/bug24618_1
Normal file
42
tests/bugs/modalg_5/bug24618_1
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
puts "========="
|
||||||
|
puts "OCC24618"
|
||||||
|
puts "========="
|
||||||
|
puts ""
|
||||||
|
###########################################################
|
||||||
|
# Embedding vertex in BOP depends on the order of arguments
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
# Create a cylindrical face
|
||||||
|
cylinder c1 20
|
||||||
|
trimv c1 c1 0 50
|
||||||
|
mkface c1 c1
|
||||||
|
|
||||||
|
# Create a vertex
|
||||||
|
vertex v1 0 20 25
|
||||||
|
|
||||||
|
# Build partition
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
#---------------#
|
||||||
|
baddobjects c1 v1
|
||||||
|
#---------------#
|
||||||
|
bfillds
|
||||||
|
bbuild r
|
||||||
|
|
||||||
|
# Explode the result compound
|
||||||
|
explode r
|
||||||
|
|
||||||
|
# Check number of shapes
|
||||||
|
renamevar r_1 result
|
||||||
|
|
||||||
|
set nb_v_good 1
|
||||||
|
set nb_e_good 0
|
||||||
|
set nb_w_good 0
|
||||||
|
set nb_f_good 0
|
||||||
|
set nb_sh_good 0
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 0
|
||||||
|
set nb_shape_good 1
|
||||||
|
|
||||||
|
set 2dviewer 1
|
42
tests/bugs/modalg_5/bug24618_2
Normal file
42
tests/bugs/modalg_5/bug24618_2
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
puts "========="
|
||||||
|
puts "OCC24618"
|
||||||
|
puts "========="
|
||||||
|
puts ""
|
||||||
|
###########################################################
|
||||||
|
# Embedding vertex in BOP depends on the order of arguments
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
# Create a cylindrical face
|
||||||
|
cylinder c1 20
|
||||||
|
trimv c1 c1 0 50
|
||||||
|
mkface c1 c1
|
||||||
|
|
||||||
|
# Create a vertex
|
||||||
|
vertex v1 0 20 25
|
||||||
|
|
||||||
|
# Build partition
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
#---------------#
|
||||||
|
baddobjects c1 v1
|
||||||
|
#---------------#
|
||||||
|
bfillds
|
||||||
|
bbuild r
|
||||||
|
|
||||||
|
# Explode the result compound
|
||||||
|
explode r
|
||||||
|
|
||||||
|
# Check number of shapes
|
||||||
|
renamevar r_2 result
|
||||||
|
|
||||||
|
set nb_v_good 3
|
||||||
|
set nb_e_good 3
|
||||||
|
set nb_w_good 1
|
||||||
|
set nb_f_good 1
|
||||||
|
set nb_sh_good 0
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 0
|
||||||
|
set nb_shape_good 8
|
||||||
|
|
||||||
|
set 2dviewer 1
|
42
tests/bugs/modalg_5/bug24618_3
Normal file
42
tests/bugs/modalg_5/bug24618_3
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
puts "========="
|
||||||
|
puts "OCC24618"
|
||||||
|
puts "========="
|
||||||
|
puts ""
|
||||||
|
###########################################################
|
||||||
|
# Embedding vertex in BOP depends on the order of arguments
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
# Create a cylindrical face
|
||||||
|
cylinder c1 20
|
||||||
|
trimv c1 c1 0 50
|
||||||
|
mkface c1 c1
|
||||||
|
|
||||||
|
# Create a vertex
|
||||||
|
vertex v1 0 20 25
|
||||||
|
|
||||||
|
# Build partition
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
#---------------#
|
||||||
|
baddobjects v1 c1
|
||||||
|
#---------------#
|
||||||
|
bfillds
|
||||||
|
bbuild r
|
||||||
|
|
||||||
|
# Explode the result compound
|
||||||
|
explode r
|
||||||
|
|
||||||
|
# Check number of shapes
|
||||||
|
renamevar r_1 result
|
||||||
|
|
||||||
|
set nb_v_good 1
|
||||||
|
set nb_e_good 0
|
||||||
|
set nb_w_good 0
|
||||||
|
set nb_f_good 0
|
||||||
|
set nb_sh_good 0
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 0
|
||||||
|
set nb_shape_good 1
|
||||||
|
|
||||||
|
set 2dviewer 1
|
42
tests/bugs/modalg_5/bug24618_4
Normal file
42
tests/bugs/modalg_5/bug24618_4
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
puts "========="
|
||||||
|
puts "OCC24618"
|
||||||
|
puts "========="
|
||||||
|
puts ""
|
||||||
|
###########################################################
|
||||||
|
# Embedding vertex in BOP depends on the order of arguments
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
# Create a cylindrical face
|
||||||
|
cylinder c1 20
|
||||||
|
trimv c1 c1 0 50
|
||||||
|
mkface c1 c1
|
||||||
|
|
||||||
|
# Create a vertex
|
||||||
|
vertex v1 0 20 25
|
||||||
|
|
||||||
|
# Build partition
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
#---------------#
|
||||||
|
baddobjects v1 c1
|
||||||
|
#---------------#
|
||||||
|
bfillds
|
||||||
|
bbuild r
|
||||||
|
|
||||||
|
# Explode the result compound
|
||||||
|
explode r
|
||||||
|
|
||||||
|
# Check number of shapes
|
||||||
|
renamevar r_2 result
|
||||||
|
|
||||||
|
set nb_v_good 3
|
||||||
|
set nb_e_good 3
|
||||||
|
set nb_w_good 1
|
||||||
|
set nb_f_good 1
|
||||||
|
set nb_sh_good 0
|
||||||
|
set nb_sol_good 0
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 0
|
||||||
|
set nb_shape_good 8
|
||||||
|
|
||||||
|
set 2dviewer 1
|
Loading…
x
Reference in New Issue
Block a user