Salome HOME
Update all attributes of circle when changing any (issue #1316)
[modules/shaper.git] / src / SketchPlugin / Test / TestConstraintTangent.py
index a64b8a3a8c3db4293fa4bdbf982901ec5feaf90a..5329c5de22416a42ca456a9d1ba6b54cc06d86a6 100644 (file)
@@ -25,13 +25,11 @@ aDocument = aSession.moduleDocument()
 #=========================================================================
 aSession.startOperation()
 aSketchCommonFeature = aDocument.addFeature("Sketch")
-aSketchFeature = modelAPI_CompositeFeature(aSketchCommonFeature)
+aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
 origin.setValue(0, 0, 0)
 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
 dirx.setValue(1, 0, 0)
-diry = geomDataAPI_Dir(aSketchFeature.attribute("DirY"))
-diry.setValue(0, 1, 0)
 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
 norm.setValue(0, 0, 1)
 aSession.finishOperation()
@@ -102,10 +100,12 @@ aTangency.execute()
 aSession.finishOperation()
 anArcVecX = anArcStartPoint.x() - anArcCentr.x()
 anArcVecY = anArcStartPoint.y() - anArcCentr.y()
+aLen = math.sqrt(anArcVecX**2 + anArcVecY**2)
 aLineVecX = aLine1EndPoint.x() - aLine1StartPoint.x()
 aLineVecY = aLine1EndPoint.y() - aLine1StartPoint.y()
+aLen = aLen * math.sqrt(aLineVecX**2 + aLineVecY**2)
 aDot = anArcVecX * aLineVecX + anArcVecY * aLineVecY
-assert(math.fabs(aDot) <= 1.e-12)
+assert math.fabs(aDot) <= 2.e-6 * aLen, "Observed dot product: {0}".format(aDot)
 #=========================================================================
 # Add tangency constraint for arc and second line and check correctness
 #=========================================================================
@@ -123,10 +123,12 @@ aTangency.execute()
 aSession.finishOperation()
 anArcVecX = anArcEndPoint.x() - anArcCentr.x()
 anArcVecY = anArcEndPoint.y() - anArcCentr.y()
+aLen = math.sqrt(anArcVecX**2 + anArcVecY**2)
 aLineVecX = aLine2EndPoint.x() - aLine2StartPoint.x()
 aLineVecY = aLine2EndPoint.y() - aLine2StartPoint.y()
+aLen = aLen * math.sqrt(aLineVecX**2 + aLineVecY**2)
 aDot = anArcVecX * aLineVecX + anArcVecY * aLineVecY
-assert(math.fabs(aDot) <= 1.e-12)
+assert math.fabs(aDot) <= 2.e-6 * aLen, "Observed dot product: {0}".format(aDot)
 
 #=========================================================================
 # TEST 2. Arc-arc tangency
@@ -146,12 +148,14 @@ aSession.finishOperation()
 # Arc 2
 aSession.startOperation()
 aSketchArc2 = aSketchFeature.addFeature("SketchArc")
+aSketchArc2.string("ArcType").setValue("ThreePoints")
 anArc2Centr = geomDataAPI_Point2D(aSketchArc2.attribute("ArcCenter"))
-anArc2Centr.setValue(-10., 10.)
 anArc2StartPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcStartPoint"))
 anArc2StartPoint.setValue(0., 50.)
 anArc2EndPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcEndPoint"))
 anArc2EndPoint.setValue(-50., 0.)
+anArc2PassedPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcPassedPoint"))
+anArc2PassedPoint.setValue(-40., 40.)
 aSession.finishOperation()
 #=========================================================================
 # Link points of arcs by the coincidence constraint
@@ -181,10 +185,12 @@ aTangency.execute()
 aSession.finishOperation()
 anArc1VecX = anArc1EndPoint.x() - anArc1Centr.x()
 anArc1VecY = anArc1EndPoint.y() - anArc1Centr.y()
+aLen = math.sqrt(anArc1VecX**2 + anArc1VecY**2)
 anArc2VecX = anArc2StartPoint.x() - anArc2Centr.x()
 anArc2VecY = anArc2StartPoint.y() - anArc2Centr.y()
+aLen = aLen * math.sqrt(anArc2VecX**2 + anArc2VecY**2)
 aCross = anArc1VecX * anArc2VecY - anArc1VecY * anArc2VecX
-assert(math.fabs(aCross) <= 1.e-12)
+assert math.fabs(aCross) <= 2.e-6 * aLen, "Observed cross product: {0}".format(aCross)
 
 #=========================================================================
 # TEST 3. Tangency between non-connected objects should be wrong
@@ -221,6 +227,32 @@ assert(aLine2EndPointNew == aLine2EndPointPrev)
 assert(anArc2CenterNew == anArc2CenterPrev)
 assert(anArc2StartPointNew == anArc2StartPointPrev)
 assert(anArc2EndPointNew == anArc2EndPointPrev)
+aSession.startOperation()
+aSketchFeature.removeFeature(aTangency)
+aSession.finishOperation()
+
+#=========================================================================
+# TEST 4. Creating of tangency arc by the option of the SketchArc feature
+#=========================================================================
+aSession.startOperation()
+aSketchArc3 = aSketchFeature.addFeature("SketchArc")
+aSketchArc3.string("ArcType").setValue("Tangent")
+anArc3Start = aSketchArc3.refattr("ArcTangentPoint")
+anArc3Start.setAttr(anArc1StartPoint)
+anArc3EndPoint = geomDataAPI_Point2D(aSketchArc3.attribute("ArcEndPoint"))
+anArc3EndPoint.setValue(100., 0.)
+aSession.finishOperation()
+anArc3Center = geomDataAPI_Point2D(aSketchArc2.attribute("ArcCenter"))
+anArc3StartPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcStartPoint"))
+
+anArc1VecX = anArc1EndPoint.x() - anArc1Centr.x()
+anArc1VecY = anArc1EndPoint.y() - anArc1Centr.y()
+aLen = math.sqrt(anArc1VecX**2 + anArc1VecY**2)
+anArc3VecX = anArc3StartPoint.x() - anArc3Center.x()
+anArc3VecY = anArc3StartPoint.y() - anArc3Center.y()
+aLen = aLen * math.sqrt(anArc3VecX**2 + anArc3VecY**2)
+aCross = anArc1VecX * anArc3VecY - anArc1VecY * anArc3VecX
+assert math.fabs(aCross) <= 2.e-6 * aLen, "Observed cross product: {0}".format(aCross)
 #=========================================================================
 # End of test
 #=========================================================================