mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
0029496: No intersection curve between faces if starting points are given
Now, bounded IntPatch_Points are found in case when starting points are used in intersection algorithm. Before the fix, these points were not looked for (even).
This commit is contained in:
@@ -358,8 +358,6 @@ static Standard_Boolean isTreatAnalityc(const BRepAdaptor_Surface& theBAS1,
|
||||
void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
const TopoDS_Face& aF2)
|
||||
{
|
||||
Standard_Boolean RestrictLine = Standard_False;
|
||||
|
||||
if (myContext.IsNull()) {
|
||||
myContext=new IntTools_Context;
|
||||
}
|
||||
@@ -509,14 +507,6 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
myIntersector.SetTolerances(TolArc, TolTang, UVMaxStep, Deflection);
|
||||
}
|
||||
|
||||
if((myHS1->IsUClosed() && !myHS1->IsUPeriodic()) ||
|
||||
(myHS1->IsVClosed() && !myHS1->IsVPeriodic()) ||
|
||||
(myHS2->IsUClosed() && !myHS2->IsUPeriodic()) ||
|
||||
(myHS2->IsVClosed() && !myHS2->IsVPeriodic()))
|
||||
{
|
||||
RestrictLine = Standard_True;
|
||||
}
|
||||
//
|
||||
if((aType1 != GeomAbs_BSplineSurface) &&
|
||||
(aType1 != GeomAbs_BezierSurface) &&
|
||||
(aType1 != GeomAbs_OtherSurface) &&
|
||||
@@ -524,8 +514,6 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
(aType2 != GeomAbs_BezierSurface) &&
|
||||
(aType2 != GeomAbs_OtherSurface))
|
||||
{
|
||||
RestrictLine = Standard_True;
|
||||
|
||||
if ((aType1 == GeomAbs_Torus) ||
|
||||
(aType2 == GeomAbs_Torus))
|
||||
{
|
||||
@@ -533,27 +521,6 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if(!RestrictLine)
|
||||
{
|
||||
TopExp_Explorer aExp;
|
||||
for(Standard_Integer i = 0; (!RestrictLine) && (i < 2); i++)
|
||||
{
|
||||
const TopoDS_Face& aF=(!i) ? myFace1 : myFace2;
|
||||
aExp.Init(aF, TopAbs_EDGE);
|
||||
for(; aExp.More(); aExp.Next())
|
||||
{
|
||||
const TopoDS_Edge& aE=TopoDS::Edge(aExp.Current());
|
||||
|
||||
if(BRep_Tool::Degenerated(aE))
|
||||
{
|
||||
RestrictLine = Standard_True;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef INTTOOLS_FACEFACE_DEBUG
|
||||
if(!myListOfPnts.IsEmpty()) {
|
||||
char aBuff[10000];
|
||||
@@ -581,7 +548,7 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
myIntersector.Perform(myHS1, dom1, TolArc, TolTang);
|
||||
else
|
||||
myIntersector.Perform(myHS1, dom1, myHS2, dom2, TolArc, TolTang,
|
||||
myListOfPnts, RestrictLine, isGeomInt);
|
||||
myListOfPnts, isGeomInt);
|
||||
|
||||
myIsDone = myIntersector.IsDone();
|
||||
|
||||
@@ -592,10 +559,6 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
return;
|
||||
}
|
||||
//
|
||||
if(RestrictLine) {
|
||||
myListOfPnts.Clear(); // to use LineConstructor
|
||||
}
|
||||
//
|
||||
const Standard_Integer aNbLinIntersector = myIntersector.NbLines();
|
||||
for (Standard_Integer i=1; i <= aNbLinIntersector; ++i) {
|
||||
MakeCurve(i, dom1, dom2, TolArc);
|
||||
|
Reference in New Issue
Block a user