-## Copyright (C) 2014-2017 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>
-##
+# Copyright (C) 2014-2019 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
+#
from GeomAlgoAPI import *
from GeomAPI import *
"""
if "testNbResults" in theTestsList or len(theTestsList) == 0:
aNbResults = len(theFeature.results())
- print "model.testNbResults({}, {})".format(theFeatureName, aNbResults)
+ print("model.testNbResults({}, {})".format(theFeatureName, aNbResults))
if "testNbSubResults" in theTestsList or len(theTestsList) == 0:
aNbResults = len(theFeature.results())
aNbSubResults = []
for anIndex in range(0, aNbResults):
aNbSubResults.append(theFeature.results()[anIndex].numberOfSubs())
- print "model.testNbSubResults({}, {})".format(theFeatureName, aNbSubResults)
+ print("model.testNbSubResults({}, {})".format(theFeatureName, aNbSubResults))
if "testNbSubShapes" in theTestsList or len(theTestsList) == 0:
aNbResults = len(theFeature.results())
aShapeExplorer = GeomAPI_ShapeExplorer(aShape, aShapeType)
while aShapeExplorer.more():
aNbResultSubShapes += 1
- aShapeExplorer.next();
+ aShapeExplorer.next()
aNbSubShapes.append(aNbResultSubShapes)
- print "model.testNbSubShapes({}, {}, {})".format(theFeatureName, aShapeTypes[aShapeType], aNbSubShapes)
+ print("model.testNbSubShapes({}, {}, {})".format(theFeatureName, aShapeTypes[aShapeType], aNbSubShapes))
if "testResultsVolumes" in theTestsList or len(theTestsList) == 0:
aNbResults = len(theFeature.results())
aResultsVolumes = []
for anIndex in range(0, aNbResults):
aResultsVolumes.append(GeomAlgoAPI_ShapeTools_volume(theFeature.results()[anIndex].resultSubShapePair()[0].shape()))
- print "model.testResultsVolumes({}, [{}])".format(theFeatureName, ", ".join("{:0.27f}".format(i) for i in aResultsVolumes))
+ print("model.testResultsVolumes({}, [{}])".format(theFeatureName, ", ".join("{:0.27f}".format(i) for i in aResultsVolumes)))
def testNbResults(theFeature, theExpectedNbResults):
aShapeExplorer = GeomAPI_ShapeExplorer(aShape, theShapeType)
while aShapeExplorer.more():
aNbResultSubShapes += 1
- aShapeExplorer.next();
+ aShapeExplorer.next()
assert (aNbResultSubShapes == anExpectedNbSubShapes), "Number of sub-shapes of type {} for result[{}]: {}. Expected: {}.".format(aShapeTypes[theShapeType], anIndex, aNbResultSubShapes, anExpectedNbSubShapes)
aResultVolumeStr = "{:0.27f}".format(aResultVolume).lstrip("0").lstrip(".").lstrip("0")
anExpectedResultVolume = theExpectedResultsVolumes[anIndex]
anExpectedResultVolumeStr = "{:0.27f}".format(anExpectedResultVolume).lstrip("0").lstrip(".").lstrip("0")
- assert math.fabs(aResultVolume - anExpectedResultVolume) < aTolerance * anExpectedResultVolume, "Volume of result[{}]: {:0.27f}. Expected: {:0.27f}. The first {} significant digits not equal.".format(anIndex, aResultVolume, anExpectedResultVolume, theNbSignificantDigits)
+ assert math.fabs(aResultVolume - anExpectedResultVolume) < aTolerance * math.fabs(anExpectedResultVolume), "Volume of result[{}]: {:0.27f}. Expected: {:0.27f}. The first {} significant digits not equal.".format(anIndex, aResultVolume, anExpectedResultVolume, theNbSignificantDigits)
def testHaveNamingFaces(theFeature, theModel, thePartDoc) :
""" Tests if all faces of result have a name
assert(shape.isEdge())
assert(name != ""), "String empty"
+def lowerLevelSubResults(theResult, theList):
+ """ Collects in a list all lover level sub-results (without children).
+ Auxiliary method for context correct definition.
+ """
+ nbSubs = theResult.numberOfSubs()
+ if nbSubs == 0:
+ theList.append(theResult)
+ else:
+ for sub in range(0, nbSubs):
+ lowerLevelSubResults(theResult.subResult(sub), theList)
+
def testHaveNamingByType(theFeature, theModel, thePartDoc, theSubshapeType) :
""" Tests if all sub-shapes of result have a unique name
:param theFeature: feature to test.
:param theSubshapeType: type of sub-shape
"""
+ if not theFeature.results():
+ return
aFirstRes = theFeature.results()[0]
- # Get number of sub-results
- hasSubs = True
- nbSubs = aFirstRes.numberOfSubs()
- if nbSubs == 0:
- # no sub-results => treat current result as a sub
- hasSubs = False
- nbSubs = 1
+ aResList = []
+ lowerLevelSubResults(aFirstRes, aResList)
selectionList = []
shapesList = [] # to append only unique shapes (not isSame)
- for sub in range(0, nbSubs):
+ for aR in aResList:
# Get feature result/sub-result
- if hasSubs:
- aResult = aFirstRes.subResult(sub).resultSubShapePair()[0]
- else:
- aResult = aFirstRes.resultSubShapePair()[0]
+ aResult = aR.resultSubShapePair()[0]
# Get result/sub-result shape
shape = aResult.shape()
# Create shape explorer with desired shape type
shapeExplorer = GeomAPI_ShapeExplorer(shape, theSubshapeType)
# Create list, and store selections in it
while shapeExplorer.more():
+ current = shapeExplorer.current()
+ if current.isEdge() and GeomAPI.GeomAPI_Edge(current).isDegenerated(): # skip degenerative edges because they are not selected
+ shapeExplorer.next()
+ continue
aDuplicate = False
for alreadyThere in shapesList:
- if alreadyThere.isSame(shapeExplorer.current()):
+ if alreadyThere.isSame(current):
aDuplicate = True
if aDuplicate:
shapeExplorer.next()
continue
- shapesList.append(shapeExplorer.current())
- selection = theModel.selection(aResult, shapeExplorer.current()) # First argument should be result/sub-result, second is sub-shape on this result/sub-result
+ shapesList.append(current)
+ selection = theModel.selection(aResult, current) # First argument should be result/sub-result, second is sub-shape on this result/sub-result
selectionList.append(selection)
shapeExplorer.next()
# Create group with this selection list
+ # (do not create group if nothing is selected)
+ if (len(selectionList) == 0):
+ return
Group_1 = theModel.addGroup(thePartDoc, selectionList)
theModel.do()
- # Check that all selected shapes in group have right shape type and unique name.
- groupFeature = Group_1.feature()
- groupSelectionList = groupFeature.selectionList("group_list")
+ groupSelectionList = Group_1.feature().selectionList("group_list")
assert(groupSelectionList.size() == len(selectionList))
- presented_names = set()
- for index in range(0, groupSelectionList.size()):
- attrSelection = groupSelectionList.value(index)
- shape = attrSelection.value()
- name = attrSelection.namingName()
- if theSubshapeType == GeomAPI_Shape.VERTEX:
- assert(shape.isVertex())
- elif theSubshapeType == GeomAPI_Shape.EDGE:
- assert(shape.isEdge())
- elif theSubshapeType == GeomAPI_Shape.FACE:
- assert(shape.isFace())
- assert(name != ""), "String empty"
- presented_names.add(name)
- assert(len(presented_names) == groupSelectionList.size()), "Some names are not unique"
+
+ # Check that all selected shapes in group have right shape type and unique name.
+ checkGroup(Group_1, theSubshapeType)
def testHaveNamingSubshapes(theFeature, theModel, thePartDoc) :
""" Tests if all vertices/edges/faces of result have a unique name
:param theFeature: feature to test.
"""
+ assert(len(theFeature.results()) > 0)
testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.VERTEX)
testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.EDGE)
testHaveNamingByType(theFeature, theModel, thePartDoc, GeomAPI_Shape.FACE)
assert math.fabs(aDistCS - aDistCE) < TOLERANCE, "Wrong arc: center-start distance {}, center-end distance {}".format(aDistCS, aDistCE)
assert math.fabs(aRadius.value() -aDistCS) < TOLERANCE, "Wrong arc: radius is {0}, expected {1}".format(aRadius.value(), aDistCS)
-def checkBooleansResult(theFeature,theModel,NbRes,NbSubRes,NbSolid,NbFace,NbEdge,NbVertex):
- """ Tests numbers of sub-shapes in results (used in Boolean operations tests)
+def checkResult(theFeature,theModel,NbRes,NbSubRes,NbSolid,NbFace,NbEdge,NbVertex):
+ """ Tests numbers of sub-shapes in results
"""
theModel.testNbResults(theFeature, NbRes)
theModel.testNbSubResults(theFeature, NbSubRes)
theModel.testNbSubShapes(theFeature, GeomAPI_Shape.FACE, NbFace)
theModel.testNbSubShapes(theFeature, GeomAPI_Shape.EDGE, NbEdge)
theModel.testNbSubShapes(theFeature, GeomAPI_Shape.VERTEX, NbVertex)
+
+def checkGroup(theGroup, theShapeType):
+ """ Check that all selected shapes in group have correct shape type and unique name
+ """
+ groupFeature = theGroup.feature()
+ groupSelectionList = groupFeature.selectionList("group_list")
+ presented_names = set()
+ for index in range(0, groupSelectionList.size()):
+ attrSelection = groupSelectionList.value(index)
+ shape = attrSelection.value()
+ name = attrSelection.namingName()
+ if theShapeType == GeomAPI_Shape.VERTEX:
+ assert(shape.isVertex())
+ elif theShapeType == GeomAPI_Shape.EDGE:
+ assert(shape.isEdge())
+ elif theShapeType == GeomAPI_Shape.FACE:
+ assert(shape.isFace())
+ assert(name != ""), "String empty"
+ presented_names.add(name)
+ assert(len(presented_names) == groupSelectionList.size()), "Some names are not unique"