mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-04 18:06: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
|
||||
//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);
|
||||
}
|
||||
@ -318,8 +319,8 @@ Standard_Integer BOPDS_DS::Index(const TopoDS_Shape& theS)const
|
||||
//=======================================================================
|
||||
void BOPDS_DS::Init()
|
||||
{
|
||||
Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx, nV, nW, nE, aNbF;
|
||||
Standard_Integer n1, n2, n3;
|
||||
Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx;
|
||||
Standard_Integer n1, n2, n3, nV, nW, nE, aNbF;
|
||||
Standard_Real aTol;
|
||||
TopAbs_ShapeEnum aTS;
|
||||
TopoDS_Iterator aItS;
|
||||
@ -526,11 +527,11 @@ void BOPDS_DS::Init()
|
||||
// pure internal vertices on the face
|
||||
aItS.Initialize(aS);
|
||||
for (; aItS.More(); aItS.Next()) {
|
||||
const TopoDS_Shape& aSx=aItS.Value();
|
||||
if (aSx.ShapeType()==TopAbs_VERTEX){
|
||||
nV=Index(aSx);
|
||||
aMI.Add(nV);
|
||||
}
|
||||
const TopoDS_Shape& aSx=aItS.Value();
|
||||
if (aSx.ShapeType()==TopAbs_VERTEX){
|
||||
nV=Index(aSx);
|
||||
aMI.Add(nV);
|
||||
}
|
||||
}
|
||||
//
|
||||
//
|
||||
@ -567,26 +568,26 @@ void BOPDS_DS::Init()
|
||||
n1=aIt1.Value();
|
||||
BOPDS_ShapeInfo& aSI1=ChangeShapeInfo(n1);
|
||||
if (aSI1.ShapeType()!=TopAbs_SHELL) {
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
//
|
||||
const BOPCol_ListOfInteger& aLI2=aSI1.SubShapes();
|
||||
aIt2.Initialize(aLI2);
|
||||
for (; aIt2.More(); aIt2.Next()) {
|
||||
n2=aIt2.Value();
|
||||
BOPDS_ShapeInfo& aSI2=ChangeShapeInfo(n2);
|
||||
if (aSI2.ShapeType()!=TopAbs_FACE) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
aMI.Add(n2);
|
||||
//
|
||||
const BOPCol_ListOfInteger& aLI3=aSI2.SubShapes();
|
||||
aIt3.Initialize(aLI3);
|
||||
for (; aIt3.More(); aIt3.Next()) {
|
||||
n3=aIt3.Value();
|
||||
aMI.Add(n3);
|
||||
}
|
||||
n2=aIt2.Value();
|
||||
BOPDS_ShapeInfo& aSI2=ChangeShapeInfo(n2);
|
||||
if (aSI2.ShapeType()!=TopAbs_FACE) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
aMI.Add(n2);
|
||||
//
|
||||
const BOPCol_ListOfInteger& aLI3=aSI2.SubShapes();
|
||||
aIt3.Initialize(aLI3);
|
||||
for (; aIt3.More(); aIt3.Next()) {
|
||||
n3=aIt3.Value();
|
||||
aMI.Add(n3);
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
@ -618,10 +619,11 @@ void BOPDS_DS::Init()
|
||||
//function : InitShape
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::InitShape(const Standard_Integer aI,
|
||||
const TopoDS_Shape& aS,
|
||||
Handle(NCollection_BaseAllocator)& theAllocator,
|
||||
BOPCol_DataMapOfShapeInteger& aMSI)
|
||||
void BOPDS_DS::InitShape
|
||||
(const Standard_Integer aI,
|
||||
const TopoDS_Shape& aS,
|
||||
Handle(NCollection_BaseAllocator)& theAllocator,
|
||||
BOPCol_DataMapOfShapeInteger& aMSI)
|
||||
{
|
||||
Standard_Integer aIx;
|
||||
TopoDS_Iterator aIt;
|
||||
@ -703,12 +705,12 @@ Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes
|
||||
bRet=HasInterf(theI1, n2);
|
||||
if (theFlag) {
|
||||
if(bRet) {
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(!bRet) {
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -718,8 +720,9 @@ Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes
|
||||
//function : HasInterfSubShapes
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPDS_DS::HasInterfSubShapes(const Standard_Integer theI1,
|
||||
const Standard_Integer theI2)const
|
||||
Standard_Boolean BOPDS_DS::HasInterfSubShapes
|
||||
(const Standard_Integer theI1,
|
||||
const Standard_Integer theI2)const
|
||||
{
|
||||
Standard_Boolean bRet;
|
||||
Standard_Integer n1;
|
||||
@ -768,7 +771,8 @@ Standard_Boolean BOPDS_DS::HasPaveBlocks(const Standard_Integer theI)const
|
||||
//function : PaveBlocks
|
||||
//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;
|
||||
Standard_Integer aRef;
|
||||
@ -784,7 +788,8 @@ const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks(const Standard_Integer theI)co
|
||||
//function : ChangePaveBlocks
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks(const Standard_Integer theI)
|
||||
BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks
|
||||
(const Standard_Integer theI)
|
||||
{
|
||||
Standard_Boolean bHasReference;
|
||||
Standard_Integer aRef;
|
||||
@ -1111,7 +1116,7 @@ const Handle(BOPDS_CommonBlock)& BOPDS_DS::CommonBlock
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::SetCommonBlock(const Handle(BOPDS_PaveBlock)& thePB,
|
||||
const Handle(BOPDS_CommonBlock)& theCB)
|
||||
const Handle(BOPDS_CommonBlock)& theCB)
|
||||
{
|
||||
if (IsCommonBlock(thePB)) {
|
||||
Handle(BOPDS_CommonBlock)& aCB = myMapPBCB.ChangeFind(thePB);
|
||||
@ -1241,8 +1246,8 @@ void BOPDS_DS::UpdateFaceInfoOn(const Standard_Integer theI)
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::FaceInfoOn(const Standard_Integer theF,
|
||||
BOPDS_IndexedMapOfPaveBlock& theMPB,
|
||||
BOPCol_MapOfInteger& theMI)
|
||||
BOPDS_IndexedMapOfPaveBlock& theMPB,
|
||||
BOPCol_MapOfInteger& theMI)
|
||||
{
|
||||
Standard_Integer nS, nSD, nV1, nV2;
|
||||
BOPCol_ListIteratorOfListOfInteger aIt;
|
||||
@ -1280,8 +1285,8 @@ void BOPDS_DS::FaceInfoOn(const Standard_Integer theF,
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::FaceInfoIn(const Standard_Integer theF,
|
||||
BOPDS_IndexedMapOfPaveBlock& theMPB,
|
||||
BOPCol_MapOfInteger& theMI)
|
||||
BOPDS_IndexedMapOfPaveBlock& theMPB,
|
||||
BOPCol_MapOfInteger& theMI)
|
||||
{
|
||||
Standard_Integer i, aNbVF, aNbEF, nV, nE, nVSD;
|
||||
TopoDS_Iterator aItS;
|
||||
@ -1295,7 +1300,7 @@ void BOPDS_DS::FaceInfoIn(const Standard_Integer theF,
|
||||
if (aSx.ShapeType()==TopAbs_VERTEX){
|
||||
nV=Index(aSx);
|
||||
if (HasShapeSD(nV, nVSD)) {
|
||||
nV=nVSD;
|
||||
nV=nVSD;
|
||||
}
|
||||
theMI.Add(nV);
|
||||
}
|
||||
@ -1374,7 +1379,7 @@ void BOPDS_DS::RefineFaceInfoOn()
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
||||
BOPCol_ListOfInteger& theLI)const
|
||||
BOPCol_ListOfInteger& theLI)const
|
||||
{
|
||||
if (HasFaceInfo(theI)) {
|
||||
//
|
||||
@ -1387,7 +1392,8 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
||||
const BOPDS_FaceInfo& aFI=FaceInfo(theI);
|
||||
//
|
||||
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);
|
||||
for (; aItMPB.More(); aItMPB.Next()) {
|
||||
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) {
|
||||
const BOPCol_MapOfInteger& aMIV=(!i) ? aFI.VerticesIn() : aFI.VerticesSc();
|
||||
const BOPCol_MapOfInteger& aMIV=
|
||||
(!i) ? aFI.VerticesIn() : aFI.VerticesSc();
|
||||
aItMI.Initialize(aMIV);
|
||||
for (; aItMI.More(); aItMI.Next()) {
|
||||
nV=aItMI.Value();
|
||||
if (nV>0) {
|
||||
if (nV>=0) {
|
||||
if (aMI.Add(nV)) {
|
||||
theLI.Append(nV);
|
||||
}
|
||||
@ -1415,10 +1422,11 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
|
||||
//function : VerticesOnIn
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
|
||||
const Standard_Integer nF2,
|
||||
BOPCol_MapOfInteger& aMI,
|
||||
BOPDS_MapOfPaveBlock& aMPB)const
|
||||
void BOPDS_DS::VerticesOnIn
|
||||
(const Standard_Integer nF1,
|
||||
const Standard_Integer nF2,
|
||||
BOPCol_MapOfInteger& aMI,
|
||||
BOPDS_MapOfPaveBlock& aMPB)const
|
||||
{
|
||||
Standard_Integer i, nV, nV1, nV2;
|
||||
BOPCol_MapIteratorOfMapOfInteger aIt;
|
||||
@ -1455,7 +1463,7 @@ void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
nV=aIt.Value();
|
||||
if (aMVOn2.Contains(nV) || aMVIn2.Contains(nV)) {
|
||||
aMI.Add(nV);
|
||||
aMI.Add(nV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1465,9 +1473,9 @@ void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::SharedEdges(const Standard_Integer nF1,
|
||||
const Standard_Integer nF2,
|
||||
BOPCol_ListOfInteger& theLI,
|
||||
const Handle(NCollection_BaseAllocator)& aAllocator)
|
||||
const Standard_Integer nF2,
|
||||
BOPCol_ListOfInteger& theLI,
|
||||
const Handle(NCollection_BaseAllocator)& aAllocator)
|
||||
{
|
||||
Standard_Integer nE, nSp;
|
||||
BOPCol_ListIteratorOfListOfInteger aItLI;
|
||||
@ -1540,7 +1548,7 @@ BOPCol_DataMapOfIntegerInteger& BOPDS_DS::ShapesSD()
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::AddShapeSD(const Standard_Integer theIndex,
|
||||
const Standard_Integer theIndexSD)
|
||||
const Standard_Integer theIndexSD)
|
||||
{
|
||||
myShapesSD.Bind(theIndex, theIndexSD);
|
||||
}
|
||||
@ -1548,8 +1556,9 @@ void BOPDS_DS::AddShapeSD(const Standard_Integer theIndex,
|
||||
//function : HasShapeSD
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPDS_DS::HasShapeSD(const Standard_Integer theIndex,
|
||||
Standard_Integer& theIndexSD)const
|
||||
Standard_Boolean BOPDS_DS::HasShapeSD
|
||||
(const Standard_Integer theIndex,
|
||||
Standard_Integer& theIndexSD)const
|
||||
{
|
||||
Standard_Boolean bRet;
|
||||
//
|
||||
@ -1595,8 +1604,9 @@ void BOPDS_DS::Dump()const
|
||||
// function: CheckCoincidence
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
|
||||
const Handle(BOPDS_PaveBlock)& aPB2)
|
||||
Standard_Boolean BOPDS_DS::CheckCoincidence
|
||||
(const Handle(BOPDS_PaveBlock)& aPB1,
|
||||
const Handle(BOPDS_PaveBlock)& aPB2)
|
||||
{
|
||||
Standard_Boolean bRet;
|
||||
Standard_Integer nE1, nE2, aNbPoints;
|
||||
@ -1635,7 +1645,6 @@ Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function: SortPaveBlocks
|
||||
// purpose:
|
||||
@ -1670,13 +1679,13 @@ void BOPDS_DS::SortPaveBlocks(const Handle(BOPDS_CommonBlock)& aCB)
|
||||
//
|
||||
aCB->AddPaveBlocks(aLPBN);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function: IsToSort
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
|
||||
Standard_Integer& theI)
|
||||
Standard_Boolean BOPDS_DS::IsToSort
|
||||
(const Handle(BOPDS_CommonBlock)& aCB,
|
||||
Standard_Integer& theI)
|
||||
{
|
||||
Standard_Boolean bRet;
|
||||
bRet = Standard_False;
|
||||
@ -1712,13 +1721,13 @@ Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function: IsSubShape
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPDS_DS::IsSubShape(const Standard_Integer theI1,
|
||||
const Standard_Integer theI2)
|
||||
Standard_Boolean BOPDS_DS::IsSubShape
|
||||
(const Standard_Integer theI1,
|
||||
const Standard_Integer theI2)
|
||||
{
|
||||
Standard_Boolean bRet;
|
||||
Standard_Integer nS;
|
||||
@ -1745,7 +1754,7 @@ Standard_Boolean BOPDS_DS::IsSubShape(const Standard_Integer theI1,
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
void BOPDS_DS::Paves(const Standard_Integer theEdge,
|
||||
BOPDS_ListOfPave& theLP)
|
||||
BOPDS_ListOfPave& theLP)
|
||||
{
|
||||
Standard_Integer aNb, i;
|
||||
BOPDS_Pave *pPaves;
|
||||
@ -1786,7 +1795,7 @@ void BOPDS_DS::Paves(const Standard_Integer theEdge,
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
void BOPDS_DS::UpdateEdgeTolerance(const Standard_Integer nE,
|
||||
const Standard_Real aTol)
|
||||
const Standard_Real aTol)
|
||||
{
|
||||
Standard_Integer nV;
|
||||
Standard_Real aTolV;
|
||||
@ -1862,8 +1871,6 @@ void ResetShapes(const TopoDS_Shape& aS)
|
||||
ResetShape(aSx);
|
||||
}
|
||||
}
|
||||
#include <Geom_Curve.hxx>
|
||||
|
||||
//=======================================================================
|
||||
//function : ComputeParameter
|
||||
//purpose :
|
||||
@ -1938,7 +1945,7 @@ void SortShell(const int n, BOPDS_Pave *a)
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::BuildBndBoxSolid(const Standard_Integer theIndex,
|
||||
Bnd_Box& aBoxS)
|
||||
Bnd_Box& aBoxS)
|
||||
{
|
||||
Standard_Boolean bIsOpenBox, bIsInverted;
|
||||
Standard_Integer nSh, nFc;
|
||||
@ -1967,25 +1974,25 @@ void BOPDS_DS::BuildBndBoxSolid(const Standard_Integer theIndex,
|
||||
nFc=aItLI1.Value();
|
||||
const BOPDS_ShapeInfo& aSIFc=ShapeInfo(nFc);
|
||||
if (aSIFc.ShapeType()!=TopAbs_FACE) {
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
//
|
||||
const Bnd_Box& aBFc=aSIFc.Box();
|
||||
aBoxS.Add(aBFc);
|
||||
//
|
||||
if (!bIsOpenBox) {
|
||||
bIsOpenBox=(aBFc.IsOpenXmin() || aBFc.IsOpenXmax() ||
|
||||
aBFc.IsOpenYmin() || aBFc.IsOpenYmax() ||
|
||||
aBFc.IsOpenZmin() || aBFc.IsOpenZmax());
|
||||
if (bIsOpenBox) {
|
||||
break;
|
||||
}
|
||||
bIsOpenBox=(aBFc.IsOpenXmin() || aBFc.IsOpenXmax() ||
|
||||
aBFc.IsOpenYmin() || aBFc.IsOpenYmax() ||
|
||||
aBFc.IsOpenZmin() || aBFc.IsOpenZmax());
|
||||
if (bIsOpenBox) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
const TopoDS_Face& aFc=*((TopoDS_Face*)&aSIFc.Shape());
|
||||
aTolFc=BRep_Tool::Tolerance(aFc);
|
||||
if (aTolFc>aTolS) {
|
||||
aTolS=aTolFc;
|
||||
aTolS=aTolFc;
|
||||
}
|
||||
}//for (; aItLI1.More(); aItLI1.Next()) {
|
||||
if (bIsOpenBox) {
|
||||
|
@ -83,13 +83,12 @@ static
|
||||
//function : DoSplitSEAMOnFace
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::DoSplitSEAMOnFace (const TopoDS_Edge& aSplit,
|
||||
const TopoDS_Face& aF)
|
||||
void BOPTools_AlgoTools3D::DoSplitSEAMOnFace (const TopoDS_Edge& aSplit,
|
||||
const TopoDS_Face& aF)
|
||||
{
|
||||
Standard_Boolean bIsUPeriodic, bIsVPeriodic, bIsLeft = Standard_False;
|
||||
Standard_Real aTol, a, b, anUPeriod, anVPeriod, aT, anU, dU/*=1.e-7*/, anU1,
|
||||
anV, dV/*=1.e-7*/, anV1;
|
||||
Standard_Real aScPr;
|
||||
Standard_Boolean bIsUPeriodic, bIsVPeriodic, bIsLeft;
|
||||
Standard_Real aTol, a, b, anUPeriod, anVPeriod, aT, anU, dU, anU1;
|
||||
Standard_Real aScPr, anV, dV, anV1;
|
||||
gp_Pnt2d aP2D;
|
||||
gp_Vec2d aVec2D;
|
||||
Handle(Geom2d_Curve) aTmpC1, aTmpC2;
|
||||
@ -99,6 +98,7 @@ static
|
||||
BRep_Builder BB;
|
||||
TopoDS_Edge aSp;
|
||||
//
|
||||
bIsLeft = Standard_False;
|
||||
aSp=aSplit;
|
||||
aSp.Orientation(TopAbs_FORWARD);
|
||||
aTol=BRep_Tool::Tolerance(aSp);
|
||||
@ -188,10 +188,12 @@ static
|
||||
aScPr = (anU1==anU) ? aDir2D1*aDOX : aDir2D1*aDOY;
|
||||
//
|
||||
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());
|
||||
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);
|
||||
aC2->Translate(aTrV);
|
||||
//
|
||||
@ -212,14 +214,13 @@ static
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetNormalToFaceOnEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
gp_Dir& aDNF)
|
||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
gp_Dir& aDNF)
|
||||
{
|
||||
Standard_Real aT, aT1, aT2;
|
||||
|
||||
@ -232,15 +233,14 @@ static
|
||||
aDNF.Reverse();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetNormalToFaceOnEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF1,
|
||||
const Standard_Real aT,
|
||||
gp_Dir& aDNF1)
|
||||
void BOPTools_AlgoTools3D::GetNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF1,
|
||||
const Standard_Real aT,
|
||||
gp_Dir& aDNF1)
|
||||
{
|
||||
Standard_Real U, V, aTolPC;
|
||||
gp_Pnt2d aP2D;
|
||||
@ -262,15 +262,15 @@ static
|
||||
|
||||
aDNF1=aDD1U^aDD1V;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SenseFlag
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Integer BOPTools_AlgoTools3D::SenseFlag (const gp_Dir& aDNF1,
|
||||
const gp_Dir& aDNF2)
|
||||
Standard_Integer BOPTools_AlgoTools3D::SenseFlag (const gp_Dir& aDNF1,
|
||||
const gp_Dir& aDNF2)
|
||||
{
|
||||
Standard_Boolean bIsDirsCoinside;
|
||||
//
|
||||
bIsDirsCoinside=IntTools_Tools::IsDirsCoinside(aDNF1, aDNF2);
|
||||
if (!bIsDirsCoinside) {
|
||||
return 0;
|
||||
@ -287,15 +287,15 @@ static
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetNormalToSurface
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPTools_AlgoTools3D::GetNormalToSurface (const Handle(Geom_Surface)& aS,
|
||||
const Standard_Real U,
|
||||
const Standard_Real V,
|
||||
gp_Dir& aDNS)
|
||||
Standard_Boolean BOPTools_AlgoTools3D::GetNormalToSurface
|
||||
(const Handle(Geom_Surface)& aS,
|
||||
const Standard_Real U,
|
||||
const Standard_Real V,
|
||||
gp_Dir& aDNS)
|
||||
{
|
||||
Standard_Boolean bFlag;
|
||||
|
||||
@ -315,21 +315,21 @@ static
|
||||
aDNS=aDD1U^aDD1V;
|
||||
return bFlag;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetApproxNormalToFaceOnEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt& aPNear,
|
||||
gp_Dir& aDNF,
|
||||
Standard_Real aDt2D)
|
||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge
|
||||
(const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt& aPNear,
|
||||
gp_Dir& aDNF,
|
||||
Standard_Real aDt2D)
|
||||
{
|
||||
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()) {
|
||||
return;
|
||||
@ -338,54 +338,56 @@ static
|
||||
PointNearEdge (aE, aF, aT, aDt2D, aPx2DNear, aPNear);
|
||||
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){
|
||||
aDNF.Reverse();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : GetApproxNormalToFaceOnEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt& aPNear,
|
||||
gp_Dir& aDNF,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
void BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge
|
||||
(const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt& aPNear,
|
||||
gp_Dir& aDNF,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
{
|
||||
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()) {
|
||||
return;
|
||||
}
|
||||
//gp_Pnt aPNear;
|
||||
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);
|
||||
|
||||
BOPTools_AlgoTools3D::GetNormalToSurface (aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
||||
BOPTools_AlgoTools3D::GetNormalToSurface
|
||||
(aS, aPx2DNear.X(), aPx2DNear.Y(), aDNF);
|
||||
|
||||
if (aF.Orientation()==TopAbs_REVERSED){
|
||||
aDNF.Reverse();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : PointNearEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
const Standard_Real aDt2D,
|
||||
gp_Pnt2d& aPx2DNear,
|
||||
gp_Pnt& aPxNear)
|
||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
const Standard_Real aDt2D,
|
||||
gp_Pnt2d& aPx2DNear,
|
||||
gp_Pnt& aPxNear)
|
||||
{
|
||||
Standard_Real aFirst, aLast, aETol, aFTol, transVal;
|
||||
GeomAbs_SurfaceType aTS;
|
||||
@ -448,26 +450,28 @@ static
|
||||
aPx2DNear = aPx2D.Translated( transVec );
|
||||
}
|
||||
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 {
|
||||
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);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : PointNearEdge
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt2d& aPx2DNear,
|
||||
gp_Pnt& aPxNear,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
void BOPTools_AlgoTools3D::PointNearEdge
|
||||
(const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
const Standard_Real aT,
|
||||
gp_Pnt2d& aPx2DNear,
|
||||
gp_Pnt& aPxNear,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
{
|
||||
Standard_Real aTolE, aTolF, dTx, dT2D;
|
||||
Handle(Geom_Surface) aS;
|
||||
@ -489,7 +493,8 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
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)) {
|
||||
Standard_Integer iErr;
|
||||
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) {
|
||||
iErr = BOPTools_AlgoTools3D::PointInFace(aF, aP, aP2d, theContext);
|
||||
iErr = BOPTools_AlgoTools3D::PointInFace
|
||||
(aF, aP, aP2d, theContext);
|
||||
if (!iErr) {
|
||||
aPxNear = aP;
|
||||
aPx2DNear = aP2d;
|
||||
@ -515,16 +521,16 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function: PointNearEdge
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
gp_Pnt2d& aPInFace2D,
|
||||
gp_Pnt& aPInFace,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
void BOPTools_AlgoTools3D::PointNearEdge
|
||||
(const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
gp_Pnt2d& aPInFace2D,
|
||||
gp_Pnt& aPInFace,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
{
|
||||
Standard_Real aT, aT1, aT2;
|
||||
//
|
||||
@ -538,24 +544,24 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
aFF.Orientation(TopAbs_FORWARD);
|
||||
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
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Real BOPTools_AlgoTools3D::MinStepIn2d()
|
||||
Standard_Real BOPTools_AlgoTools3D::MinStepIn2d()
|
||||
{
|
||||
Standard_Real dt=1.e-5;
|
||||
return dt;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IsEmptyShape
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean BOPTools_AlgoTools3D::IsEmptyShape(const TopoDS_Shape& aS)
|
||||
Standard_Boolean BOPTools_AlgoTools3D::IsEmptyShape
|
||||
(const TopoDS_Shape& aS)
|
||||
{
|
||||
Standard_Boolean bHasGeometry=Standard_False;
|
||||
//
|
||||
@ -565,7 +571,6 @@ void BOPTools_AlgoTools3D::PointNearEdge (const TopoDS_Edge& aE,
|
||||
|
||||
return !bHasGeometry;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Add
|
||||
//purpose :
|
||||
@ -606,39 +611,18 @@ void Add(const TopoDS_Shape& aS,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : HasGeometry
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean HasGeometry(const TopoDS_Shape& aS)
|
||||
Standard_Boolean HasGeometry(const TopoDS_Shape& aS)
|
||||
{
|
||||
Standard_Boolean bHasGeometry=Standard_True;
|
||||
TopAbs_ShapeEnum aType= aS.ShapeType();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
else if (PR->IsPointOnCurveOnSurface()) {
|
||||
return bHasGeometry;
|
||||
}
|
||||
|
||||
else if (PR->IsPointOnSurface()) {
|
||||
return bHasGeometry;
|
||||
}
|
||||
itrp.Next();
|
||||
}
|
||||
return bHasGeometry;
|
||||
}
|
||||
|
||||
//
|
||||
else if (aType == TopAbs_EDGE) {
|
||||
Handle(BRep_TEdge) TE = Handle(BRep_TEdge)::DownCast(aS.TShape());
|
||||
@ -683,15 +667,13 @@ void Add(const TopoDS_Shape& aS,
|
||||
|
||||
return !bHasGeometry;
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : OrientEdgeOnFace
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPTools_AlgoTools3D::OrientEdgeOnFace (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
TopoDS_Edge& aERight)
|
||||
void BOPTools_AlgoTools3D::OrientEdgeOnFace (const TopoDS_Edge& aE,
|
||||
const TopoDS_Face& aF,
|
||||
TopoDS_Edge& aERight)
|
||||
{
|
||||
if (BRep_Tool::IsClosed(aE, aF)) {
|
||||
aERight=aE;
|
||||
@ -728,15 +710,15 @@ void Add(const TopoDS_Shape& aS,
|
||||
aERight=aE;
|
||||
aERight.Orientation(aE.Orientation());
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : PointInFace
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Integer BOPTools_AlgoTools3D::PointInFace(const TopoDS_Face& aF,
|
||||
gp_Pnt& theP,
|
||||
gp_Pnt2d& theP2D,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
Standard_Integer BOPTools_AlgoTools3D::PointInFace
|
||||
(const TopoDS_Face& aF,
|
||||
gp_Pnt& theP,
|
||||
gp_Pnt2d& theP2D,
|
||||
Handle(BOPInt_Context)& theContext)
|
||||
{
|
||||
Standard_Boolean bIsDone, bHasFirstPoint, bHasSecondPoint;
|
||||
Standard_Integer iErr, aIx, aNbDomains;
|
||||
@ -783,7 +765,7 @@ void Add(const TopoDS_Shape& aS,
|
||||
//
|
||||
aNbDomains=aHatcher.NbDomains(aIx);
|
||||
if (aNbDomains > 0) {
|
||||
const HatchGen_Domain& aDomain=aHatcher.Domain (aIx, 1) ;
|
||||
const HatchGen_Domain& aDomain=aHatcher.Domain (aIx, 1);
|
||||
bHasFirstPoint=aDomain.HasFirstPoint();
|
||||
if (!bHasFirstPoint) {
|
||||
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