|
- package patroon
-
- import (
- svg "github.com/ajstarks/svgo/float"
- "math"
- "naaipatroon/pkg/util"
- )
-
- const (
- MilliMeter SvgScale = 3.7795
- CentiMeter SvgScale = 37.795
- )
-
- type SvgScale float64
-
- type Basispatroonbroek struct {
- Heupwijdte float64
- Taillewijdte float64
- Zithoogte float64
- Tussenbeenlengte float64
- Pijpbreedte float64
- Taillebandbreedte float64
- Eenheid SvgScale
- Eigenaar string
- }
-
- func (b *Basispatroonbroek) GeneratePoints() util.PointMap {
- p := make(util.PointMap, 30)
- p[0] = util.Point{}
- p[1] = p[0].Below(b.Zithoogte + 1 - b.Taillebandbreedte)
- p[2] = p[1].Below(b.Tussenbeenlengte)
- p[3] = p[2].Above(p[1].Distance(p[2])/2 + 5)
- p[4] = p[1].Above(b.Zithoogte / 4)
- p[5] = p[1].Left(b.Heupwijdte / 12)
- p[6] = p[4].Left(b.Heupwijdte / 12)
- p[8] = p[6].Right(b.Heupwijdte/4 + 2)
- p[9] = p[5].Left(b.Heupwijdte/16 + 5)
- p[10] = p[7].Right(1)
- p[11] = p[10].Right(b.Taillewijdte/4 + 2.5)
- p[12] = p[2].Right(b.Pijpbreedte / 2)
- p[13] = p[2].Left(b.Pijpbreedte / 2)
- p[14] = p[3].Right(b.Pijpbreedte / 2)
- p[15] = p[3].Left(b.Pijpbreedte / 2)
-
- return p.Scale(float64(b.Eenheid))
- }
-
- 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])
- }
|