Clifford Garwood and Claude Opus 5
1e608fe24c
Have the preview consume the shared zone layout instead of rebuilding it
...
Closes review comment 17.
GCodeViewer had its own copy of the flip_x/flip_y corner mapping, the active
column/row sets, the physical-to-zone index mapping and the zone pitch -- the same
derivation as the plate's, with nothing keeping the two in step. It now calls
compute_imex_zone_layout() and consumes head_zone_centers. The mirror is expressed
as a reflection about the midpoint of the two zone centres rather than about a
zone-relative strip width, which is algebraically identical for equal-sized zones
and needs no pitch, and the toolhead-box face is chosen by comparing zone centres
instead of physical columns.
The July report of a math error in the visualizer for non-primary heads was this
drift: the sec_box_offset_y else-branch hardcoded -imex_box_wy, which happened to
equal the primary's offset on the rear-* layouts and pointed the wrong way on the
front-* ones. Structurally unreachable now.
Verifying the two sides matched turned up two config defaults that disagreed, both
fixed in their own commits: imex_nozzle_clearance_x/y (the viewer's 30.0f matched
PrintConfig, the zone code's 0.0 did not, and the strip loops are gated on it) and
imex_tools_per_gantry (the library's 2 matched, both GUI paths used 1).
Consuming the shared function meant resolving it per frame, and the sequential-view
marker flag is sticky, so one drag of the slider made every subsequent frame parse
five strings and allocate a dozen containers from inputs that never change. The
resolve now sits behind a cache key mirroring PartPlate::build_imex_cache_key(),
plus the two inputs only the preview reads -- the bed extents and the tool layout.
An idle frame compares scalars and allocates nothing. The toolhead-box mesh, which
was being re-uploaded to the GPU every frame for the same reason, is rebuilt only
when the clearances change.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-09-03 00:56:55 -04:00
..
2026-08-26 07:38:52 -03:00
2026-08-26 07:38:52 -03:00
2026-08-25 22:10:49 +08:00
2026-08-14 16:00:26 -04:00
2026-07-22 16:30:43 -03:00
2026-08-29 22:44:08 +08:00
2026-08-29 22:44:08 +08:00
2026-03-05 11:33:07 -03:00
2025-05-05 17:59:00 +08:00
2026-04-13 19:45:39 +08:00
2025-10-28 15:29:50 +08:00
2026-08-23 22:11:48 +08:00
2026-07-09 01:16:26 +08:00
2026-07-11 20:24:03 +03:00
2026-07-17 19:32:44 +08:00
2026-07-16 13:08:48 +08:00
2026-07-24 09:41:24 -03:00
2026-07-17 05:06:09 +08:00
2026-07-24 09:41:24 -03:00
2026-07-18 01:46:23 +08:00
2026-07-18 01:46:10 +08:00
2026-08-11 14:51:25 +08:00
2026-07-18 01:46:23 +08:00
2026-07-17 13:20:41 +08:00
2026-07-17 06:48:15 +08:00
2025-10-28 15:29:47 +08:00
2026-07-29 19:37:17 +08:00
2025-06-01 18:35:48 +08:00
2026-03-25 11:28:00 +08:00
2026-08-30 11:19:06 +08:00
2026-08-13 09:12:22 +08:00
2026-07-15 17:18:46 +08:00
2026-06-18 12:45:26 +08:00
2026-07-11 20:24:03 +03:00
2025-09-18 17:04:10 +08:00
2026-03-24 20:50:44 +08:00
2025-10-05 16:02:17 +08:00
2025-09-16 20:11:02 +08:00
2025-12-18 12:14:56 +00:00
2025-10-28 15:29:51 +08:00
2026-06-11 02:47:33 +08:00
2026-04-20 19:27:38 -03:00
2026-06-18 09:13:51 -03:00
2025-05-16 23:49:07 +08:00
2026-07-28 14:32:55 +08:00
2026-01-03 23:06:57 +08:00
2026-04-13 19:45:39 +08:00
2025-08-24 23:18:04 +08:00
2026-03-25 11:26:32 +08:00
2026-03-25 11:26:32 +08:00
2026-07-11 20:24:03 +03:00
2026-07-27 20:11:44 -03:00
2026-07-27 20:11:44 -03:00
2026-07-28 14:32:55 +08:00
2025-10-28 15:30:00 +08:00
2026-07-29 19:37:17 +08:00
2025-05-26 17:41:58 +08:00
2026-06-18 09:13:51 -03:00
2025-10-28 15:29:59 +08:00
2026-06-18 09:13:51 -03:00
2025-09-17 14:17:13 +08:00
2026-06-18 09:13:51 -03:00
2026-01-03 23:06:57 +08:00
2026-08-26 19:14:30 -03:00
2026-05-16 19:13:40 +08:00
2026-07-09 01:16:26 +08:00
2026-08-25 08:18:48 -03:00
2026-06-18 09:13:51 -03:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-09 01:16:26 +08:00
2026-04-13 19:45:39 +08:00
2025-09-09 09:39:43 +08:00
2026-07-17 06:48:15 +08:00
2025-03-27 21:56:09 +08:00
2025-03-27 21:56:09 +08:00
2025-11-08 20:44:37 +08:00
2025-09-09 15:40:26 +08:00
2026-07-28 14:32:55 +08:00
2025-07-06 11:34:47 +08:00
2026-08-25 00:04:14 +03:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:43:41 +08:00
2026-08-07 13:31:04 -03:00
2026-08-21 16:56:52 +08:00
2026-08-21 16:56:52 +08:00
2026-08-12 18:50:49 +08:00
2025-10-02 17:07:21 +08:00
2026-06-07 13:12:51 +08:00
2026-05-19 20:03:54 +00:00
2026-08-21 16:56:52 +08:00
2025-09-18 17:13:09 +08:00
2026-06-18 09:13:51 -03:00
2026-05-19 17:13:07 +08:00
2026-05-19 17:13:07 +08:00
2026-06-18 09:13:51 -03:00
2026-04-13 17:21:05 +08:00
2026-07-18 01:46:10 +08:00
2026-07-18 03:15:11 +08:00
2026-08-14 15:12:18 +08:00
2026-08-12 18:50:49 +08:00
2026-07-28 19:17:05 +08:00
2025-03-29 20:14:10 +08:00
2026-08-24 15:37:47 -03:00
2025-07-17 15:26:55 +08:00
2025-07-17 15:26:55 +08:00
2026-07-11 16:37:50 +08:00
2026-07-11 16:37:50 +08:00
2026-01-09 21:25:48 +08:00
2025-06-04 09:30:36 +08:00
2025-09-30 14:31:54 +08:00
2025-10-01 15:47:44 +08:00
2026-07-05 10:39:25 +08:00
2026-07-05 10:39:25 +08:00
2026-05-19 01:01:53 +08:00
2026-05-17 02:29:39 -05:00
2026-07-28 14:32:55 +08:00
2025-12-18 12:14:56 +00:00
2026-08-06 06:16:28 +08:00
2026-08-25 08:18:48 -03:00
2026-08-23 22:43:41 +08:00
2026-08-23 22:43:41 +08:00
2026-07-09 18:57:05 +08:00
2026-07-09 18:57:05 +08:00
2026-07-11 16:37:50 +08:00
2026-07-11 16:37:50 +08:00
2026-07-24 09:41:24 -03:00
2026-07-11 16:37:50 +08:00
2026-07-28 14:32:55 +08:00
2025-12-18 12:14:56 +00:00
2026-07-08 20:24:55 +08:00
2025-04-20 16:09:31 +08:00
2026-09-03 00:56:55 -04:00
2026-09-03 00:56:55 -04:00
2026-08-25 13:07:26 -04:00
2026-08-25 13:07:26 -04:00
2026-07-12 13:30:55 -03:00
2026-02-10 13:08:22 +08:00
2026-04-13 19:45:39 +08:00
2026-04-13 19:45:39 +08:00
2026-07-12 21:44:30 -03:00
2026-05-19 01:38:37 +08:00
2025-10-31 16:53:08 +08:00
2026-08-25 00:47:25 +08:00
2026-08-23 22:11:49 +08:00
2026-08-26 19:06:33 +08:00
2026-08-04 18:12:19 +08:00
2026-08-24 22:02:47 +03:00
2026-04-24 16:28:28 +08:00
2025-04-04 23:07:00 +08:00
2026-06-18 09:13:51 -03:00
2025-09-24 22:49:14 -04:00
2025-11-17 10:29:44 +08:00
2025-08-22 20:02:26 +08:00
2026-08-23 22:43:41 +08:00
2026-05-17 02:29:39 -05:00
2026-08-07 13:31:04 -03:00
2026-08-07 13:31:04 -03:00
2026-06-30 08:55:09 +08:00
2026-06-30 08:55:09 +08:00
2026-08-07 13:31:04 -03:00
2026-08-07 13:31:04 -03:00
2025-11-15 11:11:20 -05:00
2025-09-24 22:49:14 -04:00
2026-08-01 11:28:07 +08:00
2026-08-26 07:38:52 -03:00
2025-06-14 09:52:33 +08:00
2026-08-24 15:37:47 -03:00
2026-08-04 22:01:45 +08:00
2025-09-07 23:58:51 +08:00
2025-09-07 23:58:51 +08:00
2026-06-18 09:13:51 -03:00
2026-08-18 19:00:53 +08:00
2026-08-18 19:00:53 +08:00
2026-07-19 20:16:17 +08:00
2025-10-02 09:30:48 +08:00
2026-05-01 18:01:29 +08:00
2026-05-01 18:01:29 +08:00
2026-07-24 09:41:24 -03:00
2026-04-13 19:45:39 +08:00
2026-08-28 08:05:59 -03:00
2025-11-17 15:30:35 +00:00
2026-07-24 09:41:24 -03:00
2026-04-21 14:56:22 -04:00
2026-04-21 22:51:31 -04:00
2026-09-03 00:56:26 -04:00
2026-09-03 00:56:26 -04:00
2026-08-29 14:48:05 -03:00
2026-08-23 22:11:49 +08:00
2026-08-05 21:41:04 +08:00
2026-05-15 00:46:05 +08:00
2026-07-16 11:02:55 +08:00
2026-07-16 11:02:55 +08:00
2026-05-15 00:57:52 +08:00
2026-07-24 09:41:24 -03:00
2026-04-13 19:45:39 +08:00
2026-04-13 19:45:39 +08:00
2026-08-25 13:07:26 -04:00
2026-08-19 14:08:19 +08:00
2026-07-24 09:41:24 -03:00
2025-10-02 09:30:48 +08:00
2026-08-13 16:34:42 +08:00
2026-08-14 22:30:14 +08:00
2026-04-13 19:45:39 +08:00
2026-08-25 00:04:14 +03:00
2026-08-25 00:47:25 +08:00
2025-10-28 15:29:56 +08:00
2026-08-19 01:37:23 +08:00
2026-07-17 08:30:22 +08:00
2025-10-28 15:29:56 +08:00
2026-08-14 21:52:31 +08:00
2026-07-15 15:06:17 +08:00
2026-08-04 22:01:45 +08:00
2026-08-04 22:01:45 +08:00
2026-05-18 19:46:47 +08:00
2026-05-18 19:46:47 +08:00
2026-02-27 11:19:22 -03:00
2025-08-24 23:18:24 +08:00
2026-02-04 11:40:02 +00:00
2025-09-21 23:01:08 +08:00
2026-07-29 19:37:17 +08:00
2025-10-02 09:30:48 +08:00
2025-09-25 20:33:50 +08:00
2026-02-04 11:40:02 +00:00
2026-07-28 14:32:55 +08:00
2026-07-21 01:21:40 +03:00
2026-07-28 14:32:55 +08:00
2026-08-19 14:08:19 +08:00
2026-08-19 14:08:19 +08:00
2026-07-28 19:17:05 +08:00
2026-08-23 22:11:49 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-06-21 18:20:58 +08:00
2026-06-21 18:20:58 +08:00
2026-06-18 09:13:51 -03:00
2026-04-15 22:36:25 +08:00
2026-07-25 19:19:07 -03:00
2026-05-21 09:04:27 +08:00
2026-07-16 11:02:55 +08:00
2026-03-24 20:39:45 +08:00
2026-08-04 18:12:19 +08:00
2026-08-02 10:54:16 +08:00
2026-05-10 15:14:35 +08:00
2026-06-14 18:55:40 +08:00
2026-04-25 18:14:51 +08:00
2026-09-03 00:56:26 -04:00
2026-09-03 00:56:26 -04:00
2025-09-26 10:55:19 +08:00
2026-07-28 14:32:55 +08:00
2026-05-21 13:18:52 +03:00
2026-08-04 18:12:20 +08:00
2026-08-04 18:12:19 +08:00
2026-08-30 23:58:48 -04:00
2026-08-25 13:07:26 -04:00
2026-08-25 00:47:25 +08:00
2026-08-23 22:11:48 +08:00
2026-07-02 17:49:36 +08:00
2026-07-15 20:12:51 +08:00
2026-07-04 22:14:55 +08:00
2026-07-04 22:14:55 +08:00
2026-07-17 16:09:19 +08:00
2026-07-17 16:09:19 +08:00
2026-07-31 14:15:51 +08:00
2026-07-31 14:15:51 +08:00
2026-07-06 18:14:26 +08:00
2026-07-31 14:15:22 +08:00
2026-07-06 12:31:34 +08:00
2026-07-28 19:17:26 +08:00
2026-07-17 21:12:55 +08:00
2026-07-17 16:09:19 +08:00
2026-07-10 19:57:35 +08:00
2026-08-25 08:18:48 -03:00
2026-07-29 16:27:15 -03:00
2026-07-22 19:09:57 -03:00
2026-07-22 19:09:57 -03:00
2026-07-05 10:39:25 +08:00
2026-07-05 10:39:25 +08:00
2026-08-06 06:16:28 +08:00
2026-06-24 00:36:42 -03:00
2026-06-05 20:45:43 +08:00
2026-07-13 12:19:33 -03:00
2026-07-22 15:14:49 -03:00
2026-05-16 15:22:31 +08:00
2026-05-28 19:45:03 +08:00
2026-05-16 15:22:31 +08:00
2026-07-24 09:41:24 -03:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-16 19:28:50 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-07-02 17:49:36 +08:00
2026-07-02 17:49:36 +08:00
2026-08-06 06:08:02 +08:00
2026-08-06 06:08:02 +08:00
2026-07-28 14:32:55 +08:00
2026-07-10 15:41:57 +08:00
2026-07-10 15:41:57 +08:00
2025-11-17 10:29:44 +08:00
2025-07-13 20:10:42 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-08-12 18:50:49 +08:00
2026-02-11 16:00:04 +08:00
2026-03-03 17:36:42 -03:00
2025-10-28 15:29:54 +08:00
2026-08-09 02:08:54 +03:00
2026-08-06 22:58:39 +08:00
2025-10-14 08:56:18 +08:00
2025-10-14 08:56:18 +08:00
2026-08-27 08:06:50 -03:00
2026-08-27 08:06:50 -03:00
2026-08-06 15:48:40 +08:00
2026-06-18 09:13:51 -03:00
2026-08-28 08:05:59 -03:00
2026-08-25 08:18:48 -03:00
2026-08-12 18:50:49 +08:00
2026-01-03 23:06:57 +08:00
2026-06-18 09:13:51 -03:00
2026-01-23 17:05:56 +08:00
2026-04-13 19:45:39 +08:00
2026-08-28 08:05:59 -03:00
2026-08-25 08:18:48 -03:00
2025-06-14 10:27:10 +08:00
2025-06-14 10:27:10 +08:00
2026-04-13 19:45:39 +08:00
2025-09-26 14:35:06 +08:00
2025-08-24 23:18:24 +08:00
2026-06-18 09:13:51 -03:00
2026-07-17 22:37:56 +08:00
2026-07-17 22:37:56 +08:00
2026-08-13 09:12:21 +08:00
2026-08-13 09:12:21 +08:00
2026-07-28 14:32:55 +08:00
2026-07-03 17:19:24 -03:00
2025-02-26 23:07:23 +08:00
2026-08-23 22:43:41 +08:00
2026-08-25 08:18:48 -03:00
2026-08-24 15:37:47 -03:00
2026-09-03 00:56:55 -04:00
2026-08-25 13:07:26 -04:00
2026-02-04 11:40:02 +00:00
2026-08-26 07:38:52 -03:00
2026-03-25 15:58:39 +08:00
2026-08-25 08:18:48 -03:00
2026-01-23 17:05:56 +08:00
2026-01-23 17:05:56 +08:00
2026-07-02 17:49:36 +08:00
2026-07-02 17:49:36 +08:00
2026-04-13 19:45:39 +08:00
2026-08-25 00:47:25 +08:00
2026-08-25 00:47:25 +08:00
2025-10-28 15:30:06 +08:00
2025-10-28 15:30:06 +08:00
2026-07-28 14:32:55 +08:00
2026-07-28 14:32:55 +08:00
2026-07-28 14:32:55 +08:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-19 20:16:17 +08:00
2026-07-17 09:41:01 +08:00
2026-05-01 18:01:29 +08:00
2025-10-28 15:29:56 +08:00
2026-08-21 16:56:52 +08:00
2026-08-21 16:56:52 +08:00
2026-07-13 12:19:33 -03:00
2026-05-01 18:01:29 +08:00
2026-07-24 09:41:24 -03:00
2026-05-01 18:01:29 +08:00
2026-08-23 22:43:41 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:49 +08:00
2026-08-23 22:11:49 +08:00
2026-03-24 20:44:32 +08:00
2026-08-14 21:01:43 +08:00
2026-08-14 21:01:43 +08:00