X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPythonAPI%2Fmodel%2Fsketcher%2Ftools.py;h=dd5e51e15f76bc085ce5dea6074eae4f85d34cc8;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=3603f20061b35215c312877b8a5b94ec66671af3;hpb=1655cad439fcef1f104340306aaed349d5b197ef;p=modules%2Fshaper.git diff --git a/src/PythonAPI/model/sketcher/tools.py b/src/PythonAPI/model/sketcher/tools.py index 3603f2006..dd5e51e15 100644 --- a/src/PythonAPI/model/sketcher/tools.py +++ b/src/PythonAPI/model/sketcher/tools.py @@ -1,7 +1,27 @@ -# Author: Sergey Pokhodenko -# Copyright (C) 2014-20xx CEA/DEN, EDF R&D +# Copyright (C) 2014-2023 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 +# import ModelHighAPI +from GeomAPI import * +from GeomDataAPI import * +from ModelAPI import * +import math def addPolyline(sketch, *coords): """Add a poly-line to sketch. @@ -48,4 +68,53 @@ def dof(sketch): aSketch = sketch if issubclass(type(aSketch), ModelHighAPI.ModelHighAPI_Interface): aSketch = sketch.feature() - return int(filter(str.isdigit, aSketch.string("SolverDOF").value())) \ No newline at end of file + return int(''.join(filter(str.isdigit, aSketch.string("SolverDOF").value()))) + +def distancePointPoint(thePoint1, thePoint2): + aPnt1 = toList(thePoint1) + aPnt2 = toList(thePoint2) + return math.hypot(aPnt1[0] - aPnt2[0], aPnt1[1] - aPnt2[1]) + +def signedDistancePointLine(thePoint, theLine): + aPoint = toList(thePoint) + aLine = toSketchFeature(theLine) + + aLineStart = geomDataAPI_Point2D(aLine.attribute("StartPoint")).pnt().xy() + aLineEnd = geomDataAPI_Point2D(aLine.attribute("EndPoint")).pnt().xy() + aLineDir = aLineEnd.decreased(aLineStart) + aLineLen = aLineEnd.distance(aLineStart) + aCross = (aPoint[0] - aLineStart.x()) * aLineDir.y() - (aPoint[1] - aLineStart.y()) * aLineDir.x() + return aCross / aLineLen + +def distancePointLine(thePoint, theLine): + return math.fabs(signedDistancePointLine(thePoint, theLine)) + +def lastSubFeature(theSketch, theKind): + """ + obtains last feature of given kind from the sketch + """ + aSketch = featureToCompositeFeature(toSketchFeature(theSketch)) + for anIndex in range(aSketch.numberOfSubs() - 1, -1, -1): + aSub = aSketch.subFeature(anIndex) + if (aSub.getKind() == theKind): + return aSub + +def toSketchFeature(theEntity): + """ Converts entity to sketch feature if possible + """ + if issubclass(type(theEntity), ModelHighAPI.ModelHighAPI_Interface): + return theEntity.feature() + else: + return theEntity + +def toList(thePoint): + if issubclass(type(thePoint), list): + return thePoint + elif issubclass(type(thePoint), GeomDataAPI_Point2D): + return [thePoint.x(), thePoint.y()] + elif issubclass(type(thePoint), GeomAPI_Pnt2d): + return [thePoint.x(), thePoint.y()] + else: + aFeature = toSketchFeature(thePoint) + aPoint = geomDataAPI_Point2D(aFeature.attribute("PointCoordinates")) + return [aPoint.x(), aPoint.y()]