178 lines
8.1 KiB
Python
178 lines
8.1 KiB
Python
# ***************************************************************************
|
|
# * Copyright (c) 2009, 2010 Yorik van Havre <yorik@uncreated.net> *
|
|
# * Copyright (c) 2009, 2010 Ken Cline <cline@frii.com> *
|
|
# * *
|
|
# * 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. *
|
|
# * *
|
|
# * This program 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 this program; if not, write to the Free Software *
|
|
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
|
# * USA *
|
|
# * *
|
|
# ***************************************************************************
|
|
"""Define geometry functions for manipulating shapes in the Draft Workbench.
|
|
|
|
These functions are used by different object creation functions
|
|
of the Draft Workbench, both in `Draft.py` and `DraftTools.py`.
|
|
They operate on the internal shapes (`Part::TopoShape`) of different objects
|
|
and on their subelements, that is, vertices, edges, and faces.
|
|
"""
|
|
## \defgroup DRAFTGEOMUTILS DraftGeomUtils
|
|
# \ingroup UTILITIES
|
|
# \brief Shape manipulation utilities for the Draft workbench
|
|
#
|
|
# Shapes manipulation utilities
|
|
|
|
## \addtogroup DRAFTGEOMUTILS
|
|
# @{
|
|
|
|
__title__ = "FreeCAD Draft Workbench - Geometry library"
|
|
__author__ = "Yorik van Havre, Jacques-Antoine Gaudin, Ken Cline"
|
|
__url__ = ["https://www.freecad.org"]
|
|
|
|
# Doesn't need requisites
|
|
from draftgeoutils.linear_algebra import (linearFromPoints,
|
|
determinant)
|
|
|
|
# Needs math, Part, and vector tools
|
|
from draftgeoutils.general import NORM
|
|
|
|
from draftgeoutils.general import (precision,
|
|
vec,
|
|
edg,
|
|
getVerts,
|
|
v1,
|
|
isNull,
|
|
isPtOnEdge,
|
|
hasCurves,
|
|
isAligned,
|
|
getQuad,
|
|
areColinear,
|
|
hasOnlyWires,
|
|
geomType,
|
|
isValidPath,
|
|
findClosest,
|
|
getBoundaryAngles)
|
|
|
|
# Needs general functions
|
|
from draftgeoutils.geometry import (findPerpendicular,
|
|
findDistance,
|
|
getSplineNormal,
|
|
get_spline_normal,
|
|
getNormal,
|
|
get_normal,
|
|
get_shape_normal,
|
|
getRotation,
|
|
isPlanar,
|
|
is_planar,
|
|
calculatePlacement,
|
|
mirror,
|
|
are_coplanar,
|
|
is_straight_line,
|
|
mirror_matrix,
|
|
uv_vectors_from_face,
|
|
placement_from_face,
|
|
placement_from_points,
|
|
distance_to_plane,
|
|
project_point_on_plane)
|
|
|
|
from draftgeoutils.edges import (findEdge,
|
|
orientEdge,
|
|
isSameLine,
|
|
isLine,
|
|
is_line,
|
|
invert,
|
|
findMidpoint,
|
|
getTangent,
|
|
get_referenced_edges)
|
|
|
|
from draftgeoutils.faces import (concatenate,
|
|
getBoundary,
|
|
isCoplanar,
|
|
is_coplanar,
|
|
bind,
|
|
cleanFaces,
|
|
removeSplitter)
|
|
|
|
from draftgeoutils.arcs import (isClockwise,
|
|
isWideAngle,
|
|
arcFrom2Pts,
|
|
arcFromSpline)
|
|
|
|
from draftgeoutils.cuboids import (isCubic,
|
|
getCubicDimensions)
|
|
|
|
# Needs geometry functions
|
|
from draftgeoutils.circle_inversion import (pointInversion,
|
|
polarInversion,
|
|
circleInversion)
|
|
|
|
# Needs edges functions
|
|
from draftgeoutils.sort_edges import (sortEdges,
|
|
sortEdgesOld)
|
|
|
|
from draftgeoutils.intersections import (findIntersection,
|
|
wiresIntersect,
|
|
connect,
|
|
angleBisection)
|
|
|
|
from draftgeoutils.wires import (findWires,
|
|
findWiresOld,
|
|
findWiresOld2,
|
|
flattenWire,
|
|
superWire,
|
|
isReallyClosed,
|
|
curvetowire,
|
|
curvetosegment,
|
|
rebaseWire,
|
|
removeInterVertices,
|
|
cleanProjection,
|
|
tessellateProjection,
|
|
get_placement_perpendicular_to_wire,
|
|
get_extended_wire)
|
|
|
|
# Needs wires functions
|
|
from draftgeoutils.fillets import (fillet,
|
|
filletWire)
|
|
|
|
# Needs intersections functions
|
|
from draftgeoutils.offsets import (pocket2d,
|
|
offset,
|
|
offsetWire)
|
|
|
|
from draftgeoutils.circles import (findClosestCircle,
|
|
getCircleFromSpline,
|
|
circlefrom1Line2Points,
|
|
circlefrom2Lines1Point,
|
|
circleFrom2LinesRadius,
|
|
circleFrom3LineTangents,
|
|
circleFromPointLineRadius,
|
|
circleFrom2PointsRadius,
|
|
findHomotheticCenterOfCircles,
|
|
findRadicalAxis,
|
|
findRadicalCenter)
|
|
|
|
from draftgeoutils.circles_apollonius import (outerSoddyCircle,
|
|
innerSoddyCircle,
|
|
circleFrom3CircleTangents)
|
|
|
|
# Needs circles_apollonius functions
|
|
# 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,
|
|
# circleFrom2tan1rad,
|
|
# circleFrom1tan2pt,
|
|
# circleFrom1tan1pt1rad,
|
|
# circleFrom3tan)
|
|
|
|
## @}
|