mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-09-08 14:17:06 +03:00
0029234: BRepOffsetAPI_NormalProjection produces INTERNAL edges and vertices
Make the algorithm BRepOffsetAPI_NormalProjection use section operation instead of common to get the edge-result of projection to be in face restrictions. Correct Boolean operation algorithm to produce correctly oriented result in the case of common between face and edge. The algorithm ShapeUpgrade_UnifySameDomain has been patched to correctly gather same domain faces in a compound. The TCL script snowflake.tcl has been corrected to get rid of dependence on the order of edges in the result of Boolean operation.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include <BOPAlgo_BuilderSolid.hxx>
|
||||
#include <BOPAlgo_MakerVolume.hxx>
|
||||
#include <BOPAlgo_PaveFiller.hxx>
|
||||
#include <BOPAlgo_Tools.hxx>
|
||||
#include <BOPAlgo_Alerts.hxx>
|
||||
#include <BOPCol_DataMapOfShapeListOfShape.hxx>
|
||||
#include <BOPCol_ListOfShape.hxx>
|
||||
@@ -29,10 +30,6 @@
|
||||
static
|
||||
void AddFace(const TopoDS_Shape& theF,
|
||||
BOPCol_ListOfShape& theLF);
|
||||
static
|
||||
void TreatCompound(const TopoDS_Shape& theS,
|
||||
BOPCol_MapOfShape& aMFence,
|
||||
BOPCol_ListOfShape& theLS);
|
||||
|
||||
//=======================================================================
|
||||
//function : CheckData
|
||||
@@ -352,7 +349,7 @@ void BOPAlgo_MakerVolume::FillInternalShapes(const BOPCol_ListOfShape& theLSR)
|
||||
aIt.Initialize(anArguments);
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
const TopoDS_Shape& aS = aIt.Value();
|
||||
TreatCompound(aS, aMFence, aLSC);
|
||||
BOPAlgo_Tools::TreatCompound(aS, aMFence, aLSC);
|
||||
}
|
||||
//
|
||||
aIt.Initialize(aLSC);
|
||||
@@ -440,26 +437,3 @@ void AddFace(const TopoDS_Shape& theF,
|
||||
aFF.Orientation(TopAbs_REVERSED);
|
||||
theLF.Append(aFF);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : TreatCompound
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void TreatCompound(const TopoDS_Shape& theS,
|
||||
BOPCol_MapOfShape& aMFence,
|
||||
BOPCol_ListOfShape& theLS)
|
||||
{
|
||||
TopAbs_ShapeEnum aType = theS.ShapeType();
|
||||
if (aType != TopAbs_COMPOUND) {
|
||||
if (aMFence.Add(theS)) {
|
||||
theLS.Append(theS);
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
TopoDS_Iterator aIt(theS);
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
const TopoDS_Shape& aS = aIt.Value();
|
||||
TreatCompound(aS, aMFence, theLS);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user