/* * 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. 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 case 'Z': f.Line(x, y, originX, originY) default: f.SetErrorf("Unexpected path command '%c'", seg.Cmd) } } } }