sdf

package
v0.0.0-...-cb45b51 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 6, 2024 License: MIT Imports: 20 Imported by: 171

Documentation

Index

Constants

View Source
const InchesPerMillimetre = 1.0 / MillimetresPerInch

InchesPerMillimetre is inches per millimetre

View Source
const Mil = MillimetresPerInch / 1000.0

Mil is millimetres per 1/1000 of an inch

View Source
const MillimetresPerInch = 25.4

MillimetresPerInch is millimetres per inch (25.4)

View Source
const Pi = math.Pi

Pi (3.14159...)

View Source
const Tau = 2 * math.Pi

Tau (2 * Pi).

Variables

This section is empty.

Functions

func BenchmarkSDF2

func BenchmarkSDF2(description string, s SDF2)

BenchmarkSDF2 reports the evaluation speed for an SDF2.

func BenchmarkSDF3

func BenchmarkSDF3(description string, s SDF3)

BenchmarkSDF3 reports the evaluation speed for an SDF3.

func Clamp

func Clamp(x, a, b float64) float64

Clamp x between a and b, assume a <= b

func DtoR

func DtoR(degrees float64) float64

DtoR converts degrees to radians

func EqualFloat64

func EqualFloat64(a, b, epsilon float64) bool

EqualFloat64 compares two float64 values for equality.

func ErrMsg

func ErrMsg(msg string) error

ErrMsg returns an error with a message function name and line number.

func FloatDecode

func FloatDecode(x float64) string

FloatDecode returns a string that decodes the float64 bitfields.

func FloatEncode

func FloatEncode(s int, f uint64, e int) float64

FloatEncode encodes a float64 from sign, fraction and exponent values.

func GenerateMesh2D

func GenerateMesh2D(s SDF2, grid v2i.Vec) (v2.VecSet, error)

GenerateMesh2D generates a set of internal mesh points for an SDF2.

func LoadFont

func LoadFont(fname string) (*truetype.Font, error)

LoadFont loads a truetype (*.ttf) font file.

func Mix

func Mix(x, y, a float64) float64

Mix does a linear interpolation from x to y, a = [0,1]

func Nagon

func Nagon(n int, radius float64) v2.VecSet

Nagon return the vertices of a N sided regular polygon.

func Normal2

func Normal2(s SDF2, p v2.Vec, eps float64) v2.Vec

