Salome HOME
Update unit-tests for SketchPlugin. Test case for the Projection has been added
[modules/shaper.git] / src / SketchPlugin / Test / TestSketchArcCircle.py
index 9ab1394e0b587a817150b2c8880ef2fce8872444..83169611b8cdd4eea39f2b68b9d6a035057a0c4d 100644 (file)
 #=========================================================================
 from GeomDataAPI import *
 from ModelAPI import *
+import math
 
 __updated__ = "2014-10-28"
 
+
+#=========================================================================
+# Auxiliary functions
+#=========================================================================
+
+def angle(theCenter, theFirst, theLast):
+    """
+    subroutine to calculate angle given by 3 points
+    """
+    aDirX1 = theFirst.x() - theCenter.x()
+    aDirY1 = theFirst.y() - theCenter.y()
+    aLen1 = math.hypot(aDirX1, aDirY1)
+    aDirX2 = theLast.x() - theCenter.x()
+    aDirY2 = theLast.y() - theCenter.y()
+    aLen2 = math.hypot(aDirX2, aDirY2)
+    aDot = aDirX1 * aDirX2 + aDirY1 * aDirY2
+    anAngle = math.acos(aDot / aLen1 / aLen2)
+    return round(anAngle * 180. / math.pi, 6)
+
+def distancePointPoint(thePointA, thePointB):
+    """
+    subroutine to calculate distance between two points
+    result of calculated distance is has 10**-5 precision
+    """
+    xdiff = math.pow((thePointA.x() - thePointB.x()), 2)
+    ydiff = math.pow((thePointA.y() - thePointB.y()), 2)
+    return round(math.sqrt(xdiff + ydiff), 5)
+
+
 aSession = ModelAPI_Session.get()
 aDocument = aSession.moduleDocument()
 #=========================================================================
@@ -83,34 +113,36 @@ assert (anArcEndPoint.y() == 0.0)
 # Edit the arc:
 # 1. Move whole arc
 # 2. Change the start point
+# 3. Change the radius of arc
+# 4. Change arc's angle
 #=========================================================================
-
-# MPV: movement now is done little bit in different way, just move points causes changing them
-#  back t okeep the radius unchanged (projection back to the initial circle)
-#aSession.startOperation()
-#deltaX, deltaY = 5., 10.
-#anArcCentr.setValue(anArcCentr.x() + deltaX, anArcCentr.y() + deltaY)
-#anArcStartPoint.setValue(
-#    anArcStartPoint.x() + deltaX, anArcStartPoint.y() + deltaY)
-#anArcEndPoint.setValue(anArcEndPoint.x() + deltaX, anArcEndPoint.y() + deltaY)
-#aSession.finishOperation()
-#assert (anArcCentr.y() == 20)
-#assert (anArcStartPoint.x() == 5)
-#assert (anArcStartPoint.y() == 60)
-#assert (anArcEndPoint.x() == 55)
-#assert (anArcEndPoint.y() == 10)
-## Change the start point
-#aSession.startOperation()
-#anArcStartPoint.setValue(anArcStartPoint.x() + deltaX, anArcStartPoint.y())
-#aPrevEndPointX = anArcEndPoint.x()
-#aPrevEndPointY = anArcEndPoint.y()
-#aSession.finishOperation()
-#assert (anArcCentr.x() == 15)
-#assert (anArcCentr.y() == 20)
-#assert (anArcStartPoint.x() == 10)
-#assert (anArcStartPoint.y() == 60)
-#assert (anArcEndPoint.x() != aPrevEndPointX)
-#assert (anArcEndPoint.y() != aPrevEndPointY)
+aSession.startOperation()
+deltaX, deltaY = 5., 10.
+anArcCentr.setValue(anArcCentr.x() + deltaX, anArcCentr.y() + deltaY)
+aSession.finishOperation()
+assert (anArcCentr.x() == 15)
+assert (anArcCentr.y() == 20)
+assert (math.fabs(distancePointPoint(anArcCentr, anArcStartPoint) - distancePointPoint(anArcCentr, anArcEndPoint)) < 1.e-10)
+# Change the start point
+aSession.startOperation()
+anArcStartPoint.setValue(anArcStartPoint.x() + deltaX, anArcStartPoint.y())
+aSession.finishOperation()
+assert (math.fabs(distancePointPoint(anArcCentr, anArcStartPoint) - distancePointPoint(anArcCentr, anArcEndPoint)) < 1.e-10)
+# Change radius
+RADIUS = 50
+aSession.startOperation()
+anArcRadius = aSketchArc.real("ArcRadius")
+anArcRadius.setValue(RADIUS)
+aSession.finishOperation()
+assert (math.fabs(distancePointPoint(anArcCentr, anArcStartPoint) - RADIUS) < 1.e-10)
+assert (math.fabs(distancePointPoint(anArcCentr, anArcEndPoint) - RADIUS) < 1.e-10)
+# Change angle
+ANGLE = 120
+aSession.startOperation()
+anArcAngle = aSketchArc.real("ArcAngle")
+anArcAngle.setValue(ANGLE)
+aSession.finishOperation()
+assert (math.fabs(angle(anArcCentr, anArcStartPoint, anArcEndPoint) - ANGLE) < 1.e-7)
 #=========================================================================
 # Check results of the Arc
 #=========================================================================
@@ -164,5 +196,38 @@ assert (anCircleCentr.x() == 10)
 assert (anCircleCentr.y() == 60)
 assert (aCircleRadius.value() == 20)
 #=========================================================================
+# Create an arc, tangent to the line
+#=========================================================================
+aSession.startOperation()
+aSketchLine = aSketchFeature.addFeature("SketchLine")
+aLineStart = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
+aLineEnd = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
+aLineStart.setValue(0., 0.)
+aLineEnd.setValue(50., 0.)
+aSession.finishOperation()
+aSession.startOperation()
+aSketchArcTangent = aSketchFeature.addFeature("SketchArc")
+aSketchArcTangent.string("ArcType").setValue("Tangent")
+anArcEndPoint = geomDataAPI_Point2D(aSketchArcTangent.attribute("ArcEndPoint"))
+aTangent = aSketchArcTangent.refattr("ArcTangentPoint")
+aTangent.setAttr(aLineEnd)
+anArcEndPoint.setValue(51., 1.)
+anArcEndPoint.setValue(100., 25.)
+aSession.finishOperation()
+anArcCenter = geomDataAPI_Point2D(aSketchArcTangent.attribute("ArcCenter"))
+assert(anArcCenter.x() == 50.)
+#=========================================================================
+# Create an arc, tangent to the previous arc
+#=========================================================================
+aSession.startOperation()
+aSketchArcTangent2 = aSketchFeature.addFeature("SketchArc")
+aSketchArcTangent2.string("ArcType").setValue("Tangent")
+anArcEndPoint2 = geomDataAPI_Point2D(aSketchArcTangent2.attribute("ArcEndPoint"))
+aTangent = aSketchArcTangent2.refattr("ArcTangentPoint")
+aTangent.setAttr(anArcEndPoint)
+anArcEndPoint2.setValue(anArcEndPoint.x() + 1, anArcEndPoint.y() + 1)
+anArcEndPoint2.setValue(50., 50.)
+aSession.finishOperation()
+#=========================================================================
 # End of test
 #=========================================================================