code wiki / _hdl_build / nx_meshgen_cell_audit_t337.nx

nx_meshgen_cell_audit_t337.nx source

↩ module page · 217 lines · 11166 B

1// nx_meshgen_gate.nx -- prove the sovereign field->mesh extractor (surface nets) EMITS a valid closed mesh 2// from the pioneer SDF body. T1 emits verts+tris. T2 CLOSED-manifold (F ~= 2V, Euler genus-0). T3 all face 3// indices valid. T4 bounds match the body (tall y-span). T5 manifold vertex usage (>=90% verts used >=3x). 4// T6 writes knowledge/gates/connected-body-sdf-cell-audit-t337.stl (the EMITTED mesh, our own code). GREEN = the extractor works -> the bridge 5// from hand-placed SDF to an EMITTED mesh both i2mesh/t2mesh feed. license_tier: ORIGINAL expect_exit: 0 6import "nx_syscalls.nx" 7import "nx_sdfrender.nx" 8import "nx_meshgen_domain_candidate_t337.nx" 9import "nx_meshcheck.nx" 10import "nx_gltf_export.nx" 11import "nx_meshseg3d.nx" 12 13func hw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 14func hw2(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 15func pn(v: i64) -> i64 { 16 let b: *u8 = sys_mmap(32) as *u8 17 var x: i64 = v 18 var neg: i64 = 0 19 if x < 0 { neg = 1; x = 0 - x } 20 var i: i64 = 31 21 if x == 0 { b[i] = 48 as u8; i = i - 1 } 22 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 } 23 if neg == 1 { b[i] = 45 as u8; i = i - 1 } 24 sys_write(1, (b as i64 + i + 1) as *u8, 31 - i) 25 return 0 26} 27func iabs(v: i64) -> i64 { if v < 0 { return 0 - v } return v } 28 29// tiny ASCII-STL writer (integer fx1024 coords; units arbitrary) for the record/eyeball in any viewer. 30func stl_num(fd: i64, v: i64) -> i64 { 31 let b: *u8 = sys_mmap(32) as *u8 32 var x: i64 = v 33 var neg: i64 = 0 34 if x < 0 { neg = 1; x = 0 - x } 35 var i: i64 = 31 36 if x == 0 { b[i] = 48 as u8; i = i - 1 } 37 while x > 0 { b[i] = (48 + x % 10) as u8; x = x / 10; i = i - 1 } 38 if neg == 1 { b[i] = 45 as u8; i = i - 1 } 39 sys_write(fd, (b as i64 + i + 1) as *u8, 31 - i) 40 sys_write(fd, " " as *u8, 1) 41 return 0 42} 43func write_stl(vbuf: *i64, fbuf: *i64, nf: i64, path: *u8) -> i64 { 44 let fd: i64 = sys_openat_wr(path, 0x1a4) 45 if fd < 0 { return 0 - 1 } 46 hw2(fd, "solid nishi_emitted\n" as *u8) 47 var t: i64 = 0 48 while t < nf { 49 let a: i64 = fbuf[t * 3] 50 let b: i64 = fbuf[t * 3 + 1] 51 let c: i64 = fbuf[t * 3 + 2] 52 hw2(fd, "facet normal 0 0 0\nouter loop\nvertex " as *u8) 53 stl_num(fd, vbuf[a * 3]); stl_num(fd, vbuf[a * 3 + 1]); stl_num(fd, vbuf[a * 3 + 2]) 54 hw2(fd, "\nvertex " as *u8) 55 stl_num(fd, vbuf[b * 3]); stl_num(fd, vbuf[b * 3 + 1]); stl_num(fd, vbuf[b * 3 + 2]) 56 hw2(fd, "\nvertex " as *u8) 57 stl_num(fd, vbuf[c * 3]); stl_num(fd, vbuf[c * 3 + 1]); stl_num(fd, vbuf[c * 3 + 2]) 58 hw2(fd, "\nendloop\nendfacet\n" as *u8) 59 t = t + 1 60 } 61 hw2(fd, "endsolid nishi_emitted\n" as *u8) 62 sys_close(fd) 63 return 0 64} 65 66func main() -> i64 { 67 var fails: i64 = 0 68 let base: i64 = sys_mmap(sdf_bytes()) as i64 69 sdf_body(base) 70 let F: *i64 = sys_mmap((MG_N + 1) * (MG_N + 1) * (MG_N + 1) * 8) as *i64 71 let cubevi: *i64 = sys_mmap(MG_N * MG_N * MG_N * 8) as *i64 72 let vbuf: *i64 = sys_mmap(MG_MAXV * 3 * 8) as *i64 73 let fbuf: *i64 = sys_mmap(MG_MAXF * 3 * 8) as *i64 74 let out: *i64 = sys_mmap(16) as *i64 75 hw("=== nx_meshgen_gate -- EMIT a mesh from the pioneer SDF field (surface nets, our own code) ===\n" as *u8) 76 // Derive this unrotated body fixture domain from its actual authored parts and blend margin. 77 let parts:*i64=(base+O_PARTS) as *i64 78 let blend:*i64=(base+O_KBLEND) as *i64 79 let count:*i64=(base+O_NPART) as *i64 80 var extent:i64=0;var pi:i64=0 81 while pi<count[0]{var axis:i64=0;while axis<3{ 82 let end:i64=iabs(parts[pi*SDF_PART_FIELDS+axis])+parts[pi*SDF_PART_FIELDS+axis+3] 83 if end>extent{extent=end};axis=axis+1 84 };pi=pi+1} 85 extent=extent+blend[0] 86 let ds:i64=(2*extent+MG_N-1)/MG_N 87 let origin:i64=0-extent 88 mg_sample_sdf_box(base,F,origin,ds) 89 var borderbad:i64=0;var xi:i64=0 90 while xi<=MG_N{var yi:i64=0;while yi<=MG_N{var zi:i64=0;while zi<=MG_N{ 91 if xi==0||xi==MG_N||yi==0||yi==MG_N||zi==0||zi==MG_N{if F[mg_fi(xi,yi,zi)]<=0{borderbad=borderbad+1}} 92 zi=zi+1};yi=yi+1};xi=xi+1} 93 hw("DOMAIN origin=");pn(origin);hw(" step=");pn(ds);hw(" max=");pn(origin+MG_N*ds);hw(" nonpositive_border_samples=");pn(borderbad);hw("\n") 94 if borderbad!=0{fails=fails+1} 95 mg_extract_box(F,cubevi,vbuf,fbuf,out,origin,ds) 96 let nv: i64 = out[0] 97 let nf: i64 = out[1] 98 hw("emitted: verts=" as *u8); pn(nv); hw(" tris=" as *u8); pn(nf); hw(" (grid " as *u8); pn(MG_N); hw("^3)\n" as *u8) 99 100 // T1 non-trivial mesh 101 if nv > 2000 { if nf > 4000 { hw("T1 PASS emits a real surface\n" as *u8) } else { hw("T1 FAIL tris low\n" as *u8); fails = fails + 1 } } 102 else { hw("T1 FAIL verts low\n" as *u8); fails = fails + 1 } 103 104 // T2 CLOSED manifold: F ~= 2V (Euler genus-0) 105 let lo: i64 = nv * 3 / 2 106 let hi: i64 = nv * 5 / 2 107 if nf >= lo { if nf <= hi { hw("T2 PASS closed-manifold: tris=" as *u8); pn(nf); hw(" ~= 2*verts=" as *u8); pn(nv * 2); hw(" (watertight genus-0)\n" as *u8) } else { hw("T2 FAIL tris>2.5V (holes/nonmanifold)\n" as *u8); fails = fails + 1 } } 108 else { hw("T2 FAIL tris<1.5V\n" as *u8); fails = fails + 1 } 109 110 // T3 all face indices valid + T5 vertex usage in one pass 111 let use: *i64 = sys_mmap(MG_MAXV * 8) as *i64 112 var vi: i64 = 0 113 while vi < nv { use[vi] = 0; vi = vi + 1 } 114 var t3ok: i64 = 1 115 var t: i64 = 0 116 while t < nf { 117 var e: i64 = 0 118 while e < 3 { 119 let idx: i64 = fbuf[t * 3 + e] 120 if idx < 0 { t3ok = 0 } else { if idx >= nv { t3ok = 0 } else { use[idx] = use[idx] + 1 } } 121 e = e + 1 122 } 123 t = t + 1 124 } 125 if t3ok == 1 { hw("T3 PASS all face indices valid\n" as *u8) } else { hw("T3 FAIL bad index\n" as *u8); fails = fails + 1 } 126 var used3: i64 = 0 127 vi = 0 128 while vi < nv { if use[vi] >= 3 { used3 = used3 + 1 } vi = vi + 1 } 129 if used3 * 100 / nv >= 90 { hw("T5 PASS manifold usage: " as *u8); pn(used3 * 100 / nv); hw("% of verts used >=3 tris\n" as *u8) } 130 else { hw("T5 FAIL usage " as *u8); pn(used3 * 100 / nv); hw("%\n" as *u8); fails = fails + 1 } 131 132 // T4 bounds: tall y-span (body), all within grid 133 var miny: i64 = 999999 134 var maxy: i64 = 0 - 999999 135 var oob: i64 = 0 136 vi = 0 137 while vi < nv { 138 let y: i64 = vbuf[vi * 3 + 1] 139 if y < miny { miny = y } 140 if y > maxy { maxy = y } 141 if iabs(vbuf[vi * 3]) > MG_GR + 100 { oob = 1 } 142 vi = vi + 1 143 } 144 if maxy - miny > 2000 { if oob == 0 { hw("T4 PASS bounds: y-span=" as *u8); pn(maxy - miny); hw(" fx1024 (full body), in-grid\n" as *u8) } else { hw("T4 FAIL out-of-grid vert\n" as *u8); fails = fails + 1 } } 145 else { hw("T4 FAIL y-span small=" as *u8); pn(maxy - miny); hw("\n" as *u8); fails = fails + 1 } 146 147 // T6 emit STL 148 write_stl(vbuf, fbuf, nf, "knowledge/gates/connected-body-sdf-cell-audit-t337.stl" as *u8) 149 hw("T6 PASS wrote knowledge/gates/connected-body-sdf-cell-audit-t337.stl (the EMITTED mesh, openable in any 3D viewer)\n" as *u8) 150 151 152 // Existing independent owners judge the exact emitted buffers; old F~=2V is only a proxy. 153 let co:*i64=sys_mmap(MC_O_SLOTS*MC_I64) as *i64 154 let cl:*i64=sys_mmap(mc_list_slots()*MC_I64) as *i64 155 let cr:i64=mc_check(vbuf,nv,fbuf,nf,co,cl) 156 hw("ACTUAL-MESH-CHECK rc=");pn(cr);hw(" watertight=");pn(mc_watertight(co));hw(" slots=") 157 var ci:i64=0;while ci<MC_O_SLOTS{pn(co[ci]);hw(" ");ci=ci+1};hw("\n") 158 159 var klass:i64=MC_L_DEGEN_AREA 160 while klass<=MC_L_NONMANIFOLD{ 161 if klass!=MC_L_LOOSE{ 162 hw("DEFECT-LOC class=");pn(klass);hw("\n") 163 var li:i64=0 164 while li<MC_LIST_MAX{ 165 let key:i64=mc_list_get(cl,klass,li);if key<0{break} 166 hw(" key=");pn(key) 167 if klass==MC_L_DEGEN_AREA{ 168 var j:i64=0;while j<3{let vi:i64=fbuf[key*3+j];hw(" v=");pn(vi);hw(" xyz=");pn(vbuf[vi*3]);hw(",");pn(vbuf[vi*3+1]);hw(",");pn(vbuf[vi*3+2]);j=j+1} 169 }else{ 170 let a:i64=key/nv;let b:i64=key%nv 171 hw(" a=");pn(a);hw(" xyz=");pn(vbuf[a*3]);hw(",");pn(vbuf[a*3+1]);hw(",");pn(vbuf[a*3+2]);hw(" b=");pn(b);hw(" xyz=");pn(vbuf[b*3]);hw(",");pn(vbuf[b*3+1]);hw(",");pn(vbuf[b*3+2]) 172 } 173 hw("\n");li=li+1 174 } 175 } 176 klass=klass+1 177 } 178 179 let marked:*i64=sys_mmap(nv*8) as *i64 180 var mi:i64=0 181 while mi<MC_LIST_MAX{let ti:i64=mc_list_get(cl,MC_L_DEGEN_AREA,mi);if ti<0{break} 182 var u:i64=0;while u<3{var v:i64=u+1;while v<3{ 183 let a:i64=fbuf[ti*3+u];let b:i64=fbuf[ti*3+v] 184 if vbuf[a*3]==vbuf[b*3]&&vbuf[a*3+1]==vbuf[b*3+1]&&vbuf[a*3+2]==vbuf[b*3+2]{marked[a]=1;marked[b]=1} 185 v=v+1};u=u+1};mi=mi+1} 186 mi=0;while mi<MC_LIST_MAX{let edge:i64=mc_list_get(cl,MC_L_NONMANIFOLD,mi);if edge<0{break};marked[edge/nv]=1;marked[edge%nv]=1;mi=mi+1} 187 xi=0;while xi<MG_N{var yi:i64=0;while yi<MG_N{var zi:i64=0;while zi<MG_N{ 188 let vi:i64=cubevi[mg_ci(xi,yi,zi)] 189 if vi>=0{if marked[vi]!=0{ 190 hw("DEFECT-CELL vertex=");pn(vi);hw(" ijk=");pn(xi);hw(",");pn(yi);hw(",");pn(zi);hw(" corners=") 191 var dx:i64=0;while dx<2{var dy:i64=0;while dy<2{var dz:i64=0;while dz<2{pn(F[mg_fi(xi+dx,yi+dy,zi+dz)]);hw(" ");dz=dz+1};dy=dy+1};dx=dx+1};hw("\n") 192 }};zi=zi+1};yi=yi+1};xi=xi+1} 193 var components:i64=0-1 194 if nv<=M3_MAXV{if nf<=M3_MAXT{ 195 let mb:i64=sys_mmap(m3_bytes()) as i64;m3_init(mb) 196 ci=0;while ci<nv{m3_add_vert(mb,vbuf[ci*3],vbuf[ci*3+1],vbuf[ci*3+2]);ci=ci+1} 197 ci=0;while ci<nf{m3_add_tri(mb,fbuf[ci*3],fbuf[ci*3+1],fbuf[ci*3+2]);ci=ci+1} 198 let labels:*i64=sys_mmap(nf*8) as *i64 199 // Each of 3 unit-normal components is bounded by MTK_ONE. This threshold admits every adjacent pair. 200 // Raw FX1024 positions are unchanged: only topological adjacency is measured, no physical-unit conversion. 201 components=ms_segment(mb,0-3*MTK_ONE,labels) 202 let sizes:*i64=sys_mmap(components*8) as *i64;ms_seg_sizes(labels,nf,sizes,components) 203 hw("ACTUAL-COMPONENTS count=");pn(components);hw(" face_counts=") 204 ci=0;while ci<components{pn(sizes[ci]);hw(" ");ci=ci+1};hw("\n") 205 }} 206 let glbbytes:i64=write_glb(vbuf,fbuf,nv,nf,"knowledge/gates/connected-body-sdf-cell-audit-t337.glb") 207 hw("DIAGNOSTIC-GLB bytes=");pn(glbbytes);hw(" raw_positions=FX1024 node_scale=1/1024 anatomical_mm_registration=UNVERIFIED\n") 208 if cr!=MC_CLEAN{fails=fails+1} 209 if mc_watertight(co)!=1{fails=fails+1} 210 if components!=1{fails=fails+1} 211 if glbbytes<=0{fails=fails+1} 212 hw("AUTHORITATIVE-TOPOLOGY overrides earlier proxy claims; defects retained, geometry unchanged\n") 213 214 if fails == 0 { hw("GATE GREEN: sovereign surface-nets EMITS a valid closed mesh from an SDF field -- the pioneer SDF is now an EMITTED mesh; the extractor both i2mesh/t2mesh feed.\n" as *u8) } 215 else { hw("GATE RED fails=" as *u8); pn(fails); hw("\n" as *u8) } 216 return fails 217}