Skip to content

Commit

Permalink
fix difference op
Browse files Browse the repository at this point in the history
  • Loading branch information
soypat committed Aug 12, 2024
1 parent c8d79d9 commit 214ee04
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 53 deletions.
66 changes: 37 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,43 @@ Offshoot from [this project](https://github.com/soypat/sdf/pull/13). Is WIP.
- Design your part using one API, switch between CPU and GPU after design.
- Extremely coherent API design.

## NPT Flange example.
## Part design - NPT Flange example.
This was converted from the [original example](https://github.com/soypat/sdf/blob/main/examples/npt-flange/flange.go). See [README](https://github.com/soypat/sdf/tree/main/examples) for images.
```go
var (
npt threads.NPT
flange glbuild.Shader3D
)
npt.SetFromNominal(1.0 / 2.0)
pipe, err := threads.Nut(threads.NutParms{
Thread: npt,
Style: threads.NutCircular,
})
if err != nil {
panic(err)
}

flange, err = gsdf.NewCylinder(flangeD/2, flangeH, flangeH/8)
return makeSDF(flange)
if err != nil {
return nil, err
}
flange = gsdf.Translate(flange, 0, 0, -tlen/2)
flange = gsdf.SmoothUnion(pipe, flange, 0.2)
hole, err := gsdf.NewCylinder(internalDiameter/2, 4*flangeH, 0)
if err != nil {
return nil, err
}
flange = gsdf.Difference(flange, hole) // Make through-hole in flange bottom
flange = gsdf.Scale(flange, 25.4) // convert to millimeters

render(flange) // Do something with it.
```go
const (
tlen = 18. / 25.4 // thread length
internalDiameter = 1.5 / 2.
flangeH = 7. / 25.4
flangeD = 60. / 25.4
)
var (
npt threads.NPT
flange glbuild.Shader3D
err error
)
err = npt.SetFromNominal(1.0 / 2.0)
if err != nil {
return nil, err
}
pipe, err := threads.Nut(threads.NutParms{
Thread: npt,
Style: threads.NutCircular,
})
if err != nil {
return nil, err
}
flange, err = gsdf.NewCylinder(flangeD/2, flangeH, flangeH/8)
if err != nil {
return nil, err
}
flange = gsdf.Translate(flange, 0, 0, -tlen/2)
flange = gsdf.SmoothUnion(pipe, flange, 0.2)
hole, err := gsdf.NewCylinder(internalDiameter/2, 4*flangeH, 0)
if err != nil {
return nil, err
}
flange = gsdf.Difference(flange, hole) // Make through-hole in flange bottom
flange = gsdf.Scale(flange, 25.4) // convert to millimeters
renderSDF(flange)
```
2 changes: 1 addition & 1 deletion cpu_evaluators.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ func (u *diff) Evaluate(pos []ms3.Vec, dist []float32, userData any) error {
return err
}
for i := range dist {
dist[i] = maxf(-d1[i], d2[i])
dist[i] = maxf(d1[i], -d2[i])
}
return nil
}
Expand Down
38 changes: 20 additions & 18 deletions examples/npt-flange/flange.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,20 @@ import (
)

func init() {
flag.BoolVar(&useGPU, "gpu", useGPU, "Enable GPU usage")
flag.Parse()
if useGPU {
fmt.Println("enable GPU usage")
runtime.LockOSThread() // For when using GPU this is required.
}
}

var useGPU = false

const (
// visualization is the name of the file with a GLSL
// generated visualization of the SDF which can be visualized in https://www.shadertoy.com/
// or using VSCode's ShaderToy extension. If visualization=="" then no file is generated.
visualization = "nptflange.glsl"
// thread length
tlen = 18. / 25.4
internalDiameter = 1.5 / 2.
flangeH = 7. / 25.4
flangeD = 60. / 25.4
)
const visualization = "nptflange.glsl"

func main() {
flag.BoolVar(&useGPU, "gpu", useGPU, "Enable GPU usage")
flag.Parse()
if useGPU {
fmt.Println("enable GPU usage")
_, terminate, err := glgl.InitWithCurrentWindow33(glgl.WindowConfig{
Title: "compute",
Version: [2]int{4, 6},
Expand Down Expand Up @@ -84,21 +74,33 @@ func main() {
}

func scene() (gleval.SDF3, error) {
const (
// visualization is the name of the file with a GLSL
// generated visualization of the SDF which can be visualized in https://www.shadertoy.com/
// or using VSCode's ShaderToy extension. If visualization=="" then no file is generated.
// thread length
tlen = 18. / 25.4
internalDiameter = 1.5 / 2.
flangeH = 7. / 25.4
flangeD = 60. / 25.4
)
var (
npt threads.NPT
flange glbuild.Shader3D
err error
)
npt.SetFromNominal(1.0 / 2.0)
err = npt.SetFromNominal(1.0 / 2.0)
if err != nil {
return nil, err
}
pipe, err := threads.Nut(threads.NutParms{
Thread: npt,
Style: threads.NutCircular,
})
if err != nil {
panic(err)
return nil, err
}

flange, err = gsdf.NewCylinder(flangeD/2, flangeH, flangeH/8)
return makeSDF(flange)
if err != nil {
return nil, err
}
Expand Down
8 changes: 3 additions & 5 deletions operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,9 @@ func (s *diff) AppendShaderName(b []byte) []byte {
}

func (s *diff) AppendShaderBody(b []byte) []byte {
b = append(b, "return max(-"...)
b = s.s1.AppendShaderName(b)
b = append(b, "(p),"...)
b = s.s2.AppendShaderName(b)
b = append(b, "(p));"...)
b = appendDistanceDecl(b, s.s1, "a", "p")
b = appendDistanceDecl(b, s.s2, "b", "p")
b = append(b, "return max(a,-b);"...)
return b
}

Expand Down

0 comments on commit 214ee04

Please sign in to comment.