2 TestFilletInteracting.py
3 Unit test of SketchPlugin_Fillet feature.
4 In scope of interaction with another constraints applied to filleted features.
8 from GeomDataAPI import *
12 from salome.shaper import model
14 __updated__ = "2017-03-06"
16 def isArcLineSmooth(theArc, theLine, theTolerance):
17 aCenter = geomDataAPI_Point2D(theArc.attribute("ArcCenter"))
18 aDistance = distancePointLine(aCenter, theLine)
19 aRadius = arcRadius(theArc)
20 return math.fabs(aRadius - aDistance) < theTolerance
22 def isArcArcSmooth(theArc1, theArc2, theTolerance):
23 aCenter1 = geomDataAPI_Point2D(theArc1.attribute("ArcCenter"))
24 aCenter2 = geomDataAPI_Point2D(theArc2.attribute("ArcCenter"))
25 aDistance = distancePointPoint(aCenter1, aCenter2)
26 aRadius1 = arcRadius(theArc1)
27 aRadius2 = arcRadius(theArc2)
28 aRadSum = aRadius1 + aRadius2
29 aRadDiff = math.fabs(aRadius1 - aRadius2)
30 return math.fabs(aDistance - aRadSum) < theTolerance or math.fabs(aDistance - aRadDiff) < theTolerance
32 def arcRadius(theArc):
33 aCenter = geomDataAPI_Point2D(theArc.attribute("ArcCenter"))
34 aStart = geomDataAPI_Point2D(theArc.attribute("ArcStartPoint"))
35 return distancePointPoint(aCenter, aStart)
37 def distancePointPoint(thePoint1, thePoint2):
38 return math.hypot(thePoint1.x() - thePoint2.x(), thePoint1.y() - thePoint2.y())
40 def distancePointLine(thePoint, theLine):
41 aLineStart = geomDataAPI_Point2D(theLine.attribute("StartPoint"))
42 aLineEnd = geomDataAPI_Point2D(theLine.attribute("EndPoint"))
43 aLength = distancePointPoint(aLineStart, aLineEnd)
44 aDir1x, aDir1y = aLineEnd.x() - aLineStart.x(), aLineEnd.y() - aLineStart.y()
45 aDir2x, aDir2y = thePoint.x() - aLineStart.x(), thePoint.y() - aLineStart.y()
46 aCross = aDir1x * aDir2y - aDir1y * aDir2x
47 return math.fabs(aCross) / aLength
51 class TestFilletInteracting(unittest.TestCase):
54 self.myDocument = model.moduleDocument()
55 self.mySketch = model.addSketch(self.myDocument, model.defaultPlane("XOY"))
56 self.myTolerance = 1.e-6
61 assert(model.checkPythonDump())
66 self.assertEqual(model.dof(self.mySketch), self.myDOF)
68 def collectFeatures(self):
70 for aSubObj in self.mySketch.features().list():
71 aFeature = ModelAPI.ModelAPI_Feature.feature(aSubObj)
72 if aFeature is not None:
73 if self.myFeatures.get(aFeature.getKind()) == None:
74 self.myFeatures[aFeature.getKind()] = 1
76 self.myFeatures[aFeature.getKind()] += 1
78 def checkNbFeatures(self, theFeatureKind, theFeatureCount):
79 if theFeatureCount == 0:
80 self.assertIsNone(self.myFeatures.get(theFeatureKind))
82 self.assertIsNotNone(self.myFeatures.get(theFeatureKind), "No features of kind {0} but expected {1}".format(theFeatureKind, theFeatureCount))
83 self.assertEqual(self.myFeatures[theFeatureKind], theFeatureCount, "Observed number of {0} is {1} but expected {2}".format(theFeatureKind, self.myFeatures[theFeatureKind], theFeatureCount))
85 def checkFillet(self):
86 aPtPtCoincidences = self.getCoincidences()
87 for coinc in aPtPtCoincidences:
88 aConnectedFeatures = self.connectedFeatures(coinc)
89 self.assertEqual(len(aConnectedFeatures), 2)
90 if aConnectedFeatures[0].getKind() == "SketchArc":
91 if aConnectedFeatures[1].getKind() == "SketchArc":
92 self.assertTrue(isArcArcSmooth(aConnectedFeatures[0], aConnectedFeatures[1], self.myTolerance))
93 elif aConnectedFeatures[1].getKind() == "SketchLine":
94 self.assertTrue(isArcLineSmooth(aConnectedFeatures[0], aConnectedFeatures[1], self.myTolerance))
95 elif aConnectedFeatures[0].getKind() == "SketchLine" and aConnectedFeatures[1].getKind() == "SketchArc":
96 self.assertTrue(isArcLineSmooth(aConnectedFeatures[1], aConnectedFeatures[0], self.myTolerance))
98 def getCoincidences(self):
100 for aSubObj in self.mySketch.features().list():
101 aSubFeature = ModelAPI.ModelAPI_Feature.feature(aSubObj)
102 if aSubFeature is not None and aSubFeature.getKind() == "SketchConstraintCoincidence":
103 anEntityA = aSubFeature.refattr("ConstraintEntityA")
104 anEntityB = aSubFeature.refattr("ConstraintEntityB")
105 if not anEntityA.isObject() and not anEntityB.isObject():
106 aCoincidences.append(aSubFeature)
109 def connectedFeatures(self, theCoincidence):
110 anEntityA = theCoincidence.refattr("ConstraintEntityA")
111 anEntityB = theCoincidence.refattr("ConstraintEntityB")
112 aFeatureA = ModelAPI.ModelAPI_Feature.feature(anEntityA.attr().owner())
113 aFeatureB = ModelAPI.ModelAPI_Feature.feature(anEntityB.attr().owner())
114 return [aFeatureA, aFeatureB]
117 @unittest.expectedFailure
118 def test_fillet_two_lines(self):
119 """ Test 1. Fillet on two connected lines
121 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
122 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
125 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
129 self.mySketch.setFillet(aSketchLineA.startPoint())
135 self.collectFeatures()
136 self.checkNbFeatures("SketchLine", 2)
137 self.checkNbFeatures("SketchArc", 1)
138 self.checkNbFeatures("SketchConstraintCoincidence", 2)
139 self.checkNbFeatures("SketchConstraintTangent", 2)
140 self.checkNbFeatures("SketchFillet", 0)
142 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
143 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
144 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
146 def test_wrong_fillet_two_lines(self):
147 """ Test 2. Check the fillet is wrong on two connected lines when selecting incorrect point
149 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
150 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
153 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
157 aFillet = self.mySketch.setFillet(aSketchLineA.endPoint())
161 self.collectFeatures()
162 self.checkNbFeatures("SketchLine", 2)
163 self.checkNbFeatures("SketchArc", 0) # no arcs should be created
164 self.checkNbFeatures("SketchConstraintCoincidence", 1) # number of coincidences should not change
165 self.checkNbFeatures("SketchConstraintTangent", 0) # no tangencies should not be created
166 self.checkNbFeatures("SketchFillet", 1) # fillet feature should still exist. it should be wrong
168 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
169 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [2])
170 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [4])
172 # remove fillet for correct python dump
173 self.myDocument.removeFeature(aFillet.feature())
175 @unittest.expectedFailure
176 def test_fillet_arc_line(self):
177 """ Test 3. Fillet on connected arc and line
179 aSketchLine = self.mySketch.addLine(10., 10., 20., 10.)
180 aSketchArc = self.mySketch.addArc(20., 10., 20., 20., 10., 10., False)
183 self.mySketch.setCoincident(aSketchLine.startPoint(), aSketchArc.endPoint())
187 self.mySketch.setFillet(aSketchLine.startPoint())
193 self.collectFeatures()
194 self.checkNbFeatures("SketchLine", 1)
195 self.checkNbFeatures("SketchArc", 2)
196 self.checkNbFeatures("SketchConstraintCoincidence", 2)
197 self.checkNbFeatures("SketchConstraintTangent", 2)
198 self.checkNbFeatures("SketchFillet", 0)
200 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
201 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
202 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
204 @unittest.expectedFailure
205 def test_fillet_two_arcs(self):
206 """ Test 4. Fillet on two connected arcs
208 aSketchArc1 = self.mySketch.addArc(20., 0., 20., 20., 10., 17.32050807568877293, False)
209 aSketchArc2 = self.mySketch.addArc(20., 34.64101615137754586, 20., 14.64101615137754586, 10., 17.32050807568877293, True)
212 self.mySketch.setCoincident(aSketchArc1.endPoint(), aSketchArc2.endPoint())
216 self.mySketch.setFillet(aSketchArc1.endPoint())
222 self.collectFeatures()
223 self.checkNbFeatures("SketchLine", 0)
224 self.checkNbFeatures("SketchArc", 3)
225 self.checkNbFeatures("SketchConstraintCoincidence", 2)
226 self.checkNbFeatures("SketchConstraintTangent", 2)
227 self.checkNbFeatures("SketchFillet", 0)
229 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
230 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
231 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
233 @unittest.expectedFailure
234 def test_fillet_with_horizontal_vertical(self):
235 """ Test 5. Fillet on two connected lines in case of Horizontal or Vertical constraints applied
237 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
238 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
241 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
245 self.mySketch.setHorizontal(aSketchLineA.result())
246 self.mySketch.setVertical(aSketchLineB.result())
250 self.mySketch.setFillet(aSketchLineA.startPoint())
256 self.collectFeatures()
257 self.checkNbFeatures("SketchLine", 2)
258 self.checkNbFeatures("SketchArc", 1)
259 self.checkNbFeatures("SketchConstraintCoincidence", 2)
260 self.checkNbFeatures("SketchConstraintTangent", 2)
261 self.checkNbFeatures("SketchConstraintHorizontal", 1)
262 self.checkNbFeatures("SketchConstraintVertical", 1)
263 self.checkNbFeatures("SketchFillet", 0)
265 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
266 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
267 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
269 @unittest.expectedFailure
270 def test_fillet_with_orthogonal(self):
271 """ Test 6. Fillet on two connected lines in case of Perpendicular constraint applied
273 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
274 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
277 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
281 self.mySketch.setPerpendicular(aSketchLineA.result(), aSketchLineB.result())
285 self.mySketch.setFillet(aSketchLineA.startPoint())
291 self.collectFeatures()
292 self.checkNbFeatures("SketchLine", 2)
293 self.checkNbFeatures("SketchArc", 1)
294 self.checkNbFeatures("SketchConstraintCoincidence", 2)
295 self.checkNbFeatures("SketchConstraintTangent", 2)
296 self.checkNbFeatures("SketchConstraintPerpendicular", 1)
297 self.checkNbFeatures("SketchFillet", 0)
299 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
300 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
301 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
303 @unittest.expectedFailure
304 def test_fillet_with_parallel(self):
305 """ Test 7. Fillet on two connected lines in case of Parallel constraint applied
307 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
308 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
311 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
315 # third line to apply parallel constraint
316 aSketchLineC = self.mySketch.addLine(10., 0., 20., 5.)
318 self.mySketch.setParallel(aSketchLineB.result(), aSketchLineC.result())
322 self.mySketch.setFillet(aSketchLineA.startPoint())
328 self.collectFeatures()
329 self.checkNbFeatures("SketchLine", 3)
330 self.checkNbFeatures("SketchArc", 1)
331 self.checkNbFeatures("SketchConstraintCoincidence", 2)
332 self.checkNbFeatures("SketchConstraintTangent", 2)
333 self.checkNbFeatures("SketchConstraintParallel", 1)
334 self.checkNbFeatures("SketchFillet", 0)
336 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
337 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [4])
338 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [8])
340 @unittest.expectedFailure
341 def test_fillet_with_equal_lines(self):
342 """ Test 8. Fillet on two connected lines in case of Equal constraint applied
344 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
345 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
348 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
352 self.mySketch.setEqual(aSketchLineA.result(), aSketchLineB.result())
356 self.mySketch.setFillet(aSketchLineA.startPoint())
362 self.collectFeatures()
363 self.checkNbFeatures("SketchLine", 2)
364 self.checkNbFeatures("SketchArc", 1)
365 self.checkNbFeatures("SketchConstraintCoincidence", 2)
366 self.checkNbFeatures("SketchConstraintTangent", 2)
367 self.checkNbFeatures("SketchConstraintEqual", 0) # Equal constraint expected to be removed
368 self.checkNbFeatures("SketchFillet", 0)
370 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
371 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
372 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
374 @unittest.expectedFailure
375 def test_fillet_with_equal_arcs(self):
376 """ Test 9. Fillet on two connected arcs in case of Equal constraint applied
378 aSketchArc1 = self.mySketch.addArc(20., 0., 20., 20., 10., 17.32050807568877293, False)
379 aSketchArc2 = self.mySketch.addArc(20., 34.64101615137754586, 20., 14.64101615137754586, 10., 17.32050807568877293, True)
382 self.mySketch.setCoincident(aSketchArc1.endPoint(), aSketchArc2.endPoint())
386 self.mySketch.setEqual(aSketchArc1.results()[1], aSketchArc2.results()[1])
390 self.mySketch.setFillet(aSketchArc1.endPoint())
396 self.collectFeatures()
397 self.checkNbFeatures("SketchLine", 0)
398 self.checkNbFeatures("SketchArc", 3)
399 self.checkNbFeatures("SketchConstraintCoincidence", 2)
400 self.checkNbFeatures("SketchConstraintTangent", 2)
401 self.checkNbFeatures("SketchConstraintEqual", 0) # Equal constraint expected to be removed
402 self.checkNbFeatures("SketchFillet", 0)
404 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
405 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
406 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
408 @unittest.expectedFailure
409 def test_fillet_with_length(self):
410 """ Test 10. Fillet on two connected lines in case of Length constraint applied
412 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
413 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
416 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
420 self.mySketch.setLength(aSketchLineA.result(), 15.)
424 self.mySketch.setFillet(aSketchLineA.startPoint())
430 self.collectFeatures()
431 self.checkNbFeatures("SketchLine", 2)
432 self.checkNbFeatures("SketchArc", 1)
433 self.checkNbFeatures("SketchConstraintCoincidence", 2)
434 self.checkNbFeatures("SketchConstraintTangent", 2)
435 self.checkNbFeatures("SketchConstraintLength", 0) # Length constraint expected to be removed
436 self.checkNbFeatures("SketchFillet", 0)
438 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
439 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
440 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
442 @unittest.expectedFailure
443 def test_fillet_with_radius(self):
444 """ Test 11. Fillet on connected arc and line in case of Radius constraint is applied to arc
446 aSketchLine = self.mySketch.addLine(10., 10., 20., 10.)
447 aSketchArc = self.mySketch.addArc(0., 10., 0., 20., 10., 10., True)
450 self.mySketch.setCoincident(aSketchLine.startPoint(), aSketchArc.endPoint())
454 self.mySketch.setRadius(aSketchArc.results()[1], 12.)
458 self.mySketch.setFillet(aSketchLine.startPoint())
464 self.collectFeatures()
465 self.checkNbFeatures("SketchLine", 1)
466 self.checkNbFeatures("SketchArc", 2)
467 self.checkNbFeatures("SketchConstraintCoincidence", 2)
468 self.checkNbFeatures("SketchConstraintTangent", 2)
469 self.checkNbFeatures("SketchConstraintRadius", 1)
470 self.checkNbFeatures("SketchFillet", 0)
472 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
473 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
474 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
476 @unittest.expectedFailure
477 def test_fillet_with_distance(self):
478 """ Test 12. Fillet on two connected lines in case of Distance constraint applied
480 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
481 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
484 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
488 # third line to apply Distance constraints
489 aSketchLineC = self.mySketch.addLine(10., 0., 20., 5.)
491 self.mySketch.setDistance(aSketchLineB.startPoint(), aSketchLineC.result(), 10.)
492 self.mySketch.setDistance(aSketchLineB.endPoint(), aSketchLineC.result(), 5.)
496 self.mySketch.setFillet(aSketchLineA.startPoint())
502 self.collectFeatures()
503 self.checkNbFeatures("SketchLine", 3)
504 self.checkNbFeatures("SketchArc", 1)
505 self.checkNbFeatures("SketchConstraintCoincidence", 2)
506 self.checkNbFeatures("SketchConstraintTangent", 2)
507 self.checkNbFeatures("SketchConstraintDistance", 1) # only one Distance should be left
508 self.checkNbFeatures("SketchFillet", 0)
510 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
511 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [4])
512 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [8])
514 @unittest.expectedFailure
515 def test_fillet_with_fixed_point(self):
516 """ Test 13. Fillet on two connected lines in case of Fixed constraint applied to the fillet point
518 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
519 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
522 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
526 self.mySketch.setFixed(aSketchLineA.startPoint())
530 self.mySketch.setFillet(aSketchLineA.startPoint())
536 self.collectFeatures()
537 self.checkNbFeatures("SketchLine", 2)
538 self.checkNbFeatures("SketchArc", 1)
539 self.checkNbFeatures("SketchConstraintCoincidence", 2)
540 self.checkNbFeatures("SketchConstraintTangent", 2)
541 self.checkNbFeatures("SketchConstraintFixed", 0) # Fixed constraint expected to be removed
542 self.checkNbFeatures("SketchFillet", 0)
544 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
545 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
546 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
548 @unittest.expectedFailure
549 def test_fillet_with_fixed_line(self):
550 """ Test 14. Fillet on two connected lines in case of Fixed constraint applied to one of lines
552 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
553 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
556 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
560 self.mySketch.setFixed(aSketchLineA.result())
564 self.mySketch.setFillet(aSketchLineA.startPoint())
570 self.collectFeatures()
571 self.checkNbFeatures("SketchLine", 2)
572 self.checkNbFeatures("SketchArc", 1)
573 self.checkNbFeatures("SketchConstraintCoincidence", 2)
574 self.checkNbFeatures("SketchConstraintTangent", 2)
575 self.checkNbFeatures("SketchConstraintLength", 0) # Fixed constraint expected to be kept
576 self.checkNbFeatures("SketchFillet", 0)
578 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
579 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
580 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
582 @unittest.expectedFailure
583 def test_fillet_with_angle(self):
584 """ Test 15. Fillet on two connected lines in case of Perpendicular constraint applied
586 aSketchLineA = self.mySketch.addLine(10., 10., 20., 10.)
587 aSketchLineB = self.mySketch.addLine(10., 10., 10., 20.)
590 self.mySketch.setCoincident(aSketchLineA.startPoint(), aSketchLineB.startPoint())
594 self.mySketch.setAngle(aSketchLineA.result(), aSketchLineB.result(), 60.)
598 self.mySketch.setFillet(aSketchLineA.startPoint())
604 self.collectFeatures()
605 self.checkNbFeatures("SketchLine", 2)
606 self.checkNbFeatures("SketchArc", 1)
607 self.checkNbFeatures("SketchConstraintCoincidence", 2)
608 self.checkNbFeatures("SketchConstraintTangent", 2)
609 self.checkNbFeatures("SketchConstraintAngle", 1)
610 self.checkNbFeatures("SketchFillet", 0)
612 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.FACE, [0])
613 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.EDGE, [3])
614 model.testNbSubShapes(self.mySketch, GeomAPI_Shape.VERTEX, [6])
617 # TODO: Remove unittest.expectedFailure if the Tangency in PlaneGCS will be updated
618 if __name__ == '__main__':