X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FTest%2FTestCreateCircleByCenterAndPassed.py;h=9e27926d2620661a4347e246a0714410b8a21fda;hb=661aafa65364b86fdbfc9fde9462d31bdf3ae151;hp=bb691dfcbd0fc4cf07ea0c533a5f4df7ca4bf27b;hpb=101d3e5334f023119aa62efd4ca0ae5a31ad5a50;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py b/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py index bb691dfcb..9e27926d2 100644 --- a/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py +++ b/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py @@ -1,3 +1,22 @@ +# 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 +# + """ TestCreateCircleByCenterAndPassed.py @@ -27,16 +46,10 @@ def verifyLastCircle(theSketch, theX, theY, theR): subroutine to verify position of last circle in the sketch """ aLastCircle = model.lastSubFeature(theSketch, "SketchCircle") - aCenter = geomDataAPI_Point2D(aLastCircle.attribute("circle_center")) - verifyPointCoordinates(aCenter, theX, theY) - aRadius = aLastCircle.real("circle_radius") - assert aRadius.value() == theR, "Wrong radius {0}, expected {1}".format(aRadius.value(), theR) - -def verifyPointCoordinates(thePoint, theX, theY): - assert thePoint.x() == theX and thePoint.y() == theY, "Wrong '{0}' point ({1}, {2}), expected ({3}, {4})".format(thePoint.id(), thePoint.x(), thePoint.y(), theX, theY) + model.assertCircle(aLastCircle, [theX, theY], theR) def verifyPointOnLine(thePoint, theLine): - aDistance = distancePointLine(thePoint, theLine) + aDistance = model.distancePointLine(thePoint, theLine) assert aDistance < TOLERANCE, "Point is not on Line, distance: {0}".format(aDistance) def verifyTangentCircles(theCircle1, theCircle2): @@ -49,13 +62,11 @@ def verifyTangentCircles(theCircle1, theCircle2): aRDiff = math.fabs(aRadius1 - aRadius2) assert math.fabs(aRSum - aDistCC) < TOLERANCE or math.fabs(aRDiff - aDistCC) < TOLERANCE, "Circles do not tangent" -def distancePointLine(thePoint, theLine): - aLineStart = geomDataAPI_Point2D(theLine.attribute("StartPoint")).pnt().xy() - aLineEnd = geomDataAPI_Point2D(theLine.attribute("EndPoint")).pnt().xy() - aLineDir = aLineEnd.decreased(aLineStart) - aLineLen = aLineEnd.distance(aLineStart) - aPntDir = thePoint.pnt().xy().decreased(aLineStart) - return math.fabs(aPntDir.cross(aLineDir) / aLineLen) +def verifyTangentCircleLine(theCircle, theLine): + aCenter = geomDataAPI_Point2D(theCircle.attribute("circle_center")) + aRadius = theCircle.real("circle_radius").value() + aDistCL = model.distancePointLine(aCenter, theLine) + assert math.fabs(aDistCL - aRadius) < TOLERANCE, "Circle and line are not tangent" #========================================================================= @@ -136,11 +147,11 @@ verifyLastCircle(aSketchFeature, -25., -25., aRadius) aPrevCircle = model.lastSubFeature(aSketchFeature, "SketchCircle") aPrevCenter = geomDataAPI_Point2D(aPrevCircle.attribute("circle_center")) # create additional point -aPointCoodinates = [0., 0.] +aPointCoordinates = [0., 0.] aSession.startOperation() aPoint = aSketchFeature.addFeature("SketchPoint") -aPointCoord = geomDataAPI_Point2D(aPoint.attribute("PointCoordindates")) -aPointCoord.setValue(aPointCoodinates[0], aPointCoodinates[1]) +aPointCoord = geomDataAPI_Point2D(aPoint.attribute("PointCoordinates")) +aPointCoord.setValue(aPointCoordinates[0], aPointCoordinates[1]) aSession.finishOperation() # create new circle aSession.startOperation() @@ -162,7 +173,7 @@ aPassed.setValue(aPrevCenter.pnt()) aRadius = model.distancePointPoint(aPrevCenter, aPointCoord) aSession.finishOperation() assert (aSketchFeature.numberOfSubs() == 6) -verifyPointCoordinates(aPointCoord, aPointCoodinates[0], aPointCoodinates[1]) +model.assertPoint(aPointCoord, aPointCoordinates) verifyLastCircle(aSketchFeature, aPointCoord.x(), aPointCoord.y(), aRadius) model.testNbSubFeatures(aSketch, "SketchConstraintCoincidence", 2) @@ -203,19 +214,47 @@ aRadius = model.distancePointPoint(aCenter, aPassed) aSession.finishOperation() assert (aSketchFeature.numberOfSubs() == 10) # check connected features do not change their positions -verifyPointCoordinates(aPrevCenter, aPrevCenterXY[0], aPrevCenterXY[1]) +model.assertPoint(aPrevCenter, aPrevCenterXY) assert(aPrevCircle.real("circle_radius").value() == aPrevRadius) -verifyPointCoordinates(aStartPnt, aLineStart[0], aLineStart[1]) -verifyPointCoordinates(aEndPnt, aLineEnd[0], aLineEnd[1]) +model.assertLine(aLine, aLineStart, aLineEnd) # verify newly created circle aCircle = model.lastSubFeature(aSketchFeature, "SketchCircle") aCenter = geomDataAPI_Point2D(aCircle.attribute("circle_center")) -verifyPointCoordinates(aCenter, anExpectedCenter[0], anExpectedCenter[1]) +model.assertPoint(aCenter, anExpectedCenter) verifyPointOnLine(aCenter, aLine) verifyTangentCircles(aCircle, aPrevCircle) model.testNbSubFeatures(aSketch, "SketchConstraintCoincidence", 3) model.testNbSubFeatures(aSketch, "SketchConstraintTangent", 1) +#========================================================================= +# Test 5. Create a circle as a macro-feature by center and passed point on line +#========================================================================= +# create new circle +aSession.startOperation() +aCircle = aSketchFeature.addFeature("SketchMacroCircle") +aCenter = geomDataAPI_Point2D(aCircle.attribute("center_point")) +aCenterRef = aCircle.refattr("center_point_ref") +aPassed = geomDataAPI_Point2D(aCircle.attribute("passed_point")) +aPassedRef = aCircle.refattr("passed_point_ref") +aCircleType = aCircle.string("circle_type") +# initialize attributes +aCircleType.setValue("circle_type_by_center_and_passed_points") +anExpectedCenter = [(aLineStart[0] + aLineEnd[0]) * 0.5 + 10., (aLineStart[1] + aLineEnd[1]) * 0.5] +aCenter.setValue(anExpectedCenter[0], anExpectedCenter[1]) +aPassedRef.setObject(aLine.lastResult()) +aPassed.setValue(aLineStart[0], aLineStart[1]) +aSession.finishOperation() +assert (aSketchFeature.numberOfSubs() == 12) +# check connected features do not change their positions +model.assertLine(aLine, aLineStart, aLineEnd) +# verify newly created circle +aCircle = model.lastSubFeature(aSketchFeature, "SketchCircle") +aCenter = geomDataAPI_Point2D(aCircle.attribute("circle_center")) +model.assertPoint(aCenter, anExpectedCenter) +verifyTangentCircleLine(aCircle, aLine) +model.testNbSubFeatures(aSketch, "SketchConstraintCoincidence", 3) +model.testNbSubFeatures(aSketch, "SketchConstraintTangent", 2) + #========================================================================= # Test 5. Create a circle as a macro-feature by center and passed point placed on the same line # Check the circle is not created @@ -236,8 +275,10 @@ aPassed.setValue(aLineStart[0], aLineStart[1]) aSession.finishOperation() aLastFeature = aSketchFeature.subFeature(aSketchFeature.numberOfSubs() - 1) assert aLastFeature.getKind() == "SketchMacroCircle", "ERROR: SketchMacroCircle has NOT expected to be valid" +aSession.startOperation() aDocument.removeFeature(aCircle) -assert (aSketchFeature.numberOfSubs() == 10) +aSession.finishOperation() +assert (aSketchFeature.numberOfSubs() == 12) #========================================================================= # End of test