X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FTest%2FTestConstraintAngle.py;h=ebe140d075b594f83faaf18fd62d60ead440c8d5;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=43b8ff00083a14bf4096faaa7857eae9848e6c0a;hpb=7bf38e1c14002e9779ef15bb63ebda08ddd6e4e9;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/Test/TestConstraintAngle.py b/src/SketchPlugin/Test/TestConstraintAngle.py index 43b8ff000..ebe140d07 100644 --- a/src/SketchPlugin/Test/TestConstraintAngle.py +++ b/src/SketchPlugin/Test/TestConstraintAngle.py @@ -1,20 +1,39 @@ +# Copyright (C) 2014-2023 CEA, EDF +# +# 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 +# + """ TestConstraintAngle.py Unit test of SketchPlugin_ConstraintAngle class - + SketchPlugin_ConstraintAngle static const std::string MY_CONSTRAINT_ANGLE_ID("SketchConstraintAngle"); data()->addAttribute(SketchPlugin_Constraint::VALUE(), ModelAPI_AttributeDouble::typeId()); data()->addAttribute(SketchPlugin_Constraint::ENTITY_A(), ModelAPI_AttributeRefAttr::typeId()); data()->addAttribute(SketchPlugin_Constraint::ENTITY_B(), ModelAPI_AttributeRefAttr::typeId()); data()->addAttribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT(), GeomDataAPI_Point2D::typeId()); - - + + """ from GeomDataAPI import * from ModelAPI import * -import os import math +from salome.shaper import model #========================================================================= # Auxiliary functions @@ -26,16 +45,16 @@ def angle(theLine1, theLine2): aEndPoint1 = geomDataAPI_Point2D(theLine1.attribute("EndPoint")) aStartPoint2 = geomDataAPI_Point2D(theLine2.attribute("StartPoint")) aEndPoint2 = geomDataAPI_Point2D(theLine2.attribute("EndPoint")) - + aDirX1 = aEndPoint1.x() - aStartPoint1.x() aDirY1 = aEndPoint1.y() - aStartPoint1.y() aLen1 = math.hypot(aDirX1, aDirY1) aDirX2 = aEndPoint2.x() - aStartPoint2.x() aDirY2 = aEndPoint2.y() - aStartPoint2.y() aLen2 = math.hypot(aDirX2, aDirY2) - + aDot = aDirX1 * aDirX2 + aDirY1 * aDirY2 - + anAngle = math.acos(aDot / aLen1 / aLen2) return round(anAngle * 180. / math.pi, 6) @@ -46,6 +65,10 @@ def angle(theLine1, theLine2): __updated__ = "2015-09-18" +ANGLE_DIRECT = 0 +ANGLE_COMPLEMENTARY = 1 +ANGLE_BACKWARD = 2 + aSession = ModelAPI_Session.get() aDocument = aSession.moduleDocument() #========================================================================= @@ -74,39 +97,48 @@ aEndPoint.setValue(100., 25.) aSketchLineB = aSketchFeature.addFeature("SketchLine") aStartPoint = geomDataAPI_Point2D(aSketchLineB.attribute("StartPoint")) aEndPoint = geomDataAPI_Point2D(aSketchLineB.attribute("EndPoint")) -aStartPoint.setValue(-20., 15.) +aStartPoint.setValue(-10., 15.) aEndPoint.setValue(80., 50.) aSession.finishOperation() +assert (model.dof(aSketchFeature) == 8) #========================================================================= # Make a constraint to keep the angle #========================================================================= ANGLE_DEGREE = 30. aSession.startOperation() aConstraint = aSketchFeature.addFeature("SketchConstraintAngle") -anAngleVal = aConstraint.real("ConstraintValue") +aConstraint.integer("AngleType").setValue(ANGLE_DIRECT) +anAngleVal = aConstraint.real("AngleValue") refattrA = aConstraint.refattr("ConstraintEntityA") refattrB = aConstraint.refattr("ConstraintEntityB") assert (not anAngleVal.isInitialized()) assert (not refattrA.isInitialized()) assert (not refattrB.isInitialized()) -anAngleVal.setValue(ANGLE_DEGREE) refattrA.setObject(aSketchLineA.firstResult()) refattrB.setObject(aSketchLineB.firstResult()) +anAngleVal.setValue(ANGLE_DEGREE) aConstraint.execute() aSession.finishOperation() +aSession.startOperation() +aFlyoutPoint = geomDataAPI_Point2D(aConstraint.attribute("ConstraintFlyoutValuePnt")) +aFlyoutPoint.setValue(50.0, 100.0) +aSession.finishOperation() +aSession.abortOperation() assert (anAngleVal.isInitialized()) assert (refattrA.isInitialized()) assert (refattrB.isInitialized()) assert (angle(aSketchLineA, aSketchLineB) == ANGLE_DEGREE) +assert (model.dof(aSketchFeature) == 7) #========================================================================= # Move line, check that angle is constant #========================================================================= aSession.startOperation() aStartPoint = geomDataAPI_Point2D(aSketchLineA.attribute("StartPoint")) -aStartPoint.setValue(0., 30.) +aStartPoint.setValue(0., -30.) aConstraint.execute() aSession.finishOperation() assert (angle(aSketchLineA, aSketchLineB) == ANGLE_DEGREE) +assert (model.dof(aSketchFeature) == 7) #========================================================================= # Change angle value and check the lines are moved #========================================================================= @@ -116,14 +148,33 @@ anAngleVal.setValue(NEW_ANGLE_DEGREE) aConstraint.execute() aSession.finishOperation() assert (angle(aSketchLineA, aSketchLineB) == NEW_ANGLE_DEGREE) +assert (model.dof(aSketchFeature) == 7) #========================================================================= -# TODO: improve test -# 1. remove constraint, move line's start point to -# check that constraint are not applied -# 2. check constrained distance between: -# * point and line -# * two lines +# Change angle type #========================================================================= +aSession.startOperation() +aConstraint.integer("AngleType").setValue(ANGLE_COMPLEMENTARY) +aSession.finishOperation() +assert (angle(aSketchLineA, aSketchLineB) == NEW_ANGLE_DEGREE) +aSession.startOperation() +aConstraint.integer("AngleType").setValue(ANGLE_BACKWARD) +aSession.finishOperation() +assert (angle(aSketchLineA, aSketchLineB) == NEW_ANGLE_DEGREE) +assert (model.dof(aSketchFeature) == 7) +#========================================================================= +# Remove constraint, move line's point to check the constraint is not applied +#========================================================================= +aSession.startOperation() +aDocument.removeFeature(aConstraint) +aSession.finishOperation() +assert (model.dof(aSketchFeature) == 8) +aSession.startOperation() +aStartPoint.setValue(-30., 0.) +aSession.finishOperation() +assert (angle(aSketchLineA, aSketchLineB) != NEW_ANGLE_DEGREE) +assert (model.dof(aSketchFeature) == 8) #========================================================================= # End of test #========================================================================= + +assert(model.checkPythonDump())