1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-03 14:10:33 +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:
msv
2017-10-20 18:59:01 +03:00
parent 2c26e60bf9
commit 977ad98334
10 changed files with 115 additions and 123 deletions

View File

@@ -24,7 +24,7 @@
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgo_NormalProjection.hxx>
#include <BRepAlgo_SequenceOfSequenceOfInteger.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <BRepLib_MakeEdge.hxx>
#include <BRepLib_MakeVertex.hxx>
#include <BRepLib_MakeWire.hxx>
@@ -481,9 +481,9 @@ void BRepAlgo_NormalProjection::SetDefaultParams()
if (!Degenerated) {
// Perform Boolean COMMON operation to get parts of projected edge
// inside the face
BRepAlgoAPI_Common aCommon(Faces->Value(j), prj);
if (aCommon.IsDone()) {
const TopoDS_Shape& aRC = aCommon.Shape();
BRepAlgoAPI_Section aSection(Faces->Value(j), prj);
if (aSection.IsDone()) {
const TopoDS_Shape& aRC = aSection.Shape();
//
TopExp_Explorer aExpE(aRC, TopAbs_EDGE);
for (; aExpE.More(); aExpE.Next()) {