code wiki / (root) / nx_vessel_emit_gcode.nx

nx_vessel_emit_gcode.nx source

↩ module page · 50 lines · 1533 B

1// nx_vessel_emit_gcode.nx -- emit a print-ready G-code file for a real 2// fermenter vessel (50 mm radius, 3 mm wall, 80 mm tall, 4 mm base) via the 3// sovereign slicer. Writes web_assets/fermenter_vessel.gcode. Run directly. 4 5import "nx_syscalls.nx" 6import "nx_gcode_emit.nx" 7import "nx_vessel_gcode.nx" 8 9func ep_puts(s: *u8) -> i64 { 10 var n: i64 = 0 11 while s[n] != (0 as u8) { n = n + 1 } 12 sys_write(1, s, n) 13 return 0 14} 15 16func ep_putn(v: i64) -> i64 { 17 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 18 var m: i64 = v 19 let d: *u8 = (sys_mmap(24)) as *u8 20 var k: i64 = 0 21 while m > 0 { 22 d[k] = (48 + (m % 10)) as u8 23 m = m / 10 24 k = k + 1 25 } 26 var i: i64 = k - 1 27 while i >= 0 { 28 let o: *u8 = (sys_mmap(1)) as *u8 29 o[0] = d[i] 30 sys_write(1, o, 1) 31 i = i - 1 32 } 33 return 0 34} 35 36func main() -> i64 { 37 // 50 mm radius, 3 mm wall, 80 mm tall, 4 mm base; res 32; 0.3 mm layers; 38 // 0.4 mm lines; 15% infill; 16 MB G-code buffer 39 let e: *NxGcodeEmitter = nx_vessel_to_gcode(40, 3, 60, 4, 32, 4915, 6554, 15, 16777216) 40 if (e as i64) == 0 { ep_puts("NULL_EMITTER\n" as *u8); return 2 } 41 ep_puts("GCODE_BYTES=" as *u8) 42 ep_putn(e.len) 43 ep_puts("\n" as *u8) 44 let fd: i64 = sys_openat_wr("web_assets/fermenter_vessel.gcode" as *u8, 0x1a4) 45 if fd < 0 { ep_puts("OPEN_FAIL\n" as *u8); return 1 } 46 sys_write(fd, e.buf, e.len) 47 sys_close(fd) 48 ep_puts("WROTE web_assets/fermenter_vessel.gcode\n" as *u8) 49 return 0 50}