Skip to content

Epic 128 §1.2: Arc<T>, Frame3.FromAxes, mm/min Speed bridge - #6

Merged
Robakuuu merged 1 commit into
masterfrom
epic-128/drawing-primitives
Oct 25, 2026
Merged

Robakuuu merged 1 commit into
masterfrom
epic-128/drawing-primitives

Conversation

@Robakuuu

Copy link
Copy Markdown
Contributor

Additive geometry primitives for the independent ModelingEvolution.ToolPath module (DXF → neutral tool path), rebased onto the epic-129 quaternion Frame3 model.

What

  • Arc<T> — centre/radius/start + signed sweep (CCW+), with StartPoint/EndPoint/Mid/PointAt/TangentAt/Length. Maps 1:1 to a CAD ARC entity and to a 3-point circular robot move; a full circle is |Sweep| = 360°.
  • Frame3.FromAxes(origin, forward, approach) — basis-from-directions factory for tool placement (a torch approach axis + travel tangent). Re-orthogonalizes forward against approach and builds the orientation via the existing Quaternion.FromAxes. Complements the point-based Frame3.FromSurface. (The earlier Rotation3.FromAxes/Pose3.FromFrame drafts are dropped — that algebra now lives on Quaternion/Frame3 as of epic-129.)
  • MillimetrePerMinute<T> + SpeedInterop.ToLegacyMmPerMin() — bridge a unit-aware Speed<T,TUnit> to the legacy mm/min Speed<T>, so a mm/s value is not silently read as mm/min (a 60× error) at Trajectory3Builder.MoveTo.

Tests

Epic128PrimitivesTests (8) green locally: Frame3.FromAxes alignment / re-orthogonalization / 90°-about-Z / parallel + degenerate throws, Arc quarter-circle points & length, tangent sign, and the mm/s→mm/min bridge.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EMY9H3gjTE9ZPy87RDvCzJ

Additive geometry primitives the ModelingEvolution.ToolPath module (DXF →
neutral tool path) builds on, rebased onto the epic-129 quaternion Frame3 model:

- Arc<T>: centre/radius/start + signed sweep (CCW+), with StartPoint/EndPoint/
  Mid/PointAt/TangentAt/Length. Maps 1:1 to a CAD ARC and to a 3-point circular
  robot move; a full circle is |Sweep| = 360°.
- Frame3.FromAxes(origin, forward, approach): basis-from-directions factory for
  tool placement (approach axis + travel tangent), re-orthogonalizing forward
  against approach and building the orientation via Quaternion.FromAxes. The
  earlier Rotation3.FromAxes / Pose3.FromFrame drafts are dropped — that algebra
  now lives on Quaternion/Frame3 (epic-129).
- MillimetrePerMinute<T> + SpeedInterop.ToLegacyMmPerMin(): bridge a unit-aware
  Speed<T,TUnit> to the legacy mm/min Speed<T> so a mm/s value is not silently
  read as mm/min (a 60x error) at Trajectory3Builder.MoveTo.

Tests: Epic128PrimitivesTests (8) green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EMY9H3gjTE9ZPy87RDvCzJ
@Robakuuu
Robakuuu merged commit 6a3c5a8 into master Oct 25, 2026
5 checks passed
@Robakuuu
Robakuuu deleted the epic-128/drawing-primitives branch October 25, 2026 07:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant