-
-def checkFillet(theObjects, theRadius):
- # Verify the arc and lines are connected smoothly
- print "Check Fillet"
- aLine = []
- anArc = []
- aSize = theObjects.size()
- for i in range (0, aSize):
- feat = ModelAPI_Feature.feature(theObjects.object(i))
- assert(feat is not None)
- if (feat.getKind() == "SketchLine"):
- aLine.append(feat)
- elif (feat.getKind() == "SketchArc"):
- anArc.append(feat)
- aFilletArc = anArc[-1]
- assert(aFilletArc is not None)
- anArc.pop()
-
- anArcPoints = []
- aPoint = geomDataAPI_Point2D(aFilletArc.attribute("ArcStartPoint"))
- print "ArcStartPoint " + repr(aPoint.x()) + " " + repr(aPoint.y())
- anArcPoints.append((aPoint.x(), aPoint.y()))
- aPoint = geomDataAPI_Point2D(aFilletArc.attribute("ArcEndPoint"))
- print "ArcEndPoint " + repr(aPoint.x()) + " " + repr(aPoint.y())
- anArcPoints.append((aPoint.x(), aPoint.y()))
- aPoint = geomDataAPI_Point2D(aFilletArc.attribute("ArcCenter"))
- print "ArcCenter " + repr(aPoint.x()) + " " + repr(aPoint.y())
- aCenterX = aPoint.x()
- aCenterY = aPoint.y()
- aFilletRadius = math.hypot(anArcPoints[0][0]-aCenterX, anArcPoints[0][1]-aCenterY)
-
- for line in aLine:
- aStartPoint = geomDataAPI_Point2D(line.attribute("StartPoint"))
- aEndPoint = geomDataAPI_Point2D(line.attribute("EndPoint"))
-
- aLinePoints = []
- aLinePoints.append((aStartPoint.x(), aStartPoint.y()))
- print "aLineStartPoint " + repr(aStartPoint.x()) + " " + repr(aStartPoint.y())
- aLinePoints.append((aEndPoint.x(), aEndPoint.y()))
- print "aLineEndPoint " + repr(aEndPoint.x()) + " " + repr(aEndPoint.y())
-
- aLineDirX = aEndPoint.x() - aStartPoint.x()
- aLineDirY = aEndPoint.y() - aStartPoint.y()
-
- for arcPt in anArcPoints:
- for linePt in aLinePoints:
- if (math.hypot(linePt[0]-arcPt[0], linePt[1]-arcPt[1]) < 1.e-10):
- aDirX = linePt[0] - aCenterX
- aDirY = linePt[1] - aCenterY
- assert(math.fabs(math.hypot(aDirX, aDirY) - theRadius) < 1.e-7)
- aDot = aDirX * aLineDirX + aDirY * aLineDirY
-
- break;
-
- for arc in anArc:
- aStartPoint = geomDataAPI_Point2D(arc.attribute("ArcStartPoint"))
- aEndPoint = geomDataAPI_Point2D(arc.attribute("ArcEndPoint"))
- aCenterPoint = geomDataAPI_Point2D(arc.attribute("ArcCenter"))
-
- aBaseArcPoints = []
- aBaseArcPoints.append((aStartPoint.x(), aStartPoint.y()))
- print "anArcStartPoint " + repr(aStartPoint.x()) + " " + repr(aStartPoint.y())
- aBaseArcPoints.append((aEndPoint.x(), aEndPoint.y()))
- print "anArcEndPoint " + repr(aEndPoint.x()) + " " + repr(aEndPoint.y())
- print "anArcCenter " + repr(aCenterPoint.x()) + " " + repr(aCenterPoint.y())
-
- aRadius = math.hypot(aStartPoint.x()-aCenterPoint.x(), aStartPoint.y()-aCenterPoint.y())
- aDist = math.hypot(aCenterPoint.x() - aCenterX, aCenterPoint.y() - aCenterY)
- assert math.fabs(aFilletRadius + aRadius - aDist) < 1.e-7 or math.fabs(math.fabs(aFilletRadius - aRadius) - aDist) < 1.e-7, \
- "Fillet radius = {0}, Base arc radius = {1}, distance between centers = {2}".format(aFilletRadius, aRadius, aDist)
+
+def checkSmoothness(theSketch):
+ aPtPtCoincidences = getCoincidences(theSketch)
+ for coinc in aPtPtCoincidences:
+ aConnectedFeatures = connectedFeatures(coinc)
+ assert(len(aConnectedFeatures) == 2)
+ if aConnectedFeatures[0].getKind() == "SketchArc":
+ if aConnectedFeatures[1].getKind() == "SketchArc":
+ checkArcArcSmoothness(aConnectedFeatures[0], aConnectedFeatures[1])
+ elif aConnectedFeatures[1].getKind() == "SketchLine":
+ checkArcLineSmoothness(aConnectedFeatures[0], aConnectedFeatures[1])
+ elif aConnectedFeatures[0].getKind() == "SketchLine" and aConnectedFeatures[1].getKind() == "SketchArc":
+ checkArcLineSmoothness(aConnectedFeatures[1], aConnectedFeatures[0])
+
+def checkArcLineSmoothness(theArc, theLine):
+ aCenter = geomDataAPI_Point2D(theArc.attribute("center_point"))
+ aDistance = model.distancePointLine(aCenter, theLine)
+ aRadius = arcRadius(theArc)
+ assert(math.fabs(aRadius - aDistance) < TOLERANCE)
+
+def checkArcArcSmoothness(theArc1, theArc2):
+ aCenter1 = geomDataAPI_Point2D(theArc1.attribute("center_point"))
+ aCenter2 = geomDataAPI_Point2D(theArc2.attribute("center_point"))
+ aDistance = model.distancePointPoint(aCenter1, aCenter2)
+ aRadius1 = arcRadius(theArc1)
+ aRadius2 = arcRadius(theArc2)
+ aRadSum = aRadius1 + aRadius2
+ aRadDiff = math.fabs(aRadius1 - aRadius2)
+ assert(math.fabs(aDistance - aRadSum) < TOLERANCE or math.fabs(aDistance - aRadDiff) < TOLERANCE)
+
+def getCoincidences(theSketch):
+ aCoincidences = []
+ for anIndex in range(0, theSketch.numberOfSubs()):
+ aSubFeature = theSketch.subFeature(anIndex)
+ if aSubFeature.getKind() == "SketchConstraintCoincidence":
+ anEntityA = aSubFeature.refattr("ConstraintEntityA")
+ anEntityB = aSubFeature.refattr("ConstraintEntityB")
+ if not anEntityA.isObject() and not anEntityB.isObject():
+ aCoincidences.append(aSubFeature)
+ return aCoincidences
+
+def connectedFeatures(theCoincidence):
+ anEntityA = theCoincidence.refattr("ConstraintEntityA")
+ anEntityB = theCoincidence.refattr("ConstraintEntityB")
+ aFeatureA = ModelAPI.ModelAPI_Feature.feature(anEntityA.attr().owner())
+ aFeatureB = ModelAPI.ModelAPI_Feature.feature(anEntityB.attr().owner())
+ return [aFeatureA, aFeatureB]
+
+def arcRadius(theArc):
+ aCenter = geomDataAPI_Point2D(theArc.attribute("center_point"))
+ aStart = geomDataAPI_Point2D(theArc.attribute("start_point"))
+ return model.distancePointPoint(aCenter, aStart)