commit 5f60ea14b35157db3d3ff1254b93d09c5ecf0fe9 Author: Octopus Octopus Date: Fri May 6 21:27:32 2022 -0500 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c77d6b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.stl \ No newline at end of file diff --git a/Hack-Regular.ttf b/Hack-Regular.ttf new file mode 100644 index 0000000..92a90cb Binary files /dev/null and b/Hack-Regular.ttf differ diff --git a/arcade b/arcade new file mode 100755 index 0000000..f656e67 Binary files /dev/null and b/arcade differ diff --git a/balltop.go b/balltop.go new file mode 100644 index 0000000..c47e582 --- /dev/null +++ b/balltop.go @@ -0,0 +1,42 @@ +package main + +import ( + "github.com/deadsy/sdfx/obj" + "github.com/deadsy/sdfx/sdf" +) + +const BALLTOP_CIRCUM = 35.0 + +func balltop() (sdf.SDF3, error) { + cutoutHeight := 6.0 + + insert, err := Insert() + if err != nil { + return Error(err) + } + sphere, err := sdf.Sphere3D(BALLTOP_CIRCUM / 2) + if err != nil { + return Error(err) + } + cutout, err := sdf.Box3D(sdf.V3{X: BALLTOP_CIRCUM, Y: BALLTOP_CIRCUM, Z: float64(cutoutHeight)}, 0) + if err != nil { + return Error(err) + } + chamfer, err := obj.ChamferedHole3D(cutoutHeight, 9.8/1.35, cutoutHeight) + if err != nil { + return Error(err) + } + cutoutShift := (BALLTOP_CIRCUM - cutoutHeight) / 2.0 + cutout = sdf.Transform3D(cutout, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: -cutoutShift})) + sphere = sdf.Difference3D(sphere, cutout) + + chamferShift := (BALLTOP_CIRCUM - cutoutHeight) / 2.0 + chamfer = sdf.Transform3D(chamfer, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: -chamferShift})) + sphere = sdf.Union3D(sphere, chamfer) + + insertShift := (BALLTOP_CIRCUM - INSERT_SIZE_HEIGHT) / 2.0 + insert = sdf.Transform3D(insert, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: -insertShift})) + sphere = sdf.Difference3D(sphere, insert) + + return sphere, nil +} diff --git a/dustcover.go b/dustcover.go new file mode 100644 index 0000000..7eeb093 --- /dev/null +++ b/dustcover.go @@ -0,0 +1,35 @@ +package main + +import ( + "github.com/deadsy/sdfx/obj" + "github.com/deadsy/sdfx/sdf" +) + +const DUST_COVER_OUTER_CIRCUM = 37.5 +const DUST_COVER_INNER_CIRCUM = 14.0 +const DUST_COVER_HEIGHT = 1.48 + +func dustCover() (sdf.SDF3, error) { + cutoutHeight := 0.16 + dustCover, err := obj.Pipe3D(DUST_COVER_OUTER_CIRCUM/2, DUST_COVER_INNER_CIRCUM/2, DUST_COVER_HEIGHT+(cutoutHeight*2)) + if err != nil { + Error(err) + } + cutout1, err := sdf.Box3D(sdf.V3{X: DUST_COVER_OUTER_CIRCUM, Y: DUST_COVER_OUTER_CIRCUM, Z: cutoutHeight}, 0) + if err != nil { + Error(err) + } + cutout2 := cutout1 + + cutout1Shift := (DUST_COVER_HEIGHT + cutoutHeight) / 2 + cutout1 = sdf.Transform3D(cutout1, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: cutout1Shift})) + + dustCover = sdf.Difference3D(dustCover, cutout1) + + cutout2Shift := DUST_COVER_HEIGHT / 2 + cutout2 = sdf.Transform3D(cutout2, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: -cutout2Shift})) + + dustCover = sdf.Difference3D(dustCover, cutout2) + + return dustCover, nil +} diff --git a/error.go b/error.go new file mode 100644 index 0000000..f066ad3 --- /dev/null +++ b/error.go @@ -0,0 +1,15 @@ +package main + +import ( + "github.com/deadsy/sdfx/sdf" + "github.com/golang/freetype/truetype" +) + +func Error(err error) (sdf.SDF3, error) { + font, _ := truetype.Parse([]byte("./Hack-Regular.ttf")) + fontSize := 16.0 + height := 2.0 + message := sdf.NewText(err.Error()) + text, _ := sdf.TextSDF2(font, message, fontSize) + return sdf.Extrude3D(text, height), err +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..520994f --- /dev/null +++ b/go.mod @@ -0,0 +1,14 @@ +module git.jade.moe/oct2pus/arcade + +go 1.18 + +require ( + github.com/ajstarks/svgo v0.0.0-20200725142600-7a3c8b57fecb // indirect + github.com/deadsy/sdfx v0.0.0-20220505234821-c59d311fd528 // indirect + github.com/dhconnelly/rtreego v1.1.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/hschendel/stl v1.0.4 // indirect + github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e // indirect + github.com/yofu/dxf v0.0.0-20190710012328-5a6d1e83f16c // indirect + golang.org/x/image v0.0.0-20210216034530-4410531fe030 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..0d77ce1 --- /dev/null +++ b/go.sum @@ -0,0 +1,84 @@ +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20200725142600-7a3c8b57fecb h1:EVl3FJLQCzSbgBezKo/1A4ADnJ4mtJZ0RvnNzDJ44nY= +github.com/ajstarks/svgo v0.0.0-20200725142600-7a3c8b57fecb/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deadsy/sdfx v0.0.0-20220505234821-c59d311fd528 h1:tBQZwbMfwkFJJtXzQdP+Y0p4nYzaXT3uHAocfM0ZOXo= +github.com/deadsy/sdfx v0.0.0-20220505234821-c59d311fd528/go.mod h1:bjsFZRp7zdb9m29hIDXPN/V5H/AkjJ1AIr5iBuj7FcI= +github.com/dhconnelly/rtreego v1.1.0 h1:ejMaqN03N1s6Bdg6peGkNgBnYYSBHzcK8yhSPCB+rHE= +github.com/dhconnelly/rtreego v1.1.0/go.mod h1:SDozu0Fjy17XH1svEXJgdYq8Tah6Zjfa/4Q33Z80+KM= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-gl/gl v0.0.0-20180407155706-68e253793080/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= +github.com/go-gl/glfw v0.0.0-20180426074136-46a8d530c326/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/hschendel/stl v1.0.4 h1:DXT5rkiXMUkbKw4Ndi1OYZ/a5SLR35TzxGj46p5Qyf8= +github.com/hschendel/stl v1.0.4/go.mod h1:XQFFLKrq9YTaBpmouDui4JSaxMyAYkpD7elGSSj/y3M= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e h1:YRRazju3DMGuZTSWEj0nE2SCRcK3DW/qdHQ4UQx7sgs= +github.com/llgcode/draw2d v0.0.0-20200930101115-bfaf5d914d1e/go.mod h1:mVa0dA29Db2S4LVqDYLlsePDzRJLDfdhVZiI15uY0FA= +github.com/llgcode/ps v0.0.0-20150911083025-f1443b32eedb/go.mod h1:1l8ky+Ew27CMX29uG+a2hNOKpeNYEQjjtiALiBlFQbY= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/yofu/dxf v0.0.0-20190710012328-5a6d1e83f16c h1:qgsxLgTXCVH8Dxar36HI5af2ZfinVz5vF8erPpyzM+A= +github.com/yofu/dxf v0.0.0-20190710012328-5a6d1e83f16c/go.mod h1:gnT4GQzgKW8+TLI0xheUgdmNV4dsAN0WJUVnztRZkfI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030 h1:lP9pYkih3DUSC641giIXa2XqfTIbbbRr0w2EOTA7wHA= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/insert.go b/insert.go new file mode 100644 index 0000000..7315d16 --- /dev/null +++ b/insert.go @@ -0,0 +1,12 @@ +package main + +import ( + "github.com/deadsy/sdfx/sdf" +) + +const INSERT_SIZE_CIRCUM = 8.5 +const INSERT_SIZE_HEIGHT = 13.0 + +func Insert() (sdf.SDF3, error) { + return sdf.Cylinder3D(INSERT_SIZE_HEIGHT, INSERT_SIZE_CIRCUM/2, 0) +} diff --git a/lolblog.md b/lolblog.md new file mode 100644 index 0000000..4360bdb --- /dev/null +++ b/lolblog.md @@ -0,0 +1,25 @@ +Okay so I had to stop this model prematurely, I noticed the hole for the heat set insert was fairly shorter than it should be (it should be approximately 12.7mm, i think it was 7mm). + +To model I was using the [deadsy/sdfx](https://github.com/deadsy/sdfx) golang library, because I'm not right in the head and want to do code cad. I've been finding translate hard but I decided to figure out why things never seem to move in a predictable way. + +Models start centered at `{0,0,0}`. i need to take the `difference` of the `insert` from the `sphere`, so if i do +```go +sphere = sdf.Difference3D(sphere,insert) +``` +my hole is in the middle of the model. before i can do that I have to translate the insert on the Z (up/down) axis. + +so i wrote +```go +shift := sphere.BoundingBox.Max.Z - insert.BoundingBox.Max.Z / 2.0 +insert = sdf.Transform3D(insert, sdf.Translate3d(sdf.V3{X: 0, Y: 0, Z: -shift})) +sphere = sdf.Difference3D(sphere, insert) +``` +cool, looks good. let's print. + +then while it was printing i noticed on the slicer that the layers did not add up; every layer is 0.16mm, `insert` is 13mm, i needed around 81 layers of hole for it to be approximately correct, and i was well short of that. + +oh okay, i look again and noticed I forgot to **P**lease **E**xcuse **M**y **D**ear **A**unt **S**ally. Alright. + +```go +shift := (sphere.BoundingBox.Max.Z - insert.BoundingBox.Max.Z) / 2.0 + diff --git a/main.go b/main.go new file mode 100644 index 0000000..995f903 --- /dev/null +++ b/main.go @@ -0,0 +1,14 @@ +package main + +import ( + "github.com/deadsy/sdfx/render" +) + +func main() { + insert, _ := Insert() + balltop, _ := balltop() + dustCover, _ := dustCover() + render.RenderSTL(insert, 300, "insert.stl") + render.RenderSTL(balltop, 300, "balltop.stl") + render.RenderSTL(dustCover, 300, "dustcover.stl") +}