Salome HOME
Code coverage GeomValidators]: Improve coverage of Face and BodyShapes validators
authorazv <azv@opencascade.com>
Tue, 11 Dec 2018 09:37:04 +0000 (12:37 +0300)
committerazv <azv@opencascade.com>
Tue, 11 Dec 2018 09:37:04 +0000 (12:37 +0300)
src/ConstructionPlugin/CMakeLists.txt
src/ConstructionPlugin/Test/TestPlane_FaceValidator.py [new file with mode: 0644]
src/FeaturesPlugin/CMakeLists.txt
src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py [new file with mode: 0644]
src/GeomValidators/GeomValidators_Face.cpp

index f9d11bee98f064e76c32a70f504ccb50c69355a0..9ddd0a2e3823417660c9d1fd50513704d1828fd0 100644 (file)
@@ -95,4 +95,5 @@ ADD_UNIT_TESTS(TestAxisCreation.py
                TestPoint_FiniteValidator.py
                TestPlane.py
                TestPlane_ErrorMsg.py
+               TestPlane_FaceValidator.py
 )
diff --git a/src/ConstructionPlugin/Test/TestPlane_FaceValidator.py b/src/ConstructionPlugin/Test/TestPlane_FaceValidator.py
new file mode 100644 (file)
index 0000000..d2890a4
--- /dev/null
@@ -0,0 +1,38 @@
+## Copyright (C) 2018-20xx  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<mailto:webmaster.salome@opencascade.com>
+##
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+Sphere_1 = model.addSphere(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), 10)
+Compound_1 = model.addCompound(Part_1_doc, [model.selection("FACE", "Sphere_1_1/Face_1")])
+
+Plane_1 = model.addPlane(Part_1_doc, model.selection("COMPOUND", (0, 0, 0)), 10, False)
+assert(Plane_1.feature().error() != "")
+Part_1_doc.removeFeature(Plane_1.feature())
+
+Plane_1 = model.addPlane(Part_1_doc, model.selection("EDGE", "[Compound_1_1_1/Compound_1_1_1&Sphere_1_1/Face_1][weak_name_3]"), 10, False)
+assert(Plane_1.feature().error() != "")
+Part_1_doc.removeFeature(Plane_1.feature())
+
+model.end()
index 3ea4246124c7b8457cf194ffc652031a8df4fbc2..1f3b8934d7e4cc5ffa0d88a5ea114de7abde83a1 100644 (file)
@@ -187,6 +187,7 @@ ADD_UNIT_TESTS(TestExtrusion.py
                TestPlacement_Face_Face.py
                TestPlacement_Part_Part.py
                TestPlacement_ErrorMsg.py
+               TestPlacement_BodyShapesValidator.py
                TestTranslation.py
                TestTranslation_Part.py
                TestRotation.py
diff --git a/src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py b/src/FeaturesPlugin/Test/TestPlacement_BodyShapesValidator.py
new file mode 100644 (file)
index 0000000..dc3e58c
--- /dev/null
@@ -0,0 +1,38 @@
+## Copyright (C) 2018-20xx  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<mailto:webmaster.salome@opencascade.com>
+##
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+model.do()
+
+Part_2 = model.addPart(partSet)
+Part_2_doc = Part_2.document()
+Box_1 = model.addBox(Part_2_doc, 10, 10, 10)
+model.do()
+
+Placement_1 = model.addPlacement(partSet, [model.selection("COMPOUND", "Part_2/")], model.selection("COMPOUND", "all-in-Part_1"), model.selection("FACE", "Part_2/Box_1_1/Top"), False, False)
+assert(Placement_1.feature().error() != "")
+Part_1_doc.removeFeature(Placement_1.feature())
+
+model.end()
index a5f9d588cb888bb78977b362846b54f0ad8b9a7c..18cc1b1e684bec26c7f2f4360973ba5857fb35b2 100644 (file)
@@ -108,28 +108,21 @@ bool GeomValidators_Face::isValid(const AttributePtr& theAttribute,
     // it is necessary to check whether the shape is face in order to set in selection a value
     // with any type and check the type in this validator
     // It is realized to select any object in OB and filter it in this validator (sketch plane)
-    if (!aGeomShape->isFace()) {
-      aValid = false;
-      theError = "The shape is not a face.";
+    GeomAbs_SurfaceType aFaceType = GeomAbs_Plane;
+    if (theArguments.size() == 1)
+      aFaceType = faceType(theArguments.front());
+    if (aGeomShape->isFace()) {
+      aValid = isValidFace(aGeomShape, aFaceType, theError);
     }
-    else {
-      GeomAbs_SurfaceType aFaceType = GeomAbs_Plane;
-      if (theArguments.size() == 1) aFaceType = faceType(theArguments.front());
-      if (aGeomShape->isFace()) {
-        isValidFace(aGeomShape, aFaceType, theError);
-      }
-      else if (aSelectionAttr->isGeometricalSelection() && aGeomShape->isCompound()) {
-        for (GeomAPI_ShapeIterator anIt(aGeomShape); anIt.more(); anIt.next()) {
-          if (!isValidFace(anIt.current(), aFaceType, theError)) {
-            break;
-          }
-        }
-      }
-      else {
-        aValid = false;
-        theError = "The shape is not a face.";
+    else if (aSelectionAttr->isGeometricalSelection() && aGeomShape->isCompound()) {
+      for (GeomAPI_ShapeIterator anIt(aGeomShape); anIt.more() && aValid; anIt.next()) {
+        aValid = isValidFace(anIt.current(), aFaceType, theError);
       }
     }
+    else {
+      aValid = false;
+      theError = "The shape is not a face.";
+    }
   }
   return aValid;
 }