mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-07 18:30:55 +03:00
0025242: Wrong result of cut operation.
1. class BOPDS_Iterator method: void BOPDS_Iterator::Intersect() The ttreatment of solid/* interferences has been added. 2 class BOPAlgo_PaveFiller protected methods: void BOPAlgo_PaveFiller::PerformVZ() void BOPAlgo_PaveFiller::PerformEZ() void BOPAlgo_PaveFiller::PerformFZ() void BOPAlgo_PaveFiller::PerformZZ() has been added. The methods are to Compute Vertex/Solid Edge/Solid Face/Solid Solid/Solid interferences. 3. class BOPAlgo_PaveFiller protected method: void BOPAlgo_PaveFiller::PerformFF() Empty interferences has not been added in the interferences' table 4. class BOPAlgo_CheckerSI protected methods: void BOPAlgo_CheckerSI::PerformVZ() void BOPAlgo_CheckerSI:PerformEZ() void BOPAlgo_CheckerSI::PerformFZ() void BOPAlgo_CheckerSI::PerformZZ() has been removed. 5. class BOPAlgo_BOP protected method: void BOPAlgo_BOP::BuildRC() void BOPAlgo_BOP::BuildSolid() changed to treat non-interferred solids and keep it in the result as they were Test case for issue #25242
This commit is contained in:
parent
418864aea1
commit
955b3e7102
@ -39,6 +39,18 @@
|
|||||||
|
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
#include <NCollection_IncAllocator.hxx>
|
#include <NCollection_IncAllocator.hxx>
|
||||||
|
//
|
||||||
|
#include <BOPTools_Set.hxx>
|
||||||
|
#include <BOPTools_SetMapHasher.hxx>
|
||||||
|
#include <NCollection_DataMap.hxx>
|
||||||
|
|
||||||
|
typedef NCollection_DataMap
|
||||||
|
<BOPTools_Set,
|
||||||
|
TopoDS_Shape,
|
||||||
|
BOPTools_SetMapHasher> BOPTools_DataMapOfSetShape;
|
||||||
|
//
|
||||||
|
typedef BOPTools_DataMapOfSetShape::Iterator
|
||||||
|
BOPTools_DataMapIteratorOfDataMapOfSetShape;
|
||||||
|
|
||||||
static
|
static
|
||||||
TopAbs_ShapeEnum TypeToExplore(const Standard_Integer theDim);
|
TopAbs_ShapeEnum TypeToExplore(const Standard_Integer theDim);
|
||||||
@ -480,6 +492,9 @@ void BOPAlgo_BOP::BuildRC()
|
|||||||
TopExp_Explorer aExp;
|
TopExp_Explorer aExp;
|
||||||
BOPCol_DataMapOfShapeShape aDMSSA;
|
BOPCol_DataMapOfShapeShape aDMSSA;
|
||||||
BOPCol_ListIteratorOfListOfShape aItLS, aItIm;
|
BOPCol_ListIteratorOfListOfShape aItLS, aItIm;
|
||||||
|
Standard_Boolean bHasInterf;
|
||||||
|
Standard_Integer iX;
|
||||||
|
BOPTools_DataMapOfSetShape aDMSTS;
|
||||||
//
|
//
|
||||||
myErrorStatus=0;
|
myErrorStatus=0;
|
||||||
//
|
//
|
||||||
@ -531,6 +546,17 @@ void BOPAlgo_BOP::BuildRC()
|
|||||||
for (; aExp.More(); aExp.Next()) {
|
for (; aExp.More(); aExp.Next()) {
|
||||||
const TopoDS_Shape aSIm=aExp.Current();
|
const TopoDS_Shape aSIm=aExp.Current();
|
||||||
aDMSSA.Bind(aSIm, aSIm);
|
aDMSSA.Bind(aSIm, aSIm);
|
||||||
|
if (aTmin==TopAbs_SOLID) {
|
||||||
|
iX=myDS->Index(aSIm);
|
||||||
|
bHasInterf=myDS->HasInterf(iX);
|
||||||
|
if (!bHasInterf) {
|
||||||
|
BOPTools_Set aST;
|
||||||
|
//
|
||||||
|
aST.Add(aSIm, TopAbs_FACE);
|
||||||
|
//
|
||||||
|
aDMSTS.Bind(aST, aSIm);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} //for (; aItLS.More(); aItLS.Next())
|
} //for (; aItLS.More(); aItLS.Next())
|
||||||
@ -569,7 +595,7 @@ void BOPAlgo_BOP::BuildRC()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}// if (myImages.IsBound(aST)){
|
||||||
else {
|
else {
|
||||||
aExp.Init(aST, aTmin);
|
aExp.Init(aST, aTmin);
|
||||||
for (; aExp.More(); aExp.Next()) {
|
for (; aExp.More(); aExp.Next()) {
|
||||||
@ -587,14 +613,36 @@ void BOPAlgo_BOP::BuildRC()
|
|||||||
const TopoDS_Shape& aSImA=aDMSSA.Find(aSIm);
|
const TopoDS_Shape& aSImA=aDMSSA.Find(aSIm);
|
||||||
aBB.Add(aC, aSImA);
|
aBB.Add(aC, aSImA);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (aTmin==TopAbs_SOLID) {
|
||||||
|
BOPTools_Set aST;
|
||||||
|
//
|
||||||
|
aST.Add(aSIm, TopAbs_FACE);
|
||||||
|
//
|
||||||
|
if (aDMSTS.IsBound(aST)) {
|
||||||
|
const TopoDS_Shape& aSImA=aDMSTS.Find(aST);
|
||||||
|
aBB.Add(aC, aSImA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {// ie cut or cut21
|
else {// ie cut or cut21
|
||||||
|
if (!bIsBound) {
|
||||||
|
if (aTmin==TopAbs_SOLID) {
|
||||||
|
BOPTools_Set aST;
|
||||||
|
//
|
||||||
|
aST.Add(aSIm, TopAbs_FACE);
|
||||||
|
//
|
||||||
|
bIsBound=aDMSTS.IsBound(aST);
|
||||||
|
}
|
||||||
|
//
|
||||||
if (!bIsBound) {
|
if (!bIsBound) {
|
||||||
aBB.Add(aC, aSIm);
|
aBB.Add(aC, aSIm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} //for (; aItLS.More(); aItLS.Next())
|
} //for (; aItLS.More(); aItLS.Next())
|
||||||
//
|
//
|
||||||
// the squats around degeneracy
|
// the squats around degeneracy
|
||||||
@ -739,7 +787,8 @@ void BOPAlgo_BOP::BuildShape()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_BOP::BuildSolid()
|
void BOPAlgo_BOP::BuildSolid()
|
||||||
{
|
{
|
||||||
Standard_Integer i, aNbF, aNbSx, iX, iErr;
|
Standard_Boolean bHasInterf, bHasSharedFaces;
|
||||||
|
Standard_Integer i, aNbF, aNbSx, iX, iErr, aNbZ;
|
||||||
TopAbs_Orientation aOr, aOr1;
|
TopAbs_Orientation aOr, aOr1;
|
||||||
TopoDS_Iterator aIt;
|
TopoDS_Iterator aIt;
|
||||||
TopoDS_Shape aRC;
|
TopoDS_Shape aRC;
|
||||||
@ -750,12 +799,72 @@ void BOPAlgo_BOP::BuildSolid()
|
|||||||
BOPCol_ListIteratorOfListOfShape aItLS;
|
BOPCol_ListIteratorOfListOfShape aItLS;
|
||||||
BOPCol_ListOfShape aSFS;
|
BOPCol_ListOfShape aSFS;
|
||||||
BOPAlgo_BuilderSolid aSB;
|
BOPAlgo_BuilderSolid aSB;
|
||||||
|
BOPCol_MapOfShape aMSA, aMZ;
|
||||||
|
BOPTools_DataMapOfSetShape aDMSTS;
|
||||||
|
BOPTools_DataMapIteratorOfDataMapOfSetShape aItDMSTS;
|
||||||
//
|
//
|
||||||
myErrorStatus=0;
|
myErrorStatus=0;
|
||||||
//
|
//
|
||||||
|
// Map of of Solids of Arguments
|
||||||
|
for (i=0; i<2; ++i) {
|
||||||
|
const BOPCol_ListOfShape& aLSA=(i) ? myArguments : myTools;
|
||||||
|
aItLS.Initialize(aLSA);
|
||||||
|
for (; aItLS.More(); aItLS.Next()) {
|
||||||
|
const TopoDS_Shape& aSA=aItLS.Value();
|
||||||
|
aExp.Init(aSA, TopAbs_SOLID);
|
||||||
|
for (; aExp.More(); aExp.Next()) {
|
||||||
|
const TopoDS_Shape& aZA=aExp.Current();
|
||||||
|
aMSA.Add(aZA);
|
||||||
|
//
|
||||||
|
BOPTools::MapShapesAndAncestors(aZA,
|
||||||
|
TopAbs_FACE,
|
||||||
|
TopAbs_SOLID,
|
||||||
|
aMFS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aNbF=aMFS.Extent();
|
||||||
|
for (i=1; i<aNbF; ++i) {
|
||||||
|
//const TopoDS_Shape& aFA=aMFZA.FindKey(i);
|
||||||
|
const BOPCol_ListOfShape& aLZA=aMFS(i);
|
||||||
|
aNbZ=aLZA.Extent();
|
||||||
|
if (aNbZ > 1) {
|
||||||
|
aItLS.Initialize(aLZA);
|
||||||
|
for(; aItLS.More(); aItLS.Next()) {
|
||||||
|
const TopoDS_Shape& aZA=aItLS.Value();
|
||||||
|
aMZ.Add(aZA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aMFS.Clear();
|
||||||
|
//
|
||||||
aIt.Initialize(myRC);
|
aIt.Initialize(myRC);
|
||||||
for (; aIt.More(); aIt.Next()) {
|
for (; aIt.More(); aIt.Next()) {
|
||||||
const TopoDS_Shape& aSx=aIt.Value();
|
const TopoDS_Shape& aSx=aIt.Value();
|
||||||
|
if (aMSA.Contains(aSx)) {
|
||||||
|
iX=myDS->Index(aSx);
|
||||||
|
bHasInterf=myDS->HasInterf(iX);
|
||||||
|
bHasSharedFaces=aMZ.Contains(aSx);
|
||||||
|
//
|
||||||
|
if (!bHasInterf && !bHasSharedFaces) {
|
||||||
|
// It means that the solid aSx will be added
|
||||||
|
// to the result as is.
|
||||||
|
// The solid aSx will not participate
|
||||||
|
// in creation of a new solid(s).
|
||||||
|
BOPTools_Set aST;
|
||||||
|
//
|
||||||
|
aST.Add(aSx, TopAbs_FACE);
|
||||||
|
//
|
||||||
|
if (!aDMSTS.IsBound(aST)) {
|
||||||
|
aDMSTS.Bind(aST, aSx);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
aExp.Init(aSx, TopAbs_FACE);
|
aExp.Init(aSx, TopAbs_FACE);
|
||||||
for (; aExp.More(); aExp.Next()) {
|
for (; aExp.More(); aExp.Next()) {
|
||||||
const TopoDS_Shape& aFx=aExp.Current();
|
const TopoDS_Shape& aFx=aExp.Current();
|
||||||
@ -783,7 +892,7 @@ void BOPAlgo_BOP::BuildSolid()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} // for (; aIt.More(); aIt.Next()) {
|
||||||
//faces that will be added in the end;
|
//faces that will be added in the end;
|
||||||
BOPCol_ListOfShape aLF, aLFx;
|
BOPCol_ListOfShape aLF, aLFx;
|
||||||
// SFS
|
// SFS
|
||||||
@ -845,6 +954,13 @@ void BOPAlgo_BOP::BuildSolid()
|
|||||||
const TopoDS_Shape& aSR=aItLS.Value();
|
const TopoDS_Shape& aSR=aItLS.Value();
|
||||||
aBB.Add(aRC, aSR);
|
aBB.Add(aRC, aSR);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
aItDMSTS.Initialize(aDMSTS);
|
||||||
|
for (; aItDMSTS.More(); aItDMSTS.Next()) {
|
||||||
|
const TopoDS_Shape& aSx=aItDMSTS.Value();
|
||||||
|
aBB.Add(aRC, aSx);
|
||||||
|
}
|
||||||
|
//
|
||||||
myShape=aRC;
|
myShape=aRC;
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@ -66,21 +66,6 @@ is
|
|||||||
is protected;
|
is protected;
|
||||||
---Purpose: Provides post-treatment actions
|
---Purpose: Provides post-treatment actions
|
||||||
|
|
||||||
PerformVZ(me:out)
|
|
||||||
is virtual protected;
|
|
||||||
--Purpose: Computes Vertex/Solid interferences
|
|
||||||
|
|
||||||
PerformEZ(me:out)
|
|
||||||
is virtual protected;
|
|
||||||
--Purpose: Computes Edge/Solid interferences
|
|
||||||
|
|
||||||
PerformFZ(me:out)
|
|
||||||
is virtual protected;
|
|
||||||
--Purpose: Computes Face/Solid interferences
|
|
||||||
PerformZZ(me:out)
|
|
||||||
is virtual protected;
|
|
||||||
--Purpose: Computes Solid/Solid interferences
|
|
||||||
|
|
||||||
PrepareCopy(me:out)
|
PrepareCopy(me:out)
|
||||||
is virtual protected;
|
is virtual protected;
|
||||||
|
|
||||||
@ -88,6 +73,7 @@ is
|
|||||||
is protected;
|
is protected;
|
||||||
---Purpose: Provides post-treatment actions for the copy
|
---Purpose: Provides post-treatment actions for the copy
|
||||||
|
|
||||||
|
|
||||||
fields
|
fields
|
||||||
myLevelOfCheck: Integer from Standard is protected;
|
myLevelOfCheck: Integer from Standard is protected;
|
||||||
myNonDestructive: Boolean from Standard is protected;
|
myNonDestructive: Boolean from Standard is protected;
|
||||||
|
@ -146,26 +146,6 @@ void BOPAlgo_CheckerSI::Perform()
|
|||||||
BOPAlgo_PaveFiller::Perform();
|
BOPAlgo_PaveFiller::Perform();
|
||||||
iErr=myErrorStatus;
|
iErr=myErrorStatus;
|
||||||
//
|
//
|
||||||
PerformVZ();
|
|
||||||
if (myErrorStatus) {
|
|
||||||
iErr=myErrorStatus;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
PerformEZ();
|
|
||||||
if (myErrorStatus) {
|
|
||||||
iErr=myErrorStatus;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
PerformFZ();
|
|
||||||
if (myErrorStatus) {
|
|
||||||
iErr=myErrorStatus;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
PerformZZ();
|
|
||||||
if (myErrorStatus) {
|
|
||||||
iErr=myErrorStatus;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
PostTreat();
|
PostTreat();
|
||||||
if (myErrorStatus) {
|
if (myErrorStatus) {
|
||||||
iErr=myErrorStatus;
|
iErr=myErrorStatus;
|
||||||
|
@ -127,6 +127,22 @@ is
|
|||||||
PerformFF(me:out)
|
PerformFF(me:out)
|
||||||
is virtual protected;
|
is virtual protected;
|
||||||
|
|
||||||
|
--modified by NIZNHY-PKV Fri Sep 12 07:05:37 2014f
|
||||||
|
PerformVZ(me:out)
|
||||||
|
is virtual protected;
|
||||||
|
--Purpose: Computes Vertex/Solid interferences
|
||||||
|
|
||||||
|
PerformEZ(me:out)
|
||||||
|
is virtual protected;
|
||||||
|
--Purpose: Computes Edge/Solid interferences
|
||||||
|
|
||||||
|
PerformFZ(me:out)
|
||||||
|
is virtual protected;
|
||||||
|
--Purpose: Computes Face/Solid interferences
|
||||||
|
PerformZZ(me:out)
|
||||||
|
is virtual protected;
|
||||||
|
--Purpose: Computes Solid/Solid interferences
|
||||||
|
--modified by NIZNHY-PKV Fri Sep 12 07:05:45 2014t
|
||||||
|
|
||||||
TreatVerticesEE(me:out)
|
TreatVerticesEE(me:out)
|
||||||
is protected;
|
is protected;
|
||||||
|
@ -243,4 +243,27 @@ void BOPAlgo_PaveFiller::PerformInternal()
|
|||||||
if (myErrorStatus) {
|
if (myErrorStatus) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
//modified by NIZNHY-PKV Fri Sep 12 07:06:50 2014f
|
||||||
|
// 03
|
||||||
|
PerformVZ();
|
||||||
|
if (myErrorStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 13
|
||||||
|
PerformEZ();
|
||||||
|
if (myErrorStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 23
|
||||||
|
PerformFZ();
|
||||||
|
if (myErrorStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 33
|
||||||
|
PerformZZ();
|
||||||
|
if (myErrorStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//modified by NIZNHY-PKV Fri Sep 12 07:06:52 2014t
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
// Created by: Peter KURNEV
|
// Created by: Peter KURNEV
|
||||||
// Copyright (c) 2010-2012 OPEN CASCADE SAS
|
// Copyright (c) 2010-2014 OPEN CASCADE SAS
|
||||||
// Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
|
// Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
|
||||||
// Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
|
// Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
|
||||||
// EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
// EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
||||||
//
|
//
|
||||||
//
|
|
||||||
// This file is part of Open CASCADE Technology software library.
|
// This file is part of Open CASCADE Technology software library.
|
||||||
//
|
//
|
||||||
// This library is free software; you can redistribute it and/or modify it under
|
// This library is free software; you can redistribute it and/or modify it under
|
||||||
@ -16,27 +15,28 @@
|
|||||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||||
// commercial license or contractual agreement.
|
// commercial license or contractual agreement.
|
||||||
|
|
||||||
#include <BOPAlgo_CheckerSI.ixx>
|
#include <BOPAlgo_PaveFiller.ixx>
|
||||||
|
|
||||||
|
#include <gp_Pnt.hxx>
|
||||||
|
|
||||||
|
#include <TopAbs_State.hxx>
|
||||||
|
|
||||||
|
#include <TopoDS_Vertex.hxx>
|
||||||
|
#include <TopoDS_Solid.hxx>
|
||||||
|
#include <BRep_Tool.hxx>
|
||||||
|
#include <BRepClass3d_SolidClassifier.hxx>
|
||||||
|
|
||||||
|
#include <IntTools_Context.hxx>
|
||||||
|
|
||||||
#include <BOPDS_DS.hxx>
|
#include <BOPDS_DS.hxx>
|
||||||
#include <BOPDS_IteratorSI.hxx>
|
#include <BOPDS_IteratorSI.hxx>
|
||||||
#include <IntTools_Context.hxx>
|
|
||||||
|
|
||||||
#include <BOPDS_Interf.hxx>
|
#include <BOPDS_Interf.hxx>
|
||||||
#include <TopoDS_Solid.hxx>
|
|
||||||
#include <BRepClass3d_SolidClassifier.hxx>
|
|
||||||
#include <TopoDS_Vertex.hxx>
|
|
||||||
#include <gp_Pnt.hxx>
|
|
||||||
#include <TopAbs_State.hxx>
|
|
||||||
#include <BRep_Tool.hxx>
|
|
||||||
#include <BOPDS_VectorOfInterfVZ.hxx>
|
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PerformVZ
|
//function : PerformVZ
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_CheckerSI::PerformVZ()
|
void BOPAlgo_PaveFiller::PerformVZ()
|
||||||
{
|
{
|
||||||
Standard_Boolean bJustAdd;
|
Standard_Boolean bJustAdd;
|
||||||
Standard_Integer iSize, nV, nZ, i;
|
Standard_Integer iSize, nV, nZ, i;
|
||||||
@ -85,13 +85,12 @@ void BOPAlgo_CheckerSI::PerformVZ()
|
|||||||
myDS->AddInterf(nV, nZ);
|
myDS->AddInterf(nV, nZ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PerformEZ
|
//function : PerformEZ
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_CheckerSI::PerformEZ()
|
void BOPAlgo_PaveFiller::PerformEZ()
|
||||||
{
|
{
|
||||||
Standard_Boolean bJustAdd, bHasInterf;
|
Standard_Boolean bJustAdd, bHasInterf;
|
||||||
Standard_Integer iSize, nE, nZ, i;
|
Standard_Integer iSize, nE, nZ, i;
|
||||||
@ -136,7 +135,7 @@ void BOPAlgo_CheckerSI::PerformEZ()
|
|||||||
//function : PerformFZ
|
//function : PerformFZ
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_CheckerSI::PerformFZ()
|
void BOPAlgo_PaveFiller::PerformFZ()
|
||||||
{
|
{
|
||||||
Standard_Boolean bJustAdd, bHasInterf;
|
Standard_Boolean bJustAdd, bHasInterf;
|
||||||
Standard_Integer iSize, nF, nZ, i;
|
Standard_Integer iSize, nF, nZ, i;
|
||||||
@ -181,7 +180,7 @@ void BOPAlgo_CheckerSI::PerformFZ()
|
|||||||
//function : PerformZZ
|
//function : PerformZZ
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_CheckerSI::PerformZZ()
|
void BOPAlgo_PaveFiller::PerformZZ()
|
||||||
{
|
{
|
||||||
Standard_Boolean bJustAdd, bHasInterf, bFlag;
|
Standard_Boolean bJustAdd, bHasInterf, bFlag;
|
||||||
Standard_Integer iSize, nZ1, nZ, i;
|
Standard_Integer iSize, nZ1, nZ, i;
|
@ -300,7 +300,9 @@ void BOPAlgo_PaveFiller::PerformFF()
|
|||||||
aNbCurves=aCvsX.Length();
|
aNbCurves=aCvsX.Length();
|
||||||
aNbPoints=aPntsX.Length();
|
aNbPoints=aPntsX.Length();
|
||||||
//
|
//
|
||||||
|
if (aNbCurves || aNbPoints) {
|
||||||
myDS->AddInterf(nF1, nF2);
|
myDS->AddInterf(nF1, nF2);
|
||||||
|
}
|
||||||
//
|
//
|
||||||
iX=aFFs.Append()-1;
|
iX=aFFs.Append()-1;
|
||||||
BOPDS_InterfFF& aFF=aFFs(iX);
|
BOPDS_InterfFF& aFF=aFFs(iX);
|
||||||
|
@ -6,6 +6,8 @@ BOPAlgo_PaveFiller_5.cxx
|
|||||||
BOPAlgo_PaveFiller_6.cxx
|
BOPAlgo_PaveFiller_6.cxx
|
||||||
BOPAlgo_PaveFiller_7.cxx
|
BOPAlgo_PaveFiller_7.cxx
|
||||||
BOPAlgo_PaveFiller_8.cxx
|
BOPAlgo_PaveFiller_8.cxx
|
||||||
|
BOPAlgo_PaveFiller_9.cxx
|
||||||
|
BOPAlgo_PaveFiller_10.cxx
|
||||||
BOPAlgo_Builder_1.cxx
|
BOPAlgo_Builder_1.cxx
|
||||||
BOPAlgo_Builder_2.cxx
|
BOPAlgo_Builder_2.cxx
|
||||||
BOPAlgo_Builder_3.cxx
|
BOPAlgo_Builder_3.cxx
|
||||||
@ -13,5 +15,5 @@ BOPAlgo_Builder_4.cxx
|
|||||||
BOPAlgo_BOP_1.cxx
|
BOPAlgo_BOP_1.cxx
|
||||||
BOPAlgo_WireSplitter_1.cxx
|
BOPAlgo_WireSplitter_1.cxx
|
||||||
BOPAlgo_ListOfCheckResult.hxx
|
BOPAlgo_ListOfCheckResult.hxx
|
||||||
BOPAlgo_CheckerSI_1.cxx
|
|
||||||
BOPAlgo_PaveFiller_9.cxx
|
|
||||||
|
@ -278,7 +278,7 @@ void BOPDS_Iterator::Intersect()
|
|||||||
//
|
//
|
||||||
for (i=0; i<aNb; ++i) {
|
for (i=0; i<aNb; ++i) {
|
||||||
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
||||||
bFlag=aSI.HasBRep();
|
bFlag=aSI.IsInterfering();
|
||||||
//
|
//
|
||||||
BOPDS_TSR& aTSR=aVTSR.Append1();
|
BOPDS_TSR& aTSR=aVTSR.Append1();
|
||||||
//
|
//
|
||||||
@ -308,7 +308,7 @@ void BOPDS_Iterator::Intersect()
|
|||||||
for (i=i1; i<=i2; ++i) {
|
for (i=i1; i<=i2; ++i) {
|
||||||
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
||||||
//
|
//
|
||||||
if (!aSI.HasBRep()){
|
if (!aSI.IsInterfering()){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
23
tests/bugs/modalg_5/bug25242
Normal file
23
tests/bugs/modalg_5/bug25242
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
puts "================"
|
||||||
|
puts "OCC25242"
|
||||||
|
puts "================"
|
||||||
|
puts ""
|
||||||
|
#################################
|
||||||
|
# Wrong result of cut operation
|
||||||
|
#################################
|
||||||
|
|
||||||
|
box a 0 0 0 10 10 10
|
||||||
|
box b 20 0 0 10 10 10
|
||||||
|
|
||||||
|
bfuse r0 a b
|
||||||
|
bcut result r0 a
|
||||||
|
|
||||||
|
set nb_v_good 8
|
||||||
|
set nb_e_good 12
|
||||||
|
set nb_w_good 6
|
||||||
|
set nb_f_good 6
|
||||||
|
set nb_sh_good 1
|
||||||
|
set nb_sol_good 1
|
||||||
|
set nb_compsol_good 0
|
||||||
|
set nb_compound_good 1
|
||||||
|
set nb_shape_good 35
|
Loading…
x
Reference in New Issue
Block a user