diff options
Diffstat (limited to 'svgwrite.go')
| -rw-r--r-- | svgwrite.go | 60 | 
1 files changed, 60 insertions, 0 deletions
| diff --git a/svgwrite.go b/svgwrite.go new file mode 100644 index 0000000..ea445c1 --- /dev/null +++ b/svgwrite.go @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014 Kurt Jung (Gmail: kurt.w.jung) + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package gofpdf + +// SvgBasicWrite renders the paths encoded in the basic SVG image specified by +// sb. The scale value is used to convert the coordinates in the path to the +// unit of measure specified in New(). The current position (as set with a call +// to SetXY()) is used as the origin of the image. The current line cap style +// (as set with SetLineCapStyle()), line width (as set with SetLineWidth()), +// and draw color (as set with SetDrawColor()) are used in drawing the image +// paths. +// +// See example 20 for a demonstration of this function. +func (f *Fpdf) SvgBasicWrite(sb *SvgBasicType, scale float64) { +	originX, originY := f.GetXY() +	var x, y, newX, newY float64 +	var cx0, cy0, cx1, cy1 float64 +	var path []SvgBasicSegmentType +	var seg SvgBasicSegmentType +	val := func(arg int) (float64, float64) { +		return originX + scale*seg.Arg[arg], originY + scale*seg.Arg[arg+1] +	} +	for j := 0; j < len(sb.Segments) && f.Ok(); j++ { +		path = sb.Segments[j] +		for k := 0; k < len(path) && f.Ok(); k++ { +			seg = path[k] +			switch seg.Cmd { +			case 'M': +				x, y = val(0) +				f.SetXY(x, y) +			case 'L': +				newX, newY = val(0) +				f.Line(x, y, newX, newY) +				x, y = newX, newY +			case 'C': +				cx0, cy0 = val(0) +				cx1, cy1 = val(2) +				newX, newY = val(4) +				f.CurveCubic(x, y, cx0, cy0, newX, newY, cx1, cy1, "D") +				x, y = newX, newY +			default: +				f.SetErrorf("Unexpected path command '%c'", seg.Cmd) +			} +		} +	} +} | 
