mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-16 10:08:36 +03:00
0021762: Integration of new Boolean Operation algorithm to OCCT.
Modifications: 1. Test cases boolean bfuse_complex J1 P9 have been fixed (the function IsInternalFace has been modified to use the function GetFaceOff); 2. Test case chl 902 H3 has been fixed (changes in the treatment of section edges); 3. Test case boolean bsection D8 has been modified (removed TODO statement); 4. Test case boolean bsection A3 has been modified (as the shapes have been changed).
This commit is contained in:
parent
eb000a3bd7
commit
ba5361f35a
@ -357,7 +357,7 @@ static
|
|||||||
aSelF=(*(TopoDS_Face*)(&aLCSOff.First().Shape2()));
|
aSelF=(*(TopoDS_Face*)(&aLCSOff.First().Shape2()));
|
||||||
}
|
}
|
||||||
else if (aNbOff>1){
|
else if (aNbOff>1){
|
||||||
BOPTools_AlgoTools::GetFaceOff(aE, aF, aLCSOff, aSelF);
|
BOPTools_AlgoTools::GetFaceOff(aE, aF, aLCSOff, aSelF, myContext);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (!aSelF.IsNull() && AddedFacesMap.Add(aSelF)) {
|
if (!aSelF.IsNull() && AddedFacesMap.Add(aSelF)) {
|
||||||
|
@ -224,6 +224,7 @@ is
|
|||||||
PostTreatFF(me:out;
|
PostTreatFF(me:out;
|
||||||
theMSCPB:out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS;
|
theMSCPB:out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS;
|
||||||
theMVI:out DataMapOfShapeInteger from BOPCol;
|
theMVI:out DataMapOfShapeInteger from BOPCol;
|
||||||
|
theDMExEd:out DataMapOfPaveBlockListOfPaveBlock from BOPDS;
|
||||||
theAllocator:out BaseAllocator from BOPCol)
|
theAllocator:out BaseAllocator from BOPCol)
|
||||||
returns Integer from Standard
|
returns Integer from Standard
|
||||||
is protected;
|
is protected;
|
||||||
@ -314,6 +315,7 @@ is
|
|||||||
|
|
||||||
--modified by NIZHNY-EMV Tue Dec 13 10:21:47 2011
|
--modified by NIZHNY-EMV Tue Dec 13 10:21:47 2011
|
||||||
UpdateExistingPaveBlocks(me:out;
|
UpdateExistingPaveBlocks(me:out;
|
||||||
|
thePB : PaveBlock from BOPDS;
|
||||||
theLPB : out ListOfPaveBlock from BOPDS;
|
theLPB : out ListOfPaveBlock from BOPDS;
|
||||||
nF1 : Integer from Standard;
|
nF1 : Integer from Standard;
|
||||||
nF2 : Integer from Standard)
|
nF2 : Integer from Standard)
|
||||||
|
@ -92,16 +92,14 @@
|
|||||||
#include <BRepBuilderAPI_MakeVertex.hxx>
|
#include <BRepBuilderAPI_MakeVertex.hxx>
|
||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
#include <BOPInt_ShrunkRange.hxx>
|
#include <BOPInt_ShrunkRange.hxx>
|
||||||
|
#include <BOPDS_DataMapOfPaveBlockListOfPaveBlock.hxx>
|
||||||
|
|
||||||
static void FindPaveBlocksByFirst(BOPDS_ListOfPaveBlock& aLPBC,
|
|
||||||
BOPDS_ListOfPaveBlock& aLPB);
|
|
||||||
|
|
||||||
static Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
|
static Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
|
||||||
const Handle(BOPInt_Context)& aCtx);
|
const Handle(BOPInt_Context)& aCtx);
|
||||||
|
|
||||||
static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
static void ToleranceFF(const TopoDS_Face& aF1,
|
||||||
const TopoDS_Face& aF2);
|
const TopoDS_Face& aF2,
|
||||||
|
Standard_Real& aTolFF);
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : PerformFF
|
//function : PerformFF
|
||||||
@ -123,7 +121,7 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
Standard_Boolean bJustAdd, bApp, bCompC2D1, bCompC2D2, bIsDone;
|
Standard_Boolean bJustAdd, bApp, bCompC2D1, bCompC2D2, bIsDone;
|
||||||
Standard_Boolean bToSplit;
|
Standard_Boolean bToSplit;
|
||||||
Standard_Integer nF1, nF2, aNbCurves, aNbPoints, iX, i, iP, iC, aNbLP;
|
Standard_Integer nF1, nF2, aNbCurves, aNbPoints, iX, i, iP, iC, aNbLP;
|
||||||
Standard_Real aApproxTol, aTolR3D, aTolR2D;
|
Standard_Real aApproxTol, aTolR3D, aTolR2D, aTolFF;
|
||||||
//
|
//
|
||||||
BOPDS_VectorOfInterfFF& aFFs=myDS->InterfFF();
|
BOPDS_VectorOfInterfFF& aFFs=myDS->InterfFF();
|
||||||
aFFs.SetStartSize(iSize);
|
aFFs.SetStartSize(iSize);
|
||||||
@ -164,12 +162,11 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
if (bIsDone) {
|
if (bIsDone) {
|
||||||
aTolR3D=aFaceFace.TolReached3d();
|
aTolR3D=aFaceFace.TolReached3d();
|
||||||
aTolR2D=aFaceFace.TolReached2d();
|
aTolR2D=aFaceFace.TolReached2d();
|
||||||
if (aTolR3D < 5.e-6){
|
//
|
||||||
if (!IsAnalytic(aF1, aF2)) {
|
ToleranceFF(aF1, aF2, aTolFF);
|
||||||
aTolR3D=5.e-6;
|
//
|
||||||
} else if (aTolR3D < 1.e-7) {
|
if (aTolR3D < aTolFF){
|
||||||
aTolR3D=1.e-7;
|
aTolR3D=aTolFF;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (aTolR2D < 1.e-7){
|
if (aTolR2D < 1.e-7){
|
||||||
aTolR2D=1.e-7;
|
aTolR2D=1.e-7;
|
||||||
@ -271,6 +268,7 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
BOPDS_ListOfPaveBlock aLPB(aAllocator);
|
BOPDS_ListOfPaveBlock aLPB(aAllocator);
|
||||||
BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks aMSCPB(100, aAllocator);
|
BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks aMSCPB(100, aAllocator);
|
||||||
BOPCol_DataMapOfShapeInteger aMVI(100, aAllocator);
|
BOPCol_DataMapOfShapeInteger aMVI(100, aAllocator);
|
||||||
|
BOPDS_DataMapOfPaveBlockListOfPaveBlock aDMExEdges;
|
||||||
//modified by NIZHNY-EMV Tue Sep 27 08:26:45 2011
|
//modified by NIZHNY-EMV Tue Sep 27 08:26:45 2011
|
||||||
BOPCol_DataMapOfIntegerListOfInteger aMInterfs;
|
BOPCol_DataMapOfIntegerListOfInteger aMInterfs;
|
||||||
BOPCol_ListOfInteger aLIEF;
|
BOPCol_ListOfInteger aLIEF;
|
||||||
@ -447,7 +445,7 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
}//for (i=0; i<aNbFF; ++i) {
|
}//for (i=0; i<aNbFF; ++i) {
|
||||||
//
|
//
|
||||||
// post treatment
|
// post treatment
|
||||||
myErrorStatus=PostTreatFF(aMSCPB, aMVI, aAllocator);
|
myErrorStatus=PostTreatFF(aMSCPB, aMVI, aDMExEdges, aAllocator);
|
||||||
if (myErrorStatus) {
|
if (myErrorStatus) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -465,8 +463,16 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
for (j=0; j<aNbC; ++j) {
|
for (j=0; j<aNbC; ++j) {
|
||||||
BOPDS_Curve& aNC=aVNC(j);
|
BOPDS_Curve& aNC=aVNC(j);
|
||||||
BOPDS_ListOfPaveBlock& aLPBC=aNC.ChangePaveBlocks();
|
BOPDS_ListOfPaveBlock& aLPBC=aNC.ChangePaveBlocks();
|
||||||
UpdateExistingPaveBlocks(aLPBC, nF1, nF2);
|
|
||||||
aItLPB.Initialize(aLPBC);
|
aItLPB.Initialize(aLPBC);
|
||||||
|
//
|
||||||
|
if (aItLPB.More() && aDMExEdges.IsBound(aLPBC.First())) {
|
||||||
|
const Handle(BOPDS_PaveBlock)& aPB=aLPBC.First();
|
||||||
|
BOPDS_ListOfPaveBlock& aLPB = aDMExEdges.ChangeFind(aPB);
|
||||||
|
UpdateExistingPaveBlocks(aPB, aLPB, nF1, nF2);
|
||||||
|
aLPBC.Clear();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//
|
||||||
for(; aItLPB.More(); aItLPB.Next()) {
|
for(; aItLPB.More(); aItLPB.Next()) {
|
||||||
const Handle(BOPDS_PaveBlock)& aPB=aItLPB.Value();
|
const Handle(BOPDS_PaveBlock)& aPB=aItLPB.Value();
|
||||||
aFI1.ChangePaveBlocksSc().Add(aPB);
|
aFI1.ChangePaveBlocksSc().Add(aPB);
|
||||||
@ -488,6 +494,7 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
aMVStick.Clear();
|
aMVStick.Clear();
|
||||||
aMPBOnIn.Clear();
|
aMPBOnIn.Clear();
|
||||||
aMVOnIn.Clear();
|
aMVOnIn.Clear();
|
||||||
|
aDMExEdges.Clear();
|
||||||
aAllocator.Nullify();
|
aAllocator.Nullify();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,6 +505,7 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
Standard_Integer BOPAlgo_PaveFiller::PostTreatFF
|
Standard_Integer BOPAlgo_PaveFiller::PostTreatFF
|
||||||
(BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMSCPB,
|
(BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMSCPB,
|
||||||
BOPCol_DataMapOfShapeInteger& aMVI,
|
BOPCol_DataMapOfShapeInteger& aMVI,
|
||||||
|
BOPDS_DataMapOfPaveBlockListOfPaveBlock& aDMExEdges,
|
||||||
Handle(NCollection_BaseAllocator)& theAllocator)
|
Handle(NCollection_BaseAllocator)& theAllocator)
|
||||||
{
|
{
|
||||||
Standard_Integer iRet, aNbS;
|
Standard_Integer iRet, aNbS;
|
||||||
@ -553,11 +561,9 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
aPB1=aCPB.PaveBlock1();
|
aPB1=aCPB.PaveBlock1();
|
||||||
//
|
//
|
||||||
if (aPB1->HasEdge()) {
|
if (aPB1->HasEdge()) {
|
||||||
BOPDS_InterfFF& aFF=aFFs(aCPB.IndexInterf());
|
BOPDS_ListOfPaveBlock aLPBx;
|
||||||
BOPDS_VectorOfCurve& aVNC=aFF.ChangeCurves();
|
aLPBx.Append(aPB1);
|
||||||
BOPDS_Curve& aNC=aVNC(aCPB.Index());
|
aDMExEdges.Bind(aPB1, aLPBx);
|
||||||
BOPDS_ListOfPaveBlock& aLPBC=aNC.ChangePaveBlocks();
|
|
||||||
aLPBC.Clear();
|
|
||||||
} else {
|
} else {
|
||||||
aSI.SetShapeType(aType);
|
aSI.SetShapeType(aType);
|
||||||
aSI.SetShape(aS);
|
aSI.SetShape(aS);
|
||||||
@ -624,23 +630,20 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
//
|
//
|
||||||
else if (aType==TopAbs_EDGE) {
|
else if (aType==TopAbs_EDGE) {
|
||||||
bHasPaveBlocks=aPDS->HasPaveBlocks(nSx);
|
bHasPaveBlocks=aPDS->HasPaveBlocks(nSx);
|
||||||
|
const BOPDS_CoupleOfPaveBlocks &aCPB=theMSCPB.FindFromKey(aSx);
|
||||||
|
iX=aCPB.IndexInterf();
|
||||||
|
iC=aCPB.Index();
|
||||||
|
aPB1=aCPB.PaveBlock1();
|
||||||
|
//
|
||||||
|
bOld = aPB1->HasEdge();
|
||||||
|
if (bOld) {
|
||||||
|
BOPDS_ListOfPaveBlock aLPBx;
|
||||||
|
aDMExEdges.Bind(aPB1, aLPBx);
|
||||||
|
}
|
||||||
|
//
|
||||||
if (!bHasPaveBlocks) {
|
if (!bHasPaveBlocks) {
|
||||||
const BOPDS_CoupleOfPaveBlocks &aCPB=theMSCPB.FindFromKey(aSx);
|
if (bOld) {
|
||||||
aPB1=aCPB.PaveBlock1();
|
aDMExEdges.ChangeFind(aPB1).Append(aPB1);
|
||||||
//
|
|
||||||
if (aPB1->HasEdge()) {
|
|
||||||
BOPDS_InterfFF& aFF=aFFs(aCPB.IndexInterf());
|
|
||||||
BOPDS_VectorOfCurve& aVNC=aFF.ChangeCurves();
|
|
||||||
BOPDS_Curve& aNC=aVNC(aCPB.Index());
|
|
||||||
BOPDS_ListOfPaveBlock& aLPBC=aNC.ChangePaveBlocks();
|
|
||||||
aItLPB.Initialize(aLPBC);
|
|
||||||
for (; aItLPB.More(); aItLPB.Next()) {
|
|
||||||
const Handle(BOPDS_PaveBlock)& aPBC=aItLPB.Value();
|
|
||||||
if (aPBC==aPB1) {
|
|
||||||
aLPBC.Remove(aItLPB);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
aSI.SetShapeType(aType);
|
aSI.SetShapeType(aType);
|
||||||
aSI.SetShape(aSx);
|
aSI.SetShape(aSx);
|
||||||
@ -650,17 +653,6 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const BOPDS_CoupleOfPaveBlocks &aCPB=theMSCPB.FindFromKey(aSx);
|
|
||||||
iX=aCPB.IndexInterf();
|
|
||||||
iC=aCPB.Index();
|
|
||||||
aPB1=aCPB.PaveBlock1();
|
|
||||||
//modified by NIZHNY-EMV Tue Dec 13 15:49:29 2011
|
|
||||||
bOld = Standard_False;
|
|
||||||
if (aPB1->HasEdge()) {
|
|
||||||
bOld = Standard_True;
|
|
||||||
}
|
|
||||||
//modified by NIZHNY-EMV Tue Dec 13 15:49:31 2011
|
|
||||||
//
|
|
||||||
BOPDS_InterfFF& aFF=aFFs(iX);
|
BOPDS_InterfFF& aFF=aFFs(iX);
|
||||||
BOPDS_VectorOfCurve& aVNC=aFF.ChangeCurves();
|
BOPDS_VectorOfCurve& aVNC=aFF.ChangeCurves();
|
||||||
BOPDS_Curve& aNC=aVNC(iC);
|
BOPDS_Curve& aNC=aVNC(iC);
|
||||||
@ -669,7 +661,12 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
const BOPDS_ListOfPaveBlock& aLPBx=aPDS->PaveBlocks(nSx);
|
const BOPDS_ListOfPaveBlock& aLPBx=aPDS->PaveBlocks(nSx);
|
||||||
aNbLPBx=aLPBx.Extent();
|
aNbLPBx=aLPBx.Extent();
|
||||||
//
|
//
|
||||||
if (!bOld || !aNbLPBx) {
|
if (bOld && !aNbLPBx) {
|
||||||
|
aDMExEdges.ChangeFind(aPB1).Append(aPB1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if (!bOld) {
|
||||||
aItLPB.Initialize(aLPBC);
|
aItLPB.Initialize(aLPBC);
|
||||||
for (; aItLPB.More(); aItLPB.Next()) {
|
for (; aItLPB.More(); aItLPB.Next()) {
|
||||||
const Handle(BOPDS_PaveBlock)& aPBC=aItLPB.Value();
|
const Handle(BOPDS_PaveBlock)& aPBC=aItLPB.Value();
|
||||||
@ -681,11 +678,6 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (!aNbLPBx) {
|
if (!aNbLPBx) {
|
||||||
//modified by NIZHNY-EMV Mon Dec 12 15:08:01 2011
|
|
||||||
if (bOld) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
//modified by NIZHNY-EMV Mon Dec 12 15:08:03 2011
|
|
||||||
aE=aSx;
|
aE=aSx;
|
||||||
//
|
//
|
||||||
if (!aMVI.IsBound(aE)) {
|
if (!aMVI.IsBound(aE)) {
|
||||||
@ -772,9 +764,11 @@ static Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
|||||||
aPBC->SetEdge(iE);
|
aPBC->SetEdge(iE);
|
||||||
if (bOld) {
|
if (bOld) {
|
||||||
aPBC->SetOriginalEdge(aPB1->OriginalEdge());
|
aPBC->SetOriginalEdge(aPB1->OriginalEdge());
|
||||||
|
aDMExEdges.ChangeFind(aPB1).Append(aPBC);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aLPBC.Append(aPBC);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
aLPBC.Append(aPBC);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1683,45 +1677,34 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPAlgo_PaveFiller::UpdateExistingPaveBlocks
|
void BOPAlgo_PaveFiller::UpdateExistingPaveBlocks
|
||||||
(BOPDS_ListOfPaveBlock& aLPBC,
|
(const Handle(BOPDS_PaveBlock)& aPBf,
|
||||||
|
BOPDS_ListOfPaveBlock& aLPB,
|
||||||
const Standard_Integer nF1,
|
const Standard_Integer nF1,
|
||||||
const Standard_Integer nF2)
|
const Standard_Integer nF2)
|
||||||
{
|
{
|
||||||
if (!aLPBC.Extent()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
BOPDS_IndexedMapOfPaveBlock aMPB;
|
|
||||||
|
|
||||||
Standard_Integer nE;
|
Standard_Integer nE;
|
||||||
Handle(BOPDS_PaveBlock) aPBf;
|
|
||||||
aPBf = aLPBC.First();
|
|
||||||
nE = aPBf->OriginalEdge();
|
|
||||||
if (nE == -1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
Handle(BOPDS_PaveBlock) aPB, aPB1, aPB2, aPB2n;
|
Handle(BOPDS_PaveBlock) aPB, aPB1, aPB2, aPB2n;
|
||||||
Handle(BOPDS_CommonBlock) aCB;
|
Handle(BOPDS_CommonBlock) aCB;
|
||||||
BOPDS_ListOfPaveBlock aLPB;
|
|
||||||
BOPDS_ListIteratorOfListOfPaveBlock aIt, aIt1, aIt2;
|
BOPDS_ListIteratorOfListOfPaveBlock aIt, aIt1, aIt2;
|
||||||
//
|
BOPDS_IndexedMapOfPaveBlock aMPB;
|
||||||
FindPaveBlocksByFirst(aLPBC, aLPB);
|
|
||||||
if (aLPB.Extent() == 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
//remove micro edges from aLPB
|
//remove micro edges from aLPB
|
||||||
aIt.Initialize(aLPB);
|
aIt.Initialize(aLPB);
|
||||||
for (aIt.Next(); aIt.More();) {
|
for (; aIt.More();) {
|
||||||
aPB = aIt.Value();
|
aPB = aIt.Value();
|
||||||
const TopoDS_Edge& aE = *(TopoDS_Edge*)&myDS->Shape(aPB->Edge());
|
if (!aPB->HasShrunkData()) {
|
||||||
if (IsMicroEdge(aE, myContext)) {
|
const TopoDS_Edge& aE = *(TopoDS_Edge*)&myDS->Shape(aPB->Edge());
|
||||||
aLPB.Remove(aIt);
|
if (IsMicroEdge(aE, myContext)) {
|
||||||
continue;
|
aLPB.Remove(aIt);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
aIt.Next();
|
aIt.Next();
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
if (!aLPB.Extent()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
//update face info
|
//update face info
|
||||||
myDS->UpdateFaceInfoOn(nF1);
|
myDS->UpdateFaceInfoOn(nF1);
|
||||||
//
|
//
|
||||||
@ -1735,8 +1718,6 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
BOPDS_IndexedMapOfPaveBlock& aMPBOn2 = aFI2.ChangePaveBlocksOn();
|
BOPDS_IndexedMapOfPaveBlock& aMPBOn2 = aFI2.ChangePaveBlocksOn();
|
||||||
BOPDS_IndexedMapOfPaveBlock& aMPBIn2 = aFI2.ChangePaveBlocksIn();
|
BOPDS_IndexedMapOfPaveBlock& aMPBIn2 = aFI2.ChangePaveBlocksIn();
|
||||||
//
|
//
|
||||||
//
|
|
||||||
aPBf = aLPB.First();
|
|
||||||
if (aPBf->IsCommonBlock()) {
|
if (aPBf->IsCommonBlock()) {
|
||||||
const Handle(BOPDS_CommonBlock)& aCB1 = aPBf->CommonBlock();
|
const Handle(BOPDS_CommonBlock)& aCB1 = aPBf->CommonBlock();
|
||||||
const BOPDS_ListOfPaveBlock& aLPB2 = aCB1->PaveBlocks();
|
const BOPDS_ListOfPaveBlock& aLPB2 = aCB1->PaveBlocks();
|
||||||
@ -1760,7 +1741,7 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
//
|
//
|
||||||
//create new pave blocks
|
//create new pave blocks
|
||||||
aIt.Initialize(aLPB);
|
aIt.Initialize(aLPB);
|
||||||
for (aIt.Next(); aIt.More(); aIt.Next()) {
|
for (; aIt.More(); aIt.Next()) {
|
||||||
aPB = aIt.Value();
|
aPB = aIt.Value();
|
||||||
//
|
//
|
||||||
aCB = new BOPDS_CommonBlock;
|
aCB = new BOPDS_CommonBlock;
|
||||||
@ -1785,6 +1766,7 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
else {
|
else {
|
||||||
|
nE=aPBf->OriginalEdge();
|
||||||
BOPDS_ListOfPaveBlock& aLPB1 = myDS->ChangePaveBlocks(nE);
|
BOPDS_ListOfPaveBlock& aLPB1 = myDS->ChangePaveBlocks(nE);
|
||||||
aIt1.Initialize(aLPB1);
|
aIt1.Initialize(aLPB1);
|
||||||
for (; aIt1.More(); aIt1.Next()) {
|
for (; aIt1.More(); aIt1.Next()) {
|
||||||
@ -1796,7 +1778,7 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
aIt.Initialize(aLPB);
|
aIt.Initialize(aLPB);
|
||||||
for (aIt.Next(); aIt.More(); aIt.Next()) {
|
for (; aIt.More(); aIt.Next()) {
|
||||||
aPB = aIt.Value();
|
aPB = aIt.Value();
|
||||||
//
|
//
|
||||||
Standard_Integer nF = (aMPBOn1.Contains(aPBf) ||
|
Standard_Integer nF = (aMPBOn1.Contains(aPBf) ||
|
||||||
@ -1923,35 +1905,6 @@ void BOPAlgo_PaveFiller::RemoveUsedVertices(BOPDS_Curve& aNC,
|
|||||||
aMVI.Bind(aV2, nV2);
|
aMVI.Bind(aV2, nV2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
|
||||||
//function : FindPaveBlocksByFirst
|
|
||||||
//purpose :
|
|
||||||
//=======================================================================
|
|
||||||
void FindPaveBlocksByFirst(BOPDS_ListOfPaveBlock& aLPBC,
|
|
||||||
BOPDS_ListOfPaveBlock& aLPB)
|
|
||||||
{
|
|
||||||
Standard_Integer nE;
|
|
||||||
BOPDS_ListIteratorOfListOfPaveBlock aIt;
|
|
||||||
//
|
|
||||||
const Handle(BOPDS_PaveBlock)& aPB1 = aLPBC.First();
|
|
||||||
nE = aPB1->OriginalEdge();
|
|
||||||
aLPB.Append(aPB1);
|
|
||||||
//
|
|
||||||
aLPBC.RemoveFirst();
|
|
||||||
//
|
|
||||||
aIt.Initialize(aLPBC);
|
|
||||||
for (;aIt.More();) {
|
|
||||||
const Handle(BOPDS_PaveBlock)& aPB = aIt.Value();
|
|
||||||
if (aPB->OriginalEdge() == nE) {
|
|
||||||
aLPB.Append(aPB);
|
|
||||||
aLPBC.Remove(aIt);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
aIt.Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsMicroEdge
|
//function : IsMicroEdge
|
||||||
//purpose : Checks if it is possible to compute shrunk range for the edge <aE>.
|
//purpose : Checks if it is possible to compute shrunk range for the edge <aE>.
|
||||||
@ -1991,27 +1944,37 @@ Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsAnalytic
|
//function : ToleranceFF
|
||||||
//purpose : Checks if the faces have analytical surfaces
|
//purpose : Computes the TolFF according to the tolerance value and
|
||||||
|
// types of the faces.
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean IsAnalytic(const TopoDS_Face& aF1,
|
void ToleranceFF(const TopoDS_Face& aF1,
|
||||||
const TopoDS_Face& aF2)
|
const TopoDS_Face& aF2,
|
||||||
|
Standard_Real& aTolFF)
|
||||||
{
|
{
|
||||||
|
Standard_Real aTol1, aTol2;
|
||||||
|
Standard_Boolean isAna1, isAna2;
|
||||||
|
//
|
||||||
|
aTol1 = BRep_Tool::Tolerance(aF1);
|
||||||
|
aTol2 = BRep_Tool::Tolerance(aF2);
|
||||||
|
aTolFF = Max(aTol1, aTol2);
|
||||||
|
//
|
||||||
BRepAdaptor_Surface BAS1(aF1);
|
BRepAdaptor_Surface BAS1(aF1);
|
||||||
BRepAdaptor_Surface BAS2(aF2);
|
BRepAdaptor_Surface BAS2(aF2);
|
||||||
//
|
//
|
||||||
Standard_Boolean isAna1 = (BAS1.GetType() == GeomAbs_Plane ||
|
isAna1 = (BAS1.GetType() == GeomAbs_Plane ||
|
||||||
BAS1.GetType() == GeomAbs_Cylinder ||
|
BAS1.GetType() == GeomAbs_Cylinder ||
|
||||||
BAS1.GetType() == GeomAbs_Cone ||
|
BAS1.GetType() == GeomAbs_Cone ||
|
||||||
BAS1.GetType() == GeomAbs_Sphere ||
|
BAS1.GetType() == GeomAbs_Sphere ||
|
||||||
BAS1.GetType() == GeomAbs_Torus);
|
BAS1.GetType() == GeomAbs_Torus);
|
||||||
Standard_Boolean isAna2 = (BAS2.GetType() == GeomAbs_Plane ||
|
//
|
||||||
BAS2.GetType() == GeomAbs_Cylinder ||
|
isAna2 = (BAS2.GetType() == GeomAbs_Plane ||
|
||||||
BAS2.GetType() == GeomAbs_Cone ||
|
BAS2.GetType() == GeomAbs_Cylinder ||
|
||||||
BAS2.GetType() == GeomAbs_Sphere ||
|
BAS2.GetType() == GeomAbs_Cone ||
|
||||||
BAS2.GetType() == GeomAbs_Torus);
|
BAS2.GetType() == GeomAbs_Sphere ||
|
||||||
|
BAS2.GetType() == GeomAbs_Torus);
|
||||||
return (isAna1 && isAna2);
|
//
|
||||||
|
aTolFF = (isAna1 && isAna2) ? aTolFF : Max(aTolFF, 5.e-6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -758,8 +758,8 @@ Standard_Integer NbWaysOut(const BOPAlgo_ListOfEdgeInfo& aLEInfo)
|
|||||||
aTV1=aTV - dt;
|
aTV1=aTV - dt;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aC2D->D0 (aTV, aPV);
|
|
||||||
aC2D->D0 (aTV1, aPV1);
|
aC2D->D0 (aTV1, aPV1);
|
||||||
|
aC2D->D0 (aTV, aPV);
|
||||||
//
|
//
|
||||||
if (aFlag) {//IN
|
if (aFlag) {//IN
|
||||||
gp_Vec2d aV2DIn(aPV1, aPV);
|
gp_Vec2d aV2DIn(aPV1, aPV);
|
||||||
|
@ -147,7 +147,8 @@ is
|
|||||||
theEdge :Edge from TopoDS;
|
theEdge :Edge from TopoDS;
|
||||||
theFace :Face from TopoDS;
|
theFace :Face from TopoDS;
|
||||||
theLCEF :out ListOfCoupleOfShape from BOPTools;
|
theLCEF :out ListOfCoupleOfShape from BOPTools;
|
||||||
theFaceOff :out Face from TopoDS);
|
theFaceOff :out Face from TopoDS;
|
||||||
|
theContext :out Context from BOPInt);
|
||||||
---Purpose: For the face theFace and its edge theEdge
|
---Purpose: For the face theFace and its edge theEdge
|
||||||
-- finds the face suitable to produce shell.
|
-- finds the face suitable to produce shell.
|
||||||
-- theLCEF - set of faces to search. All faces
|
-- theLCEF - set of faces to search. All faces
|
||||||
|
@ -78,7 +78,8 @@ static
|
|||||||
static
|
static
|
||||||
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
||||||
const BOPCol_ListOfShape& thLF,
|
const BOPCol_ListOfShape& thLF,
|
||||||
BOPTools_ListOfCoupleOfShape& theLCFF);
|
BOPTools_ListOfCoupleOfShape& theLCFF,
|
||||||
|
Handle(BOPInt_Context)& theContext);
|
||||||
static
|
static
|
||||||
TopAbs_Orientation Orientation(const TopoDS_Edge& anE,
|
TopAbs_Orientation Orientation(const TopoDS_Edge& anE,
|
||||||
const TopoDS_Face& aF);
|
const TopoDS_Face& aF);
|
||||||
@ -659,7 +660,7 @@ static
|
|||||||
BOPTools_ListOfCoupleOfShape aLCFF;
|
BOPTools_ListOfCoupleOfShape aLCFF;
|
||||||
BOPTools_ListIteratorOfListOfCoupleOfShape aIt;
|
BOPTools_ListIteratorOfListOfCoupleOfShape aIt;
|
||||||
//
|
//
|
||||||
FindFacePairs(theEdge, theLF, aLCFF);
|
FindFacePairs(theEdge, theLF, aLCFF, theContext);
|
||||||
//
|
//
|
||||||
aIt.Initialize(aLCFF);
|
aIt.Initialize(aLCFF);
|
||||||
for (; aIt.More(); aIt.Next()) {
|
for (; aIt.More(); aIt.Next()) {
|
||||||
@ -685,32 +686,11 @@ static
|
|||||||
const TopoDS_Face& theFace2,
|
const TopoDS_Face& theFace2,
|
||||||
Handle(BOPInt_Context)& theContext)
|
Handle(BOPInt_Context)& theContext)
|
||||||
{
|
{
|
||||||
Standard_Boolean bRet;
|
|
||||||
Standard_Real aT1, aT2, aT;//aD1, aD2,
|
|
||||||
gp_Pnt aPx, aPF, aPF1, aPF2;
|
|
||||||
gp_Pnt2d aP2D, aPF2D;
|
|
||||||
gp_Dir aDNF1, aDNF2;
|
|
||||||
TopoDS_Edge aE1, aE2;
|
TopoDS_Edge aE1, aE2;
|
||||||
Handle(Geom_Curve)aC3D;
|
TopoDS_Face aFOff;
|
||||||
gp_Vec aVTgt;
|
BOPTools_ListOfCoupleOfShape theLCSOff;
|
||||||
|
BOPTools_CoupleOfShape aCS1, aCS2;
|
||||||
//
|
//
|
||||||
aC3D =BRep_Tool::Curve(theEdge, aT1, aT2);
|
|
||||||
aT=BOPTools_AlgoTools2D::IntermediatePoint(aT1, aT2);
|
|
||||||
aC3D->D0(aT, aPx);
|
|
||||||
//modified by NIZHNY-EMV Wed Sep 21 13:20:31 2011
|
|
||||||
BOPTools_AlgoTools2D::EdgeTangent(theEdge, aT, aVTgt);
|
|
||||||
gp_Dir aDTtgt(aVTgt);
|
|
||||||
aDTtgt.Reverse();
|
|
||||||
Handle(Geom_Plane) aPL;
|
|
||||||
aPL = new Geom_Plane(aPx, aDTtgt);
|
|
||||||
//modified by NIZHNY-EMV Wed Sep 21 13:20:33 2011
|
|
||||||
//
|
|
||||||
// 1. PF
|
|
||||||
//modified by NIZHNY-EMV Wed Oct 12 08:13:43 2011
|
|
||||||
BOPTools_AlgoTools3D::PointNearEdge (theEdge, theFace, aT, aPF2D, aPF);
|
|
||||||
//modified by NIZHNY-EMV Wed Oct 12 08:13:47 2011
|
|
||||||
//
|
|
||||||
// 2. E1, E2
|
|
||||||
BOPTools_AlgoTools::GetEdgeOnFace(theEdge, theFace1, aE1);
|
BOPTools_AlgoTools::GetEdgeOnFace(theEdge, theFace1, aE1);
|
||||||
if (aE1.Orientation()==TopAbs_INTERNAL) {
|
if (aE1.Orientation()==TopAbs_INTERNAL) {
|
||||||
aE2=aE1;
|
aE2=aE1;
|
||||||
@ -726,68 +706,27 @@ static
|
|||||||
BOPTools_AlgoTools::GetEdgeOnFace(theEdge, theFace2, aE2);
|
BOPTools_AlgoTools::GetEdgeOnFace(theEdge, theFace2, aE2);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// 3
|
aCS1.SetShape1(theEdge);
|
||||||
bRet=Standard_False;
|
aCS1.SetShape2(theFace);
|
||||||
|
theLCSOff.Append(aCS1);
|
||||||
//
|
//
|
||||||
//modified by NIZHNY-EMV Wed May 25 10:01:51 2011
|
aCS2.SetShape1(aE2);
|
||||||
if (!GetProjectPoint(theFace, aPF, theFace1, aPF1, aDNF1, theContext)) {
|
aCS2.SetShape2(theFace2);
|
||||||
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (aE1, theFace1, aT, aPF1, aDNF1);
|
theLCSOff.Append(aCS2);
|
||||||
}
|
|
||||||
if (!GetProjectPoint(theFace, aPF1, theFace2, aPF2, aDNF2, theContext)) {
|
|
||||||
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (aE2, theFace2, aT, aPF2, aDNF2);
|
|
||||||
}
|
|
||||||
//modified by NIZHNY-EMV Wed May 25 10:01:53 2011
|
|
||||||
//modified by NIZHNY-EMV Wed Sep 21 13:25:27 2011
|
|
||||||
//get projects of the points aPF, aPF1, aPF2 on the plane aPL
|
|
||||||
//927/R7
|
|
||||||
gp_Pnt aPFx, aPF1x, aPF2x;
|
|
||||||
CorrectPoint(aPF, aPL, aPFx);
|
|
||||||
CorrectPoint(aPF1, aPL, aPF1x);
|
|
||||||
CorrectPoint(aPF2, aPL, aPF2x);
|
|
||||||
//
|
//
|
||||||
aPF = aPFx; aPF1 = aPF1x; aPF2 = aPF2x;
|
GetFaceOff(aE1, theFace1, theLCSOff, aFOff, theContext);
|
||||||
//modified by NIZHNY-EMV Wed Sep 21 13:25:29 2011
|
|
||||||
//
|
//
|
||||||
{
|
return theFace.IsEqual(aFOff);
|
||||||
Standard_Real aA12, aA1x, aTwoPI;
|
|
||||||
//
|
|
||||||
aTwoPI=2.*M_PI;
|
|
||||||
gp_Vec aVBF (aPx, aPF );
|
|
||||||
gp_Vec aVBF1(aPx, aPF1);
|
|
||||||
gp_Vec aVBF2(aPx, aPF2);
|
|
||||||
//
|
|
||||||
gp_Dir aDTF1;
|
|
||||||
gp_Dir aDBF (aVBF);
|
|
||||||
gp_Dir aDBF1(aVBF1);
|
|
||||||
gp_Dir aDBF2(aVBF2);
|
|
||||||
//
|
|
||||||
aDTF1=aDNF1^aDBF1;
|
|
||||||
//aA12=aDBF1.AngleWithRef(aDBF2, aDTF1);
|
|
||||||
aA12=AngleWithRef(aDBF1, aDBF2, aDTF1);
|
|
||||||
if (aA12<0.) {
|
|
||||||
aA12=aA12+aTwoPI;
|
|
||||||
}
|
|
||||||
//aA1x=aDBF1.AngleWithRef(aDBF , aDTF1);
|
|
||||||
aA1x=AngleWithRef(aDBF1, aDBF , aDTF1);
|
|
||||||
if (aA1x<0.) {
|
|
||||||
aA1x=aA1x+aTwoPI;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
if (aA1x<aA12) {
|
|
||||||
bRet=!bRet; //TopAbs_IN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//
|
|
||||||
return bRet;
|
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetFaceOff
|
//function : GetFaceOff
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void BOPTools_AlgoTools::GetFaceOff(const TopoDS_Edge& theE1,
|
void BOPTools_AlgoTools::GetFaceOff(const TopoDS_Edge& theE1,
|
||||||
const TopoDS_Face& theF1,
|
const TopoDS_Face& theF1,
|
||||||
BOPTools_ListOfCoupleOfShape& theLCSOff,
|
BOPTools_ListOfCoupleOfShape& theLCSOff,
|
||||||
TopoDS_Face& theFOff)
|
TopoDS_Face& theFOff,
|
||||||
|
Handle(BOPInt_Context)& theContext)
|
||||||
{
|
{
|
||||||
Standard_Real aT, aT1, aT2, aAngle, aTwoPI, aAngleMin;
|
Standard_Real aT, aT1, aT2, aAngle, aTwoPI, aAngleMin;
|
||||||
gp_Pnt aPn1, aPn2, aPx;
|
gp_Pnt aPn1, aPn2, aPx;
|
||||||
@ -825,29 +764,27 @@ static
|
|||||||
const TopoDS_Edge& aE2=(*(TopoDS_Edge*)(&aCS.Shape1()));
|
const TopoDS_Edge& aE2=(*(TopoDS_Edge*)(&aCS.Shape1()));
|
||||||
const TopoDS_Face& aF2=(*(TopoDS_Face*)(&aCS.Shape2()));
|
const TopoDS_Face& aF2=(*(TopoDS_Face*)(&aCS.Shape2()));
|
||||||
//
|
//
|
||||||
if (aF2==theF1) {
|
/*if (aF2==theF1) {
|
||||||
aAngle=M_PI;
|
aAngle=M_PI;
|
||||||
}
|
}
|
||||||
else if (aF2.IsSame(theF1)) {
|
else if (aF2.IsSame(theF1)) {
|
||||||
aAngle=aTwoPI;
|
aAngle=aTwoPI;
|
||||||
}
|
}
|
||||||
else {
|
else {*/
|
||||||
//modified by NIZHNY-EMV Tue Sep 06 10:49:54 2011
|
if (!theE1.IsEqual(aE2) ||
|
||||||
|
!GetProjectPoint(theF1, aPn1, aF2, aPn2, aDN2, theContext)) {
|
||||||
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (aE2, aF2, aT, aPn2, aDN2);
|
BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge (aE2, aF2, aT, aPn2, aDN2);
|
||||||
CorrectPoint(aPn2, aPL, aPF2x);
|
|
||||||
gp_Vec aVBF2(aPx, aPF2x);
|
|
||||||
gp_Dir aDBF2(aVBF2);
|
|
||||||
//modified by NIZHNY-EMV Tue Sep 06 10:49:56 2011
|
|
||||||
//aDN2.Reverse();
|
|
||||||
// Angle
|
|
||||||
//aAngle=AngleWithRef(aDN1, aDN2, aDTtgt);
|
|
||||||
aAngle=AngleWithRef(aDBF, aDBF2, aDTF);
|
|
||||||
//modified by NIZHNY-EMV Fri Oct 14 09:39:45 2011
|
|
||||||
//
|
|
||||||
if(aAngle<0.) {
|
|
||||||
aAngle=aTwoPI+aAngle;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
CorrectPoint(aPn2, aPL, aPF2x);
|
||||||
|
gp_Vec aVBF2(aPx, aPF2x);
|
||||||
|
gp_Dir aDBF2(aVBF2);
|
||||||
|
//Angle
|
||||||
|
aAngle=AngleWithRef(aDBF, aDBF2, aDTF);
|
||||||
|
//
|
||||||
|
if(aAngle<0.) {
|
||||||
|
aAngle=aTwoPI+aAngle;
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
|
||||||
if (aAngle<aAngleMin){
|
if (aAngle<aAngleMin){
|
||||||
aAngleMin=aAngle;
|
aAngleMin=aAngle;
|
||||||
@ -1503,7 +1440,8 @@ static
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
||||||
const BOPCol_ListOfShape& thLF,
|
const BOPCol_ListOfShape& thLF,
|
||||||
BOPTools_ListOfCoupleOfShape& theLCFF)
|
BOPTools_ListOfCoupleOfShape& theLCFF,
|
||||||
|
Handle(BOPInt_Context)& theContext)
|
||||||
{
|
{
|
||||||
Standard_Boolean bFound;
|
Standard_Boolean bFound;
|
||||||
Standard_Integer i, aNbCEF;
|
Standard_Integer i, aNbCEF;
|
||||||
@ -1561,7 +1499,7 @@ Standard_Boolean FindFacePairs (const TopoDS_Edge& theE,
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
// F2
|
// F2
|
||||||
BOPTools_AlgoTools::GetFaceOff(aE1, aF1, aLCEFx, aF2);
|
BOPTools_AlgoTools::GetFaceOff(aE1, aF1, aLCEFx, aF2, theContext);
|
||||||
//
|
//
|
||||||
aCFF.SetShape1(aF1);
|
aCFF.SetShape1(aF1);
|
||||||
aCFF.SetShape2(aF2);
|
aCFF.SetShape2(aF2);
|
||||||
@ -1764,7 +1702,7 @@ Standard_Real fsqrt(Standard_Real val)
|
|||||||
Handle(Geom_Surface) aS, aS1;
|
Handle(Geom_Surface) aS, aS1;
|
||||||
GeomAbs_SurfaceType aTS, aTS1;
|
GeomAbs_SurfaceType aTS, aTS1;
|
||||||
Handle(Geom_CylindricalSurface) aCS, aCS1;
|
Handle(Geom_CylindricalSurface) aCS, aCS1;
|
||||||
Standard_Real aR, aR1, dR, aU, aV;
|
Standard_Real aR, aR1, dR, aU, aV, aDMin;
|
||||||
//
|
//
|
||||||
aS = BRep_Tool::Surface(aF);
|
aS = BRep_Tool::Surface(aF);
|
||||||
aS1 = BRep_Tool::Surface(aF1);
|
aS1 = BRep_Tool::Surface(aF1);
|
||||||
@ -1803,6 +1741,10 @@ Standard_Real fsqrt(Standard_Real val)
|
|||||||
if (!aProjector.IsDone()) {
|
if (!aProjector.IsDone()) {
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
aDMin = aProjector.LowerDistance();
|
||||||
|
if (aDMin > dR) {
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
aProjector.LowerDistanceParameters(aU, aV);
|
aProjector.LowerDistanceParameters(aU, aV);
|
||||||
Handle(Geom_Surface) aS = BRep_Tool::Surface(aF1);
|
Handle(Geom_Surface) aS = BRep_Tool::Surface(aF1);
|
||||||
BOPTools_AlgoTools3D::GetNormalToSurface (aS, aU, aV, aDNF1);
|
BOPTools_AlgoTools3D::GetNormalToSurface (aS, aU, aV, aDNF1);
|
||||||
|
@ -2,4 +2,4 @@ restore [locate_data_file a2] a
|
|||||||
restore [locate_data_file b2_bsect] b
|
restore [locate_data_file b2_bsect] b
|
||||||
bsection result a b -n2d
|
bsection result a b -n2d
|
||||||
|
|
||||||
set length 48.4314
|
set length 25.1327
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
puts "TODO OCC22911 ALL: Error : The bsection is not valid."
|
|
||||||
restore [locate_data_file a49] a
|
restore [locate_data_file a49] a
|
||||||
restore [locate_data_file b50] b
|
restore [locate_data_file b50] b
|
||||||
bsection result a b
|
bsection result a b
|
||||||
|
Loading…
x
Reference in New Issue
Block a user