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[7] = p[0].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]) }