Tommaso Bianchi
fac3cf44df
Infer parallel, perpendicular, equal radius and tangent while drawing
...
Port of snaporca 2d36d28770. Parity OK: 17 files identical, 8 diverging at their
expected counts.
infer_axis_constraint returned only Horizontal or Vertical. On the
CAD-1000-hours corpus the top two transitions are sketch_dim -> sketch_draw
(5896) and back (5756): the signature of geometry that does not self-constrain
as it is drawn.
Every rule requires the relation to be ALREADY TRUE within tolerance, so nothing
the user drew is moved; parallel/perpendicular and tangent additionally require a
shared endpoint.
TWO LIMITS THE CORPUS RUNG FORCED, neither visible to the unit tests:
1. At most ONE constraint per rule per new entity, not one per PAIR, and no
one-at-a-time fallback for the relations batch. EqualRadius has no locality
restriction, so 200 equal holes produced ~20000 candidates; the rejected batch
then cost a solve per constraint and pinned the app at 95% of a core with the
MCP socket unresponsive.
2. Relations only for gesture-sized batches. "A scripted add is not a drawn
gesture" is already this file's rule at its bulk call site (snaporca-8xg1), and
EqualRadius also couples geometrically distant entities, merging independent
connected components and defeating the partitioning that makes large sketches
solvable (snaporca-yww4). With the cap alone geometry stayed correct (32/32
sheets clean) but seven of the largest timed out, including MPD681 -- the sheet
that call site's own comment names.
Also fixes the tolerance leak behind 2: the bulk path asks for exact inference
with ang_tol_rad = 0 but len_tol_frac kept its 0.01 default.
ALSO independent of this feature: run-kernel-tests.sh defaulted to
TAGS=[CadDocument] while four CAD test files carry their own tags and nothing
selected them (2624 assertions / 206 cases reported, 7648 / 264 actual). All 58
dark cases were passing; the coverage was never exercised.
VERIFICATION LIMIT, as with the previous three commits: this fork's kernel suite
still cannot run (find_package(assimp) at configure time, snaporca-w80c). Shared
sources are byte-identical to snaporca's, where kernel is 7651 assertions / 265
cases and ALL LADDERS HELD 7/7.
2026-08-31 03:43:08 +02:00
..
2026-08-31 03:43:08 +02:00
2026-08-26 07:38:52 -03:00
2026-08-26 07:38:52 -03:00
2026-08-27 17:06:37 +08:00
2026-08-09 13:24:04 +08:00
2026-07-22 16:30:43 -03:00
2026-08-28 08:05:59 -03:00
2026-08-28 08:05:59 -03:00
2026-03-05 11:33:07 -03:00
2026-04-13 19:45:39 +08:00
2026-06-30 00:24:39 +02: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
2026-03-25 11:28:00 +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
2026-07-28 14:32:55 +08:00
2026-01-03 23:06:57 +08:00
2026-04-13 19:45:39 +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
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
2026-07-17 06:48:15 +08:00
2025-11-08 20:44:37 +08:00
2026-07-28 14:32:55 +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
2026-08-24 15:37:47 -03: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-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
2026-08-23 12:18:22 -03:00
2026-07-29 16:27:15 -03:00
2026-08-28 02:19:41 +08:00
2026-08-28 02:19:41 +08: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-27 23:13:41 +08:00
2026-08-29 01:56:48 +08:00
2026-08-24 22:02:47 +03:00
2026-04-24 16:28:28 +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
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
2026-08-24 15:37:47 -03:00
2026-08-04 22:01:45 +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-08-25 22:10:49 +08: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-29 01:56:48 +08:00
2026-08-28 14:11:23 +02:00
2026-07-24 09:41:24 -03:00
2025-10-02 09:30:48 +08:00
2026-07-17 08:30:22 +08:00
2026-03-11 14:59:29 +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-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
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-24 09:41:24 -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-08-28 02:07:25 +08:00
2026-08-28 02:07:25 +08: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-29 18:52:15 +08:00
2026-08-29 18:52:15 +08: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-29 01:56:48 +08: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-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
2026-04-13 19:45:39 +08:00
2025-09-26 14:35:06 +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-07-24 09:41:24 -03:00
2026-07-17 09:41:01 +08:00
2026-07-28 14:32:55 +08:00
2026-07-03 17:19:24 -03: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-08-26 19:06:33 +08:00
2026-08-25 22:10:49 +08: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-07-26 22:15:53 +08:00
2026-05-13 00:01:10 +08:00