Example #1
0
func main() {
	// mesh, err := ln.LoadBinarySTL("bowser.stl")
	mesh, err := ln.LoadOBJ("examples/suzanne.obj")
	if err != nil {
		panic(err)
	}
	mesh.FitInside(ln.Box{ln.Vector{-1, -1, -1}, ln.Vector{1, 1, 1}}, ln.Vector{0.5, 0.5, 0.5})
	for i := 0; i < Slices; i++ {
		fmt.Printf("slice%04d\n", i)
		p := (float64(i)/(Slices-1))*2 - 1
		point := ln.Vector{0, 0, p}
		plane := ln.Plane{point, ln.Vector{0, 0, 1}}
		paths := plane.IntersectMesh(mesh)
		paths = paths.Transform(ln.Scale(ln.Vector{Size / 2, Size / 2, 1}).Translate(ln.Vector{Size / 2, Size / 2, 0}))
		paths.WriteToPNG(fmt.Sprintf("slice%04d.png", i), Size, Size)
		// paths.WriteToSVG(fmt.Sprintf("slice%04d.svg", i), Size, Size)
	}
}
Example #2
0
func (s *Shape) Paths() ln.Paths {
	var result ln.Paths
	// for i := 0; i < 360; i++ {
	// 	fmt.Println(i)
	// 	a := ln.Radians(float64(i))
	// 	x := math.Cos(a)
	// 	y := math.Sin(a)
	// 	plane := ln.Plane{ln.Vector{}, ln.Vector{x, y, 0}}
	// 	paths := plane.IntersectMesh(&s.Mesh)
	// 	result = append(result, paths...)
	// }
	for i := 0; i <= 100; i++ {
		fmt.Println(i)
		p := float64(i) / 100
		plane := ln.Plane{ln.Vector{0, 0, p*2 - 1}, ln.Vector{0, 0, 1}}
		result = append(result, plane.IntersectMesh(&s.Mesh)...)
		plane = ln.Plane{ln.Vector{p*2 - 1, 0, 0}, ln.Vector{1, 0, 0}}
		result = append(result, plane.IntersectMesh(&s.Mesh)...)
		plane = ln.Plane{ln.Vector{0, p*2 - 1, 0}, ln.Vector{0, 1, 0}}
		result = append(result, plane.IntersectMesh(&s.Mesh)...)
	}
	return result
}