nx_body_skin_junction_gate_t345.nx source
↩ module page · 35 lines · 4586 B
1import "nx_body_skin_junction.nx"
2import "nx_meshvalid_lib.nx"
3import "nx_gate_verdict.nx"
4func bjg_tri(t:*i64,i:i64,a:i64,b:i64,c:i64)->i64{t[i*3]=a;t[i*3+1]=b;t[i*3+2]=c;return 0}
5func bjg_v(v:*i64,i:i64,x:i64,y:i64,z:i64)->i64{v[i*3]=x;v[i*3+1]=y;v[i*3+2]=z;return 0}
6func main(argc:i64,argv:*i64)->i64{
7 let ctr:*i64=gv_ctr();gv_head("Body skin oriented-port bridge qualification" as *u8)
8 let v:*i64=sys_mmap(18*24) as *i64;let t:*i64=sys_mmap(28*24) as *i64
9 var r:i64=0;while r<4{var y:i64=r*100-100;bjg_v(v,r*4,100,y,0);bjg_v(v,r*4+1,0,y,100);bjg_v(v,r*4+2,-100,y,0);bjg_v(v,r*4+3,0,y,-100);r=r+1}
10 bjg_v(v,16,0,-100,0);bjg_v(v,17,0,200,0)
11 var nt:i64=0;var half:i64=0;while half<2{var i:i64=0;let off:i64=half*8;while i<4{let j:i64=(i+1)%4;bjg_tri(t,nt,off+i,off+4+i,off+j);nt=nt+1;bjg_tri(t,nt,off+j,off+4+i,off+4+j);nt=nt+1;if half==0{bjg_tri(t,nt,16,i,j)}else{bjg_tri(t,nt,17,12+j,12+i)};nt=nt+1;i=i+1};half=half+1}
12 let ai:*i64=sys_mmap(32) as *i64;let bi:*i64=sys_mmap(32) as *i64;ai[0]=4;ai[1]=5;ai[2]=6;ai[3]=7;bi[0]=8;bi[1]=11;bi[2]=10;bi[3]=9
13 let a:*BgSkinPort=sys_mmap(32) as *BgSkinPort;let b:*BgSkinPort=sys_mmap(32) as *BgSkinPort;a.indices=ai;a.count=4;a.region=0;a.frame=0;b.indices=bi;b.count=4;b.region=1;b.frame=1
14 let out:*NxBufOwned=sys_mmap(NX_BO_BYTES) as *NxBufOwned
15 let rc:i64=bj_bridge(v,18,t,nt,a,b,0,out);gv_check("actual open surfaces bridged" as *u8,(rc==0) as i64,ctr);gv_check("eight strip triangles derived from boundary counts" as *u8,(out.len==8*24) as i64,ctr)
16 let m:*i64=mv_new(18,nt+out.len/24);var i:i64=0;while i<18{mv_set_vert(m,i,v[i*3],v[i*3+1],v[i*3+2]);i=i+1};i=0;while i<nt{mv_set_tri(m,i,t[i*3],t[i*3+1],t[i*3+2]);i=i+1};let strip:*i64=out.buf as *i64;i=0;while i<out.len/24{mv_set_tri(m,nt+i,strip[i*3],strip[i*3+1],strip[i*3+2]);i=i+1}
17 gv_check("actual joined mesh passes shared manifold checker" as *u8,(mv_check(m)==0) as i64,ctr);gv_check("shared boundary counter zero" as *u8,(mv_count(m,MV_C_BOUND)==0) as i64,ctr);gv_check("shared winding counter zero" as *u8,(mv_count(m,MV_C_WIND)==0) as i64,ctr)
18 let before:i64=out.buf as i64;let beforelen:i64=out.len
19 gv_check("resource refusal" as *u8,(bj_bridge(v,18,t,nt,a,b,191,out)==NX_BO_CAPACITY) as i64,ctr)
20 ai[1]=7;ai[3]=5;gv_check("reversed declared boundary refused" as *u8,(bj_bridge(v,18,t,nt,a,b,0,out)==BJ_BOUNDARY) as i64,ctr);ai[1]=5;ai[3]=7
21 bi[0]=18;gv_check("out of range port index refused" as *u8,(bj_bridge(v,18,t,nt,a,b,0,out)==BJ_INDEX) as i64,ctr);bi[0]=8
22 a.frame=-1;gv_check("missing rest frame identity refused" as *u8,(bj_bridge(v,18,t,nt,a,b,0,out)==BJ_INVALID) as i64,ctr);a.frame=0
23 v[0]=-9223372036854775807-1;gv_check("INT64_MIN coordinate refused before products" as *u8,(bj_bridge(v,18,t,nt,a,b,0,out)==BJ_DOMAIN) as i64,ctr);v[0]=100
24 i=0;while i<4{v[(8+i)*3+1]=0;i=i+1};gv_check("coincident loops refuse degenerate bridge" as *u8,(bj_bridge(v,18,t,nt,a,b,0,out)==BJ_DEGENERATE) as i64,ctr);i=0;while i<4{v[(8+i)*3+1]=100;i=i+1}
25 gv_check("all refusals preserve prior complete output" as *u8,((out.buf as i64)==before&&out.len==beforelen) as i64,ctr)
26 bjg_tri(t,24,4,5,6);gv_check("still capped parent is not an attachment boundary" as *u8,(bj_bridge(v,18,t,25,a,b,0,out)==BJ_BOUNDARY) as i64,ctr)
27
28 let alias:*NxBufOwned=sys_mmap(NX_BO_BYTES) as *NxBufOwned;alias.buf=v as *u8;alias.len=18*24;alias.cap=18*24;gv_check("output cannot own input vertices" as *u8,(bj_bridge(v,18,t,24,a,b,0,alias)==NX_BO_ALIAS) as i64,ctr);alias.buf=0 as *u8;alias.len=0;alias.cap=0
29 let uv:*i64=sys_mmap(7*24) as *i64;bjg_v(uv,0,100,0,0);bjg_v(uv,1,-50,0,100);bjg_v(uv,2,-50,0,-100);bjg_v(uv,3,100,100,0);bjg_v(uv,4,0,100,100);bjg_v(uv,5,-100,100,0);bjg_v(uv,6,0,100,-100)
30 let ut:*i64=sys_mmap(3*24) as *i64;bjg_tri(ut,0,0,1,2);bjg_tri(ut,1,3,5,4);bjg_tri(ut,2,3,6,5)
31 ai[0]=0;ai[1]=1;ai[2]=2;a.count=3;bi[0]=3;bi[1]=6;bi[2]=5;bi[3]=4;b.count=4
32 gv_check("unequal three and four vertex ports accepted" as *u8,(bj_bridge(uv,7,ut,3,a,b,0,out)==0) as i64,ctr);gv_check("unequal port strip exact triangle count" as *u8,(out.len==7*24) as i64,ctr)
33 let um:*i64=mv_new(7,10);i=0;while i<7{mv_set_vert(um,i,uv[i*3],uv[i*3+1],uv[i*3+2]);i=i+1};i=0;while i<3{mv_set_tri(um,i,ut[i*3],ut[i*3+1],ut[i*3+2]);i=i+1};let us:*i64=out.buf as *i64;i=0;while i<7{mv_set_tri(um,3+i,us[i*3],us[i*3+1],us[i*3+2]);i=i+1};gv_check("unequal joined mesh passes native manifold checker" as *u8,(mv_check(um)==0) as i64,ctr)
34 return gv_verdict("body_skin_junction" as *u8,ctr,"oriented boundary composition only; no wholebody placement, intersection or anatomical acceptance" as *u8)
35}