1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

0024840: Exception in BRepOffsetAPI_MakePipe

Test cases for issues CR24840 and CR24849
This commit is contained in:
jgv
2014-04-21 15:47:53 +04:00
committed by abv
parent 276130e701
commit 475604b446
4 changed files with 104 additions and 11 deletions

View File

@@ -55,6 +55,7 @@
#include <BRepBuilderAPI_Transform.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <TopTools_SequenceOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <BRepLib.hxx>
#include <Geom2dAdaptor_HCurve.hxx>
@@ -73,6 +74,7 @@ static void ReverseModifiedEdges(TopoDS_Shape& aShape,
{
TopExp_Explorer Explo(aShape, TopAbs_FACE);
BRep_Builder BB;
for (; Explo.More(); Explo.Next())
{
TopoDS_Shape aFace = Explo.Current();
@@ -80,19 +82,22 @@ static void ReverseModifiedEdges(TopoDS_Shape& aShape,
for (; itf.More(); itf.Next())
{
TopoDS_Shape aWire = itf.Value();
TopTools_SequenceOfShape ModEdges;
TopTools_ListOfShape Ledges;
TopoDS_Iterator itw(aWire);
for (; itw.More(); itw.Next())
{
TopoDS_Shape anEdge = itw.Value();
if (Emap.Contains(anEdge))
ModEdges.Append(anEdge);
}
Ledges.Append(itw.Value());
aWire.Free(Standard_True);
for (Standard_Integer ii = 1; ii <= ModEdges.Length(); ii++)
TopTools_ListIteratorOfListOfShape itl(Ledges);
for (; itl.More(); itl.Next())
BB.Remove(aWire, itl.Value());
for (itl.Initialize(Ledges); itl.More(); itl.Next())
{
BB.Remove(aWire, ModEdges(ii));
BB.Add(aWire, ModEdges(ii).Reversed());
TopoDS_Shape anEdge = itl.Value();
if (Emap.Contains(anEdge))
anEdge.Reverse();
BB.Add(aWire, anEdge);
}
}
}
@@ -276,9 +281,11 @@ void BRepFill_Pipe::Perform(const TopoDS_Wire& Spine,
if (!theLoc.IsIdentity())
{
TopoDS_Shape NewMyFirst = BRepBuilderAPI_Copy(myFirst);
RemLoc.Remove(NewMyFirst);
NewMyFirst = RemLoc.GetResult();
TopLoc_Location theIdentity;
NewMyFirst.Location(theIdentity);
myFirst = BRepBuilderAPI_Transform(NewMyFirst, theLoc.Transformation());
myFirst = BRepBuilderAPI_Transform(NewMyFirst, theLoc.Transformation(), Standard_True);
}
myLoc->Law(myLoc->NbLaw())->GetDomain(first, last);
@@ -307,9 +314,11 @@ void BRepFill_Pipe::Perform(const TopoDS_Wire& Spine,
if (!theLoc.IsIdentity())
{
TopoDS_Shape NewMyLast = BRepBuilderAPI_Copy(myLast);
RemLoc.Remove(NewMyLast);
NewMyLast = RemLoc.GetResult();
TopLoc_Location theIdentity;
NewMyLast.Location(theIdentity);
myLast = BRepBuilderAPI_Transform(NewMyLast, theLoc.Transformation());
myLast = BRepBuilderAPI_Transform(NewMyLast, theLoc.Transformation(), Standard_True);
}
#if DRAW