]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Debug
authorjfa <jfa@opencascade.com>
Wed, 15 Jun 2022 15:34:27 +0000 (18:34 +0300)
committerjfa <jfa@opencascade.com>
Wed, 15 Jun 2022 15:34:27 +0000 (18:34 +0300)
doc/salome/examples/curvature_face.py
src/GEOMImpl/GEOMImpl_MeasureDriver.cxx
src/GEOM_SWIG/GEOM_TestAll.py

index d3962204dd2730b3ed3932e33a5c29d8ee47e613..327a7075077b52664cb2e4151344f400653a56eb 100644 (file)
@@ -29,11 +29,14 @@ Sphere_1 = geompy.MakeSphereR(R, 'Sphere_1')
 curvature_1 = geompy.CurvatureOnFace(Sph, pXYZ, OX,    'curvature_sph_pXYZ_OX')
 curvature_2 = geompy.CurvatureOnFace(Sph, pXYZ, vZ_XY, 'curvature_sph_pXYZ_vt')
 curvature_3 = geompy.CurvatureOnFace(Sph, pY,   OX,    'curvature_sph_pY_OX')
+# Pole
+curvature_p = geompy.CurvatureOnFace(Sph, pZ,   OX,    'curvature_sph_pZ_OX')
 
 # All sphere curvature radiuces = R
 assert(abs(geompy.BasicProperties(curvature_1)[0] - R) < 1e-07)
 assert(abs(geompy.BasicProperties(curvature_2)[0] - R) < 1e-07)
 assert(abs(geompy.BasicProperties(curvature_3)[0] - R) < 1e-07)
+assert(abs(geompy.BasicProperties(curvature_p)[0] - R) < 1e-07)
 
 # Normal direction
 isExcept = False
@@ -43,15 +46,6 @@ except:
   isExcept = True
 assert(isExcept)
 
-# Pole (min and max curvatures are not defined, find via line projection?)
-isExcept = False
-try:
-  geompy.CurvatureOnFace(Sph, pZ, OX, 'curvature_sph_pZ_OX')
-except:
-  isExcept = True
-  print(geompy.MeasuOp.GetErrorCode())
-assert(isExcept)
-
 # II. Curvature of a Cylinder
 Cylinder_1 = geompy.MakeCylinderRH(R, 300, 'Cylinder_1')
 [Face_1,Face_2,Face_3] = geompy.ExtractShapes(Cylinder_1, geompy.ShapeType["FACE"], True, "Face")
index 059c891da7c23795045316cbb0d0e91a91e10324..4a578099938ee9e2bcaa282272df19f2dcb474bd 100644 (file)
@@ -113,8 +113,9 @@ TopoDS_Shape EvaluateAlongCurvature(const TopoDS_Shape& theFace,
   // Calculate differential properties
   BRepAdaptor_Surface aSurfAdapt (aFace);
   BRepLProp_SLProps Props (aSurfAdapt, UV.X(), UV.Y(), 2, 1e-7);
-  if (!Props.IsCurvatureDefined())
-    Standard_ConstructionError::Raise("Curvature calculation failed");
+  if (!Props.IsNormalDefined())
+    Standard_ConstructionError::Raise
+      ("Curvature calculation failed: normal direction is not defined");
 
   // Get differential properties
   gp_Vec Xu  = Props.D1U();
index a6457d4a2ec32faea983bc4a7b28a2f30b1eda13..a182836dbde1fe6a220aef0239a6af87838ee4cb 100644 (file)
@@ -600,12 +600,15 @@ def TestAll (geompy, math):
   [Face_1,Face_2,Face_3] = geompy.ExtractShapes(Cylinder_1, geompy.ShapeType["FACE"], True, "Face")
   curvature_1 = geompy.CurvatureOnFace(Face_2, px, vy, 'curvature_cyl_px_vy')
   assert(abs(geompy.BasicProperties(curvature_1)[0] - 100) < 1e-07)
+  curvature_zero = geompy.CurvatureOnFace(Face_2, px, vz)
+  assert(geompy.MeasuOp.GetErrorCode() == "ZERO_CURVATURE")
+  assert(not curvature_zero)
   isExcept = False
   try:
-    geompy.CurvatureOnFace(Face_2, px, vz)
+    # p0 is on cylinder axis, projection should fail
+    geompy.CurvatureOnFace(Face_2, p0, vy)
   except:
     isExcept = True
-    assert(geompy.MeasuOp.GetErrorCode() == "Curvature radius is infinite")
   assert(isExcept)
 
   print("DONE")