freecad-cam/Mod/Draft/DraftGeomUtils.py
2026-02-01 01:59:24 +01:00

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)
## @}