code wiki / (root) / nx_face_support_capture_t239.nx

nx_face_support_capture_t239.nx source

↩ module page · 56 lines · 2578 B

1// Controlled recombination: add explicitly selected existing anatstack support ellipsoids 2// before faceanat's subtractive apertures. Exact source dimensions retained. 3// No anatomical correctness claim. Existing index-based morph APIs need remapping before adoption. 4// Usage out.png support-indices.dat [baseline=0 / supports=1] 5import "nx_faceanat.nx" 6import "nx_anatstack.nx" 7import "nx_sdfrender_mt.nx" 8import "nx_png.nx" 9func main(argc:i64,argv:*i64)->i64{ 10 if argc!=4{return 2} 11 let base:i64=sys_mmap(sdf_bytes()) as i64 12 if base==0{return 3}faceanat_build(base) 13 let mode:*u8=argv[3] as *u8 14 if mode[0]==(49 as u8){ 15 let len:*i64=sys_mmap(16) as *i64;let cfg:*u8=sys_read_file(argv[2] as *u8,len) 16 if (cfg as i64)==0{return 4} 17 // Current anatstack source declares fewer rows than the existing SDF part arena. 18 let parts:*i64=sys_mmap(PARTS_CAP*AS_STRIDE*8) as *i64 19 let count:i64=anatstack_build(parts) 20 if count>PARTS_CAP{return 5} 21 let chosen:*i64=sys_mmap(PARTS_CAP*8) as *i64 22 var n:i64=0;var pos:i64=0 23 while pos<len[0]{ 24 while pos<len[0]{if cfg[pos]>(32 as u8){break}pos=pos+1} 25 if pos>=len[0]{break} 26 var id:i64=0;var digits:i64=0 27 while pos<len[0]{let c:i64=cfg[pos] as i64;if c<48{break}if c>57{break} 28 id=id*10+c-48;if id>=count{return 5}digits=digits+1;pos=pos+1} 29 if digits==0{return 5}if parts[id*AS_STRIDE+1]!=AS_ELLIP{return 5} 30 if n>=PARTS_CAP{return 5}chosen[n]=id;n=n+1 31 } 32 let np:*i64=(base+O_NPART) as *i64 33 if np[0]+n>PARTS_CAP{return 5} 34 let p:*i64=(base+O_PARTS) as *i64 35 let op:*i64=(base+O_OPS) as *i64;let mt:*i64=(base+O_MATS) as *i64 36 let kb:*i64=(base+O_KB2) as *i64;let rt:*i64=(base+O_ROT) as *i64;let roll:*i64=(base+O_ROLL) as *i64 37 // Locate first carve by operation metadata, not a guessed anatomical coordinate. 38 var first:i64=0;while first<np[0]{if op[first]==1{break}first=first+1} 39 var i:i64=np[0]-1 40 while i>=first{ 41 var j:i64=0;while j<SDF_PART_FIELDS{p[(i+n)*SDF_PART_FIELDS+j]=p[i*SDF_PART_FIELDS+j];j=j+1} 42 op[i+n]=op[i];mt[i+n]=mt[i];kb[i+n]=kb[i] 43 rt[(i+n)*2]=rt[i*2];rt[(i+n)*2+1]=rt[i*2+1] 44 roll[(i+n)*2]=roll[i*2];roll[(i+n)*2+1]=roll[i*2+1] 45 i=i-1 46 } 47 i=0;while i<n{ 48 let dst:i64=first+i;let src:i64=chosen[i]*AS_STRIDE 49 var j:i64=0;while j<SDF_PART_FIELDS{p[dst*SDF_PART_FIELDS+j]=parts[src+2+j];j=j+1} 50 op[dst]=0;mt[dst]=0;kb[dst]=0;rt[dst*2]=0;rt[dst*2+1]=0;roll[dst*2]=0;roll[dst*2+1]=0;i=i+1 51 } 52 np[0]=np[0]+n 53 }else{if mode[0]!=(48 as u8){return 2}} 54 sdfmt_render(base,0,4,236,180,156,0) 55 return write_png((base+fb_off()) as *i64,ww(),hh(),argv[1] as *u8) 56}