mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0028949: BRepOffsetAPI_MakePipe Generated() method produces no result for spine edges
Add history for subshapes of spine: edges and vertices. Each edge of spine generates a shell. Each vertex of spine generates a set of edges and, possibly, faces (in the case of Round Corner).
This commit is contained in:
@@ -2941,9 +2941,10 @@ void BRepFill_Sweep::Build(TopTools_MapOfShape& ReversedEdges,
|
||||
// Management of looping ends
|
||||
if ( (NbTrous>0) && (myLoc->IsClosed()) &&
|
||||
(Trous->Value(NbTrous) == NbPath+1) ) {
|
||||
Translate(myVEdges, NbPath+1, Bounds, 1);
|
||||
Translate(myVEdges, 1, Bounds, 2);
|
||||
Translate(myVEdges, NbPath+1, Bounds, 1);
|
||||
Translate(myVEdges, 1, Bounds, 2);
|
||||
PerformCorner(1, Transition, Bounds);
|
||||
Translate(myVEdges, 1, myVEdges, NbPath+1);
|
||||
}
|
||||
|
||||
// Construction of the shell
|
||||
@@ -3041,7 +3042,8 @@ void BRepFill_Sweep::Build(TopTools_MapOfShape& ReversedEdges,
|
||||
for (jj = myUEdges->LowerCol(); jj <= myUEdges->UpperCol(); jj++)
|
||||
{
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(myUEdges->Value(ii, jj));
|
||||
if (anEdge.IsNull())
|
||||
if (anEdge.IsNull() ||
|
||||
BRep_Tool::Degenerated(anEdge))
|
||||
continue;
|
||||
TopoDS_Face Face1, Face2;
|
||||
Standard_Integer i1 = ii-1, i2 = ii;
|
||||
@@ -3266,10 +3268,27 @@ TopoDS_Shape BRepFill_Sweep::Tape(const Standard_Integer Index) const
|
||||
BRepFill_TrimShellCorner aTrim(aFaces, Transition, AxeOfBisPlane);
|
||||
aTrim.AddBounds(Bounds);
|
||||
aTrim.AddUEdges(aUEdges);
|
||||
aTrim.AddVEdges(myVEdges, Index);
|
||||
aTrim.Perform();
|
||||
|
||||
if (aTrim.IsDone()) {
|
||||
|
||||
TopTools_ListOfShape listmodif;
|
||||
for (ii = 1; ii <= mySec->NbLaw(); ii++)
|
||||
{
|
||||
listmodif.Clear();
|
||||
aTrim.Modified(myVEdges->Value(ii, Index), listmodif);
|
||||
|
||||
if (listmodif.IsEmpty())
|
||||
{
|
||||
TopoDS_Edge NullEdge;
|
||||
myVEdges->SetValue(ii, Index, NullEdge);
|
||||
}
|
||||
else
|
||||
myVEdges->SetValue(ii, Index, listmodif.First());
|
||||
}
|
||||
|
||||
listmodif.Clear();
|
||||
Standard_Integer iit = 0;
|
||||
|
||||
for(iit = 0; iit < 2; iit++) {
|
||||
@@ -3356,8 +3375,15 @@ TopoDS_Shape BRepFill_Sweep::Tape(const Standard_Integer Index) const
|
||||
|
||||
if (B) {
|
||||
myAuxShape.Append(FF);
|
||||
myVEdges->ChangeValue(ii, I2) = FF;
|
||||
BRep_Builder BB;
|
||||
TopoDS_Shape aVshape = myVEdges->Value(ii, I2);
|
||||
TopoDS_Compound aCompound;
|
||||
BB.MakeCompound(aCompound);
|
||||
if (!aVshape.IsNull())
|
||||
BB.Add(aCompound, aVshape);
|
||||
BB.Add(aCompound, FF);
|
||||
myVEdges->ChangeValue(ii, I2) = aCompound;
|
||||
|
||||
BB.Add(myTapes->ChangeValue(ii), FF);
|
||||
HasFilling = Standard_True;
|
||||
}
|
||||
|
Reference in New Issue
Block a user