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}