Normal2 returns the normal of an SDF3 at a point (doesn't need to be on the surface). Computed by sampling it several times inside a box of side 2*eps centered on p.

func Normal3

func Normal3(s SDF3, p v3.Vec, eps float64) v3.Vec

Normal3 returns the normal of an SDF3 at a point (doesn't need to be on the surface). Computed by sampling it several times inside a box of side 2*eps centered on p.

func NormalExtrude

func NormalExtrude(p v3.Vec) v2.Vec

NormalExtrude returns an extrusion function.

func Raycast2

func Raycast2(s SDF2, from, dir v2.Vec, scaleAndSigmoid, stepScale, epsilon, maxDist float64, maxSteps int) (v2.Vec, float64, int)

Raycast2 see Raycast3. NOTE: implementation using Raycast3 (inefficient?)

func Raycast3

func Raycast3(s SDF3, from, dir v3.Vec, scaleAndSigmoid, stepScale, epsilon, maxDist float64, maxSteps int) (collision v3.Vec, t float64, steps int)

Raycast3 collides a ray (with an origin point from and a direction dir) with an SDF3. sigmoid is useful for fixing bad distance functions (those that do not accurately represent the distance to the closest surface, but will probably imply more evaluations) stepScale controls precision (less stepSize, more precision, but more SDF evaluations): use 1 if SDF indicates distance to the closest surface. It returns the collision point, how many normalized distances to reach it (t), and the number of steps performed If no surface is found (in maxDist and maxSteps), t is < 0

func RtoD

func RtoD(radians float64) float64

RtoD converts radians to degrees

func SawTooth

func SawTooth(x, period float64) float64

SawTooth generates a sawtooth function. Returns [-period/2, period/2)

func Sign

func Sign(x float64) float64

Sign returns the sign of x

func SnapFloat64

func SnapFloat64(a, b, epsilon float64) float64

SnapFloat64 snaps a float value to b if it is within epsilon of b.

func WriteTriangles

func WriteTriangles(wg *sync.WaitGroup, triangles *[]*Triangle3) chan<- []*Triangle3

WriteTriangles writes a stream of triangles to a slice.

func ZeroSmall

func ZeroSmall(x, y, epsilon float64) float64

ZeroSmall zeroes out values that are small relative to a quantity.

Types

type ArcSpiralSDF2

type ArcSpiralSDF2 struct {
	// contains filtered or unexported fields
}

ArcSpiralSDF2 is a 2d Archimedean spiral.

func (*ArcSpiralSDF2) BoundingBox

func (s *ArcSpiralSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a 2d Archimedean spiral.

func (*ArcSpiralSDF2) Evaluate

func (s *ArcSpiralSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a 2d Archimedean spiral.

type ArraySDF2

type ArraySDF2 struct {
	// contains filtered or unexported fields
}

ArraySDF2 defines an XY grid array of an existing SDF2.

func (*ArraySDF2) BoundingBox

func (s *ArraySDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a grid array of SDF2s.

func (*ArraySDF2) Evaluate

func (s *ArraySDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a grid array of SDF2s.

func (*ArraySDF2) SetMin

func (s *ArraySDF2) SetMin(min MinFunc)

SetMin sets the minimum function to control blending.

type ArraySDF3

type ArraySDF3 struct {
	// contains filtered or unexported fields
}

ArraySDF3 stores an XYZ array of a given SDF3

func (*ArraySDF3) BoundingBox

func (s *ArraySDF3) BoundingBox() Box3

BoundingBox returns the bounding box of an XYZ SDF3 array.

func (*ArraySDF3) Evaluate

func (s *ArraySDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to an XYZ SDF3 array.

func (*ArraySDF3) SetMin

func (s *ArraySDF3) SetMin(min MinFunc)

SetMin sets the minimum function to control blending.

type Bezier

type Bezier struct {
	// contains filtered or unexported fields
}

Bezier curve specification..

func NewBezier

func NewBezier() *Bezier

NewBezier returns an empty bezier curve.

func (*Bezier) Add

func (b *Bezier) Add(x, y float64) *BezierVertex

Add an x,y vertex to a polygon.

func (*Bezier) AddV2

func (b *Bezier) AddV2(x v2.Vec) *BezierVertex

AddV2 adds a V2 vertex to a polygon.

func (*Bezier) Close

func (b *Bezier) Close()

Close the bezier curve.

func (*Bezier) Mesh2D

func (b *Bezier) Mesh2D() (SDF2, error)

Mesh2D returns the Mesh2D for the bezier curve.

func (*Bezier) Polygon

func (b *Bezier) Polygon() (*Polygon, error)

Polygon returns a polygon approximating the bezier curve.

type BezierPolynomial

type BezierPolynomial struct {
	// contains filtered or unexported fields
}

BezierPolynomial contains the bezier polynomial parameters.

func (*BezierPolynomial) Set

func (p *BezierPolynomial) Set(x []float64)

Set calculates bezier polynomial coefficients given the end/control points.

type BezierSpline

type BezierSpline struct {
	// contains filtered or unexported fields
}

BezierSpline contains the x/y bezier curves for a 2D spline.

func NewBezierSpline

func NewBezierSpline(p []v2.Vec) *BezierSpline

NewBezierSpline returns a bezier spline from the provided control/end points.

func (*BezierSpline) Sample

func (s *BezierSpline) Sample(p *Polygon, t0, t1 float64, p0, p1 v2.Vec, n int)

Sample generates polygon samples for a bezier spline.

type BezierVertex

type BezierVertex struct {
	// contains filtered or unexported fields
}

BezierVertex specifies the vertex for a bezier curve.

func (*BezierVertex) Handle

func (v *BezierVertex) Handle(theta, fwd, rev float64) *BezierVertex

Handle marks the vertex with a slope control handle.

func (*BezierVertex) HandleFwd

func (v *BezierVertex) HandleFwd(theta, r float64) *BezierVertex

HandleFwd sets the slope handle in the forward direction.

func (*BezierVertex) HandleRev

func (v *BezierVertex) HandleRev(theta, r float64) *BezierVertex

HandleRev sets the slope handle in the reverse direction.

func (*BezierVertex) Mid

func (v *BezierVertex) Mid() *BezierVertex

Mid marks the vertex as a mid-curve control point.

type Box2

type Box2 struct {
	Min, Max v2.Vec
}

Box2 is a 2d bounding box.

func NewBox2

func NewBox2(center, size v2.Vec) Box2

NewBox2 creates a 2d box with a given center and size.

func (Box2) Center

func (a Box2) Center() v2.Vec

Center returns the center of a 2d box.

func (Box2) Contains

func (a Box2) Contains(v v2.Vec) bool

Contains checks if the 2d box contains the point.

func (Box2) Enlarge

func (a Box2) Enlarge(v v2.Vec) Box2

Enlarge returns a new 2d box enlarged by a size vector.

func (Box2) Equals

func (a Box2) Equals(b Box2, delta float64) bool

Equals test the equality of 2d boxes.

func (Box2) Extend

func (a Box2) Extend(b Box2) Box2

Extend returns a box enclosing two 2d boxes.

func (Box2) Include

func (a Box2) Include(v v2.Vec) Box2

Include enlarges a 2d box to include a point.

func (Box2) MinMaxDist2

func (a Box2) MinMaxDist2(p v2.Vec) Interval

MinMaxDist2 returns the minimum and maximum dist * dist from a point to a box. Points within the box have minimum distance = 0.

func (*Box2) Random

func (a *Box2) Random() v2.Vec

Random returns a random point within a 2d box.

func (*Box2) RandomSet

func (a *Box2) RandomSet(n int) v2.VecSet

RandomSet returns a set of random points from within a 2d box.

func (Box2) ScaleAboutCenter

func (a Box2) ScaleAboutCenter(k float64) Box2

ScaleAboutCenter returns a new 2d box scaled about the center of a box.

func (Box2) Size

func (a Box2) Size() v2.Vec

Size returns the size of a 2d box.

func (*Box2) Snap

func (a *Box2) Snap(p v2.Vec, delta float64) v2.Vec

Snap a point to the box edges

func (Box2) Square

func (a Box2) Square() Box2

Square returns a square box larger than the original box.

func (Box2) Translate

func (a Box2) Translate(v v2.Vec) Box2

Translate translates a 2d box.

func (Box2) Vertices

func (a Box2) Vertices() v2.VecSet

Vertices returns a slice of 2d box corner vertices.

type Box3

type Box3 struct {
	Min, Max v3.Vec
}

Box3 is a 3d bounding box.

func NewBox3

func NewBox3(center, size v3.Vec) Box3

NewBox3 creates a 3d box with a given center and size.

func (Box3) Center

func (a Box3) Center() v3.Vec

Center returns the center of a 3d box.

func (Box3) Contains

func (a Box3) Contains(v v3.Vec) bool

Contains checks if the 3d box contains the point.

func (Box3) Cube

func (a Box3) Cube() Box3

Cube returns a cubical box larger than the original box.

func (Box3) Enlarge

func (a Box3) Enlarge(v v3.Vec) Box3

Enlarge returns a new 3d box enlarged by a size vector.

func (Box3) Equals

func (a Box3) Equals(b Box3, delta float64) bool

Equals test the equality of 3d boxes.

func (Box3) Extend

func (a Box3) Extend(b Box3) Box3

Extend returns a box enclosing two 3d boxes.

func (Box3) Include

func (a Box3) Include(v v3.Vec) Box3

Include enlarges a 3d box to include a point.

func (Box3) MinMaxDist2

func (a Box3) MinMaxDist2(p v3.Vec) Interval

MinMaxDist2 returns the minimum and maximum dist * dist from a point to a box. Points within the box have minimum distance = 0.

func (*Box3) Random

func (a *Box3) Random() v3.Vec

Random returns a random point within 3d box.

func (*Box3) RandomSet

func (a *Box3) RandomSet(n int) v3.VecSet

RandomSet returns a set of random points from within a 3d box.

func (*Box3) RandomTriangle

func (a *Box3) RandomTriangle() Triangle3

RandomTriangle returns a random triangle that lies within the box

func (Box3) ScaleAboutCenter

func (a Box3) ScaleAboutCenter(k float64) Box3

ScaleAboutCenter returns a new 3d box scaled about the center of a box.

func (Box3) Size

func (a Box3) Size() v3.Vec

Size returns the size of a 3d box.

func (*Box3) Snap

func (a *Box3) Snap(p v3.Vec, epsilon float64) v3.Vec

Snap a point to the box edges

func (Box3) Translate

func (a Box3) Translate(v v3.Vec) Box3

Translate translates a 3d box.

func (Box3) Vertices

func (a Box3) Vertices() v3.VecSet

Vertices returns a slice of 3d box corner vertices.

type BoxSDF2

type BoxSDF2 struct {
	// contains filtered or unexported fields
}

BoxSDF2 is the 2d signed distance object for a rectangular box.

func (*BoxSDF2) BoundingBox

func (s *BoxSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for a 2d box.

func (*BoxSDF2) Evaluate

func (s *BoxSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a 2d box.

type BoxSDF3

type BoxSDF3 struct {
	// contains filtered or unexported fields
}

BoxSDF3 is a 3d box.

func (*BoxSDF3) BoundingBox

func (s *BoxSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a 3d box.

func (*BoxSDF3) Evaluate

func (s *BoxSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a 3d box.

type CacheSDF2

type CacheSDF2 struct {
	// contains filtered or unexported fields
}

CacheSDF2 is an SDF2 cache.

func (*CacheSDF2) BoundingBox

func (s *CacheSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a cached 2d sdf.

func (*CacheSDF2) Evaluate

func (s *CacheSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a cached 2d sdf.

func (*CacheSDF2) String

func (s *CacheSDF2) String() string

type CircleSDF2

type CircleSDF2 struct {
	// contains filtered or unexported fields
}

CircleSDF2 is the 2d signed distance object for a circle.

func (*CircleSDF2) BoundingBox

func (s *CircleSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a 2d circle.

func (*CircleSDF2) Evaluate

func (s *CircleSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a 2d circle.

type ConeSDF3

type ConeSDF3 struct {
	// contains filtered or unexported fields
}

ConeSDF3 is a truncated cone.

func (*ConeSDF3) BoundingBox

func (s *ConeSDF3) BoundingBox() Box3

BoundingBox return the bounding box for the trucated cone..

func (*ConeSDF3) Evaluate

func (s *ConeSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a trucated cone.

type CubicPolynomial

type CubicPolynomial struct {
	// contains filtered or unexported fields
}

CubicPolynomial is a cubic polynomial

func (*CubicPolynomial) Set

func (p *CubicPolynomial) Set(y0, y1, D0, D1 float64)

Set cubic polynomial coefficient values.

type CubicSpline

type CubicSpline struct {
	// contains filtered or unexported fields
}

CubicSpline is a 2d cubic spline.

func (*CubicSpline) BoundingBox

func (s *CubicSpline) BoundingBox() Box2

BoundingBox returns the bounding box for a cubic spline.

type CubicSplineSDF2

type CubicSplineSDF2 struct {
	// contains filtered or unexported fields
}

CubicSplineSDF2 is an SDF2 made from a set of cubic splines.

func (*CubicSplineSDF2) BoundingBox

func (s *CubicSplineSDF2) BoundingBox() Box2

BoundingBox returns the 2d bounding box of a cubic spline.

func (*CubicSplineSDF2) Evaluate

func (s *CubicSplineSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance from a point to the cubic spline SDF2. Note: This uses Newton-Raphson minimisation and is unstable in some circumstances. A simple (and slower) solution is to convert the cubic spline SDF2 to a polygon SDF2 and use that for rendering.

func (*CubicSplineSDF2) PolySpline2D

func (s *CubicSplineSDF2) PolySpline2D(n int) (SDF2, error)

PolySpline2D returns a polygon SDF2 approximating a cubic spline SDF2.

func (*CubicSplineSDF2) Polygonize

func (s *CubicSplineSDF2) Polygonize(n int) *Polygon

Polygonize returns a polygon approximating the cubic spline SDF2.

type CutSDF2

type CutSDF2 struct {
	// contains filtered or unexported fields
}

CutSDF2 is an SDF2 made by cutting across an existing SDF2.

func (*CutSDF2) BoundingBox

func (s *CutSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for the cut SDF2.

func (*CutSDF2) Evaluate

func (s *CutSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to cut SDF2.

type CutSDF3

type CutSDF3 struct {
	// contains filtered or unexported fields
}

CutSDF3 makes a planar cut through an SDF3.

func (*CutSDF3) BoundingBox

func (s *CutSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of the cut SDF3.

func (*CutSDF3) Evaluate

func (s *CutSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to the cut SDF3.

type CylinderSDF3

type CylinderSDF3 struct {
	// contains filtered or unexported fields
}

CylinderSDF3 is a cylinder.

func (*CylinderSDF3) BoundingBox

func (s *CylinderSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a cylinder.

func (*CylinderSDF3) Evaluate

func (s *CylinderSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a cylinder.

type DifferenceSDF2

type DifferenceSDF2 struct {
	// contains filtered or unexported fields
}

DifferenceSDF2 is the difference of two SDF2s.

func (*DifferenceSDF2) BoundingBox

func (s *DifferenceSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of the difference of two SDF2s.

func (*DifferenceSDF2) Evaluate

func (s *DifferenceSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the difference of two SDF2s.

func (*DifferenceSDF2) SetMax

func (s *DifferenceSDF2) SetMax(max MaxFunc)

SetMax sets the maximum function to control blending.

type DifferenceSDF3

type DifferenceSDF3 struct {
	// contains filtered or unexported fields
}

DifferenceSDF3 is the difference of two SDF3s, s0 - s1.

func (*DifferenceSDF3) BoundingBox

func (s *DifferenceSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of the SDF3 difference.

func (*DifferenceSDF3) Evaluate

func (s *DifferenceSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to the SDF3 difference.

func (*DifferenceSDF3) SetMax

func (s *DifferenceSDF3) SetMax(max MaxFunc)

SetMax sets the maximum function to control blending.

type ElongateSDF2

type ElongateSDF2 struct {
	// contains filtered or unexported fields
}

ElongateSDF2 is the elongation of an SDF2.

func (*ElongateSDF2) BoundingBox

func (s *ElongateSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of an elongated SDF2.

func (*ElongateSDF2) Evaluate

func (s *ElongateSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to an elongated SDF2.

type ElongateSDF3

type ElongateSDF3 struct {
	// contains filtered or unexported fields
}

ElongateSDF3 is the elongation of an SDF3.

func (*ElongateSDF3) BoundingBox

func (s *ElongateSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of an elongated SDF3.

func (*ElongateSDF3) Evaluate

func (s *ElongateSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a elongated SDF2.

type ExtrudeFunc

type ExtrudeFunc func(p v3.Vec) v2.Vec

ExtrudeFunc maps v3.Vec to v2.Vec - the point used to evaluate the SDF2.

func ScaleExtrude

func ScaleExtrude(height float64, scale v2.Vec) ExtrudeFunc

ScaleExtrude returns an extrusion functions that scales with z.

func ScaleTwistExtrude

func ScaleTwistExtrude(height, twist float64, scale v2.Vec) ExtrudeFunc

ScaleTwistExtrude returns an extrusion function that scales and twists with z.

func TwistExtrude

func TwistExtrude(height, twist float64) ExtrudeFunc

TwistExtrude returns an extrusion function that twists with z.

type ExtrudeRoundedSDF3

type ExtrudeRoundedSDF3 struct {
	// contains filtered or unexported fields
}

ExtrudeRoundedSDF3 extrudes an SDF2 to an SDF3 with rounded edges.

func (*ExtrudeRoundedSDF3) BoundingBox

func (s *ExtrudeRoundedSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a rounded extrusion.

func (*ExtrudeRoundedSDF3) Evaluate

func (s *ExtrudeRoundedSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a rounded extrusion.

type ExtrudeSDF3

type ExtrudeSDF3 struct {
	// contains filtered or unexported fields
}

ExtrudeSDF3 extrudes an SDF2 to an SDF3.

func (*ExtrudeSDF3) BoundingBox

func (s *ExtrudeSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for an extrusion.

func (*ExtrudeSDF3) Evaluate

func (s *ExtrudeSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to an extrusion.

func (*ExtrudeSDF3) SetExtrude

func (s *ExtrudeSDF3) SetExtrude(extrude ExtrudeFunc)

SetExtrude sets the extrusion control function.

type Flange1

type Flange1 struct {
	// contains filtered or unexported fields
}

Flange1 is a flange shape made from a center circle with two side circles.

func (*Flange1) BoundingBox

func (s *Flange1) BoundingBox() Box2

BoundingBox returns the bounding box for the flange.

func (*Flange1) Evaluate

func (s *Flange1) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the flange.

type FlatFlankCamSDF2

type FlatFlankCamSDF2 struct {
	// contains filtered or unexported fields
}

FlatFlankCamSDF2 is 2d cam profile. The profile is made from a base circle, a smaller nose circle and flat, tangential flanks.

func (*FlatFlankCamSDF2) BoundingBox

func (s *FlatFlankCamSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for the cam.

func (*FlatFlankCamSDF2) Evaluate

func (s *FlatFlankCamSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the cam.

type GearRackParms

type GearRackParms struct {
	NumberTeeth   int     // number of rack teeth
	Module        float64 // pitch circle diameter / number of gear teeth
	PressureAngle float64 // gear pressure angle (radians)
	Backlash      float64 // backlash expressed as units of pitch circumference
	BaseHeight    float64 // height of rack base
}

GearRackParms defines the parameters for a gear rack.

type GearRackSDF2

type GearRackSDF2 struct {
	// contains filtered or unexported fields
}

GearRackSDF2 is a 2d linear gear rack.

func (*GearRackSDF2) BoundingBox

func (s *GearRackSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for the gear rack.

func (*GearRackSDF2) Evaluate

func (s *GearRackSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the gear rack.

type GyroidSDF3

type GyroidSDF3 struct {
	// contains filtered or unexported fields
}

GyroidSDF3 is a 3d gyroid.

func (*GyroidSDF3) BoundingBox

func (s *GyroidSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a 3d gyroid.

func (*GyroidSDF3) Evaluate

func (s *GyroidSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a 3d gyroid.

type IntersectionSDF2

type IntersectionSDF2 struct {
	// contains filtered or unexported fields
}

IntersectionSDF2 is the intersection of two SDF2s.

func (*IntersectionSDF2) BoundingBox

func (s *IntersectionSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of an SDF2 intersection.

func (*IntersectionSDF2) Evaluate

func (s *IntersectionSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the SDF2 intersection.

func (*IntersectionSDF2) SetMax

func (s *IntersectionSDF2) SetMax(max MaxFunc)

SetMax sets the maximum function to control blending.

type IntersectionSDF3

type IntersectionSDF3 struct {
	// contains filtered or unexported fields
}

IntersectionSDF3 is the intersection of two SDF3s.

func (*IntersectionSDF3) BoundingBox

func (s *IntersectionSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of an SDF3 intersection.

func (*IntersectionSDF3) Evaluate

func (s *IntersectionSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to the SDF3 intersection.

func (*IntersectionSDF3) SetMax

func (s *IntersectionSDF3) SetMax(max MaxFunc)

SetMax sets the maximum function to control blending.

type Interval

type Interval [2]float64

Interval is a closed interval on real numbers.

func (Interval) Equals

func (a Interval) Equals(b Interval, tolerance float64) bool

Equals returns true if a == b within the tolerance limit.

func (Interval) Intersect

func (a Interval) Intersect(b Interval) *Interval

Intersect returns the intersection of two intervals.

func (Interval) Overlap

func (a Interval) Overlap(b Interval) bool

Overlap returns true if two intervals overlap.

func (Interval) Sort

func (a Interval) Sort() Interval

Sort sorts the interval endpoints lowest to highest.

type Line2

type Line2 [2]v2.Vec

Line2 is a 2d line defined with end-points.

func VertexToLine

func VertexToLine(vertex []v2.Vec, closed bool) []*Line2

VertexToLine converts a set of vertices into a set of line segments.

func (*Line2) BoundingBox

func (a *Line2) BoundingBox() Box2

BoundingBox returns a bounding box for the line.

func (Line2) Degenerate

func (a Line2) Degenerate(tolerance float64) bool

Degenerate returns true if the line is degenerate.

func (*Line2) Equals

func (a *Line2) Equals(b *Line2, tolerance float64) bool

Equals returns true if the lines are the same (within tolerance).

func (*Line2) IntersectLine

func (a *Line2) IntersectLine(b *Line2) []v2.Vec

IntersectLine intersects 2 line segments. https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect

func (*Line2) Reverse

func (a *Line2) Reverse() *Line2

Reverse the direction of a line segment.

type Line2Buffer

type Line2Buffer struct {
	// contains filtered or unexported fields
}

Line2Buffer buffers lines before writing them to a channel.

func (*Line2Buffer) Close

func (a *Line2Buffer) Close() error

Close flushes out any remaining lines in the buffer.

func (*Line2Buffer) Write

func (a *Line2Buffer) Write(in []*Line2) error

type Line2Writer

type Line2Writer interface {
	Write(in []*Line2) error
	Close() error
}

Line2Writer is the interface of a line writer/closer object.

func NewLine2Buffer

func NewLine2Buffer(out chan<- []*Line2) Line2Writer

NewLine2Buffer returns a Line2Buffer.

type LineSDF2

type LineSDF2 struct {
	// contains filtered or unexported fields
}

LineSDF2 is the 2d signed distance object for a line.

func (*LineSDF2) BoundingBox

func (s *LineSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for a 2d line.

func (*LineSDF2) Evaluate

func (s *LineSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a 2d line.

type LoftSDF3

type LoftSDF3 struct {
	// contains filtered or unexported fields
}

LoftSDF3 is an extrusion between two SDF2s.

func (*LoftSDF3) BoundingBox

func (s *LoftSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a loft extrusion.

func (*LoftSDF3) Evaluate

func (s *LoftSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a loft extrusion.

type M22

type M22 [4]float64

M22 is a 2x2 matrix.

func Identity

func Identity() M22

Identity returns a 2x2 identity matrix.

func NewM22

func NewM22(x [4]float64) M22

NewM22 returns a new matrix. Input is in row-major order.

func RandomM22

func RandomM22(a, b float64) M22

RandomM22 returns a 2x2 matrix with random elements.

func Rotate

func Rotate(a float64) M22

Rotate returns an orthographic 2x2 rotation matrix (right hand rule).

func (M22) Determinant

func (a M22) Determinant() float64

Determinant returns the determinant of a 2x2 matrix.

func (M22) Equals

func (a M22) Equals(b M22, tolerance float64) bool

Equals tests the equality of 2x2 matrices.

func (M22) Inverse

func (a M22) Inverse() M22

Inverse returns the inverse of a 2x2 matrix.

func (M22) Mul

func (a M22) Mul(b M22) M22

Mul multiplies 2x2 matrices.

func (M22) MulPosition

func (a M22) MulPosition(b v2.Vec) v2.Vec

MulPosition multiplies a v2.Vec position with a rotate matrix.

func (M22) Values

func (a M22) Values() [4]float64

Values returns the matrix values in row-major order.

type M33

type M33 [9]float64

M33 is a 3x3 matrix.

func Identity2d

func Identity2d() M33

Identity2d returns a 3x3 identity matrix.

func MirrorX

func MirrorX() M33

MirrorX returns a 3x3 matrix with mirroring across the X axis.

func MirrorY

func MirrorY() M33

MirrorY returns a 3x3 matrix with mirroring across the Y axis.

func NewM33

func NewM33(x [9]float64) M33

NewM33 returns a new matrix. Input is in row-major order.

func RandomM33

func RandomM33(a, b float64) M33

RandomM33 returns a 3x3 matrix with random elements.

func Rotate2d

func Rotate2d(a float64) M33

Rotate2d returns an orthographic 3x3 rotation matrix (right hand rule).

func Scale2d

func Scale2d(v v2.Vec) M33

Scale2d returns a 3x3 scaling matrix. Scaling does not preserve distance. See: ScaleUniform2D().

func Translate2d

func Translate2d(v v2.Vec) M33

Translate2d returns a 3x3 translation matrix.

func (M33) Add

func (a M33) Add(b M33) M33

Add two 3x3 matrices.

func (M33) Determinant

func (a M33) Determinant() float64

Determinant returns the determinant of a 3x3 matrix.

func (M33) Equals

func (a M33) Equals(b M33, tolerance float64) bool

Equals tests the equality of 3x3 matrices.

func (M33) Inverse

func (a M33) Inverse() M33

Inverse returns the inverse of a 3x3 matrix.

func (M33) Mul

func (a M33) Mul(b M33) M33

Mul multiplies 3x3 matrices.

func (M33) MulBox

func (a M33) MulBox(box Box2) Box2

MulBox rotates/translates a 2d bounding box and resizes for axis-alignment.

func (M33) MulPosition

func (a M33) MulPosition(b v2.Vec) v2.Vec

MulPosition multiplies a v2.Vec position with a rotate/translate matrix.

func (M33) MulScalar

func (a M33) MulScalar(k float64) M33

MulScalar multiplies each 3x3 matrix component by a scalar.

func (M33) Values

func (a M33) Values() [9]float64

Values returns the matrix values in row-major order.

type M44

type M44 [16]float64

M44 is a 4x4 matrix.

func Identity3d

func Identity3d() M44

Identity3d returns a 4x4 identity matrix.

func MirrorXY

func MirrorXY() M44

MirrorXY returns a 4x4 matrix with mirroring across the XY plane.

func MirrorXZ

func MirrorXZ() M44

MirrorXZ returns a 4x4 matrix with mirroring across the XZ plane.

func MirrorXeqY

func MirrorXeqY() M44

MirrorXeqY returns a 4x4 matrix with mirroring across the X == Y plane.

func MirrorYZ

func MirrorYZ() M44

MirrorYZ returns a 4x4 matrix with mirroring across the YZ plane.

func NewM44

func NewM44(x [16]float64) M44

NewM44 returns a new matrix. Input is in row-major order.

func RandomM44

func RandomM44(a, b float64) M44

RandomM44 returns a 4x4 matrix with random elements.

func Rotate3d

func Rotate3d(v v3.Vec, a float64) M44

Rotate3d returns an orthographic 4x4 rotation matrix (right hand rule).

func RotateToVector

func RotateToVector(a, b v3.Vec) M44

RotateToVector returns the rotation matrix that transforms a onto the same direction as b.

func RotateX

func RotateX(a float64) M44

RotateX returns a 4x4 matrix with rotation about the X axis.

func RotateY

func RotateY(a float64) M44

RotateY returns a 4x4 matrix with rotation about the Y axis.

func RotateZ

func RotateZ(a float64) M44

RotateZ returns a 4x4 matrix with rotation about the Z axis.

func Scale3d

func Scale3d(v v3.Vec) M44

Scale3d returns a 4x4 scaling matrix. Scaling does not preserve distance. See: ScaleUniform3D()

func Translate3d

func Translate3d(v v3.Vec) M44

Translate3d returns a 4x4 translation matrix.

func (M44) Determinant

func (a M44) Determinant() float64

Determinant returns the determinant of a 4x4 matrix.

func (M44) Equals

func (a M44) Equals(b M44, tolerance float64) bool

Equals tests the equality of 4x4 matrices.

func (M44) Inverse

func (a M44) Inverse() M44

Inverse returns the inverse of a 4x4 matrix.

func (M44) Mul

func (a M44) Mul(b M44) M44

Mul multiplies 4x4 matrices.

func (M44) MulBox

func (a M44) MulBox(box Box3) Box3

MulBox rotates/translates a 3d bounding box and resizes for axis-alignment.

func (M44) MulPosition

func (a M44) MulPosition(b v3.Vec) v3.Vec

MulPosition multiplies a v3.Vec position with a rotate/translate matrix.

func (M44) Values

func (a M44) Values() [16]float64

Values returns the matrix values in row-major order.

type Map2

type Map2 struct {
	// contains filtered or unexported fields
}

Map2 maps a 2d region to integer grid coordinates.

func NewMap2

func NewMap2(bb Box2, grid v2i.Vec, flipy bool) (*Map2, error)

NewMap2 returns a 2d region to grid coordinates map.

func (*Map2) ToV2

func (m *Map2) ToV2(p v2i.Vec) v2.Vec

ToV2 converts grid integer coordinates to 2d region float coordinates.

func (*Map2) ToV2i

func (m *Map2) ToV2i(p v2.Vec) v2i.Vec

ToV2i converts 2d region float coordinates to grid integer coordinates.

type MaxFunc

type MaxFunc func(a, b float64) float64

MaxFunc is a maximum function for SDF blending.

func PolyMax

func PolyMax(k float64) MaxFunc

PolyMax returns a maximum function (Try k = 0.1, a bigger k gives a bigger fillet).

type MeshSDF2

type MeshSDF2 struct {
	// contains filtered or unexported fields
}

MeshSDF2 is SDF2 made from a set of line segments.

func (*MeshSDF2) BoundingBox

func (s *MeshSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a 2d mesh.

func (*MeshSDF2) Boxes

func (s *MeshSDF2) Boxes() []*Box2

Boxes returns the full set of quadtree boxes.

func (*MeshSDF2) Evaluate

func (s *MeshSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance for a 2d mesh.

type MeshSDF2Slow

type MeshSDF2Slow struct {
	// contains filtered or unexported fields
}

MeshSDF2Slow is SDF2 made from a set of line segments.

func (*MeshSDF2Slow) BoundingBox

func (s *MeshSDF2Slow) BoundingBox() Box2

BoundingBox returns the bounding box of a 2d mesh.

func (*MeshSDF2Slow) Evaluate

func (s *MeshSDF2Slow) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance for a 2d mesh.

type MeshSDF3

type MeshSDF3 struct {
	// contains filtered or unexported fields
}

MeshSDF3 is an SDF3 made from a set of 3d triangles.

func (*MeshSDF3) BoundingBox

func (s *MeshSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a 3d mesh.

func (*MeshSDF3) Evaluate

func (s *MeshSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance for a 2d mesh.

type MeshSDF3Slow

type MeshSDF3Slow struct {
	// contains filtered or unexported fields
}

MeshSDF3Slow is an SDF3 made from a set of 3d triangles.

func (*MeshSDF3Slow) BoundingBox

func (s *MeshSDF3Slow) BoundingBox() Box3

BoundingBox returns the bounding box of a 3d mesh.

func (*MeshSDF3Slow) Evaluate

func (s *MeshSDF3Slow) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance for a 2d mesh.

type MinFunc

type MinFunc func(a, b float64) float64

MinFunc is a minimum functions for SDF blending.

func ChamferMin

func ChamferMin(k float64) MinFunc

ChamferMin returns a minimum function that makes a 45-degree chamfered edge (the diagonal of a square of size <r>). TODO: why the holes in the rendering?

func ExpMin

func ExpMin(k float64) MinFunc

ExpMin returns a minimum function with exponential smoothing (k = 32).

func PolyMin

func PolyMin(k float64) MinFunc

PolyMin returns a minimum function (Try k = 0.1, a bigger k gives a bigger fillet).

func PowMin

func PowMin(k float64) MinFunc

PowMin returns a minimum function (k = 8). TODO - weird results, is this correct?

func RoundMin

func RoundMin(k float64) MinFunc

RoundMin returns a minimum function that uses a quarter-circle to join the two objects smoothly.

type OffsetSDF2

type OffsetSDF2 struct {
	// contains filtered or unexported fields
}

OffsetSDF2 offsets the distance function of an existing SDF2.

func (*OffsetSDF2) BoundingBox

func (s *OffsetSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of an offset SDF2.

func (*OffsetSDF2) Evaluate

func (s *OffsetSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to an offset SDF2.

type OffsetSDF3

type OffsetSDF3 struct {
	// contains filtered or unexported fields
}

OffsetSDF3 offsets the distance function of an existing SDF3.

func (*OffsetSDF3) BoundingBox

func (s *OffsetSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of an offset SDF3.

func (*OffsetSDF3) Evaluate

func (s *OffsetSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to an offset SDF3.

type Polygon

type Polygon struct {
	// contains filtered or unexported fields
}

Polygon stores a set of 2d polygon vertices.

func NewPolygon

func NewPolygon() *Polygon

NewPolygon returns an empty polygon.

func (*Polygon) Add

func (p *Polygon) Add(x, y float64) *PolygonVertex

Add an x,y vertex to a polygon.

func (*Polygon) AddV2

func (p *Polygon) AddV2(x v2.Vec) *PolygonVertex

AddV2 adds a V2 vertex to a polygon.

func (*Polygon) AddV2Set

func (p *Polygon) AddV2Set(x []v2.Vec)

AddV2Set adds a set of V2 vertices to a polygon.

func (*Polygon) Close

func (p *Polygon) Close()

Close closes the polygon.

func (*Polygon) Closed

func (p *Polygon) Closed() bool

Closed returns true/fale if the polygon is closed/open.

func (*Polygon) Drop

func (p *Polygon) Drop()

Drop the last vertex from the list.

func (*Polygon) Mesh2D

func (p *Polygon) Mesh2D() (SDF2, error)

Mesh2D returns the Mesh2D for the polygon.

func (*Polygon) Reverse

func (p *Polygon) Reverse()

Reverse reverses the order the vertices are returned.

func (*Polygon) Vertices

func (p *Polygon) Vertices() []v2.Vec

Vertices returns the vertices of the polygon.

type PolygonVertex

type PolygonVertex struct {
	// contains filtered or unexported fields
}

PolygonVertex is a polygon vertex.

func (*PolygonVertex) Arc

func (v *PolygonVertex) Arc(radius float64, facets int) *PolygonVertex

Arc replaces a line segment with a circular arc.

func (*PolygonVertex) Chamfer

func (v *PolygonVertex) Chamfer(size float64) *PolygonVertex

Chamfer marks the polygon vertex for chamfering.

func (*PolygonVertex) Polar

func (v *PolygonVertex) Polar() *PolygonVertex

Polar treats the polygon vertex values as polar coordinates (r, theta).

func (*PolygonVertex) Rel

func (v *PolygonVertex) Rel() *PolygonVertex

Rel positions the polygon vertex relative to the prior vertex.

func (*PolygonVertex) Smooth

func (v *PolygonVertex) Smooth(radius float64, facets int) *PolygonVertex

Smooth marks the polygon vertex for smoothing.

type RotateCopySDF2

type RotateCopySDF2 struct {
	// contains filtered or unexported fields
}

RotateCopySDF2 copies an SDF2 n times in a full circle.

func (*RotateCopySDF2) BoundingBox

func (s *RotateCopySDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a rotate/copy SDF2.

func (*RotateCopySDF2) Evaluate

func (s *RotateCopySDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a rotate/copy SDF2.

type RotateCopySDF3

type RotateCopySDF3 struct {
	// contains filtered or unexported fields
}

RotateCopySDF3 rotates and creates N copies of an SDF3 about the z-axis.

func (*RotateCopySDF3) BoundingBox

func (s *RotateCopySDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a rotate/copy SDF3.

func (*RotateCopySDF3) Evaluate

func (s *RotateCopySDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a rotate/copy SDF3.

type RotateUnionSDF2

type RotateUnionSDF2 struct {
	// contains filtered or unexported fields
}

RotateUnionSDF2 defines a union of rotated SDF2s.

func (*RotateUnionSDF2) BoundingBox

func (s *RotateUnionSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a union of rotated SDF2s.

func (*RotateUnionSDF2) Evaluate

func (s *RotateUnionSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a union of rotated SDF2s.

func (*RotateUnionSDF2) SetMin

func (s *RotateUnionSDF2) SetMin(min MinFunc)

SetMin sets the minimum function to control blending.

type RotateUnionSDF3

type RotateUnionSDF3 struct {
	// contains filtered or unexported fields
}

RotateUnionSDF3 creates a union of SDF3s rotated about the z-axis.

func (*RotateUnionSDF3) BoundingBox

func (s *RotateUnionSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a rotate/union object.

func (*RotateUnionSDF3) Evaluate

func (s *RotateUnionSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a rotate/union object.

func (*RotateUnionSDF3) SetMin

func (s *RotateUnionSDF3) SetMin(min MinFunc)

SetMin sets the minimum function to control blending.

type SDF2

type SDF2 interface {
	Evaluate(p v2.Vec) float64
	BoundingBox() Box2
}

SDF2 is the interface to a 2d signed distance function object.

func ANSIButtressThread

func ANSIButtressThread(
	radius float64,
	pitch float64,
) (SDF2, error)

ANSIButtressThread returns the 2d profile for an ANSI 45/7 buttress thread. https://en.wikipedia.org/wiki/Buttress_thread AMSE B1.9-1973

func AcmeThread

func AcmeThread(
	radius float64,
	pitch float64,
) (SDF2, error)

AcmeThread returns the 2d profile for an acme thread.

func ArcSpiral2D

func ArcSpiral2D(
	a, k float64,
	start, end float64,
	d float64,
) (SDF2, error)

ArcSpiral2D returns a 2d Archimedean spiral (r = m*theta + b).

func Array2D

func Array2D(sdf SDF2, num v2i.Vec, step v2.Vec) SDF2

Array2D returns an XY grid array of an existing SDF2.

func Box2D

func Box2D(size v2.Vec, round float64) SDF2

Box2D returns a 2d box.

func Cache2D

func Cache2D(sdf SDF2) SDF2

Cache2D wraps the passed SDF2 with an evaluation cache.

func Center2D

func Center2D(s SDF2) SDF2

Center2D centers the origin of an SDF2 on it's bounding box.

func CenterAndScale2D

func CenterAndScale2D(s SDF2, k float64) SDF2

CenterAndScale2D centers the origin of an SDF2 on it's bounding box, and then scales it. Distance is correct with scaling.

func Circle2D

func Circle2D(radius float64) (SDF2, error)

Circle2D returns the SDF2 for a 2d circle.

func CubicSpline2D

func CubicSpline2D(knot []v2.Vec) (SDF2, error)

CubicSpline2D returns an SDF2 made from a set of cubic splines.

func Cut2D

func Cut2D(sdf SDF2, a, v v2.Vec) SDF2

Cut2D cuts the SDF2 along a line from a in direction v. The SDF2 to the right of the line remains.

func Difference2D

func Difference2D(s0, s1 SDF2) SDF2

Difference2D returns the difference of two SDF2 objects, s0 - s1.

func Elongate2D

func Elongate2D(sdf SDF2, h v2.Vec) SDF2

Elongate2D returns the elongation of an SDF2.

func FlatFlankCam2D

func FlatFlankCam2D(
	distance float64,
	baseRadius float64,
	noseRadius float64,
) (SDF2, error)

FlatFlankCam2D creates a 2D cam profile. The profile is made from a base circle, a smaller nose circle and flat, tangential flanks. The base circle is centered on the origin. The nose circle is located on the positive y axis.

func GearRack2D

func GearRack2D(k *GearRackParms) (SDF2, error)

GearRack2D returns the 2D profile for a gear rack.

func ISOThread

func ISOThread(
	radius float64,
	pitch float64,
	external bool,
) (SDF2, error)

ISOThread returns the 2d profile for an ISO/UTS thread. https://en.wikipedia.org/wiki/ISO_metric_screw_thread https://en.wikipedia.org/wiki/Unified_Thread_Standard

func Intersect2D

func Intersect2D(s0, s1 SDF2) SDF2

Intersect2D returns the intersection of two SDF2s.

func Line2D

func Line2D(l, round float64) SDF2

Line2D returns a line from (-l/2,0) to (l/2,0).

func LineOf2D

func LineOf2D(s SDF2, p0, p1 v2.Vec, pattern string) SDF2

LineOf2D returns a union of 2D objects positioned along a line from p0 to p1.

func MakeFlatFlankCam

func MakeFlatFlankCam(
	lift float64,
	duration float64,
	maxDiameter float64,
) (SDF2, error)

MakeFlatFlankCam makes a flat flank cam profile from design parameters.

func MakeThreeArcCam

func MakeThreeArcCam(
	lift float64,
	duration float64,
	maxDiameter float64,
	k float64,
) (SDF2, error)

MakeThreeArcCam makes a three arc cam profile from design parameters.

func Mesh2D

func Mesh2D(mesh []*Line2) (SDF2, error)

Mesh2D returns an SDF2 made from a set of line segments.

func Mesh2DSlow

func Mesh2DSlow(mesh []*Line2) (SDF2, error)

Mesh2DSlow returns an SDF2 made from a set of line segments.

func Multi2D

func Multi2D(s SDF2, positions v2.VecSet) SDF2

Multi2D creates a union of an SDF2 at a set of 2D positions.

func NewFlange1

func NewFlange1(
	distance float64,
	centerRadius float64,
	sideRadius float64,
) SDF2

NewFlange1 returns a flange shape made from a center circle with two side circles.

func Offset2D

func Offset2D(sdf SDF2, offset float64) SDF2

Offset2D returns an SDF2 that offsets the distance function of another SDF2.

func PlasticButtressThread

func PlasticButtressThread(
	radius float64,
	pitch float64,
) (SDF2, error)

PlasticButtressThread returns the 2d profile for a screw top style plastic buttress thread. Similar to ANSI 45/7 - but with more corner rounding

func Polygon2D

func Polygon2D(vertex []v2.Vec) (SDF2, error)

Polygon2D returns a Mesh2D built with polygon vertices.

func RotateCopy2D

func RotateCopy2D(sdf SDF2, n int) SDF2

RotateCopy2D rotates and copies an SDF2 n times in a full circle.

func RotateUnion2D

func RotateUnion2D(sdf SDF2, num int, step M33) SDF2

RotateUnion2D returns a union of rotated SDF2s.

func ScaleUniform2D

func ScaleUniform2D(sdf SDF2, k float64) SDF2

ScaleUniform2D scales an SDF2 by k on each axis. Distance is correct with scaling.

func Slice2D

func Slice2D(
	sdf SDF3,
	a v3.Vec,
	n v3.Vec,
) SDF2

Slice2D returns an SDF2 created from a planar slice through an SDF3.

func Text2D

func Text2D(f *truetype.Font, t *Text, h float64) (SDF2, error)

Text2D returns a sized SDF2 for a text object.

func ThreeArcCam2D

func ThreeArcCam2D(
	distance float64,
	baseRadius float64,
	noseRadius float64,
	flankRadius float64,
) (SDF2, error)

ThreeArcCam2D creates a 2D cam profile. The profile is made from a base circle, a smaller nose circle and circular flank arcs. The base circle is centered on the origin. The nose circle is located on the positive y axis. The flank arcs are tangential to the base and nose circles.

func Transform2D

func Transform2D(sdf SDF2, m M33) SDF2

Transform2D applies a transformation matrix to an SDF2. Distance is *not* preserved with scaling.

func Union2D

func Union2D(sdf ...SDF2) SDF2

Union2D returns the union of multiple SDF2 objects.

type SDF3

type SDF3 interface {
	Evaluate(p v3.Vec) float64
	BoundingBox() Box3
}

SDF3 is the interface to a 3d signed distance function object.

func Array3D

func Array3D(sdf SDF3, num v3i.Vec, step v3.Vec) SDF3

Array3D returns an XYZ array of a given SDF3

func Box3D

func Box3D(size v3.Vec, round float64) (SDF3, error)

Box3D return an SDF3 for a 3d box (rounded corners with round > 0).

func Capsule3D

func Capsule3D(height, radius float64) (SDF3, error)

Capsule3D return an SDF3 for a capsule.

func Cone3D

func Cone3D(height, r0, r1, round float64) (SDF3, error)

Cone3D returns the SDF3 for a trucated cone (round > 0 gives rounded edges).

func Cut3D

func Cut3D(sdf SDF3, a, n v3.Vec) SDF3

Cut3D cuts an SDF3 along a plane passing through a with normal n. The SDF3 on the same side as the normal remains.

func Cylinder3D

func Cylinder3D(height, radius, round float64) (SDF3, error)

Cylinder3D return an SDF3 for a cylinder (rounded edges with round > 0).

func Difference3D

func Difference3D(s0, s1 SDF3) SDF3

Difference3D returns the difference of two SDF3s, s0 - s1.

func Elongate3D

func Elongate3D(sdf SDF3, h v3.Vec) SDF3

Elongate3D returns the elongation of an SDF3.

func Extrude3D

func Extrude3D(sdf SDF2, height float64) SDF3

Extrude3D does a linear extrude on an SDF3.

func ExtrudeRounded3D

func ExtrudeRounded3D(sdf SDF2, height, round float64) (SDF3, error)

ExtrudeRounded3D extrudes an SDF2 to an SDF3 with rounded edges.

func Gyroid3D

func Gyroid3D(scale v3.Vec) (SDF3, error)

Gyroid3D returns a 3d gyroid.

func Intersect3D

func Intersect3D(s0, s1 SDF3) SDF3

Intersect3D returns the intersection of two SDF3s.

func LineOf3D

func LineOf3D(s SDF3, p0, p1 v3.Vec, pattern string) SDF3

LineOf3D returns a union of 3D objects positioned along a line from p0 to p1.

func Loft3D

func Loft3D(sdf0, sdf1 SDF2, height, round float64) (SDF3, error)

Loft3D extrudes an SDF3 that transitions between two SDF2 shapes.

func Mesh3D

func Mesh3D(mesh []*Triangle3) (SDF3, error)

Mesh3D returns an SDF3 made from a set of triangles.

func Mesh3DSlow

func Mesh3DSlow(mesh []*Triangle3) (SDF3, error)

Mesh3DSlow returns an SDF3 made from a set of triangles.

func Multi3D

func Multi3D(s SDF3, positions v3.VecSet) SDF3

Multi3D creates a union of an SDF3 at translated positions.

func NewVoxelSDF3

func NewVoxelSDF3(s SDF3, meshCells int, progress chan float64) SDF3

NewVoxelSDF3 returns a VoxelSDF3. This populates the whole cache from the given SDF. The progress listener may be nil.

func Offset3D

func Offset3D(sdf SDF3, offset float64) SDF3

Offset3D returns an SDF3 that offsets the distance function of another SDF3.

func Orient3D

func Orient3D(s SDF3, base v3.Vec, directions v3.VecSet) SDF3

Orient3D creates a union of an SDF3 at oriented directions.

func Revolve3D

func Revolve3D(sdf SDF2) (SDF3, error)

Revolve3D returns an SDF3 for a solid of revolution.

func RevolveTheta3D

func RevolveTheta3D(sdf SDF2, theta float64) (SDF3, error)

RevolveTheta3D returns an SDF3 for a solid of revolution.

func RotateCopy3D

func RotateCopy3D(
	sdf SDF3,
	num int,
) SDF3

RotateCopy3D rotates and creates N copies of an SDF3 about the z-axis.

func RotateUnion3D

func RotateUnion3D(sdf SDF3, num int, step M44) SDF3

RotateUnion3D creates a union of SDF3s rotated about the z-axis.

func ScaleExtrude3D

func ScaleExtrude3D(sdf SDF2, height float64, scale v2.Vec) SDF3

ScaleExtrude3D extrudes an SDF2 and scales it over the height of the extrusion.

func ScaleTwistExtrude3D

func ScaleTwistExtrude3D(sdf SDF2, height, twist float64, scale v2.Vec) SDF3

ScaleTwistExtrude3D extrudes an SDF2 and scales and twists it over the height of the extrusion.

func ScaleUniform3D

func ScaleUniform3D(sdf SDF3, k float64) SDF3

ScaleUniform3D uniformly scales an SDF3 on all axes.

func Screw3D

func Screw3D(
	thread SDF2,
	length float64,
	taper float64,
	pitch float64,
	starts int,
) (SDF3, error)

Screw3D returns a screw SDF3.

func Shell3D

func Shell3D(sdf SDF3, thickness float64) (SDF3, error)

Shell3D returns an SDF3 that shells the surface of an existing SDF3.

func Sphere3D

func Sphere3D(radius float64) (SDF3, error)

Sphere3D return an SDF3 for a sphere.

func Transform3D

func Transform3D(sdf SDF3, matrix M44) SDF3

Transform3D applies a transformation matrix to an SDF3.

func TwistExtrude3D

func TwistExtrude3D(sdf SDF2, height, twist float64) SDF3

TwistExtrude3D extrudes an SDF2 while rotating by twist radians over the height of the extrusion.

func Union3D

func Union3D(sdf ...SDF3) SDF3

Union3D returns the union of multiple SDF3 objects.

type ScaleUniformSDF2

type ScaleUniformSDF2 struct {
	// contains filtered or unexported fields
}

ScaleUniformSDF2 scales another SDF2 on each axis.

func (*ScaleUniformSDF2) BoundingBox

func (s *ScaleUniformSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of an SDF2 with uniform scaling.

func (*ScaleUniformSDF2) Evaluate

func (s *ScaleUniformSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to an SDF2 with uniform scaling.

type ScaleUniformSDF3

type ScaleUniformSDF3 struct {
	// contains filtered or unexported fields
}

ScaleUniformSDF3 is an SDF3 scaled uniformly in XYZ directions.

func (*ScaleUniformSDF3) BoundingBox

func (s *ScaleUniformSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a uniformly scaled SDF3.

func (*ScaleUniformSDF3) Evaluate

func (s *ScaleUniformSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a uniformly scaled SDF3. The distance is correct with scaling.

type ScrewSDF3

type ScrewSDF3 struct {
	// contains filtered or unexported fields
}

ScrewSDF3 is a 3d screw form.

func (*ScrewSDF3) BoundingBox

func (s *ScrewSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a 3d screw form.

func (*ScrewSDF3) Evaluate

func (s *ScrewSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a 3d screw form.

type ShellSDF3

type ShellSDF3 struct {
	// contains filtered or unexported fields
}

ShellSDF3 shells the surface of an existing SDF3.

func (*ShellSDF3) BoundingBox

func (s *ShellSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a shelled SDF3.

func (*ShellSDF3) Evaluate

func (s *ShellSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a shelled SDF3.

type SliceSDF2

type SliceSDF2 struct {
	// contains filtered or unexported fields
}

SliceSDF2 creates an SDF2 from a planar slice through an SDF3.

func (*SliceSDF2) BoundingBox

func (s *SliceSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of the sliced SDF2.

func (*SliceSDF2) Evaluate

func (s *SliceSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the sliced SDF2.

type SorSDF3

type SorSDF3 struct {
	// contains filtered or unexported fields
}

SorSDF3 solid of revolution, SDF2 to SDF3.

func (*SorSDF3) BoundingBox

func (s *SorSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a solid of revolution.

func (*SorSDF3) Evaluate

func (s *SorSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a solid of revolution.

type SphereSDF3

type SphereSDF3 struct {
	// contains filtered or unexported fields
}

SphereSDF3 is a sphere.

func (*SphereSDF3) BoundingBox

func (s *SphereSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a sphere.

func (*SphereSDF3) Evaluate

func (s *SphereSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a sphere.

type Text

type Text struct {
	// contains filtered or unexported fields
}

Text stores a UTF8 string and it's rendering parameters.

func NewText

func NewText(s string) *Text

NewText returns a text object (text and alignment).

type ThreadParameters

type ThreadParameters struct {
	Name         string  // name of screw thread
	Radius       float64 // nominal major radius of screw
	Pitch        float64 // thread to thread distance of screw
	Taper        float64 // thread taper (radians)
	HexFlat2Flat float64 // hex head flat to flat distance
	Units        string  // "inch" or "mm"
}

ThreadParameters stores the values that define a thread.

func ThreadLookup

func ThreadLookup(name string) (*ThreadParameters, error)

ThreadLookup lookups the parameters for a thread by name.

func (*ThreadParameters) HexHeight

func (t *ThreadParameters) HexHeight() float64

HexHeight returns the hex head height (empirical).

func (*ThreadParameters) HexRadius

func (t *ThreadParameters) HexRadius() float64

HexRadius returns the hex head radius.

type ThreeArcCamSDF2

type ThreeArcCamSDF2 struct {
	// contains filtered or unexported fields
}

ThreeArcCamSDF2 is 2d cam profile. The profile is made from a base circle, a smaller nose circle and circular flank arcs.

func (*ThreeArcCamSDF2) BoundingBox

func (s *ThreeArcCamSDF2) BoundingBox() Box2

BoundingBox returns the bounding box for the cam.

func (*ThreeArcCamSDF2) Evaluate

func (s *ThreeArcCamSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the cam.

type TransformSDF2

type TransformSDF2 struct {
	// contains filtered or unexported fields
}

TransformSDF2 transorms an SDF2 with rotation, translation and scaling.

func (*TransformSDF2) BoundingBox

func (s *TransformSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of a transformed SDF2.

func (*TransformSDF2) Evaluate

func (s *TransformSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to a transformed SDF2. Distance is *not* preserved with scaling.

type TransformSDF3

type TransformSDF3 struct {
	// contains filtered or unexported fields
}

TransformSDF3 is an SDF3 transformed with a 4x4 transformation matrix.

func (*TransformSDF3) BoundingBox

func (s *TransformSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of a transformed SDF3.

func (*TransformSDF3) Evaluate

func (s *TransformSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a transformed SDF3. Distance is *not* preserved with scaling.

type Triangle2

type Triangle2 [3]v2.Vec

Triangle2 is a 2D triangle

func (Triangle2) Circumcenter

func (t Triangle2) Circumcenter() (v2.Vec, error)

Circumcenter returns the circumcenter of a triangle.

func (Triangle2) InCircumcircle

func (t Triangle2) InCircumcircle(p v2.Vec) (inside, done bool)

InCircumcircle return inside == true if the point is inside the circumcircle of the triangle. Returns done == true if the vertex and the subsequent x-ordered vertices are outside the circumcircle.

type Triangle3

type Triangle3 [3]v3.Vec

Triangle3 is a 3D triangle

func (*Triangle3) BoundingBox

func (t *Triangle3) BoundingBox() Box3

BoundingBox returns a bounding box for the triangle.

func (*Triangle3) Bounds

func (t *Triangle3) Bounds() rtreego.Rect

Bounds returns a r-tree bounding rectangle for the triangle.

func (*Triangle3) Degenerate

func (t *Triangle3) Degenerate(tolerance float64) bool

Degenerate returns true if the triangle is degenerate.

func (*Triangle3) Equals

func (t *Triangle3) Equals(a *Triangle3, tolerance float64) bool

Equals tests if two triangles are equal within tolerance.

func (*Triangle3) Normal

func (t *Triangle3) Normal() v3.Vec

Normal returns the normal vector to the plane defined by the 3D triangle.

type Triangle3Buffer

type Triangle3Buffer struct {
	// contains filtered or unexported fields
}

Triangle3Buffer buffers triangles before writing them to a channel.

func (*Triangle3Buffer) Close

func (a *Triangle3Buffer) Close() error

Close flushes out any remaining triangles in the buffer.

func (*Triangle3Buffer) Write

func (a *Triangle3Buffer) Write(in []*Triangle3) error

type Triangle3Writer

type Triangle3Writer interface {
	Write(in []*Triangle3) error
	Close() error
}

Triangle3Writer is the interface of a triangle writer/closer object.

func NewTriangle3Buffer

func NewTriangle3Buffer(out chan<- []*Triangle3) Triangle3Writer

NewTriangle3Buffer returns a Triangle3Buffer.

type UnionSDF2

type UnionSDF2 struct {
	// contains filtered or unexported fields
}

UnionSDF2 is a union of multiple SDF2 objects.

func (*UnionSDF2) BoundingBox

func (s *UnionSDF2) BoundingBox() Box2

BoundingBox returns the bounding box of an SDF2 union.

func (*UnionSDF2) Evaluate

func (s *UnionSDF2) Evaluate(p v2.Vec) float64

Evaluate returns the minimum distance to the SDF2 union.

func (*UnionSDF2) EvaluateSlow

func (s *UnionSDF2) EvaluateSlow(p v2.Vec) float64

EvaluateSlow returns the minimum distance to the SDF2 union.

func (*UnionSDF2) SetMin

func (s *UnionSDF2) SetMin(min MinFunc)

SetMin sets the minimum function to control SDF2 blending.

type UnionSDF3

type UnionSDF3 struct {
	// contains filtered or unexported fields
}

UnionSDF3 is a union of SDF3s.

func (*UnionSDF3) BoundingBox

func (s *UnionSDF3) BoundingBox() Box3

BoundingBox returns the bounding box of an SDF3 union.

func (*UnionSDF3) Evaluate

func (s *UnionSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to an SDF3 union.

func (*UnionSDF3) SetMin

func (s *UnionSDF3) SetMin(min MinFunc)

SetMin sets the minimum function to control blending.

type VoxelSDF3

type VoxelSDF3 struct {
	// contains filtered or unexported fields
}

VoxelSDF3 is the SDF that represents a pre-computed voxel-based SDF3. It can be used as a cache, or for smoothing.

CACHE: It can be used to speed up all evaluations required by the surface mesher at the cost of scene setup time and accuracy.

SMOOTHING (meshCells <<< renderer's meshCells): It performs trilinear mapping for inner values and may be used as a cache for any other SDF, losing some accuracy.

WARNING: It may lose sharp features, even if meshCells is high.

func (*VoxelSDF3) BoundingBox

func (m *VoxelSDF3) BoundingBox() Box3

BoundingBox returns the bounding box for a VoxelSDF3.

func (*VoxelSDF3) Evaluate

func (m *VoxelSDF3) Evaluate(p v3.Vec) float64

Evaluate returns the minimum distance to a VoxelSDF3.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL