code wiki / (root) / nx_tfl_decimate_gate.nx

nx_tfl_decimate_gate.nx source

↩ module page · 30 lines · 1684 B

1// nx_tfl_decimate_gate.nx -- NXMSH2 TFL reducer gate 2import "nx_syscalls.nx" 3import "nx_gate_verdict.nx" 4import "nx_tissuefield_lib.nx" 5 6func td_atoi(s: *u8) -> i64 { var i: i64 = 0; var v: i64 = 0; while s[i] != (0 as u8) { let c: i64 = s[i] as i64; if c >= 48 { if c <= 57 { v = v * 10 + c - 48 } }; i = i + 1 }; return v } 7const TD_DEFAULT_IN: *u8 = "/volume1/homes/elderwesto/nishihost/buildroot/knowledge/gates/beach-skin-t375.nxmesh" 8const TD_DEFAULT_OUT: *u8 = "/tmp/nx_tfl_lod_default.nxmesh" 9const TD_DEFAULT_CELL: *u8 = "50" 10func main(argc: i64, argv: *i64) -> i64 { 11 let ctr: *i64 = sys_mmap(64) as *i64 12 gv_head("=== nx_tfl_decimate_gate -- NXMSH2 load/decimate/write ===" as *u8) 13 var inp: *u8 = TD_DEFAULT_IN 14 var outp: *u8 = TD_DEFAULT_OUT 15 var cells: *u8 = TD_DEFAULT_CELL 16 if argc >= 4 { inp = argv[1] as *u8; outp = argv[2] as *u8; cells = argv[3] as *u8 } 17 let M: *i64 = tfl_mesh_new() 18 let loaded: i64 = tfl_mesh_load(inp, M) 19 gv_check("input-loads" as *u8, loaded, ctr) 20 if loaded == 0 { sys_exit(gv_verdict("TFL-DECIMATE-GATE" as *u8, ctr, "load" as *u8)); return 1 } 21 let cell: i64 = td_atoi(cells) 22 let D: *i64 = tfl_mesh_decimate(M, cell) 23 gv_check("decimator-returns" as *u8, (D as i64) != 0, ctr) 24 if (D as i64) == 0 { sys_exit(gv_verdict("TFL-DECIMATE-GATE" as *u8, ctr, "decimate" as *u8)); return 1 } 25 gv_check("vertices-reduced" as *u8, D[TFL_M_NV] < M[TFL_M_NV], ctr) 26 gv_check("triangles-reduced" as *u8, D[TFL_M_NT] < M[TFL_M_NT], ctr) 27 let wrote: i64 = tfl_mesh_write(D, outp, 900, 880, 840) 28 gv_check("output-written" as *u8, wrote > 0, ctr) 29 sys_exit(gv_verdict("TFL-DECIMATE-GATE" as *u8, ctr, "complete" as *u8)); return 0 30}