func scale(cmd *cobra.Command, args []string) { _, r, err := openIn(args) if err != nil { fail(err) } defer r.Close() w, err := openOut(outPath) if err != nil { fail(err) } defer w.Close() t, err := stl.Read(r) if err != nil { fail("Failed to read STL file:", err) } for i := range t { tr := &t[i] for j := 0; j < 3; j++ { for k := 0; k < 3; k++ { tr.V[j][k] = float32(scaleX * float64(tr.V[j][k])) } } } if err := stl.WriteBinary(w, t); err != nil { fail("Failed to write STL file:", err) } }
func main() { timing.StartTiming("total") timing.StartTiming("Read STL from Stdin") triangles, err := stl.Read(os.Stdin) if err != nil { log.Fatalf("stl.Read: %v", err) } timing.StopTiming("Read STL from Stdin") timing.StartTiming("STLToMesh") mesh := raster.STLToMesh(VoxelSide*MeshMultiplier, triangles) timing.StopTiming("STLToMesh") timing.StartTiming("MeshVolume") volume := triangle.MeshVolume(mesh.Triangle, 1) if volume < 0 { volume = -volume } fmt.Fprintf(os.Stderr, "Mesh volume (in mesh units): %d\n", volume) timing.StopTiming("MeshVolume") timing.StartTiming("Rasterize") vol := raster.Rasterize(mesh, VoxelSide) timing.StopTiming("Rasterize") timing.StartTiming("Optimize") Optimize(vol, 22) timing.StopTiming("Optimize") /* timing.StartTiming("Write nptl") if err = nptl.Write(os.Stdout, vol, mesh.Grid); err != nil { log.Fatalf("nptl.Write: %v", err) } v := vol.Volume() fmt.Fprintf(os.Stderr, "Volume is filled by %v%%\n", float64(v)*float64(100)/(float64(vol.N())*float64(vol.N())*float64(vol.N()))) timing.StopTiming("Write nptl") */ side := mesh.Grid.Side() vsize := surface.Vector{side, side, side} t := surface.MarchingCubes(NewVolumeField2(vol), 128, 0.8, vsize) var f *os.File if f, err = os.OpenFile("output.stl", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644); err != nil { log.Fatal(err) } if err = stl.WriteBinary(f, t); err != nil { log.Fatalf("stl.Write: %v", err) } f.Close() timing.StopTiming("total") timing.PrintTimings(os.Stderr) }