From 533069fa436120a9a8162271b1dee12196d9865a Mon Sep 17 00:00:00 2001 From: Wouter Horlings Date: Mon, 8 Jul 2024 21:45:49 +0200 Subject: [PATCH 1/2] Delete old files --- cmd/basispatroon_broek/basispatroon_broek.go | 46 ----- cmd/oefenbocht/oefenbocht.go | 21 --- .../basispatroonbroek/basispatroon_broek.go | 168 ------------------ 3 files changed, 235 deletions(-) delete mode 100644 cmd/basispatroon_broek/basispatroon_broek.go delete mode 100644 cmd/oefenbocht/oefenbocht.go delete mode 100644 internal/basispatroonbroek/basispatroon_broek.go diff --git a/cmd/basispatroon_broek/basispatroon_broek.go b/cmd/basispatroon_broek/basispatroon_broek.go deleted file mode 100644 index a9cad3d..0000000 --- a/cmd/basispatroon_broek/basispatroon_broek.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "git.wtrh.nl/patterns/gopatterns/internal/basispatroonbroek" - "github.com/tdewolff/canvas" - "github.com/tdewolff/canvas/renderers" -) - -func main() { - broek := basispatroonbroek.Basispatroonbroek{ - Heupwijdte: 1030, - Taillewijdte: 850, - Zithoogte: 310, - Tussenbeenlengte: 830, - Pijpbreedte: 250, - Taillebandbreedte: 40, - ExtraKniebreedte: 15, - Eigenaar: "Wouter Horlings", - } - - pat := broek.GenereerPatroon() - c := canvas.New(200, 200) - err := pat.ToCanvas(c, false) - if err != nil { - panic(err) - } - c.Fit(10) - - err = renderers.Write("broek2.pdf", c) - if err != nil { - panic(err) - } - - //_, err := os.OpenFile("broek.svg", os.O_RDWR|os.O_CREATE, 0o755) - //if err != nil { - // panic(err) - //} - // - //points = points.Normalize() - //_, max := points.Box() - //canvas := svg.New(f) - // - //canvas.Startview(max.X+40, max.Y+40, -20, -20, max.X+40, max.Y+40) - //broek.Voorbeen(canvas) - //canvas.End() -} diff --git a/cmd/oefenbocht/oefenbocht.go b/cmd/oefenbocht/oefenbocht.go deleted file mode 100644 index 0753e71..0000000 --- a/cmd/oefenbocht/oefenbocht.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -func main() { - // pat := pattern.NewPatroon() - // basePoint := point.NewAbsolutePoint(1, 1, 0, 0) - // pat.AddPoint(basePoint) - // pat.AddPoint(point.NewRelativePoint(basePoint, 5, 5, 1)) - // pat.AddPoint(point.NewRelativePoint(&basePoint, 10, 0, 2)) - // pat.AddPoint(point.NewRelativePoint(&basePoint, 7.5, 2.5, 4)) - // pat.AddPoint(point.NewRelativePoint(&basePoint, 5, 0, 3)) - // pat.AddLine(path.NewBezierCurve(pat.GetPoint(0), pat.GetPoint(1), pat.GetPoint(2))) - // pat.AddLine(path.NewQBezierCurve(pat.GetPoint(0), pat.GetPoint(1), pat.GetPoint(3), pat.GetPoint(4))) - // secondPoint := point.NewAbsolutePoint(5, 10, 0, 10) - // pat.AddPoint(secondPoint) - // pat.AddPoint(point.NewRelativePointBelow(secondPoint, 2, 11)) - // pat.AddPoint(point.NewRelativePointBelow(secondPoint, 4, 12)) - // pat.AddPoint(point.NewRelativePointBelow(secondPoint, 6, 13)) - // pat.AddPoint(point.NewRelativePointBelow(secondPoint, 8, 14)) - // pat.AddLine(path.NewMultiPointCurve(math.Pi/-8, math.Pi/8, pat.GetPoints(10, 11, 12, 13)...)) - // pat.ToSVG("oefenbocht.svg", renderer.CentiMeter) -} diff --git a/internal/basispatroonbroek/basispatroon_broek.go b/internal/basispatroonbroek/basispatroon_broek.go deleted file mode 100644 index ecacb21..0000000 --- a/internal/basispatroonbroek/basispatroon_broek.go +++ /dev/null @@ -1,168 +0,0 @@ -package basispatroonbroek - -import ( - "math" - - "git.wtrh.nl/patterns/gopatterns/pkg/pattern" - "git.wtrh.nl/patterns/gopatterns/pkg/pattern/path" - "git.wtrh.nl/patterns/gopatterns/pkg/pattern/point" - "git.wtrh.nl/patterns/gopatterns/pkg/vector" -) - -type Basispatroonbroek struct { - Heupwijdte float64 - Taillewijdte float64 - Zithoogte float64 - Tussenbeenlengte float64 - Pijpbreedte float64 - Taillebandbreedte float64 - ExtraKniebreedte float64 - Eigenaar string -} - -func (b *Basispatroonbroek) GenereerPatroon() *pattern.Pattern { - p := pattern.NewPattern() - b.generatePoints(p) - b.generateLines(p) - return p -} - -func (b *Basispatroonbroek) generatePoints(p *pattern.Pattern) { - //p0 := point.NewAbsolutePoint(0, 0, 0, "0") - //p.AddPoint(p0) - //p1 := p.RelativePoint(p0).WithYOffset(-(b.Zithoogte + 10 - b.Taillebandbreedte)).MarkWith("1").Done() - //// p.AddPoint(point.NewRelativePointBelow(p.GetPoint(0), b.Zithoogte+1-b.Taillebandbreedte, 1)) - //p2 := p.RelativePoint(p1).WithYOffset(-b.Tussenbeenlengte).MarkWith("2").Done() - //// p.AddPoint(point.NewRelativePointBelow(p.GetPoint(1), b.Tussenbeenlengte, 2)) - // - //p3 := p.RelativePoint(p2).WithYOffset(p1.Vector().Distance(p2.Vector())/2 + 50). - // MarkWith("3").Done() - // - //// p.AddPoint(point.NewRelativePointAbove(p.GetPoint(2), p.GetPoint(1).Vector().Distance(p.GetPoint(2).Vector())/2+5, 3)) - //p4 := p.RelativePoint(p1).WithYOffset(b.Zithoogte / 4).MarkWith("4").Done() - //// p.AddPoint(point.NewRelativePointAbove(p.GetPoint(1), b.Zithoogte/4, 4)) - //p5 := p.RelativePoint(p1).WithXOffset(-b.Heupwijdte / 12).MarkWith("5").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(1), b.Heupwijdte/12, 5)) - //p6 := p.RelativePoint(p4).WithXOffset(-b.Heupwijdte / 12).MarkWith("6").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(4), b.Heupwijdte/12, 6)) - //p7 := p.RelativePoint(p0).WithXOffset(-b.Heupwijdte / 12).MarkWith("7").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(0), b.Heupwijdte/12, 7)) - //p.RelativePoint(p6).WithXOffset(b.Heupwijdte/4 + 20).MarkWith("8").Done() - //// p.AddPoint(point.NewRelativePointRight(p.GetPoint(6), b.Heupwijdte/4+2, 8)) - //p9 := p.RelativePoint(p5).WithXOffset(-(b.Heupwijdte/16 + 5)).MarkWith("9").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(5), b.Heupwijdte/16+0.5, 9)) - //p10 := p.RelativePoint(p7).WithXOffset(10).MarkWith("10").Done() - //// p.AddPoint(point.NewRelativePointRight(p.GetPoint(7), 1, 10)) - //p.RelativePoint(p10).WithXOffset(b.Taillewijdte/4 + 25).MarkWith("11").Done() - //// p.AddPoint(point.NewRelativePointRight(p.GetPoint(10), b.Taillewijdte/4+2.5, 11)) - //p12 := p.RelativePoint(p2).WithXOffset(b.Pijpbreedte / 2).MarkWith("12").Done() - //// p.AddPoint(point.NewRelativePointRight(p.GetPoint(2), b.Pijpbreedte/2, 12)) - //p13 := p.RelativePoint(p2).WithXOffset(-b.Pijpbreedte / 2).MarkWith("13").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(2), b.Pijpbreedte/2, 13)) - //p14 := p.RelativePoint(p3).WithXOffset(b.Pijpbreedte/2 + b.ExtraKniebreedte).MarkWith("14").Done() - //// p.AddPoint(point.NewRelativePointRight(p.GetPoint(3), b.Pijpbreedte/2+1.5, 14)) - //p15 := p.RelativePoint(p3).WithXOffset(-(b.Pijpbreedte/2 + b.ExtraKniebreedte)).MarkWith("15").Done() - //// p.AddPoint(point.NewRelativePointLeft(p.GetPoint(3), b.Pijpbreedte/2+1.5, 15)) - //p1To5Distance := p1.Vector().Distance(p5.Vector()) - //p16 := p.RelativePoint(p5).WithXOffset(p1To5Distance / 4).MarkWith("16").Done() - //p17 := p.RelativePoint(p6).WithXOffset(p1To5Distance / 4).MarkWith("17").Done() - //p18 := p.RelativePoint(p7).WithXOffset(p1To5Distance / 4).MarkWith("18").Done() - //p.AddPoint(point.NewBetweenPoint(p16, p18, 0.5, "19")) - //p20 := p.RelativePoint(p18).WithXOffset(20).MarkWith("20").Done() - //distance20to21 := 10.0 - //p21 := p.RelativePoint(p20).WithYOffset(distance20to21).MarkWith("21").Done() - //p22 := p.RelativePoint(p9).WithXOffset(-(p5.Vector().Distance(p9.Vector())/2 + 5)).MarkWith("22").Done() - //p.RelativePoint(p22).WithYOffset(-5).MarkWith("23").Done() - //distance20to24 := math.Sqrt(math.Pow(b.Taillewijdte/4+45, 2) - math.Pow(distance20to21, 2)) - //p24 := p.RelativePoint(p20).WithXOffset(distance20to24).MarkWith("24").Done() - //p.AddPoint(point.NewBetweenPoint(p21, p24, 0.5, "25")) - //p.RelativePoint(p17).WithXOffset(b.Heupwijdte/4 + 30).MarkWith("26").Done() - //p.RelativePoint(p12).WithXOffset(20).MarkWith("27").Done() - //p.RelativePoint(p13).WithXOffset(-20).MarkWith("28").Done() - //p.RelativePoint(p14).WithXOffset(20).MarkWith("29").Done() - //p.RelativePoint(p15).WithXOffset(-20).MarkWith("30").Done() -} - -func (b *Basispatroonbroek) generateLines(p *pattern.Pattern) { - p.AddLine(path.NewPath(p.GetPoints("15", "13", "12", "14")...)) - p.AddLine(path.NewPath(p.GetPoints("6", "10", "11")...)) - p15 := p.GetPoint("15") - p9 := p.GetPoint("9") - p13 := p.GetPoint("13") - pstart15 := point.NewBetweenPoint(p13, p15, 1.5, "109") - p.AddPoint(pstart15) - p.AddLine(path.NewSpline(pstart15, nil, p15, p9)) - hp5 := point.NewRelativePointWithVector(p.GetPoint("5"), vector.Vector{X: 30, Y: 0}.Rotate(3*math.Pi/4), "110") - p.AddLine(path.NewSpline(nil, nil, p.GetPoint("6"), hp5, p9)) - p25 := p.GetPoint("25") - p21 := p.GetPoint("21") - p24 := p.GetPoint("24") - p19 := p.GetPoint("19") - hp251 := point.NewRelativePoint(p25).WithYOffset(-25 / 2).Done() - hp252 := point.NewRelativePoint(p25).WithYOffset(25 / 2).Done() - hp253 := point.NewRelativePoint(p25).WithXOffset(120).Done() - p.AddLine(path.NewPath(p19, p21, hp251, hp253, hp252, p24)) - - hp3 := point.NewBetweenPoint(p.GetPoint("14"), p.GetPoint("8"), 0.5, "17") - hp4 := point.NewRelativePointLeft(hp3, 5, "21") - - hp7 := point.NewBetweenPoint(p.GetPoint("8"), p.GetPoint("11"), 0.5, "17") - hp8 := point.NewRelativePointRight(hp7, 20, "22") - hp10 := point.NewBetweenPoint(p.GetPoint("12"), p.GetPoint("14"), 1.3, "112") - p.AddLine(path.NewSpline(hp10, hp8, p.GetPoint("14"), hp4, p.GetPoint("8"), p.GetPoint("11"))) - - hp16 := point.NewRelativePointWithVector(p.GetPoint("16"), vector.Vector{X: 45, Y: 0}.Rotate(3*math.Pi/4), "110") - hp19 := point.NewBetweenPoint(p21, p19, 1.4, "0") - p23 := p.GetPoint("23") - hp23 := point.NewRelativePointWithVector(p23, vector.Vector{X: 70, Y: 0}.Rotate(-math.Pi/10), "111") - p.AddLine(path.NewSpline(hp19, hp23, p19, hp16, p23)) - p30 := p.GetPoint("30") - p28 := p.GetPoint("28") - hp30 := point.NewBetweenPoint(p28, p30, 1.5, "0") - p.AddLine(path.NewSpline(nil, hp30, p23, p30)) - p.AddLine(path.NewPath(p30, p28)) - - p29 := p.GetPoint("29") - p27 := p.GetPoint("27") - p.AddLine(path.NewPath(p29, p27)) - hp28 := point.NewRelativePointRight(point.NewBetweenPoint(p28, p27, 0.5, "0"), 10, "0") - p.AddLine(path.NewSpline(nil, nil, p27, hp28, p28)) - - p26 := p.GetPoint("26") - hp13 := point.NewBetweenPoint(p29, p26, 0.5, "17") - hp14 := point.NewRelativePointLeft(hp13, 5, "21") - - hp17 := point.NewBetweenPoint(p26, p24, 0.5, "17") - hp18 := point.NewRelativePointRight(hp17, 20, "22") - hp110 := point.NewBetweenPoint(p27, p29, 1.3, "112") - p.AddLine(path.NewSpline(hp110, hp18, p29, hp14, p26, p24)) - // p.AddLine(path.NewStraightLine(p.GetPoint(19), p.GetPoint(21))) - // p.AddLine(path.NewStraightLine(hp251, p.GetPoint(21))) - // p.AddLine(path.NewStraightLine(hp251, hp253)) - // p.AddLine(path.NewStraightLine(hp252, hp253)) - // p.AddLine(path.NewStraightLine(hp252, p.GetPoint(24))) - // p19 := p.GetPoint(19) - // p23 := p.GetPoint(23) - // p.AddLine(path.NewMultiPointCurve(0.0, p.GetPoint(21).Position().Direction(p.GetPoint(19).Position()), p23, p19)) - // p.AddLine(path.NewMultiPointCurve(-0.18, -math.Pi+0.18, p.GetPoints(28, 27)...)) - // hp9 := point.NewBetweenPoint(p.GetPoint(29), p.GetPoint(26), 0.5, 0) - // hp10 := point.NewRelativePointLeft(hp9, 0.3, 0) - // p.AddLine(path.NewMultiPointCurve(math.Pi/2, -math.Pi/2, p.GetPoint(29), hp10, p.GetPoint(26), p.GetPoint(24))) - // p.AddLine(path.NewMultiPointCurve(p.GetPoint(28).Position().Direction(p.GetPoint(30).Position()), -math.Pi/2, p.GetPoint(30), p.GetPoint(23))) - // p.AddLine(path.NewStraightLine(p.GetPoint(28), p.GetPoint(30))) - // p.AddLine(path.NewStraightLine(p.GetPoint(27), p.GetPoint(29))) -} - -//func (b *Basispatroonbroek) Voorbeen(canvas *svg.SVG) { -// p := b.GeneratePoints().Normalize() -// p.Draw(canvas) -// p.Line(canvas, 15, 13, 12, 14) -// p.Line(canvas, 10, 11) -// pa := p[14].Above(p[14].Distance(p[8]) / 3) -// pb := p[8].Below(p[14].Distance(p[8]) / 3) -// util.Bezier(canvas, p[14], pa, pb, p[8]) -// p15p9half := p[9].Subtract(p[15]).Divide(2) -// pc := p[15].Add(p15p9half).Add(p15p9half.Unit().Rotate(math.Pi / 2).Multiply(3 * float64(b.Eenheid))) -// -// util.Qbez(canvas, p[9], pc, p[15]) -//} From 7834785c72b34a1813c4e39e4daf18c6d5c68ac2 Mon Sep 17 00:00:00 2001 From: Wouter Horlings Date: Mon, 8 Jul 2024 22:08:20 +0200 Subject: [PATCH 2/2] Fix linter issues --- .golangci.yml | 2 ++ cmd/gopatterns/gopatterns.go | 7 ++-- pkg/pattern/dimensions.go | 2 +- pkg/pattern/pattern.go | 1 + pkg/pattern/point/extend_point.go | 3 +- pkg/pattern/point/point.go | 1 + pkg/pattern/template/point.go | 53 ++++++++++++++++++++++++++++--- pkg/pattern/template/position.go | 5 ++- pkg/pattern/template/renderer.go | 19 ++++++++--- pkg/pattern/template/storage.go | 5 +-- pkg/pattern/template/value.go | 4 ++- 11 files changed, 83 insertions(+), 19 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 4ec9dd9..0d46f05 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -42,6 +42,8 @@ linters-settings: - github.com/tdewolff/canvas - github.com/tdewolff/canvas/renderers - gitlab.com/Achilleshiel/gosplines + - gitlab.com/slxh/go/env + gci: sections: diff --git a/cmd/gopatterns/gopatterns.go b/cmd/gopatterns/gopatterns.go index 3be3608..38d3379 100644 --- a/cmd/gopatterns/gopatterns.go +++ b/cmd/gopatterns/gopatterns.go @@ -4,12 +4,12 @@ import ( _ "embed" "flag" "fmt" - "git.wtrh.nl/patterns/gopatterns/pkg/pattern/template" - "gitlab.com/slxh/go/env" "log/slog" "os" - gotemplate "text/template" + + "git.wtrh.nl/patterns/gopatterns/pkg/pattern/template" + "gitlab.com/slxh/go/env" ) //go:embed combined_pdf.tex.template @@ -54,6 +54,7 @@ gopatterns [-templates ] [-out ] input-file } files := make([]string, 0) + for _, arg := range args { pattern, err := template.LoadPattern(arg) if err != nil { diff --git a/pkg/pattern/dimensions.go b/pkg/pattern/dimensions.go index 985281a..c967574 100644 --- a/pkg/pattern/dimensions.go +++ b/pkg/pattern/dimensions.go @@ -2,11 +2,11 @@ package pattern import ( "fmt" - "gopkg.in/yaml.v3" "io/fs" "math" "gopkg.in/Knetic/govaluate.v3" + "gopkg.in/yaml.v3" ) // DimensionID describe the ID of the dimension. diff --git a/pkg/pattern/pattern.go b/pkg/pattern/pattern.go index a460046..3d1ac70 100644 --- a/pkg/pattern/pattern.go +++ b/pkg/pattern/pattern.go @@ -3,6 +3,7 @@ package pattern import ( "fmt" + "git.wtrh.nl/patterns/gopatterns/pkg/pattern/point" "git.wtrh.nl/patterns/gopatterns/pkg/pattern/text" "github.com/tdewolff/canvas" diff --git a/pkg/pattern/point/extend_point.go b/pkg/pattern/point/extend_point.go index 06ae248..e6b903b 100644 --- a/pkg/pattern/point/extend_point.go +++ b/pkg/pattern/point/extend_point.go @@ -1,10 +1,11 @@ package point import ( + "math" + "git.wtrh.nl/patterns/gopatterns/pkg/position" "git.wtrh.nl/patterns/gopatterns/pkg/vector" "github.com/tdewolff/canvas" - "math" ) // ExtendPoint defines a point on the line between two other points. diff --git a/pkg/pattern/point/point.go b/pkg/pattern/point/point.go index 81fb201..d77eb86 100644 --- a/pkg/pattern/point/point.go +++ b/pkg/pattern/point/point.go @@ -74,6 +74,7 @@ func Draw(c *canvas.Canvas, point Point, face *canvas.FontFace, debug bool) { StrokeJoiner: canvas.BevelJoin, } xLine := canvas.Line(10, 0) + c.RenderPath(yLine, yStyle, m) c.RenderPath(xLine, xStyle, m) } diff --git a/pkg/pattern/template/point.go b/pkg/pattern/template/point.go index ed7abda..c4a197d 100644 --- a/pkg/pattern/template/point.go +++ b/pkg/pattern/template/point.go @@ -3,12 +3,12 @@ package template import ( "errors" "fmt" - "gopkg.in/Knetic/govaluate.v3" "math" "strconv" "git.wtrh.nl/patterns/gopatterns/pkg/pattern" "git.wtrh.nl/patterns/gopatterns/pkg/pattern/point" + "gopkg.in/Knetic/govaluate.v3" ) const maxRecursionDepth = 100 @@ -71,6 +71,7 @@ func (p Points) Functions(pat *pattern.Pattern) map[string]govaluate.ExpressionF func (p Points) getOrCreateFromArgs(pat *pattern.Pattern, args ...interface{}) ([]point.Point, error) { points := make([]point.Point, 0, len(args)) + for i, arg := range args { id, err := toPointID(arg) if err != nil { @@ -95,9 +96,12 @@ func toPointID(arg interface{}) (point.ID, error) { if !ok { return "", fmt.Errorf("parsing %v as PointID: %w", arg, ErrInvalidPointID) } + v1 = strconv.FormatFloat(f, 'f', -1, 64) } + id1 := point.ID(v1) + return id1, nil } @@ -116,15 +120,46 @@ func (p Points) evaluationFunctions() map[string]govaluate.ExpressionFunction { ErrInvalidArguments) } - return math.Acos(args[0].(float64)), nil + x, ok := args[0].(float64) + if !ok { + return nil, fmt.Errorf("evaluate acos(): parsing %q as float64: %w", args[0], + ErrInvalidArguments) + } + + return math.Acos(x), nil + }, + "asin": func(args ...interface{}) (interface{}, error) { + if len(args) != 1 { + return nil, fmt.Errorf("function asin() requires 1 argument: %w", + ErrInvalidArguments) + } + + x, ok := args[0].(float64) + if !ok { + return nil, fmt.Errorf("evaluate asin(): parsing %q as float64: %w", args[0], + ErrInvalidArguments) + } + + return math.Asin(x), nil }, "atan2": func(args ...interface{}) (interface{}, error) { if len(args) != 2 { return nil, fmt.Errorf("function atan2() requires 2 arguments: %w", ErrInvalidArguments) } + x, ok := args[0].(float64) + if !ok { + return nil, fmt.Errorf("evaluate atan2(): parsing %q as float64: %w", args[0], + ErrInvalidArguments) + } + + y, ok := args[1].(float64) + if !ok { + return nil, fmt.Errorf("evaluate atan2(): parsing %q as float64: %w", args[0], + ErrInvalidArguments) + } - return math.Atan2(args[0].(float64), args[1].(float64)), nil + return math.Atan2(x, y), nil }, } } @@ -220,7 +255,7 @@ func (p Points) createRelative( MarkWith(id), nil } -//nolint:ireturn +//nolint:ireturn,dupl func (p Points) createBetween(id point.ID, pat *pattern.Pattern, depth int) (point.Point, error) { newPoint, ok := p[id] if !ok { @@ -268,6 +303,7 @@ func (p Points) getOrCreate(id point.ID, pat *pattern.Pattern, depth int) (point return createdPoint, nil } +//nolint:ireturn,dupl func (p Points) createExtend(id point.ID, pat *pattern.Pattern, depth int) (point.Point, error) { newPoint, ok := p[id] if !ok { @@ -298,6 +334,7 @@ func (p Points) createExtend(id point.ID, pat *pattern.Pattern, depth int) (poin return point.NewExtendPoint(fromPoint, toPoint, offset, id), nil } +//nolint:ireturn func (p Points) createPolar(id point.ID, pat *pattern.Pattern, depth int) (point.Point, error) { templatePoint, ok := p[id] if !ok { @@ -323,18 +360,24 @@ func (p Points) createPolar(id point.ID, pat *pattern.Pattern, depth int) (point WithXOffset(x).WithYOffset(y).MarkWith(id), nil } +// ExtendPoint describes how to draw a new point that extends in line with two points. type ExtendPoint struct { From point.ID `yaml:"from"` To point.ID `yaml:"to"` Offset *Value `yaml:"offset"` } +// PolarPoint describes how to draw a new point with a direction and a distance from the current +// position. type PolarPoint struct { Length *Value `yaml:"length"` Rotation *Value `yaml:"rotation"` } -func (p PolarPoint) evaluate(params govaluate.MapParameters, funcs map[string]govaluate.ExpressionFunction) (x, y float64, err error) { +func (p PolarPoint) evaluate( + params govaluate.MapParameters, + funcs map[string]govaluate.ExpressionFunction, +) (x, y float64, err error) { rotation, err := p.Rotation.Evaluate(params, funcs) if err != nil { return 0, 0, err diff --git a/pkg/pattern/template/position.go b/pkg/pattern/template/position.go index d7b831a..cf2977d 100644 --- a/pkg/pattern/template/position.go +++ b/pkg/pattern/template/position.go @@ -8,7 +8,10 @@ type Position struct { Rotation *Value } -func (p Position) evaluate(params govaluate.MapParameters, funcs map[string]govaluate.ExpressionFunction) (x, y, rotation float64, err error) { +func (p Position) evaluate( + params govaluate.MapParameters, + funcs map[string]govaluate.ExpressionFunction, +) (x, y, rotation float64, err error) { x, err = p.X.Evaluate(params, funcs) if err != nil { return 0, 0, 0, err diff --git a/pkg/pattern/template/renderer.go b/pkg/pattern/template/renderer.go index 374d38f..27328db 100644 --- a/pkg/pattern/template/renderer.go +++ b/pkg/pattern/template/renderer.go @@ -2,14 +2,15 @@ package template import ( "fmt" + "path/filepath" + "slices" + "strings" + "git.wtrh.nl/patterns/gopatterns/pkg/pattern" "git.wtrh.nl/patterns/gopatterns/pkg/pattern/text" "github.com/stoewer/go-strcase" "github.com/tdewolff/canvas" "github.com/tdewolff/canvas/renderers" - "path/filepath" - "slices" - "strings" ) // RenderPatterns loads a [Request] from yaml file and renders the pattern to an SVG. @@ -20,7 +21,11 @@ func (s Storage) RenderPatterns(request Request, outputDir string, debug bool) ( } filenames := make([]string, 0, len(template.Panels)) + dim, err := s.Dimensions(request.Sizes) + if err != nil { + return nil, fmt.Errorf("load dimensions: %w", err) + } renderer := Renderer{dimensions: dim, owner: request.Owner, pattern: request.Template} @@ -47,8 +52,10 @@ func (s Storage) RenderPatterns(request Request, outputDir string, debug bool) ( c.Fit(10) - filename := filepath.Join(outputDir, strings.Join([]string{request.Template, name, - strcase.SnakeCase(request.Owner)}, "_")+".pdf") + filename := filepath.Join(outputDir, strings.Join([]string{ + request.Template, name, + strcase.SnakeCase(request.Owner), + }, "_")+".pdf") filenames = append(filenames, filename) @@ -57,6 +64,7 @@ func (s Storage) RenderPatterns(request Request, outputDir string, debug bool) ( return nil, fmt.Errorf("write canvas to file: %w", err) } } + return filenames, nil } @@ -111,5 +119,6 @@ func (r Renderer) GenerateInformation(p Panel, pat *pattern.Pattern) error { point := pat.GetPoint("_information") point.SetHide() pat.AddText(text.NewText(point, "", strings.Join(dimensions, "\n"))) + return nil } diff --git a/pkg/pattern/template/storage.go b/pkg/pattern/template/storage.go index 403f262..df8e7d7 100644 --- a/pkg/pattern/template/storage.go +++ b/pkg/pattern/template/storage.go @@ -2,10 +2,11 @@ package template import ( "fmt" - "git.wtrh.nl/patterns/gopatterns/pkg/pattern" - "gopkg.in/yaml.v3" "io/fs" "os" + + "git.wtrh.nl/patterns/gopatterns/pkg/pattern" + "gopkg.in/yaml.v3" ) type Storage struct { diff --git a/pkg/pattern/template/value.go b/pkg/pattern/template/value.go index f01f121..5919c05 100644 --- a/pkg/pattern/template/value.go +++ b/pkg/pattern/template/value.go @@ -14,7 +14,9 @@ var ErrNonFloatValue = errors.New("failed to cast expression result for float64" type Value string // Evaluate a Value as [govaluate.EvaluateExpression] in combination with the provided parameters. -func (v *Value) Evaluate(parameters govaluate.MapParameters, funcs map[string]govaluate.ExpressionFunction) (float64, error) { +func (v *Value) Evaluate(parameters govaluate.MapParameters, + funcs map[string]govaluate.ExpressionFunction, +) (float64, error) { if v == nil { return 0, nil }