增加了thread几何基础操作
This commit is contained in:
@@ -7,7 +7,8 @@ from typing import Any, Iterable
|
||||
|
||||
from build123d import Axis, Compound, Edge, Face, Helix, Location, Plane, ShapeList, Solid, Vector, Wire, export_step
|
||||
|
||||
from .runtime_types import AxisSpec, HoleSpec, PlaneSpec, TopologyRecord, Vector3, canonical_plane_signature
|
||||
from .parametric_thread import build_thread_solid
|
||||
from .runtime_types import AxisSpec, HoleSpec, PlaneSpec, ThreadSpec, TopologyRecord, Vector3, canonical_plane_signature
|
||||
|
||||
|
||||
def _vector(value: list[float] | tuple[float, float, float]) -> Vector:
|
||||
@@ -354,6 +355,26 @@ class Build123dGeometryAdapter:
|
||||
raise ValueError("hole has no positions")
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def thread_solid(spec: ThreadSpec) -> Any:
|
||||
"""Build a threaded solid segment anchored on ``spec.axis``.
|
||||
|
||||
The parametric generator constructs the thread in a local +Z frame
|
||||
spanning ``[0, length_mm]``. This gate rotates that frame so the
|
||||
thread axis lands on ``spec.axis.direction`` with
|
||||
``spec.axis.origin_mm`` at the leading end face, keeping placement in
|
||||
the adapter and geometry construction in ``parametric_thread.py``.
|
||||
"""
|
||||
solid = build_thread_solid(spec)
|
||||
direction = _vector(spec.axis.direction)
|
||||
if abs(direction.X) <= 1e-9 and abs(direction.Y) <= 1e-9:
|
||||
# 轴沿 ±Z:X 方向任意即可,螺纹起始相位绕轴无意义。
|
||||
frame_x = Vector(1.0, 0.0, 0.0)
|
||||
else:
|
||||
frame_x = Vector(0.0, 0.0, 1.0).cross(direction).normalized()
|
||||
plane = Plane(origin=_vector(spec.axis.origin_mm), x_dir=frame_x, z_dir=direction)
|
||||
return solid.moved(Location(plane))
|
||||
|
||||
@staticmethod
|
||||
def fillet(body: Any, radius_mm: float, edges: Iterable[Edge]) -> Any:
|
||||
# 对指定边以给定半径做圆角。
|
||||
|
||||
Reference in New Issue
Block a user