From: jfa Date: Wed, 8 Sep 2021 09:03:03 +0000 (+0300) Subject: Bos #16182. Use OCCT algo UnifySameDomain. Fix for compatibility with old OCCT versions. X-Git-Tag: V9_8_0a1~1 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=6a0d013cc0c797594231ce52caf17c9f07e9439b;p=modules%2Fgeom.git Bos #16182. Use OCCT algo UnifySameDomain. Fix for compatibility with old OCCT versions. --- diff --git a/src/BlockFix/BlockFix_BlockFixAPI.cxx b/src/BlockFix/BlockFix_BlockFixAPI.cxx index 1990d3ad0..1e1a7b6ff 100644 --- a/src/BlockFix/BlockFix_BlockFixAPI.cxx +++ b/src/BlockFix/BlockFix_BlockFixAPI.cxx @@ -36,6 +36,8 @@ #include +#include + IMPLEMENT_STANDARD_RTTIEXT(BlockFix_BlockFixAPI, Standard_Transient) //======================================================================= @@ -70,6 +72,12 @@ void BlockFix_BlockFixAPI::Perform() // faces unification TopoDS_Shape aResult = myShape; +#if OCC_VERSION_LARGE < 0x07050301 + BlockFix_UnionFaces aFaceUnifier; + aFaceUnifier.GetTolerance() = myTolerance; + aFaceUnifier.GetOptimumNbFaces() = myOptimumNbFaces; + aResult = aFaceUnifier.Perform(aResult); +#else if (myOptimumNbFaces > 1) { // use old algo BlockFix_UnionFaces for exactly given resulting number of faces BlockFix_UnionFaces aFaceUnifier; @@ -94,6 +102,7 @@ void BlockFix_BlockFixAPI::Perform() else { // myOptimumNbFaces == -1 means do not union faces } +#endif // avoid problem with degenerated edges appearance // due to shape quality regress @@ -102,8 +111,10 @@ void BlockFix_BlockFixAPI::Perform() aResult = RemLoc.GetResult(); // edges unification - //BlockFix_UnionEdges anEdgeUnifier; - //myShape = anEdgeUnifier.Perform(aResult,myTolerance); +#if OCC_VERSION_LARGE < 0x07050301 + BlockFix_UnionEdges anEdgeUnifier; + myShape = anEdgeUnifier.Perform(aResult,myTolerance); +#else ShapeUpgrade_UnifySameDomain Unifier; Standard_Boolean isUnifyEdges = Standard_True; Standard_Boolean isUnifyFaces = Standard_False; //only edges @@ -112,6 +123,7 @@ void BlockFix_BlockFixAPI::Perform() Unifier.SetLinearTolerance(myTolerance); Unifier.Build(); myShape = Unifier.Shape(); +#endif TopoDS_Shape aRes = BlockFix::FixRanges(myShape,myTolerance); myShape = aRes; diff --git a/src/GEOMImpl/GEOMImpl_BlockDriver.cxx b/src/GEOMImpl/GEOMImpl_BlockDriver.cxx index 92dbc1be2..65833607a 100644 --- a/src/GEOMImpl/GEOMImpl_BlockDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_BlockDriver.cxx @@ -102,6 +102,8 @@ #include #include +#include + //======================================================================= //function : GetID //purpose : @@ -744,9 +746,11 @@ Standard_Integer GEOMImpl_BlockDriver::Execute(Handle(TFunction_Logbook)& log) c Standard_NullObject::Raise("Null Shape given"); } - //BlockFix_UnionFaces aFaceUnifier; - //aFaceUnifier.GetOptimumNbFaces() = 0; // To force union faces. - //aShape = aFaceUnifier.Perform(aBlockOrComp); +#if OCC_VERSION_LARGE < 0x07050301 + BlockFix_UnionFaces aFaceUnifier; + aFaceUnifier.GetOptimumNbFaces() = 0; // To force union faces. + aShape = aFaceUnifier.Perform(aBlockOrComp); +#else // Use OCCT algo ShapeUpgrade_UnifySameDomain instead of BlockFix_UnionFaces: Standard_Boolean isUnifyEdges = Standard_False; Standard_Boolean isUnifyFaces = Standard_True; @@ -757,6 +761,7 @@ Standard_Integer GEOMImpl_BlockDriver::Execute(Handle(TFunction_Logbook)& log) c aUnifier.SetAngularTolerance(Precision::Confusion()); aUnifier.Build(); aShape = aUnifier.Shape(); +#endif } else { // unknown function type return 0; }