diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index df1df9f181..5151a2af15 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -45,6 +45,7 @@ SET (Draft_geoutils draftgeoutils/circles.py draftgeoutils/circles_apollonius.py draftgeoutils/circle_inversion.py + draftgeoutils/circles_incomplete.py ) SET(Draft_tests diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index dbe0b908fe..35bdef6e82 100644 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -299,67 +299,13 @@ def getBoundaryAngles(angle, alist): return (lower,higher) -def circleFrom2tan1pt(tan1, tan2, point): - """circleFrom2tan1pt(edge, edge, Vector)""" - if (geomType(tan1) == "Line") and (geomType(tan2) == "Line") and isinstance(point, FreeCAD.Vector): - return circlefrom2Lines1Point(tan1, tan2, point) - elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Line") and isinstance(point, FreeCAD.Vector): - return circlefromCircleLinePoint(tan1, tan2, point) - elif (geomType(tan2) == "Circle") and (geomType(tan1) == "Line") and isinstance(point, FreeCAD.Vector): - return circlefromCircleLinePoint(tan2, tan1, point) - elif (geomType(tan2) == "Circle") and (geomType(tan1) == "Circle") and isinstance(point, FreeCAD.Vector): - return circlefrom2Circles1Point(tan2, tan1, point) - - -def circleFrom2tan1rad(tan1, tan2, rad): - """circleFrom2tan1rad(edge, edge, float)""" - if (geomType(tan1) == "Line") and (geomType(tan2) == "Line"): - return circleFrom2LinesRadius(tan1, tan2, rad) - elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Line"): - return circleFromCircleLineRadius(tan1, tan2, rad) - elif (geomType(tan1) == "Line") and (geomType(tan2) == "Circle"): - return circleFromCircleLineRadius(tan2, tan1, rad) - elif (geomType(tan1) == "Circle") and (geomType(tan2) == "Circle"): - return circleFrom2CirclesRadius(tan1, tan2, rad) - - -def circleFrom1tan2pt(tan1, p1, p2): - if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): - return circlefrom1Line2Points(tan1, p1, p2) - if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector) and isinstance(p2, FreeCAD.Vector): - return circlefrom1Circle2Points(tan1, p1, p2) - - -def circleFrom1tan1pt1rad(tan1, p1, rad): - if (geomType(tan1) == "Line") and isinstance(p1, FreeCAD.Vector): - return circleFromPointLineRadius(p1, tan1, rad) - if (geomType(tan1) == "Circle") and isinstance(p1, FreeCAD.Vector): - return circleFromPointCircleRadius(p1, tan1, rad) - - -def circleFrom3tan(tan1, tan2, tan3): - tan1IsLine = (geomType(tan1) == "Line") - tan2IsLine = (geomType(tan2) == "Line") - tan3IsLine = (geomType(tan3) == "Line") - tan1IsCircle = (geomType(tan1) == "Circle") - tan2IsCircle = (geomType(tan2) == "Circle") - tan3IsCircle = (geomType(tan3) == "Circle") - if tan1IsLine and tan2IsLine and tan3IsLine: - return circleFrom3LineTangents(tan1, tan2, tan3) - elif tan1IsCircle and tan2IsCircle and tan3IsCircle: - return circleFrom3CircleTangents(tan1, tan2, tan3) - elif (tan1IsCircle and tan2IsLine and tan3IsLine): - return circleFrom1Circle2Lines(tan1, tan2, tan3) - elif (tan1IsLine and tan2IsCircle and tan3IsLine): - return circleFrom1Circle2Lines(tan2, tan1, tan3) - elif (tan1IsLine and tan2IsLine and tan3IsCircle): - return circleFrom1Circle2Lines(tan3, tan1, tan2) - elif (tan1IsLine and tan2IsCircle and tan3IsCircle): - return circleFrom2Circle1Lines(tan2, tan3, tan1) - elif (tan1IsCircle and tan2IsLine and tan3IsCircle): - return circleFrom2Circle1Lines(tan1, tan3, tan2) - elif (tan1IsCircle and tan2IsCircle and tan3IsLine): - return circleFrom2Circle1Lines(tan1, tan2, tan3) +# These functions are not imported because they are incomplete; +# they require pre-requisite functions that haven't been written +# from draftgeoutils.circles_incomplete import circleFrom2tan1pt +# from draftgeoutils.circles_incomplete import circleFrom2tan1rad +# from draftgeoutils.circles_incomplete import circleFrom1tan2pt +# from draftgeoutils.circles_incomplete import circleFrom1tan1pt1rad +# from draftgeoutils.circles_incomplete import circleFrom3tan from draftgeoutils.circles import circlefrom2Lines1Point @@ -383,8 +329,6 @@ from draftgeoutils.circles import circleFrom2PointsRadius from draftgeoutils.arcs import arcFrom2Pts -#############################33 to include - from draftgeoutils.circles_apollonius import outerSoddyCircle diff --git a/src/Mod/Draft/draftgeoutils/circles_incomplete.py b/src/Mod/Draft/draftgeoutils/circles_incomplete.py new file mode 100644 index 0000000000..8ac63f224c --- /dev/null +++ b/src/Mod/Draft/draftgeoutils/circles_incomplete.py @@ -0,0 +1,218 @@ +# *************************************************************************** +# * Copyright (c) 2009, 2010 Yorik van Havre * +# * Copyright (c) 2009, 2010 Ken Cline * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * FreeCAD 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 Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with FreeCAD; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** +"""Provides various incomplete functions for creating circles. + +These functions cannot be used because they require that certain functions +to calculate shapes exist first. + +These functions are meant to create circles starting from three values, +either a tangent edge, a point, or a radius. Various combinations +are possible. + +- Two tangents and a point. +- Two tangents and a radius. +- A tangent and two points. +- A tangent, a point, and a radius. +- Three tangents. + +In this case, the word 'tangent' refers to either a straight line +or to a circular edge, so even more combinations are possible. + +- Two tangents and a point. + * Line, line, and point. + * Circle, line, and point. + * Line, circle, and point. + * Circle, circle, and point. + +And so on, with the other combinations. +""" +## @package circles_incomplete +# \ingroup DRAFTGEOUTILS +# \brief Provides various incomplete functions for creating circles. + +import FreeCAD + +from draftutils.messages import _wrn +from draftgeoutils.general import geomType +from draftgeoutils.circles import (circlefrom2Lines1Point, + circleFrom2LinesRadius, + circlefrom1Line2Points, + circleFromPointLineRadius, + circleFrom3LineTangents) +from draftgeoutils.circles_apollonius import circleFrom3CircleTangents + + +def circlefromCircleLinePoint(circle, line, point): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circlefrom2Circles1Point(circle1, circle2, point): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom2tan1pt(tan1, tan2, point): + """Circle from two tangents and one point. + + The tangents should be edges, and they may be either straight line edges + or circular edges, so four combinations are possible. + """ + if (geomType(tan1) == "Line" + and geomType(tan2) == "Line" + and isinstance(point, FreeCAD.Vector)): + return circlefrom2Lines1Point(tan1, tan2, point) + + elif (geomType(tan1) == "Circle" + and geomType(tan2) == "Line" + and isinstance(point, FreeCAD.Vector)): + return circlefromCircleLinePoint(tan1, tan2, point) + + elif (geomType(tan2) == "Circle" + and geomType(tan1) == "Line" + and isinstance(point, FreeCAD.Vector)): + return circlefromCircleLinePoint(tan2, tan1, point) + + elif (geomType(tan2) == "Circle" + and geomType(tan1) == "Circle" + and isinstance(point, FreeCAD.Vector)): + return circlefrom2Circles1Point(tan2, tan1, point) + + +def circleFromCircleLineRadius(circle, line, radius): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom2CirclesRadius(circle1, circle2, radius): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom2tan1rad(tan1, tan2, rad): + """Circle from two tangents and one radius. + + The tangents should be edges, and they may be either straight line edges + or circular edges, so four combinations are possible. + """ + if geomType(tan1) == "Line" and geomType(tan2) == "Line": + return circleFrom2LinesRadius(tan1, tan2, rad) + + elif geomType(tan1) == "Circle" and geomType(tan2) == "Line": + return circleFromCircleLineRadius(tan1, tan2, rad) + + elif geomType(tan1) == "Line" and geomType(tan2) == "Circle": + return circleFromCircleLineRadius(tan2, tan1, rad) + + elif geomType(tan1) == "Circle" and geomType(tan2) == "Circle": + return circleFrom2CirclesRadius(tan1, tan2, rad) + + +def circlefrom1Circle2Points(circle, point1, point2): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom1tan2pt(tan1, p1, p2): + """Circle from one tangent and two points. + + The tangents should be edges, and they may be either straight line edges + or circular edges, so two combinations are possible. + """ + if (geomType(tan1) == "Line" + and isinstance(p1, FreeCAD.Vector) + and isinstance(p2, FreeCAD.Vector)): + return circlefrom1Line2Points(tan1, p1, p2) + + elif (geomType(tan1) == "Circle" + and isinstance(p1, FreeCAD.Vector) + and isinstance(p2, FreeCAD.Vector)): + return circlefrom1Circle2Points(tan1, p1, p2) + + +def circleFromPointCircleRadius(point, circle, radius): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom1tan1pt1rad(tan1, p1, rad): + """Circle from one tangent, one point, and radius. + + The tangents should be edges, and they may be either straight line edges + or circular edges, so two combinations are possible. + """ + if geomType(tan1) == "Line" and isinstance(p1, FreeCAD.Vector): + return circleFromPointLineRadius(p1, tan1, rad) + + elif geomType(tan1) == "Circle" and isinstance(p1, FreeCAD.Vector): + return circleFromPointCircleRadius(p1, tan1, rad) + + +def circleFrom1Circle2Lines(circle, line1, line2): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom2Circle1Lines(circle1, circle2, line): + """Do nothing. Placeholder function. Needs to be implemented.""" + _wrn("Placeholder function, does nothing.") + + +def circleFrom3tan(tan1, tan2, tan3): + """Circle from three tangents. + + The tangents should be edges, and they may be either straight line edges + or circular edges, so eight combinations are possible. + """ + tan1IsLine = (geomType(tan1) == "Line") + tan2IsLine = (geomType(tan2) == "Line") + tan3IsLine = (geomType(tan3) == "Line") + + tan1IsCircle = (geomType(tan1) == "Circle") + tan2IsCircle = (geomType(tan2) == "Circle") + tan3IsCircle = (geomType(tan3) == "Circle") + + if tan1IsLine and tan2IsLine and tan3IsLine: + return circleFrom3LineTangents(tan1, tan2, tan3) + + elif tan1IsCircle and tan2IsCircle and tan3IsCircle: + return circleFrom3CircleTangents(tan1, tan2, tan3) + + elif tan1IsCircle and tan2IsLine and tan3IsLine: + return circleFrom1Circle2Lines(tan1, tan2, tan3) + + elif tan1IsLine and tan2IsCircle and tan3IsLine: + return circleFrom1Circle2Lines(tan2, tan1, tan3) + + elif tan1IsLine and tan2IsLine and tan3IsCircle: + return circleFrom1Circle2Lines(tan3, tan1, tan2) + + elif tan1IsLine and tan2IsCircle and tan3IsCircle: + return circleFrom2Circle1Lines(tan2, tan3, tan1) + + elif tan1IsCircle and tan2IsLine and tan3IsCircle: + return circleFrom2Circle1Lines(tan1, tan3, tan2) + + elif tan1IsCircle and tan2IsCircle and tan3IsLine: + return circleFrom2Circle1Lines(tan1, tan2, tan3)