draw2d/pdf2d/transform.go

58 lines
1.7 KiB
Go

// Copyright 2015 The draw2d Authors. All rights reserved.
// created: 26/06/2015 by Stani Michiels
package pdf2d
import "github.com/stanim/draw2d"
// VertexMatrixTransform implements Vectorizer and applies the Matrix
// transformation tr. It is normally wrapped around gofpdf Fpdf
// or PathLogger.
type VertexMatrixTransform struct {
tr draw2d.MatrixTransform
Next Vectorizer
}
// NewVertexMatrixTransform constructs an new VertexMatrixTransform
func NewVertexMatrixTransform(tr draw2d.MatrixTransform,
vectorizer Vectorizer) *VertexMatrixTransform {
return &VertexMatrixTransform{tr, vectorizer}
}
// MoveTo creates a new subpath that start at the specified point
func (vmt *VertexMatrixTransform) MoveTo(x, y float64) {
vmt.tr.Transform(&x, &y)
vmt.Next.MoveTo(x, y)
}
// LineTo adds a line to the current subpath
func (vmt *VertexMatrixTransform) LineTo(x, y float64) {
vmt.tr.Transform(&x, &y)
vmt.Next.LineTo(x, y)
}
// CurveTo adds a quadratic bezier curve to the current subpath
func (vmt *VertexMatrixTransform) CurveTo(cx, cy, x, y float64) {
vmt.tr.Transform(&cx, &cy, &x, &y)
vmt.Next.CurveTo(cx, cy, x, y)
}
// CurveBezierCubicTo adds a cubic bezier curve to the current subpath
func (vmt *VertexMatrixTransform) CurveBezierCubicTo(cx1, cy1,
cx2, cy2, x, y float64) {
vmt.tr.Transform(&cx1, &cy1, &cx2, &cy2, &x, &y)
vmt.Next.CurveBezierCubicTo(cx1, cy1, cx2, cy2, x, y)
}
// ArcTo adds an arc to the current subpath
func (vmt *VertexMatrixTransform) ArcTo(x, y, rx, ry, degRotate, degStart, degEnd float64) {
vmt.tr.Transform(&x, &y)
vmt.Next.ArcTo(x, y, rx, ry, degRotate, degStart, degEnd)
}
// ClosePath closes the subpath
func (vmt *VertexMatrixTransform) ClosePath() {
vmt.Next.ClosePath()
}