]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
fix Integration feedbacks fixes
authorNicolas Rechatin <nicolas.rechatin@cea.fr>
Thu, 2 Sep 2021 06:38:27 +0000 (08:38 +0200)
committerNicolas Rechatin <nicolas.rechatin@cea.fr>
Thu, 2 Sep 2021 12:32:58 +0000 (14:32 +0200)
16 files changed:
src/FiltersAPI/FiltersAPI.i
src/FiltersAPI/FiltersAPI_Argument.cpp
src/FiltersAPI/FiltersAPI_Argument.h
src/FiltersAPI/FiltersAPI_Feature.cpp
src/FiltersPlugin/FiltersPlugin_ContinuousFaces.cpp
src/FiltersPlugin/FiltersPlugin_EdgeSize.cpp
src/FiltersPlugin/FiltersPlugin_FaceSize.cpp
src/FiltersPlugin/FiltersPlugin_FeatureEdges.cpp
src/FiltersPlugin/FiltersPlugin_VolumeSize.cpp
src/GeomAlgoAPI/CMakeLists.txt
src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.cpp [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.h [deleted file]
src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.cpp
src/GeomAlgoAPI/GeomAlgoAPI_ShapeTools.h

index 99e68051500c5d8f87a2ee8a9c3c3a7fe0784f4a..05037569233ae0826cb6fddfda5905174531e06c 100644 (file)
@@ -45,8 +45,6 @@
 %shared_ptr(FiltersAPI_Feature)
 %shared_ptr(FiltersAPI_Filter)
 
-%shared_ptr(ModelHighAPI_Interface)
-
 // function with named parameters
 %feature("kwargs") addFilter;
 
       } else
       if (PyBool_Check(item)) {
         temp.push_back(FiltersAPI_Argument(item == Py_True));
-      } else 
-      if(PyFloat_Check(item) || PyLong_Check(item)) { 
+      } else
+      if(PyFloat_Check(item) || PyLong_Check(item)) {
         temp.push_back(FiltersAPI_Argument(ModelHighAPI_Double(PyFloat_AsDouble(item))));
       } else {
         PyErr_SetString(PyExc_TypeError, "argument must be ModelHighAPI_Selection, string, double or boolean.4");
index 182251e1987e9fb259e4d21e040b3717dfef5324..90a79bb5d7b477bcb9f3dec335aeb071de475906 100644 (file)
@@ -64,7 +64,7 @@ void FiltersAPI_Argument::dump(ModelHighAPI_Dumper& theDumper) const
     theDumper << "model.selection()"; // mySelectionAttr;
   }
   else if (mySelection.variantType() == ModelHighAPI_Selection::VT_Empty) {
-    if (myDouble.value() > -100000000000 ) {
+    if (myDouble.value() > std::numeric_limits<double>::lowest() ) {
       theDumper << myDouble.value();
     }
     else if (myValue.empty()) {
index 050bacd146dc66f24acf127b20b1d20472f00b97..dd569989421e74ba708920b2f576be19d814f24b 100644 (file)
@@ -28,6 +28,8 @@
 #include <ModelHighAPI_Dumper.h>
 #include <ModelHighAPI_Selection.h>
 
+#include <limits>
+
 /**\class FiltersAPI_Argument
  * \ingroup CPPHighAPI
  * \brief Argument of the Filter
@@ -69,7 +71,7 @@ public:
 
 private:
   bool myBoolean;
-  ModelHighAPI_Double myDouble  = -100000000000;
+  ModelHighAPI_Double myDouble  = std::numeric_limits<double>::lowest() ;
   std::string myValue;
   ModelHighAPI_Selection mySelection;
   AttributeSelectionPtr mySelectionAttr;
index 0b5def82e69fff7eba6b4e211377dd30ddb2dfd6..329eee72dfd7c60a1869c847a6e81d389ebcce10 100644 (file)
@@ -48,7 +48,7 @@ static void separateArguments(const std::list<FiltersAPI_Argument>& theArguments
   for (; anIt != theArguments.end(); ++anIt) {
     if (anIt->selection().variantType() != ModelHighAPI_Selection::VT_Empty)
       theSelections.push_back(anIt->selection());
-    else if (anIt->dble().value() > -100000000000) {
+    else if (anIt->dble().value() > std::numeric_limits<double>::lowest()) {
       theDoubleArgs.push_back(anIt->dble());
     }
     else if (anIt->string().empty()) {
index 67726eaa1245778fd5301fcd36430c9b8b619c6b..d67d88ce6e3c9fd5a5e80866d95200510c09d9b8 100644 (file)
@@ -29,7 +29,6 @@
 #include <GeomAPI_ShapeExplorer.h>
 #include <GeomAPI_Wire.h>
 
-#include <GeomAlgoAPI_ContinuousFaces.h>
 #include <GeomAlgoAPI_ShapeTools.h>
 
 #include <map>
@@ -73,11 +72,11 @@ static void cacheContinuousFace(const GeomShapePtr theFace,
       std::string anError = "";
       if (theCache.find(*aFIt) == theCache.end()) {
        GeomPointPtr aPoint = anEdge->middlePoint();
-       if (isContinuousFaces(theFace,
-                             *aFIt,
-                             aPoint,
-                             theAngle,
-                             anError)) {
+       if (GeomAlgoAPI_ShapeTools::isContinuousFaces(theFace,
+                                                     *aFIt,
+                                                     aPoint,
+                                                     theAngle,
+                                                     anError)) {
           theCache.insert(*aFIt);
           cacheContinuousFace(*aFIt, theEdgeToFaces, theCache, theAngle);
         }
@@ -166,15 +165,18 @@ bool FiltersPlugin_ContinuousFaces::isOk(const GeomShapePtr& theShape, const Res
   }
 
   if (myCachedShapes.empty()) {
-    ResultBodyPtr aBaseResult = ModelAPI_Tools::bodyOwner(aList->value(0)->context(), true);
-    if (!aBaseResult.get()) {
-      aBaseResult = std::dynamic_pointer_cast<ModelAPI_ResultBody>(aList->value(0)->context());
-      if (!aBaseResult.get())
-        return false;
+    for (size_t i = 0; i < aList->size(); i++)
+    {
+      ResultBodyPtr aBaseResult = ModelAPI_Tools::bodyOwner(aList->value(i)->context(), true);
+      if (!aBaseResult.get()) {
+        aBaseResult = std::dynamic_pointer_cast<ModelAPI_ResultBody>(aList->value(i)->context());
+        if (!aBaseResult.get())
+          return false;
+      }
+      cacheContinuousFaces(aBaseResult->shape(),
+                          const_cast<FiltersPlugin_ContinuousFaces*>(this)->myFaces,
+                          const_cast<FiltersPlugin_ContinuousFaces*>(this)->myCachedShapes,anAngle);
     }
-    cacheContinuousFaces(aBaseResult->shape(),
-                         const_cast<FiltersPlugin_ContinuousFaces*>(this)->myFaces,
-                         const_cast<FiltersPlugin_ContinuousFaces*>(this)->myCachedShapes,anAngle);
   }
   return myCachedShapes.find(theShape) != myCachedShapes.end();
 }
index 854636ab07729a7a9e01d12465c2a347a66007b4..ea749d633ae089b48c19a283aaa53a6ee2f2bb5f 100644 (file)
@@ -33,7 +33,7 @@
 #include <Precision.hxx>
 
 #include <map>
-#include <iostream>
+#include <cmath>
 
 bool FiltersPlugin_EdgeSize::isSupported(GeomAPI_Shape::ShapeType theType) const
 {
@@ -70,6 +70,7 @@ bool FiltersPlugin_EdgeSize::isOk(const GeomShapePtr& theShape, const ResultPtr&
   default:
     return false;
   }
+
   double aLength = anEdge->length();
 
   anAttr = theArgs.argument("comparatorType");
@@ -88,10 +89,12 @@ bool FiltersPlugin_EdgeSize::isOk(const GeomShapePtr& theShape, const ResultPtr&
   else if (aCompString == "supEq")
     isOK = aLength > aVal || fabs(aLength - aVal) < Precision::Confusion();
   else if (aCompString == "isBetween")
-    isOK = (aLength > aVal || fabs(aLength - aVal) < Precision::Confusion())
-          && (aLength < aValMax || fabs(aLength - aVal) < Precision::Confusion());
+    isOK = (aVal <= aValMax)
+           && (aLength > aVal || fabs(aLength - aVal) < Precision::Confusion())
+           && (aLength < aValMax || fabs(aLength - aValMax) < Precision::Confusion());
   else if (aCompString == "isStrictlyBetween")
-    isOK = (aLength > aVal && fabs(aLength - aVal) > Precision::Confusion())
+    isOK = (aVal <= aValMax)
+           && (aLength > aVal && fabs(aLength - aVal) > Precision::Confusion())
            && (aLength < aValMax && fabs(aLength - aValMax) > Precision::Confusion());
   return isOK;
 }
index 8479c4a36bece07ac120dd3cc18d640cdbaf65d7..75301c566a9d8f25a3615ed5944f428b716f91b2 100644 (file)
 
 #include <ModelAPI_AttributeString.h>
 #include <ModelAPI_AttributeDouble.h>
+#include <GeomAlgoAPI_ShapeTools.h>
 #include <ModelAPI_Tools.h>
 
 #include <GeomAPI_Edge.h>
 #include <GeomAPI_Shape.h>
 #include <GeomAPI_Wire.h>
 
-#include <GeomAlgoAPI_BasicProperties.h>
-#include <GeomAlgoAPI_ShapeTools.h>
-
 #include <Precision.hxx>
 
 #include <map>
-#include <iostream>
+#include <cmath>
 
 
 bool FiltersPlugin_FaceSize::isSupported(GeomAPI_Shape::ShapeType theType) const
@@ -59,18 +57,7 @@ bool FiltersPlugin_FaceSize::isOk(const GeomShapePtr& theShape, const ResultPtr&
   if (aVal < 0.0)
     return false;
 
-  double aTolerance = 0.0001;
-  double aLength;
-  double aSurfArea;
-  double aVolume;
-  std::string aError;
-  if (!GetBasicProperties(theShape,
-                          aTolerance,
-                          aLength,
-                          aSurfArea,
-                          aVolume,
-                          aError))
-      return false;
+  double aSurfArea = GeomAlgoAPI_ShapeTools::area(theShape);
 
   anAttr = theArgs.argument("comparatorType");
   AttributeStringPtr aCompAttr = std::dynamic_pointer_cast<ModelAPI_AttributeString>(anAttr);
@@ -88,10 +75,12 @@ bool FiltersPlugin_FaceSize::isOk(const GeomShapePtr& theShape, const ResultPtr&
   else if (aCompString == "supEq")
     isOK = aSurfArea > aVal || fabs(aSurfArea - aVal) < Precision::Confusion();
   else if (aCompString == "isBetween")
-    isOK = (aSurfArea > aVal || fabs(aSurfArea - aVal) < Precision::Confusion())
-          && (aSurfArea < aValMax || fabs(aSurfArea - aVal) < Precision::Confusion());
+    isOK = (aVal <= aValMax)
+           && (aSurfArea > aVal || fabs(aSurfArea - aVal) < Precision::Confusion())
+           && (aSurfArea < aValMax || fabs(aSurfArea - aValMax) < Precision::Confusion());
   else if (aCompString == "isStrictlyBetween")
-    isOK = (aSurfArea > aVal && fabs(aSurfArea - aVal) > Precision::Confusion())
+    isOK = (aVal <= aValMax)
+           && (aSurfArea > aVal && fabs(aSurfArea - aVal) > Precision::Confusion())
            && (aSurfArea < aValMax && fabs(aSurfArea - aValMax) > Precision::Confusion());
   return isOK;
 }
index 1617be13b2dd4e2020bdce5857520b3f7773d2b3..d03abfb58d37caa630b1a4d21c7d905efd7ea143 100644 (file)
@@ -29,7 +29,7 @@
 #include <GeomAPI_ShapeExplorer.h>
 #include <GeomAPI_Wire.h>
 
-#include <GeomAlgoAPI_ContinuousFaces.h>
+#include <GeomAlgoAPI_ShapeTools.h>
 
 #include <map>
 #include <math.h>
@@ -72,11 +72,11 @@ static void cacheFeatureEdge(const GeomShapePtr theTopLevelShape,
       for (;aFIt2 != aIt->second.end(); ++aFIt2) {
         std::string anError;
         if (theCache.find(*aFIt) == theCache.end()) {
-          if (!isContinuousFaces(*aFIt,
-                                 *aFIt2,
-                                 anEdge->middlePoint(),
-                                 theAngle,
-                                 anError)) {
+          if (!GeomAlgoAPI_ShapeTools::isContinuousFaces(*aFIt,
+                                                         *aFIt2,
+                                                         anEdge->middlePoint(),
+                                                         theAngle,
+                                                         anError)) {
             if (anError.empty())
               theCache.insert(anEdge);
           }
index 2a4a961c26019cca10a9f751d50f0b9d45b5456a..5e353e10685ba4d9207b0447b507fad32e7db585 100644 (file)
 
 #include <ModelAPI_AttributeString.h>
 #include <ModelAPI_AttributeDouble.h>
+#include <GeomAlgoAPI_ShapeTools.h>
 #include <ModelAPI_Tools.h>
 
 #include <GeomAPI_Edge.h>
 #include <GeomAPI_Shape.h>
 #include <GeomAPI_Wire.h>
 
-#include <GeomAlgoAPI_BasicProperties.h>
-#include <GeomAlgoAPI_ShapeTools.h>
-
 #include <Precision.hxx>
-
 #include <map>
-#include <iostream>
-
+#include <cmath>
 
 bool FiltersPlugin_VolumeSize::isSupported(GeomAPI_Shape::ShapeType theType) const
 {
@@ -59,18 +55,7 @@ bool FiltersPlugin_VolumeSize::isOk(const GeomShapePtr& theShape, const ResultPt
   if (aVal < 0.0)
     return false;
 
-  double aTolerance = 0.0001;
-  double aLength;
-  double aSurfArea;
-  double aVolume;
-  std::string aError;
-  if (!GetBasicProperties(theShape,
-                          aTolerance,
-                          aLength,
-                          aSurfArea,
-                          aVolume,
-                          aError))
-      return false;
+  double aVolume = GeomAlgoAPI_ShapeTools::volume(theShape);
 
   anAttr = theArgs.argument("comparatorType");
   AttributeStringPtr aCompAttr = std::dynamic_pointer_cast<ModelAPI_AttributeString>(anAttr);
@@ -88,10 +73,12 @@ bool FiltersPlugin_VolumeSize::isOk(const GeomShapePtr& theShape, const ResultPt
   else if (aCompString == "supEq")
     isOK = aVolume > aVal || fabs(aVolume - aVal) < Precision::Confusion();
   else if (aCompString == "isBetween")
-    isOK = (aVolume > aVal || fabs(aVolume - aVal) < Precision::Confusion())
-          && (aVolume < aValMax || fabs(aVolume - aVal) < Precision::Confusion());
+    isOK = (aVal <= aValMax)
+          && (aVolume >= aVal || fabs(aVolume - aVal) < Precision::Confusion())
+          && (aVolume <= aValMax || fabs(aVolume - aValMax) < Precision::Confusion());
   else if (aCompString == "isStrictlyBetween")
-    isOK = (aVolume > aVal && fabs(aVolume - aVal) > Precision::Confusion())
+    isOK = (aVal <= aValMax)
+           &&(aVolume > aVal && fabs(aVolume - aVal) > Precision::Confusion())
            && (aVolume < aValMax && fabs(aVolume - aValMax) > Precision::Confusion());
   return isOK;
 }
index d55d92608b18e308324920ed4257fe2c85ee2a0a..0c549a45beac44842cd83805e74271b840623e7e 100644 (file)
@@ -33,7 +33,6 @@ SET(PROJECT_HEADERS
     GeomAlgoAPI_Prism.h
     GeomAlgoAPI_Revolution.h
     GeomAlgoAPI_Boolean.h
-    GeomAlgoAPI_BasicProperties.h
     GeomAlgoAPI_ThroughAll.h
     GeomAlgoAPI_Rotation.h
     GeomAlgoAPI_Translation.h
@@ -74,7 +73,6 @@ SET(PROJECT_HEADERS
     GeomAlgoAPI_XAOImport.h
     GeomAlgoAPI_Copy.h
     GeomAlgoAPI_ConeSegment.h
-    GeomAlgoAPI_ContinuousFaces.h
     GeomAlgoAPI_Ellipsoid.h
     GeomAlgoAPI_Symmetry.h
     GeomAlgoAPI_Scale.h
@@ -105,7 +103,6 @@ SET(PROJECT_SOURCES
     GeomAlgoAPI_Prism.cpp
     GeomAlgoAPI_Revolution.cpp
     GeomAlgoAPI_Boolean.cpp
-    GeomAlgoAPI_BasicProperties.cpp
     GeomAlgoAPI_ThroughAll.cpp
     GeomAlgoAPI_Rotation.cpp
     GeomAlgoAPI_Translation.cpp
@@ -146,7 +143,6 @@ SET(PROJECT_SOURCES
     GeomAlgoAPI_XAOImport.cpp
     GeomAlgoAPI_Copy.cpp
     GeomAlgoAPI_ConeSegment.cpp
-    GeomAlgoAPI_ContinuousFaces.cpp
     GeomAlgoAPI_Ellipsoid.cpp
     GeomAlgoAPI_Symmetry.cpp
     GeomAlgoAPI_Scale.cpp
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.cpp
deleted file mode 100644 (file)
index 123370f..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "GeomAlgoAPI_BasicProperties.h"
-
-#include <GProp_GProps.hxx>
-#include <TopoDS_Shape.hxx>
-#include <BRepGProp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <Standard_ErrorHandler.hxx>
-
-//=================================================================================================
-bool GetBasicProperties(const std::shared_ptr<GeomAPI_Shape>& theShape,
-                        const double theTolerance,
-                        Standard_Real& theLength,
-                        Standard_Real& theSurfArea,
-                        Standard_Real& theVolume,
-                        std::string& theError)
-{
-
-  #ifdef _DEBUG
-  std::cout << "GetBasicProperties " << std::endl;
-  #endif
-
-  if (!theShape.get()) {
-    theError = "GetBasicProperties : An invalid argument";
-    return false;
-  }
-
-  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
-
-  //Compute the parameters
-  GProp_GProps LProps, SProps;
-  Standard_Real anEps = theTolerance >= 0 ? theTolerance : 1.e-6;
-  try {
-    OCC_CATCH_SIGNALS;
-    BRepGProp::LinearProperties(aShape, LProps, Standard_True);
-    theLength = LProps.Mass();
-
-    BRepGProp::SurfaceProperties(aShape, SProps, anEps, Standard_True);
-    theSurfArea = SProps.Mass();
-
-    theVolume = 0.0;
-    if (aShape.ShapeType() < TopAbs_SHELL) {
-      for (TopExp_Explorer Exp (aShape, TopAbs_SOLID); Exp.More(); Exp.Next()) {
-        GProp_GProps VProps;
-        BRepGProp::VolumeProperties(Exp.Current(), VProps, anEps, Standard_True);
-        theVolume += VProps.Mass();
-      }
-    }
-  }
-  catch (Standard_Failure& aFail) {
-    theError = aFail.GetMessageString();
-    return false;
-  }
-  return true;
-}
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h b/src/GeomAlgoAPI/GeomAlgoAPI_BasicProperties.h
deleted file mode 100644 (file)
index e697dd0..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef GeomAlgoAPI_BasicProperties_H_
-#define GeomAlgoAPI_BasicProperties_H_
-
-#include <GeomAlgoAPI.h>
-#include <GeomAPI_Shape.h>
-#include <Standard_TypeDef.hxx>
-
-/// Run chamfer operation with two distances or with a distance and an angle .
-  /// \param theShape      the shape
-  /// \param theTolerance  tolerance desirated
-  /// \param theLength     lenght calculated
-  /// \param theSurfArea   Surface Area calculated
-  /// \param theVolume     Volume calculated
-  /// \param theError      error
-GEOMALGOAPI_EXPORT
-bool GetBasicProperties(  const std::shared_ptr<GeomAPI_Shape>& theShape,
-                          const Standard_Real theTolerance,
-                          Standard_Real& theLength,
-                          Standard_Real& theSurfArea,
-                          Standard_Real& theVolume,
-                          std::string& theError);
-
-#endif
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.cpp
deleted file mode 100644 (file)
index 436c64d..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "GeomAlgoAPI_ContinuousFaces.h"
-
-#include <TopoDS_Shape.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS.hxx>
-#include <BRep_Tool.hxx>
-#include <LocalAnalysis_SurfaceContinuity.hxx>
-#include <ShapeAnalysis_Surface.hxx>
-#include <gp_Pnt.hxx>
-
-#include <Standard_ErrorHandler.hxx>
-
-const double PI = 3.141592653589793238463;
-
-//=======================================================================
-bool isContinuousFaces(const GeomShapePtr& theFace1,
-                       const GeomShapePtr& theFace2,
-                       const GeomPointPtr& thePoint,
-                       const double & theAngle,
-                       std::string& theError)
-{
-
-  #ifdef _DEBUG
-  std::cout << "isContinuousFaces " << std::endl;
-  #endif
-
-  if (!thePoint.get()) {
-      theError = "isContinuousFaces : An invalid argument";
-      return false;
-  }
-  const gp_Pnt& aPoint = thePoint->impl<gp_Pnt>();
-
-  // Getting base shape.
-  if (!theFace1.get()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  TopoDS_Shape aShape1 = theFace1->impl<TopoDS_Shape>();
-
-  if (aShape1.IsNull()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  // Getting base shape.
-  if (!theFace2.get()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  TopoDS_Shape aShape2 = theFace2->impl<TopoDS_Shape>();
-
-  if (aShape2.IsNull()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  TopoDS_Face aFace1 = TopoDS::Face(aShape1);
-  if (aFace1.IsNull()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  Handle(Geom_Surface) aSurf1 = BRep_Tool::Surface(aFace1);
-  if (aSurf1.IsNull()) {
-    theError = "isContinuousFaces : An invalid surface";
-    return false;
-  }
-
-  ShapeAnalysis_Surface aSAS1(aSurf1);
-  gp_Pnt2d aPointOnFace1 = aSAS1.ValueOfUV(aPoint, Precision::Confusion());
-
-  TopoDS_Face aFace2 = TopoDS::Face(aShape2);
-  if (aFace2.IsNull()) {
-    theError = "isContinuousFaces : An invalid argument";
-    return false;
-  }
-
-  Handle(Geom_Surface) aSurf2 = BRep_Tool::Surface(aFace2);
-  if (aSurf2.IsNull()) {
-    theError = "isContinuousFaces : An invalid surface";
-    return false;
-  }
-
-  ShapeAnalysis_Surface aSAS2(aSurf2);
-  gp_Pnt2d aPointOnFace2= aSAS2.ValueOfUV(aPoint, Precision::Confusion());
-
-  bool aRes = false;
-  try {
-    OCC_CATCH_SIGNALS;
-    LocalAnalysis_SurfaceContinuity aLocAnal(aSurf1,
-                                             aPointOnFace1.X(),
-                                             aPointOnFace1.Y(),
-                                             aSurf2,
-                                             aPointOnFace2.X(),
-                                             aPointOnFace2.Y(),
-                                             GeomAbs_Shape::GeomAbs_G1, // Order
-                                             0.001, // EpsNul
-                                             0.001, // EpsC0
-                                             0.001, // EpsC1
-                                             0.001, // EpsC2
-                                             theAngle * PI/ 180.0); //EpsG1
-    aRes = aLocAnal.IsG1();
-  }
-  catch (Standard_Failure const& anException) {
-    theError = "LocalAnalysis_SurfaceContinuity error :";
-    theError += anException.GetMessageString();
-  }
-
-  return aRes;
-}
diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.h b/src/GeomAlgoAPI/GeomAlgoAPI_ContinuousFaces.h
deleted file mode 100644 (file)
index 0d0faad..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef GEOMALGOAPI_CONTINUOUSFACES_H_
-#define GEOMALGOAPI_CONTINUOUSFACES_H_
-
-#include <GeomAlgoAPI.h>
-#include <GeomAPI_Shape.h>
-#include <Standard_TypeDef.hxx>
-#include <GeomAPI_Pnt.h>
-
-/// indicate if two faces are continuous
-/// with an angular tolerance used for G1 continuity to compare the angle between the normals
-/// \param theFace1  the first face
-/// \param theFace2  the second face
-/// \param thePoint  the point for the normal
-/// \param theAngle  the angular tolerance
-/// \param theError  error
-GEOMALGOAPI_EXPORT
-bool isContinuousFaces(const GeomShapePtr& theFace1,
-                       const GeomShapePtr& theFace2,
-                       const GeomPointPtr& thePoint,
-                       const double & theAngle,
-                       std::string& theError);
-
-#endif //GEOMALGOAPI_SHAREDFACES_H_
index c4cdde252a42e8a4b9dd457415058c75cc1359de..cc7ac82eeae2b8e2f3e1bf1a75b5e23e346a35bc 100644 (file)
@@ -95,6 +95,8 @@
 
 #include <NCollection_Vector.hxx>
 
+#include <LocalAnalysis_SurfaceContinuity.hxx>
+
 //==================================================================================================
 static GProp_GProps props(const TopoDS_Shape& theShape)
 {
@@ -177,6 +179,105 @@ double GeomAlgoAPI_ShapeTools::area (const std::shared_ptr<GeomAPI_Shape> theSha
   return aGProps.Mass();
 }
 
+//==================================================================================================
+bool GeomAlgoAPI_ShapeTools::isContinuousFaces(const GeomShapePtr& theFace1,
+                                               const GeomShapePtr& theFace2,
+                                               const GeomPointPtr& thePoint,
+                                               const double & theAngle,
+                                               std::string& theError)
+{
+
+  #ifdef _DEBUG
+  std::cout << "isContinuousFaces " << std::endl;
+  #endif
+
+  if (!thePoint.get()) {
+      theError = "isContinuousFaces : An invalid argument";
+      return false;
+  }
+  const gp_Pnt& aPoint = thePoint->impl<gp_Pnt>();
+
+  // Getting base shape.
+  if (!theFace1.get()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  TopoDS_Shape aShape1 = theFace1->impl<TopoDS_Shape>();
+
+  if (aShape1.IsNull()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  // Getting base shape.
+  if (!theFace2.get()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  TopoDS_Shape aShape2 = theFace2->impl<TopoDS_Shape>();
+
+  if (aShape2.IsNull()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  TopoDS_Face aFace1 = TopoDS::Face(aShape1);
+  if (aFace1.IsNull()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  Handle(Geom_Surface) aSurf1 = BRep_Tool::Surface(aFace1);
+  if (aSurf1.IsNull()) {
+    theError = "isContinuousFaces : An invalid surface";
+    return false;
+  }
+
+  ShapeAnalysis_Surface aSAS1(aSurf1);
+  gp_Pnt2d aPointOnFace1 = aSAS1.ValueOfUV(aPoint, Precision::Confusion());
+
+  TopoDS_Face aFace2 = TopoDS::Face(aShape2);
+  if (aFace2.IsNull()) {
+    theError = "isContinuousFaces : An invalid argument";
+    return false;
+  }
+
+  Handle(Geom_Surface) aSurf2 = BRep_Tool::Surface(aFace2);
+  if (aSurf2.IsNull()) {
+    theError = "isContinuousFaces : An invalid surface";
+    return false;
+  }
+
+  ShapeAnalysis_Surface aSAS2(aSurf2);
+  gp_Pnt2d aPointOnFace2= aSAS2.ValueOfUV(aPoint, Precision::Confusion());
+
+  bool aRes = false;
+  try {
+    OCC_CATCH_SIGNALS;
+    LocalAnalysis_SurfaceContinuity aLocAnal(aSurf1,
+                                             aPointOnFace1.X(),
+                                             aPointOnFace1.Y(),
+                                             aSurf2,
+                                             aPointOnFace2.X(),
+                                             aPointOnFace2.Y(),
+                                             GeomAbs_Shape::GeomAbs_G1, // Order
+                                             0.001, // EpsNul
+                                             0.001, // EpsC0
+                                             0.001, // EpsC1
+                                             0.001, // EpsC2
+                                             theAngle * M_PI / 180.0); //EpsG1
+    aRes = aLocAnal.IsG1();
+  }
+  catch (Standard_Failure const& anException) {
+    theError = "LocalAnalysis_SurfaceContinuity error :";
+    theError += anException.GetMessageString();
+  }
+
+  return aRes;
+}
+
 //==================================================================================================
 std::shared_ptr<GeomAPI_Pnt>
   GeomAlgoAPI_ShapeTools::centreOfMass(const std::shared_ptr<GeomAPI_Shape> theShape)
index b1f154948890d96c8de783aec26bd0c4a4ff70ee..5f511d73c2bd2ba211de2941d9e01f16f8c45e7a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <GeomAPI_Shape.h>
 #include <GeomAPI_Vertex.h>
+#include <GeomAPI_Pnt.h>
 #include <map>
 #include <set>
 #ifdef WIN32
@@ -56,6 +57,19 @@ public:
   /// \return the total area of the faces of the current shape or 0.0 if it can be computed.
   GEOMALGOAPI_EXPORT static double area(const std::shared_ptr<GeomAPI_Shape> theShape);
 
+  /// indicate if two faces are continuous
+  /// with an angular tolerance used for G1 continuity to compare the angle between the normals
+  /// \param theFace1  the first face
+  /// \param theFace2  the second face
+  /// \param thePoint  the point for the normal
+  /// \param theAngle  the angular tolerance
+  /// \param theError  error
+  GEOMALGOAPI_EXPORT static bool isContinuousFaces(const GeomShapePtr& theFace1,
+                                                   const GeomShapePtr& theFace2,
+                                                   const GeomPointPtr& thePoint,
+                                                   const double & theAngle,
+                                                   std::string& theError);
+
   /// \return the center of mass of the current face.
   /// The coordinates returned for the center of mass
   /// are expressed in the absolute Cartesian coordinate system.