code wiki / (root) / nx_garment_polygon_gate_t129.nx

nx_garment_polygon_gate_t129.nx source

↩ module page · 55 lines · 4761 B

1// nx_garment_polygon_gate_t129.nx -- Clips and validates polygonal garment boundaries using barycentric coordinates and geometric checks. 2import "nx_garment_boundary_candidate_t128.nx" 3import "nx_gate_verdict.nx" 4func gc129_inside(p:*i64,n:i64,d:*i64)->i64{ 5 var i:i64=0;while i<n{let o:i64=i*4;if p[o+3]<=0||p[o]<0||p[o+1]<0||p[o+2]<0{return 0} 6 if p[o]+p[o+1]+p[o+2]!=p[o+3]{return 0} 7 if p[o]*d[0]+p[o+1]*d[1]+p[o+2]*d[2]<0{return 0};i=i+1};return 1 8} 9func main()->i64{ 10 let ctr:*i64=gv_ctr();gv_head("GARMENT REPEATED CLIP ACTUAL ONEPIECE") 11 let a:*i64=sys_mmap(272) as *i64;let b:*i64=sys_mmap(272) as *i64;let work:*i64=sys_mmap(272) as *i64 12 let area:*i64=sys_mmap(16) as *i64 13 let d:*i64=sys_mmap(24) as *i64;let e:*i64=sys_mmap(24) as *i64 14 d[0]=1;d[1]=1;d[2]=-1;var n:i64=gmg_clip_triangle_bary_v1(d,a,16) 15 e[0]=-2;e[1]=1;e[2]=1;var m:i64=gmg_clip_polygon_bary_v1(e,a,n,b,work,34) 16 gv_check("second plane keeps ORIGINAL source simplex and both inequalities",m>=3&&gc129_inside(b,m,d)==1&&gc129_inside(b,m,e)==1,ctr) 17 let ar:i64=gmg_clip_area_ratio_v1(b,m,area);gv_check("two-plane polygon exact source area is one-third",ar==0&&area[0]==1&&area[1]==3,ctr) 18 var composed:i64=0;var i:i64=0;while i<m{if b[i*4]>0&&b[i*4+1]>0&&b[i*4+2]>0{composed=1};i=i+1} 19 gv_check("intersection of two boundaries contains all three source coefficients",composed==1,ctr) 20 b[0]=717;n=gmg_clip_polygon_bary_v1(e,a,4,b,work,21) 21 gv_check("short workspace refuses before output writes",n==GMG_CLIP_E_CAP&&b[0]==717,ctr) 22 n=gmg_clip_polygon_bary_v1(e,a,4,a,work,34);gv_check("aliased input output refused",n==GMG_CLIP_E_INPUT,ctr) 23 a[0]=GMG_CLIP_I64_MAX;a[1]=0;a[2]=0;a[3]=GMG_CLIP_I64_MAX;d[0]=2;d[1]=2;d[2]=2 24 n=gmg_clip_polygon_bary_v1(d,a,3,b,work,34);gv_check("unrepresentable exact product refuses without output mutation",n==GMG_CLIP_E_RANGE&&b[0]==717,ctr) 25 26 d[0]=0;d[1]=0;d[2]=-1;n=gmg_clip_triangle_bary_v1(d,a,16);gv_check("boundary-only line emits no drawable polygon",n==0,ctr) 27 d[0]=0;d[1]=-1;d[2]=-1;n=gmg_clip_triangle_bary_v1(d,a,16);gv_check("boundary-only point emits no drawable polygon",n==0,ctr) 28 d[0]=0;d[1]=0;d[2]=0;n=gmg_clip_triangle_bary_v1(d,a,16);let az:i64=gmg_clip_area_ratio_v1(a,n,area);gv_check("coplanar full triangle retains exact unit source area",n==3&&az==0&&area[0]==1&&area[1]==1,ctr) 29 e[0]=0;e[1]=0;e[2]=-1;m=gmg_clip_polygon_bary_v1(e,a,n,b,work,34);gv_check("repeated constraint collapsing to line emits no drawable polygon",m==0,ctr) 30 a[0]=2;a[1]=0;a[2]=0;a[3]=1;b[0]=717;m=gmg_clip_polygon_bary_v1(e,a,n,b,work,34);gv_check("malformed source barycentric sum refuses before destination writes",m==GMG_CLIP_E_INPUT&&b[0]==717,ctr) 31 let len:*i64=sys_mmap(16) as *i64;let src:*u8=sys_map_file("/volume1/homes/elderwesto/nishihost/sites/nishifamily/world/ref9d.nxa",len) 32 let G:*i64=gmg_load(src,len[0]);if (G as i64)==0{return 3} 33 let idx:*i64=G[GMG_C_IDX] as *i64;let hh:*i64=gmg_hh(G) 34 var tri:i64=0;var attempted:i64=0;var polygons:i64=0;var vertices:i64=0;var partial:i64=0;var bad:i64=0;var badarea:i64=0;var maxden:i64=0;var all3:i64=0 35 while tri<G[GMG_C_NT]{ 36 let v0:i64=idx[tri*3];let v1:i64=idx[tri*3+1];let v2:i64=idx[tri*3+2] 37 if gmg_has(G,v0,GMG_VF_TOR)==1&&gmg_has(G,v1,GMG_VF_TOR)==1&&gmg_has(G,v2,GMG_VF_TOR)==1{ 38 attempted=attempted+1;var k:i64=0;while k<3{let v:i64=idx[tri*3+k];d[k]=hh[v]-gmg_hleg(G,v);e[k]=gmg_hneck(G,v)-hh[v];k=k+1} 39 n=gmg_clip_triangle_bary_v1(d,a,16) 40 if n>0{m=gmg_clip_polygon_bary_v1(e,a,n,b,work,34) 41 if m<0{bad=bad+1}else{if m>0{ 42 polygons=polygons+1;vertices=vertices+m 43 let arc:i64=gmg_clip_area_ratio_v1(b,m,area);if arc!=0{badarea=badarea+1}else{if area[0]<=0||area[0]>area[1]{badarea=badarea+1}} 44 if gc129_inside(b,m,d)==0||gc129_inside(b,m,e)==0{bad=bad+1} 45 var split:i64=0;k=0;while k<m{let o:i64=k*4;if b[o+3]>1{split=1};if b[o+3]>maxden{maxden=b[o+3]};if b[o]>0&&b[o+1]>0&&b[o+2]>0{all3=all3+1};k=k+1};partial=partial+split 46 }} 47 }else{if n<0{bad=bad+1}} 48 };tri=tri+1 49 } 50 gv_kv("source_triangles",G[GMG_C_NT]);gv_kv("all_torso_candidates",attempted);gv_kv("retained_polygons",polygons);gv_kv("provenance_vertices",vertices);gv_kv("partial_boundary_faces",partial);gv_kv("max_denominator",maxden);gv_kv("three_way_intersections",all3);gv_kv("refused_or_invalid",bad) 51 gv_kv("invalid_area_or_winding",badarea);gv_check("actual clipped polygons retain positive source winding and bounded area",badarea==0,ctr) 52 gv_check("actual onepiece neckline and leg clipping produces nonempty partial faces",polygons>0&&partial>0,ctr) 53 gv_check("every emitted actual-asset vertex retains valid provenance and both constraints",bad==0,ctr) 54 return gv_verdict("GARMENT-POLY129",ctr,"Source-surface clipping only; no hems, GPU consumer or visual acceptance yet") 55}