1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0025766: Exception in BRepAlgo_Section

class TopOpeBRep_FacesIntersector
method
static void MergeWLinesIfAllSegmentsAlongRestriction(IntPatch_SequenceOfLine&           theSlin,
						     const Handle(Adaptor3d_HSurface)&  theSurface1,
						     const Handle(Adaptor3d_TopolTool)& theDomain1,
						     const Handle(Adaptor3d_HSurface)&  theSurface2,
						     const Handle(Adaptor3d_TopolTool)& theDomain2,
						     const Standard_Real                theTolArc)
Protection from null wlines has been added.

Test-case for issue #25766
This commit is contained in:
emv 2015-02-05 16:19:47 +03:00 committed by bugmaster
parent e8746a262f
commit a4d5c9abcc
2 changed files with 35 additions and 32 deletions

View File

@ -1167,38 +1167,25 @@ static void MergeWLinesIfAllSegmentsAlongRestriction(IntPatch_SequenceOfLine&
Standard_Real Fp = 0., Lp = 0.; Standard_Real Fp = 0., Lp = 0.;
if( WLineRank == 1 ) Handle(IntSurf_LineOn2S) aLineOn2S = new IntSurf_LineOn2S();
{ //
Handle(IntSurf_LineOn2S) aLineOn2S = new IntSurf_LineOn2S(); Standard_Integer arcnumber = (WLineRank == 1) ?
Standard_Integer arcnumber = GetArc(theSlin,WLineRank,theSurface1,theDomain1,theSurface2,testPoint,TolVrtx,aLineOn2S,Fp,Lp); GetArc(theSlin,WLineRank,theSurface1,theDomain1,theSurface2,testPoint,TolVrtx,aLineOn2S,Fp,Lp) :
GetArc(theSlin,WLineRank,theSurface2,theDomain2,theSurface1,testPoint,TolVrtx,aLineOn2S,Fp,Lp);
if( arcnumber == 0 ) //
return; if (arcnumber == 0) {
return;
Handle(IntPatch_WLine) anWLine = NULL; }
anWLine = GetMergedWLineOnRestriction(theSlin,TolVrtx,aLineOn2S); //
#ifdef OCCT_DEBUG Handle(IntPatch_WLine) anWLine = GetMergedWLineOnRestriction(theSlin,TolVrtx,aLineOn2S);
cout << "*** TopOpeBRep_FaceIntersector: Merge WLines on Restriction S1 to WLine ***" << endl; if (!anWLine.IsNull()) {
theSlin.Clear();
theSlin.Append(anWLine);
#ifdef DEB
cout << "*** TopOpeBRep_FaceIntersector: Merge WLines on Restriction "
<< ((WLineRank == 1) ? "S1" : "S2") << " to WLine***" << endl;
#endif #endif
theSlin.Clear(); }
theSlin.Append(anWLine);
}
else
{
Handle(IntSurf_LineOn2S) aLineOn2S = new IntSurf_LineOn2S();
Standard_Integer arcnumber = GetArc(theSlin,WLineRank,theSurface2,theDomain2,theSurface1,testPoint,TolVrtx,aLineOn2S,Fp,Lp);
if( arcnumber == 0 )
return;
Handle(IntPatch_WLine) anWLine = NULL;
anWLine = GetMergedWLineOnRestriction(theSlin,TolVrtx,aLineOn2S);
#ifdef OCCT_DEBUG
cout << "*** TopOpeBRep_FaceIntersector: Merge WLines on Restriction S2 to WLine***" << endl;
#endif
theSlin.Clear();
theSlin.Append(anWLine);
}
} }
//========================================================================================= //=========================================================================================
@ -1498,6 +1485,11 @@ static Handle(IntPatch_WLine) GetMergedWLineOnRestriction(IntPatch_SequenceOfLin
const Standard_Real& theVrtxTol, const Standard_Real& theVrtxTol,
const Handle(IntSurf_LineOn2S)& theLineOn2S) const Handle(IntSurf_LineOn2S)& theLineOn2S)
{ {
Handle(IntPatch_WLine) mWLine;
if (theLineOn2S->NbPoints() == 0) {
return mWLine;
}
//
IntSurf_TypeTrans trans1 = IntSurf_Undecided; IntSurf_TypeTrans trans1 = IntSurf_Undecided;
IntSurf_TypeTrans trans2 = IntSurf_Undecided; IntSurf_TypeTrans trans2 = IntSurf_Undecided;
Standard_Integer i = 0; Standard_Integer i = 0;
@ -1515,7 +1507,7 @@ static Handle(IntPatch_WLine) GetMergedWLineOnRestriction(IntPatch_SequenceOfLin
trans2 = aWLine->TransitionOnS2(); trans2 = aWLine->TransitionOnS2();
} }
Handle(IntPatch_WLine) mWLine = new IntPatch_WLine(theLineOn2S, Standard_False, trans1, trans2); mWLine = new IntPatch_WLine(theLineOn2S, Standard_False, trans1, trans2);
Standard_Integer NbPnts = mWLine->NbPnts(); Standard_Integer NbPnts = mWLine->NbPnts();
IntPatch_Point aFirstVertex, aLastVertex; IntPatch_Point aFirstVertex, aLastVertex;

View File

@ -0,0 +1,11 @@
puts "========"
puts "OCC25766"
puts "========"
puts ""
########################################################################################
# Exception is raised during building section using BRepAlgo_Section on attached faces
########################################################################################
restore [locate_data_file OCC25766_surface1.brep] b1
restore [locate_data_file OCC25766_surface2.brep] b2
section r b1 b2