Skip to content
This repository was archived by the owner on Aug 12, 2024. It is now read-only.

Commit 1c69dc4

Browse files
committed
add example. refactor sdf. remove API surface
1 parent feb9cc5 commit 1c69dc4

File tree

16 files changed

+129
-48
lines changed

16 files changed

+129
-48
lines changed

examples/README.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Click on image to go to code directory.
77

88
| Example | Execution Time | File size |
99
|---|---|---|
10-
|ADZ Nagano sensor cover|1s|10MB|
10+
|[ADZ Nagano sensor cover](adz-sensor-cover)|0.5s|10MB|
1111

1212
[![ADZ Nagano sensor cover](fig/adz-sensor-cover.png)](adz-sensor-cover)
1313

@@ -16,7 +16,7 @@ Click on image to go to code directory.
1616

1717
| Example | Execution Time | File size |
1818
|---|---|---|
19-
|NPT Flange|1s|10MB|
19+
|[NPT Flange](npt-flange)|0.5s|10MB|
2020

2121
[![NPT Flange](fig/npt-flange.png)](npt-flange)
2222

@@ -25,16 +25,25 @@ Click on image to go to code directory.
2525

2626
| Example | Execution Time | File size |
2727
|---|---|---|
28-
|ATX Bench power supply mod|1s|4540kB|
28+
|[ATX Bench power supply mod](atx-bench-supply)|0.5s|4540kB|
2929

3030
[![ATX Bench power supply mod](fig/atx-bench-supply.png)](atx-bench-supply)
3131

3232

33-
## PCB circuit spacer
33+
## PCB spacer
3434

3535
| Example | Execution Time | File size |
3636
|---|---|---|
37-
|PCB circuit spacer|1s|9736kB|
37+
|[PCB spacer](pcb-spacer)|1s|9736kB|
3838

39-
[![PCB circuit spacer](fig/pcb-spacer.png)](pcb-spacer)
39+
[![PCB spacer](fig/pcb-spacer.png)](pcb-spacer)
40+
41+
42+
## PCB support
43+
44+
| Example | Execution Time | File size |
45+
|---|---|---|
46+
|[PCB support](pcb-support)|0.5s|7961kB|
47+
48+
[![PCB support](fig/pcb-support.png)](pcb-support)
4049

examples/README.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Click on image to go to code directory.
77

88
| Example | Execution Time | File size |
99
|---|---|---|
10-
|{{ $val.Name }}|{{ $val.ExecutionTime }}|{{ $val.STLSize }}|
10+
|[{{ $val.Name }}]({{ $val.Dir }})|{{ $val.ExecutionTime }}|{{ $val.STLSize }}|
1111

1212
[![{{ $val.Name }}]({{ $val.PNGResult }})]({{ $val.Dir }})
1313

