code wiki / _hdl_build / nx_step_tess_gate.nx

nx_step_tess_gate.nx source

↩ module page · 153 lines · 7403 B

1// nx_step_tess_gate.nx -- benchmark PLANAR-FACE TESSELLATION on the real as1 STEP file (cadtwin P3a geometry). 2// Teeth: (T1) real tessellation volume on the 53-face model; (T2) EXACT integer area conservation on every face 3// (signed ear-area sum == polygon shoelace -- any ear-clip bug is a mismatch, no silent bad geometry); (T3) every 4// tessellated loop lies ON its declared plane (residual bound); (T4) KNOWN-FACE ground truth: face #423 (plane 5// y=0, origin (10,0,0), normal (0,-1,0)) -> exactly 4 loop verts incl. (20,0,0), all y==0 EXACT, 2 triangles; 6// (T5) compose: mesh -> STL write -> STL read round-trip; (T6) deterministic. Curved surfaces/holes/chord edges 7// COUNTED honestly. expect_exit: 0 license_tier: ORIGINAL 8import "nx_step_tess.nx" 9 10func tg_tooth(name: *u8, pass: i64, fails: *i64) -> i64 { 11 sp_puts(" " as *u8); sp_puts(name); sp_puts(" -> " as *u8) 12 if pass == 1 { sp_puts("PASS\n" as *u8); return 0 } 13 sp_puts("FAIL\n" as *u8) 14 fails[0] = fails[0] + 1 15 return 0 16} 17// build a fresh tess ctx (st stays shared); mesh+counters reset 18func tg_ctx(tt: *i64, st: *i64, mesh: i64, c: *i64) -> i64 { 19 var i: i64 = 0 20 while i < 16 { c[i] = 0; i = i + 1 } 21 m3_init(mesh) 22 tt[0] = st as i64 23 tt[1] = mesh 24 tt[2] = c as i64 25 tt[9] = 0 26 return 0 27} 28 29func main() -> i64 { 30 sp_puts("=== nx_step_tess_gate -- planar-face tessellation (real triangles) from the as1 STEP B-rep ===\n" as *u8) 31 let fails: *i64 = sys_mmap(8) as *i64 32 fails[0] = 0 33 let buf: *u8 = sys_mmap(4194304) 34 let aid: *i64 = sys_mmap(524288) as *i64 35 let anm: *i64 = sys_mmap(524288) as *i64 36 let anl: *i64 = sys_mmap(524288) as *i64 37 let aao: *i64 = sys_mmap(524288) as *i64 38 let aal: *i64 = sys_mmap(524288) as *i64 39 let st: *i64 = sys_mmap(256) as *i64 40 let n: i64 = sp_read_file("knowledge/fetched/step_as1.stp" as *u8, buf, 4194304) 41 if n <= 0 { sp_puts("MISSING step_as1.stp -- run nx_step_sample_fetch\nRED\n" as *u8); return 1 } 42 sp_init(st, buf, n, aid, anm, anl, aao, aal) 43 let cnt: i64 = sp_scan(st) 44 45 // tess ctx buffers (allocated ONCE, outside all loops) 46 let tt: *i64 = sys_mmap(128) as *i64 47 let c: *i64 = sys_mmap(128) as *i64 48 let mesh: i64 = sys_mmap(m3_bytes()) as i64 49 tt[3] = sys_mmap(768) as i64 // refs (96 ids) 50 tt[4] = sys_mmap(1536) as i64 // loop 3D (64 verts) 51 tt[5] = sys_mmap(1024) as i64 // loop 2D 52 tt[6] = sys_mmap(512) as i64 // alive 53 tt[7] = sys_mmap(128) as i64 // plane block + tri scratch @96 54 tt[8] = sys_mmap(16) as i64 // out2 55 tg_ctx(tt, st, mesh, c) 56 57 let ntess: i64 = sgt_tessellate(tt) 58 sp_puts("entities=" as *u8); sp_putn(cnt) 59 sp_puts(" faces=" as *u8); sp_putn(c[0]) 60 sp_puts(" planar=" as *u8); sp_putn(c[1]) 61 sp_puts(" tessellated=" as *u8); sp_putn(c[2]) 62 sp_puts(" tris=" as *u8); sp_putn(c[7]) 63 sp_puts("\n skipped: curved-surface=" as *u8); sp_putn(c[4]) 64 sp_puts(" multi-bound(holes/rims)=" as *u8); sp_putn(c[3]) 65 sp_puts(" degenerate=" as *u8); sp_putn(c[8]) 66 sp_puts(" chord-approx edges=" as *u8); sp_putn(c[5]) 67 sp_puts("\n AREA-MISMATCHES=" as *u8); sp_putn(c[6]) 68 sp_puts(" max plane residual (fx256)=" as *u8); sp_putn(tt[9]); sp_puts("\n" as *u8) 69 70 var t1: i64 = 0 71 if c[0] == 53 { if c[1] >= 15 { if c[2] >= 8 { if c[7] >= 20 { t1 = 1 } } } } 72 let ig1: i64 = tg_tooth("T1 real volume: 53 faces walked, >=15 planar, >=8 tessellated, >=20 tris" as *u8, t1, fails) 73 74 var t2: i64 = 0 75 if c[6] == 0 { if c[2] > 0 { t2 = 1 } } 76 let ig2: i64 = tg_tooth("T2 EXACT area conservation on every tessellated face (ear sum == shoelace)" as *u8, t2, fails) 77 78 var t3: i64 = 0 79 if tt[9] <= 300 { t3 = 1 } 80 let ig3: i64 = tg_tooth("T3 every tessellated loop lies ON its declared plane (residual <= 300)" as *u8, t3, fails) 81 82 // T4 KNOWN-FACE ground truth: face #423 alone (plane y=0) 83 let mesh2: i64 = sys_mmap(m3_bytes()) as i64 84 let c2: *i64 = sys_mmap(128) as *i64 85 tg_ctx(tt, st, mesh2, c2) 86 let fidx: i64 = sp_find(st, 423) 87 var t4: i64 = 0 88 if fidx >= 0 { 89 let okf: i64 = sgt_face(tt, fidx) 90 let h2: *i64 = m3_hdr(mesh2) 91 if okf == 1 { if c2[7] == 2 { if h2[0] == 4 { 92 var ally0: i64 = 1 93 var has20: i64 = 0 94 var vi: i64 = 0 95 while vi < 4 { 96 let v: *i64 = m3_vert(mesh2, vi) 97 if v[1] != 0 { ally0 = 0 } 98 if v[0] == 5120 { if v[1] == 0 { if v[2] == 0 { has20 = 1 } } } 99 vi = vi + 1 100 } 101 if ally0 == 1 { if has20 == 1 { t4 = 1 } } 102 } } } 103 sp_puts(" face#423: tessellated=" as *u8); sp_putn(okf) 104 sp_puts(" verts=" as *u8); sp_putn(h2[0]) 105 sp_puts(" tris=" as *u8); sp_putn(c2[7]); sp_puts(" (expect 4 verts / 2 tris, all y==0, incl (5120,0,0))\n" as *u8) 106 } 107 let ig4: i64 = tg_tooth("T4 known face #423: exact y=0 plane, 4 verts incl (20,0,0), 2 tris" as *u8, t4, fails) 108 109 // T5 compose: STL write -> read round-trip on the full tessellation 110 let wr: i64 = m3_write_stl(mesh, "knowledge/step_tess.stl" as *u8) 111 let mesh3b: i64 = sys_mmap(m3_bytes()) as i64 112 let rd: i64 = m3_read_stl(mesh3b, "knowledge/step_tess.stl" as *u8) 113 let h: *i64 = m3_hdr(mesh) 114 let h3: *i64 = m3_hdr(mesh3b) 115 var t5: i64 = 0 116 if wr >= 0 { if rd >= 0 { if h3[1] == h[1] { if h[1] == c[7] { t5 = 1 } } } } 117 sp_puts(" STL round-trip: wrote tris=" as *u8); sp_putn(h[1]); sp_puts(" read-back tris=" as *u8); sp_putn(h3[1]); sp_puts("\n" as *u8) 118 let ig5: i64 = tg_tooth("T5 compose: tessellation -> STL write -> STL read round-trip" as *u8, t5, fails) 119 120 // T6 determinism 121 let mesh4: i64 = sys_mmap(m3_bytes()) as i64 122 let c4: *i64 = sys_mmap(128) as *i64 123 tg_ctx(tt, st, mesh4, c4) 124 let ntess2: i64 = sgt_tessellate(tt) 125 var sum1: i64 = 0 126 var sum2: i64 = 0 127 let hh: *i64 = m3_hdr(mesh) 128 let h4: *i64 = m3_hdr(mesh4) 129 var vi2: i64 = 0 130 while vi2 < hh[0] { 131 let va: *i64 = m3_vert(mesh, vi2) 132 sum1 = sum1 + va[0] + va[1] * 3 + va[2] * 7 133 vi2 = vi2 + 1 134 } 135 vi2 = 0 136 while vi2 < h4[0] { 137 let vb: *i64 = m3_vert(mesh4, vi2) 138 sum2 = sum2 + vb[0] + vb[1] * 3 + vb[2] * 7 139 vi2 = vi2 + 1 140 } 141 var t6: i64 = 0 142 if ntess2 == ntess { if c4[7] == c[7] { if h4[0] == hh[0] { if sum1 == sum2 { t6 = 1 } } } } 143 let ig6: i64 = tg_tooth("T6 deterministic" as *u8, t6, fails) 144 145 sp_puts("\nP3a GEOMETRY: the STEP file's OWN topology walked to real triangles (ear-clip handles the L-bracket's\n" as *u8) 146 sp_puts("concave faces; exact-area invariant self-checks every face). HONEST v1 scope: single-bound planar faces;\n" as *u8) 147 sp_puts("holes/rims + cylinders/B-splines counted+skipped; curved edges chord-approximated (counted). NEXT: hole\n" as *u8) 148 sp_puts("bridging (multi-bound), curved-surface tessellation -> full from-file geometry for /explodelab.\n" as *u8) 149 sp_puts("\nfails=" as *u8); sp_putn(fails[0]); sp_puts("\n" as *u8) 150 if fails[0] == 0 { sp_puts("GREEN -- planar-face tessellation 6/6 (real B-rep -> real triangles, exact invariants)\n" as *u8); return 0 } 151 sp_puts("RED\n" as *u8) 152 return 1 153}