Tommaso Bianchi and Claude Opus 4.8
93e80bc407
CAD: datum axis and datum coordinate system
...
Adds CadFeatureType::Axis and ::CoordSys — reference geometry that produces
no solid, modelled on the existing Plane datum feature.
Axis construction methods (AxisType): TwoPoints, FaceNormal,
CylinderCenterline, PlaneIntersection, AlongEdge. The centreline case is the
useful one: it gives a real axis through an existing hole or boss.
Coordinate systems (CoordSysType): PointWorld and FaceAndDirection. The
latter Gram-Schmidts the picked references, so the stored frame is
orthonormal even when the user's X hint is not perpendicular to the face
normal; the third axis is derived by cross product rather than stored, so it
cannot drift out of sync.
Revolve and pattern are deliberately NOT rewired to consume these — this
commit adds the reference geometry only and changes no existing behaviour.
Serialization: all axis_*/coordsys_* fields appended at the very end of both
CadFeature::save and load, identical order, after mirror_keep_original.
SNAPORCA_CAD_RECIPE_VERSION stays 2; Axis and CoordSys are appended to the
end of CadFeatureType so existing type ordinals are unchanged. Golden fixture
regenerated with distinctive non-default literals and field-value assertions
for every new field; all pre-existing assertions pass unchanged.
Tests assert analytic values: two-point axis direction exactly +Z with unit
length, cylinder centreline collinear with Z and on the true axis, parallel
planes fail cleanly, and the Gram-Schmidt frame is orthonormal to 1e-9 with
X x Y == Z. Degenerate input (identical points) fails with a non-empty error
rather than producing NaNs.
MCP: `axis` and `coordsys` methods registered in describe_tools().
Ported from snaporca 242d4efecb. The golden fixture is copied rather than
regenerated because this fork cannot be compiled locally (Eigen 5.0.1 vs the
build image's 3.3); make_golden_doc_v1() is byte-identical across both forks,
so the two fixtures are provably the same blob.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01BVzKmX6Y1aEteit1HTXG4Q
2026-07-24 15:58:13 +02:00
..
2026-06-03 10:19:04 -03:00
2026-06-25 10:52:19 +08:00
2024-10-05 21:53:16 +03:00
2026-05-08 19:22:49 +08:00
2026-06-18 09:13:51 -03:00
2026-06-28 21:53:36 +02:00
2026-06-19 15:46:00 -03:00
2026-06-18 09:13:51 -03:00
2024-08-12 00:00:20 +08:00
2026-05-12 15:09:13 +08:00
2026-06-28 12:40:38 +02:00
2026-06-18 09:13:51 -03:00
2026-05-12 15:09:13 +08:00
2024-05-10 23:47:08 +08:00
2026-05-12 15:09:13 +08:00
2026-03-24 09:18:38 -07:00
2023-08-08 19:08:13 +08:00
2026-06-19 09:42:12 +08:00
2026-06-19 09:42:12 +08:00
2026-03-13 02:12:10 -07:00
2026-03-13 02:12:10 -07:00
2025-09-10 10:05:07 +08:00
2025-01-22 10:03:21 +08:00
2023-12-01 10:42:45 +00:00
2024-08-12 00:00:20 +08:00
2025-06-22 23:10:35 +08:00
2026-02-09 20:42:26 +01:00
2024-01-28 10:12:55 +00:00
2024-06-15 14:56:44 +08:00
2026-06-24 15:48:31 +08:00
2026-06-24 15:48:31 +08:00
2025-09-21 13:47:51 +08:00
2026-04-20 19:18:03 -03:00
2025-11-15 11:11:20 -05:00
2026-07-24 15:58:13 +02:00
2026-07-24 15:58:13 +02:00
2025-10-26 20:44:19 +08:00
2026-02-06 17:37:24 +08:00
2026-02-09 20:42:26 +01:00
2026-02-09 20:42:26 +01:00
2025-12-23 22:53:09 +02:00
2025-12-23 22:53:09 +02:00
2025-11-22 15:39:12 +08:00
2026-06-18 09:13:51 -03:00
2026-02-09 20:42:26 +01:00
2024-09-23 19:26:18 +08:00
2026-07-10 18:12:53 +02:00
2025-06-14 21:05:25 +08:00
2025-05-08 16:00:48 +08:00
2025-10-28 15:30:00 +08:00
2026-04-15 22:58:12 +08:00
2026-06-14 17:42:53 +08:00
2026-05-08 13:22:00 -03:00
2023-09-22 16:21:26 +08:00
2026-04-23 00:21:19 +08:00
2024-06-15 14:56:44 +08:00
2026-05-18 12:57:48 +08:00
2026-05-18 12:57:48 +08:00
2025-10-28 15:29:47 +08:00
2026-04-07 22:22:43 +08:00
2025-02-26 23:07:23 +08:00
2026-04-19 20:28:13 -03:00
2024-02-13 23:56:48 +08:00
2023-09-27 21:44:45 +08:00
2023-08-08 19:08:13 +08:00
2025-06-22 23:10:35 +08:00
2026-03-24 09:18:38 -07:00
2023-12-09 22:46:18 +08:00
2023-12-09 22:46:18 +08:00
2023-12-09 22:46:18 +08:00
2025-10-19 22:54:48 +08:00
2025-10-19 22:54:48 +08:00
2026-03-24 09:18:38 -07:00
2026-05-27 22:07:15 +08:00
2024-08-12 00:00:20 +08:00
2026-05-27 22:07:15 +08:00
2026-02-09 20:42:26 +01:00
2024-01-26 20:18:10 +08:00
2025-09-17 09:46:04 +08:00
2025-09-17 09:46:04 +08:00
2025-09-18 23:01:09 +08:00
2025-09-17 09:46:04 +08:00
2026-06-18 09:13:51 -03:00
2025-06-22 23:10:35 +08:00
2026-01-05 22:41:04 +00:00
2025-09-29 20:38:38 +08:00
2025-09-29 20:38:38 +08:00
2025-09-29 20:38:38 +08:00
2026-06-27 13:27:01 +01:00
2026-06-24 15:48:31 +08:00
2025-09-24 22:49:14 -04:00
2025-11-15 11:11:20 -05:00
2026-06-18 09:13:51 -03:00
2026-05-31 12:11:40 +08:00
2025-04-04 23:07:00 +08:00
2026-05-07 22:32:56 +08:00
2026-07-23 23:18:42 +02:00
2026-07-23 23:18:42 +02:00
2026-06-25 22:10:49 +08:00
2024-06-15 14:56:44 +08:00
2024-06-15 14:56:44 +08:00
2025-06-18 17:50:44 +08:00
2023-12-01 10:42:45 +00:00
2026-06-05 20:45:43 +08:00
2026-05-10 15:12:56 +08:00
2026-06-03 10:16:59 -03:00
2026-03-11 17:20:12 -07:00
2024-05-12 23:35:41 +08:00
2025-07-30 21:22:40 +08:00
2025-10-28 15:29:55 +08:00
2026-03-24 09:18:38 -07:00
2025-09-18 17:08:18 +08:00
2025-09-18 17:08:18 +08:00
2025-10-19 19:27:55 +08:00
2026-01-14 19:51:13 +08:00
2025-10-19 21:57:34 +08:00
2025-02-26 23:07:23 +08:00
2024-11-06 20:19:52 +08:00
2024-11-06 20:19:52 +08:00
2026-04-24 16:28:28 +08:00
2026-04-24 16:28:28 +08:00
2024-05-10 23:47:08 +08:00
2026-06-18 09:13:51 -03:00
2026-06-28 17:05:44 +02:00
2026-06-28 17:05:44 +02:00
2026-06-14 17:42:53 +08:00
2025-12-08 22:42:11 +08:00
2026-06-05 20:45:43 +08:00
2025-07-18 16:01:25 +08:00
2026-03-13 01:56:51 -07:00
2026-03-13 01:56:51 -07:00
2026-06-18 09:13:51 -03:00
2023-12-01 10:42:45 +00:00
2024-05-10 23:47:08 +08:00
2024-05-10 23:47:08 +08:00
2024-06-15 14:56:44 +08:00
2024-06-15 14:56:44 +08:00
2025-09-18 16:10:27 +08:00
2025-09-18 16:10:27 +08:00
2024-01-26 20:18:10 +08:00
2024-05-10 23:47:08 +08:00
2026-02-12 08:41:35 +08:00
2025-10-02 17:07:17 +08:00
2025-10-02 17:07:17 +08:00
2025-04-05 17:47:59 +08:00
2026-06-05 20:45:43 +08:00
2026-06-03 10:12:26 -03:00
2025-12-23 23:44:43 +08:00
2025-07-18 15:43:46 +08:00
2024-01-31 11:23:29 +00:00
2024-01-31 11:23:29 +00:00
2026-03-13 01:56:51 -07:00
2026-03-24 09:18:38 -07:00
2026-05-04 15:52:34 +08:00
2025-06-18 17:50:44 +08:00
2025-06-18 17:50:44 +08:00
2026-03-13 01:56:51 -07:00
2026-03-13 01:56:51 -07:00
2026-06-27 23:07:44 +08:00
2026-06-27 22:15:43 +08:00
2026-06-28 00:42:02 +08:00
2026-06-28 00:42:02 +08:00
2026-06-27 13:27:01 +01:00
2026-06-24 15:48:31 +08:00
2026-06-05 20:45:43 +08:00
2026-06-18 09:13:51 -03:00
2026-06-18 12:45:26 +08:00
2026-06-27 13:27:01 +01:00
2026-06-27 13:27:01 +01:00
2025-12-08 22:42:11 +08:00
2026-06-05 20:45:43 +08:00
2026-06-01 16:00:00 +08:00
2026-06-05 20:45:43 +08:00
2024-01-31 11:23:29 +00:00
2026-05-10 02:21:13 +08:00
2024-05-10 23:47:08 +08:00
2023-11-04 11:41:03 +08:00
2024-08-12 00:00:20 +08:00
2026-06-07 13:31:52 +08:00
2026-02-09 20:42:26 +01:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-06-18 12:45:26 +08:00
2026-06-18 12:45:26 +08:00
2026-06-18 09:13:51 -03:00
2024-08-12 00:00:20 +08:00
2026-05-10 15:12:56 +08:00
2026-05-10 15:12:56 +08:00
2025-10-19 19:27:55 +08:00
2025-02-12 22:10:57 +08:00
2023-09-29 23:39:12 +08:00
2023-09-29 23:39:12 +08:00
2024-06-15 14:56:44 +08:00
2024-01-31 11:23:29 +00:00
2026-06-19 09:42:12 +08:00
2024-06-15 14:56:44 +08:00
2023-08-08 19:08:13 +08:00
2026-05-21 16:24:54 +08:00
2026-06-28 12:40:38 +02:00
2026-06-28 12:40:38 +02:00
2026-01-29 19:19:37 +08:00
2026-01-23 17:05:56 +08:00
2024-06-15 14:56:44 +08:00
2026-04-23 10:34:36 -03:00
2025-12-08 22:42:11 +08:00
2025-12-08 22:42:11 +08:00
2026-05-12 15:09:13 +08:00
2026-02-12 08:42:01 +08:00
2026-05-04 20:33:13 +08:00
2025-02-08 11:34:40 +08:00
2026-05-10 12:35:31 +08:00
2026-05-10 12:35:31 +08:00
2024-08-12 00:00:20 +08:00
2024-08-12 00:00:20 +08:00
2024-05-10 23:47:08 +08:00
2024-08-12 00:00:20 +08:00
2024-06-15 14:56:44 +08:00
2026-06-06 23:44:39 +08:00
2026-06-06 23:44:39 +08:00
2026-02-09 20:42:26 +01:00
2023-07-07 17:29:08 +08:00