nx_isosurf_orientation_gate_t343.nx source
↩ module page · 19 lines · 2027 B
1import "nx_isosurf_orientation_candidate_t343.nx"
2import "nx_meshcheck.nx"
3import "nx_gate_verdict.nx"
4func iog_one(kind:i64,ctr:*i64)->i64{
5 let cells:i64=16;let cell:i64=16;let origin:i64=-128;let radius:i64=89
6 let grid:*i64=sys_mmap(17*17*17*8) as *i64;var i:i64=0
7 while i<=cells{var j:i64=0;while j<=cells{var k:i64=0;while k<=cells{let x:i64=origin+i*cell;let y:i64=origin+j*cell;let z:i64=origin+k*cell;var d:i64=x*x+y*y+z*z-radius*radius;if kind==1{var ax:i64=x;if ax<0{ax=0-ax};var ay:i64=y;if ay<0{ay=0-ay};var az:i64=z;if az<0{az=0-az};d=ax;if ay>d{d=ay};if az>d{d=az};d=d-73};grid[(i*17+j)*17+k]=d;k=k+1};j=j+1};i=i+1}
8 let arena:i64=sys_mmap(tm_bind_bytes(cells*cells*cells,6*cells*cells*cells)) as i64;tm_bind(arena,cells*cells*cells,6*cells*cells*cells)
9 surface_nets(grid,cells,cells,cells,origin,origin,origin,cell,0,0)
10 let nv:i64=tm_nv();let nt:i64=tm_nt();let v:*i64=sys_mmap(nv*24) as *i64;let f:*i64=sys_mmap(nt*24) as *i64;i=0
11 while i<nv{v[i*3]=tm_vx(i);v[i*3+1]=tm_vy(i);v[i*3+2]=tm_vz(i);i=i+1};i=0;var outward:i64=1
12 while i<nt{let a:i64=tm_ta(i);let b:i64=tm_tb(i);let c:i64=tm_tc(i);f[i*3]=a;f[i*3+1]=b;f[i*3+2]=c
13 let ux:i64=v[b*3]-v[a*3];let uy:i64=v[b*3+1]-v[a*3+1];let uz:i64=v[b*3+2]-v[a*3+2];let vx:i64=v[c*3]-v[a*3];let vy:i64=v[c*3+1]-v[a*3+1];let vz:i64=v[c*3+2]-v[a*3+2]
14 let dot:i64=(uy*vz-uz*vy)*(v[a*3]+v[b*3]+v[c*3])+(uz*vx-ux*vz)*(v[a*3+1]+v[b*3+1]+v[c*3+1])+(ux*vy-uy*vx)*(v[a*3+2]+v[b*3+2]+v[c*3+2]);if dot<=0{outward=0};i=i+1}
15 let o:*i64=sys_mmap(MC_O_SLOTS*8) as *i64;let l:*i64=sys_mmap(mc_list_slots()*8) as *i64;let rc:i64=mc_check(v,nv,f,nt,o,l)
16 gv_check("convex fixture exact independent topology clean",rc==MC_CLEAN&&tm_ovf()==0,ctr)
17 gv_check("convex fixture closed and every triangle outward",mc_watertight(o)==1&&outward==1,ctr);return 0
18}
19func main()->i64{let c:*i64=gv_ctr();gv_head("ISOSURF-ORIENTATION");iog_one(0,c);iog_one(1,c);return gv_verdict("ISOSURF-ORIENTATION",c,"Sphere and box signed fields; detailed human topology remains separately reported RED.")}