examples/adz-sensor-cover/cover.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,23 @@ func main() {
3232
cover = form3.Box(r3.Vec{X: dim, Y: dim, Z: connectorSensSpacing/2 + coverProtude}, round)
3333
dim = material.InternalDimScale(connectorDim)
3434
empty = form3.Box(r3.Vec{X: dim, Y: dim, Z: coverProtude}, 0)
35-
empty = sdf.Transform3D(empty, sdf.Translate3d(r3.Vec{Z: connectorSensSpacing / 4}))
35+
empty = sdf.Transform3D(empty, sdf.Translate3D(r3.Vec{Z: connectorSensSpacing / 4}))
3636
cover = sdf.Difference3D(cover, empty)
3737

3838
// We now create sensor-facing part
3939
sensorCover = form3.Cylinder(coverProtude+connectorSensSpacing/2, adzDiam/2+coverThick, round)
4040
dim = material.InternalDimScale(adzDiam / 2)
4141
empty = form3.Cylinder(coverProtude, dim, round*2)
4242

43-
empty = sdf.Transform3D(empty, sdf.Translate3d(r3.Vec{Z: -connectorSensSpacing / 4}))
43+
empty = sdf.Transform3D(empty, sdf.Translate3D(r3.Vec{Z: -connectorSensSpacing / 4}))
4444
sensorCover = sdf.Difference3D(sensorCover, empty)
45-
sensorCover = sdf.Transform3D(sensorCover, sdf.Translate3d(r3.Vec{Z: -(coverProtude + connectorSensSpacing/2)}))
45+
sensorCover = sdf.Transform3D(sensorCover, sdf.Translate3D(r3.Vec{Z: -(coverProtude + connectorSensSpacing/2)}))
4646
cover = sdf.Union3D(cover, sensorCover)
4747

4848
// Make hole for connector pins.
4949
dim = 10
5050
hole = form3.Box(r3.Vec{X: dim, Y: dim, Z: 4 * coverThick}, 0)
51-
hole = sdf.Transform3D(hole, sdf.Translate3d(r3.Vec{Z: -2 * coverThick}))
51+
hole = sdf.Transform3D(hole, sdf.Translate3D(r3.Vec{Z: -2 * coverThick}))
5252
cover = sdf.Difference3D(cover, hole)
5353
cover = material.Scale(cover)
5454
err := render.CreateSTL("cover.stl", render.NewOctreeRenderer(cover, 180))

examples/atx-bench-supply/atx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func main() {
6969
regBlock = sdf.Transform2D(regBlock, sdf.Translate2d(regOut.BoundingBox().Center()))
7070
regBlock = sdf.Difference2D(regBlock, regOut)
7171
regBlock3 := sdf.Extrude3D(regBlock, panelThickness+regBlockDepth) // extrude does it both ways.
72-
regBlock3 = sdf.Transform3D(regBlock3, sdf.Translate3d(r3.Vec{0, 0, regBlockDepth / 2}))
72+
regBlock3 = sdf.Transform3D(regBlock3, sdf.Translate3D(r3.Vec{0, 0, regBlockDepth / 2}))
7373
panel = sdf.Difference2D(panel, regOut)
7474

7575
// Speaker clamps

examples/fig/pcb-support.png

15.5 KB
Loading

examples/generate_examples.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,17 @@ var examples = []struct {
5555
view: defaultView,
5656
},
5757
{
58-
Name: "PCB circuit spacer",
58+
Name: "PCB spacer",
5959
Dir: "pcb-spacer",
6060
resultSTL: "pcb_base.stl",
6161
view: defaultView,
6262
},
63+
{
64+
Name: "PCB support",
65+
Dir: "pcb-support",
66+
resultSTL: "support.stl",
67+
view: defaultView,
68+
},
6369
}
6470

6571
func main() {

examples/npt-flange/flange.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func main() {
3333
// PLA scaling to thread
3434
pipe = sdf.Transform3D(pipe, sdf.Scale3d(r3.Vec{plaScale, plaScale, 1}))
3535
flange = form3.Cylinder(flangeH, flangeD/2, flangeH/8)
36-
flange = sdf.Transform3D(flange, sdf.Translate3d(r3.Vec{0, 0, -tlen / 2}))
36+
flange = sdf.Transform3D(flange, sdf.Translate3D(r3.Vec{0, 0, -tlen / 2}))
3737
union := sdf.Union3D(pipe, flange)
3838
// set flange fillet
3939
union.SetMin(sdf.MinPoly(0.2))

examples/pcb-spacer/boardspacer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func base() sdf.SDF3 {
5353
s2 := sdf.Extrude3D(pan, baseThickness)
5454
xOfs := 0.5 * baseLength
5555
yOfs := 0.5 * baseWidth
56-
s2 = sdf.Transform3D(s2, sdf.Translate3d(r3.Vec{xOfs, yOfs, 0}))
56+
s2 = sdf.Transform3D(s2, sdf.Translate3D(r3.Vec{xOfs, yOfs, 0}))
5757

5858
// standoffs
5959
zOfs := 0.5 * (pillarHeight + baseThickness)

examples/pcb-support/support.go

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,88 @@
11
package main
22

33
import (
4-
"fmt"
5-
6-
"github.com/soypat/sdf/form3"
4+
"github.com/soypat/sdf"
5+
"github.com/soypat/sdf/form2/obj2"
6+
"github.com/soypat/sdf/form3/must3"
7+
"github.com/soypat/sdf/helpers/matter"
8+
"github.com/soypat/sdf/render"
9+
"gonum.org/v1/gonum/spatial/r2"
710
"gonum.org/v1/gonum/spatial/r3"
811
)
912

13+
const (
14+
supportThickness = 2.5
15+
backsidePillarHeight = 9.0
16+
backsidePillarDiam = 8.0
17+
backsidePillarHollowDiam = 6.0
18+
// holeSpacing
19+
hsX = 102.0 // shared by standoffs too
20+
hsY = 60.0
21+
// Standoff spacing
22+
soX = hsX
23+
soY = 95.0
24+
diamSO = 8.0
25+
diamHole = 3.5
26+
)
27+
28+
var (
29+
material = matter.PLA
30+
supportSize = r2.Vec{100, 100}
31+
boxHoles = []r2.Vec{
32+
{13, 30},
33+
{13 + hsX, 30},
34+
{13, 30 + hsY},
35+
{13 + hsX, 90 + hsY},
36+
}
37+
38+
boxStandoffs = []r2.Vec{
39+
{13, 12.5},
40+
{13 + soX, 12.5},
41+
{13, 12.5 + soY},
42+
{13 + soX, 12.5 + soY},
43+
}
44+
)
45+
1046
func main() {
11-
_, err := form3.Box(r3.Vec{1, 1, 1}, -1)
12-
fmt.Println(err)
47+
// Support basic shape
48+
panel, err := obj2.Panel(obj2.PanelParams{
49+
Size: supportSize,
50+
CornerRadius: diamHole * 1.2,
51+
HoleDiameter: material.InternalDimScale(diamHole),
52+
HoleMargin: [4]float64{4.5, 4.5, 4.5, 4.5},
53+
HolePattern: [4]string{"x", "x", "x", "x"},
54+
})
55+
if err != nil {
56+
panic(err)
57+
}
58+
59+
support := sdf.Extrude3D(panel, supportThickness)
60+
support = sdf.Transform3D(support, sdf.Translate3D(r3.Vec{X: supportSize.X / 2, Y: supportSize.Y / 2}))
61+
62+
for _, so := range boxStandoffs {
63+
var standoff sdf.SDF3 = must3.Cylinder(supportThickness*2, diamSO/2, 0)
64+
standoff = sdf.Transform3D(standoff, sdf.Translate3D(r3.Vec{X: so.X, Y: so.Y}))
65+
support = sdf.Difference3D(support, standoff)
66+
}
67+
68+
for _, so := range boxHoles {
69+
var hole sdf.SDF3 = must3.Cylinder(10, diamHole/2, 0)
70+
hole = sdf.Transform3D(hole, sdf.Translate3D(r3.Vec{X: so.X, Y: so.Y}))
71+
support = sdf.Difference3D(support, hole)
72+
}
73+
// make back-side support pillars
74+
var backsidePillars = []r2.Vec{
75+
{85, 85},
76+
{85, 15},
77+
{50, 50},
78+
}
79+
for _, pillar := range backsidePillars {
80+
var s sdf.SDF3 = must3.Cylinder(backsidePillarHeight, backsidePillarDiam/2, 0)
81+
s = sdf.Difference3D(s, must3.Cylinder(backsidePillarHeight, backsidePillarHollowDiam/2, 0))
82+
s = sdf.Transform3D(s, sdf.Translate3D(r3.Vec{X: pillar.X, Y: pillar.Y, Z: (backsidePillarHeight + supportThickness) / 2}))
83+
union := sdf.Union3D(support, s)
84+
union.SetMin(sdf.MinPoly(3))
85+
support = union
86+
}
87+
render.CreateSTL("support.stl", render.NewOctreeRenderer(support, 190))
1388
}

form3/obj3/bolt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func Bolt(k BoltParms) (s sdf.SDF3, err error) {
5252
shankLength := k.ShankLength + hh/2
5353
shankOffset := shankLength / 2
5454
var shank sdf.SDF3 = form3.Cylinder(shankLength, t.Radius, hh*0.08)
55-
shank = sdf.Transform3D(shank, sdf.Translate3d(r3.Vec{0, 0, shankOffset}))
55+
shank = sdf.Transform3D(shank, sdf.Translate3D(r3.Vec{0, 0, shankOffset}))
5656

5757
// external thread
5858
threadLength := k.TotalLength - k.ShankLength
@@ -68,7 +68,7 @@ func Bolt(k BoltParms) (s sdf.SDF3, err error) {
6868
// chamfer the thread
6969
thread = form3.ChamferedCylinder(thread, 0, 0.5)
7070

71-
thread = sdf.Transform3D(thread, sdf.Translate3d(r3.Vec{0, 0, threadOffset}))
71+
thread = sdf.Transform3D(thread, sdf.Translate3D(r3.Vec{0, 0, threadOffset}))
7272
}
7373

7474
return sdf.Union3D(head, shank, thread), nil // TODO error handling

0 commit comments

Comments
 (0)