diff --git a/fightstick/main.go b/fightstick/main.go index ef4d242..3b5dad6 100644 --- a/fightstick/main.go +++ b/fightstick/main.go @@ -3,23 +3,22 @@ package main import ( "github.com/deadsy/sdfx/render" "github.com/deadsy/sdfx/render/dc" - "github.com/deadsy/sdfx/sdf" ) func main() { top := topPlane() walls := wallsPlane() - planes := make(planes) - planes.add(splitPlane("top", top)) - planes.add(splitPlane("walls", walls)) + parts := make(Parts) + parts.add(split2DPlane("top", top, 2)) + parts.add(split2DPlane("walls", walls, 45)) render.RenderDXF(top, 400, "top.dxf") render.RenderDXF(wallsPlane(), 400, "walls.dxf") // render.ToSTL(sdf.Extrude3D(walls, 2), 400, "walls.stl", dc.NewDualContouringDefault()) - for k, v := range planes { - render.RenderDXF(v, 400, k+".dxf") - render.ToSTL(sdf.Extrude3D(v, 2), 400, k+".stl", dc.NewDualContouringDefault()) + for k, v := range parts { + render.RenderDXF(v.SDF2, 400, k+".dxf") + render.ToSTL(v.SDF3, 400, k+".stl", dc.NewDualContouringDefault()) } } diff --git a/fightstick/parts.go b/fightstick/parts.go new file mode 100644 index 0000000..d920edf --- /dev/null +++ b/fightstick/parts.go @@ -0,0 +1,59 @@ +package main + +import ( + "github.com/deadsy/sdfx/sdf" + v2 "github.com/deadsy/sdfx/vec/v2" + v3 "github.com/deadsy/sdfx/vec/v3" +) + +type Part struct { + SDF2 sdf.SDF2 + SDF3 sdf.SDF3 +} + +type Parts map[string]Part + +func (p Parts) add(p2 Parts) { + for k, v := range p2 { + p[k] = v + } +} + +func add2DPlane(name string, plane sdf.SDF2, height float64) map[string]Part { + p := make(map[string]Part) + p[name] = Part{SDF2: plane, SDF3: sdf.Extrude3D(plane, height)} + return p +} + +func add3DModel(name string, model sdf.SDF3) map[string]Part { + p := make(map[string]Part) + p[name] = Part{SDF2: sdf.Slice2D(model, v3.Vec{X: 0, Y: 0, Z: 0}, v3.Vec{X: 0, Y: 0, Z: 0}), SDF3: model} + return p +} + +func split2DPlane(name string, plane sdf.SDF2, height float64) map[string]Part { + planes := make(map[string]Part) + + rPlane := sdf.Cut2D(plane, v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}) + planes[name+" "+"right"] = Part{SDF2: rPlane, SDF3: sdf.Extrude3D(rPlane, height)} + + lPlane := sdf.Transform2D(sdf.Cut2D(sdf.Transform2D(plane, sdf.MirrorY()), v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}), sdf.MirrorY()) + planes[name+" "+"left"] = Part{SDF2: lPlane, SDF3: sdf.Extrude3D(lPlane, height)} + + return planes +} + +func split3DModel(name string, model sdf.SDF3) map[string]Part { + models := make(map[string]Part) + plane := sdf.Slice2D(model, v3.Vec{X: 0, Y: 0, Z: 0}, v3.Vec{X: 0, Y: 0, Z: 0}) + + rPlane := sdf.Cut2D(plane, v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}) + rModel := sdf.Cut3D(model, v3.Vec{X: 0, Y: 0, Z: 0}, v3.Vec{X: 0, Y: 1, Z: 0}) + models[name+" "+"right"] = Part{SDF2: rPlane, SDF3: rModel} + + lPlane := sdf.Transform2D(sdf.Cut2D(sdf.Transform2D(plane, sdf.MirrorY()), v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}), sdf.MirrorY()) + lModel := sdf.Transform3D(sdf.Cut3D(sdf.Transform3D(model, sdf.MirrorXY()), v3.Vec{X: 0, Y: 0, Z: 0}, v3.Vec{X: 0, Y: 1, Z: 0}), sdf.MirrorXY()) + models[name+" "+"left"] = Part{SDF2: lPlane, SDF3: lModel} + + return models +} diff --git a/fightstick/planes.go b/fightstick/planes.go deleted file mode 100644 index 2c4236f..0000000 --- a/fightstick/planes.go +++ /dev/null @@ -1,28 +0,0 @@ -package main - -import ( - "github.com/deadsy/sdfx/sdf" - v2 "github.com/deadsy/sdfx/vec/v2" -) - -type planes map[string]sdf.SDF2 - -func (p planes) add(p2 planes) { - for k, v := range p2 { - p[k] = v - } -} - -func splitPlane(name string, plane sdf.SDF2) map[string]sdf.SDF2 { - planes := make(map[string]sdf.SDF2) - /* original := topPlane() - x, y := original.BoundingBox().Max.X*2, original.BoundingBox().Max.Y*2 - cutout := sdf.Box2D(sdf.V2{X: x, Y: y}, 0) - cOLeft := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: x / 2, Y: 0})) - cORight := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: -x / 2, Y: 0})) - planes["left"] = sdf.Difference2D(original, cOLeft) - planes["right"] = sdf.Difference2D(original, cORight)*/ - planes[name+" "+"right"] = sdf.Cut2D(plane, v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}) - planes[name+" "+"left"] = sdf.Transform2D(sdf.Cut2D(sdf.Transform2D(plane, sdf.MirrorY()), v2.Vec{X: 0, Y: 0}, v2.Vec{X: 0, Y: 1}), sdf.MirrorY()) - return planes -}