code wiki / (root) / nx_vessel_emit.nx

nx_vessel_emit.nx source

↩ module page · 61 lines · 1762 B

1// nx_vessel_emit.nx -- emit the C1 vessel solid as a printable binary STL. 2// Meshes the CSG scene at a LOW resolution (the under-ridge OOM lesson) and 3// writes web_assets/fermenter_vessel.stl via the sovereign STL writer. 4// Run directly (has main + file I/O), not via nx_smoke. 5 6import "nx_syscalls.nx" 7import "nx_sdf.nx" 8import "nx_csg.nx" 9import "nx_csg_scene.nx" 10import "nx_mesh.nx" 11import "nx_stl_write.nx" 12import "nx_vessel_csg.nx" 13 14func ep_puts(s: *u8) -> i64 { 15 var n: i64 = 0 16 while s[n] != (0 as u8) { n = n + 1 } 17 sys_write(1, s, n) 18 return 0 19} 20 21func ep_putn(v: i64) -> i64 { 22 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 23 var m: i64 = v 24 let d: *u8 = (sys_mmap(24)) as *u8 25 var k: i64 = 0 26 while m > 0 { 27 d[k] = (48 + (m % 10)) as u8 28 m = m / 10 29 k = k + 1 30 } 31 var i: i64 = k - 1 32 while i >= 0 { 33 let o: *u8 = (sys_mmap(1)) as *u8 34 o[0] = d[i] 35 sys_write(1, o, 1) 36 i = i - 1 37 } 38 return 0 39} 40 41func main() -> i64 { 42 let q: i64 = 16384 43 let s: *NxCsgScene = nx_vessel_csg_build(84, 4, 200, 5) 44 let lo: i64 = (0 - 90) * q 45 let hi: i64 = 90 * q 46 let loz: i64 = (0 - 105) * q 47 let hiz: i64 = 105 * q 48 let mesh: *NxMesh = nx_csg_extract_scene(s, lo, lo, loz, hi, hi, hiz, 32) 49 let cap: i64 = 8388608 50 let buf: *u8 = (sys_mmap(cap)) as *u8 51 let bytes: i64 = nx_stl_write_mesh(buf, mesh) 52 ep_puts("STL_BYTES=" as *u8) 53 ep_putn(bytes) 54 ep_puts("\n" as *u8) 55 let fd: i64 = sys_openat_wr("web_assets/fermenter_vessel.stl" as *u8, 0x1a4) 56 if fd < 0 { ep_puts("OPEN_FAIL\n" as *u8); return 1 } 57 sys_write(fd, buf, bytes) 58 sys_close(fd) 59 ep_puts("WROTE web_assets/fermenter_vessel.stl\n" as *u8) 60 return 0 61}