Documentation
¶
Overview ¶
Package svg contains functions for creating SVG documents from shapes and paths.
Index ¶
- Constants
- func Complete(w io.Writer)
- func DrawShape(enc *xml.Encoder, shape *g2d.Shape, pen *g2d.Pen) error
- func Image(enc *xml.Encoder, img image.Image, id string) error
- func NewEncoder(w io.Writer) *xml.Encoder
- func RenderColoredShape(enc *xml.Encoder, shape *g2d.Shape, col color.Color) error
- func RenderRenderable(enc *xml.Encoder, r *g2d.Renderable, xfm g2d.Transform) error
Examples ¶
Constants ¶
View Source
const ( SVGHeader = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" )
Variables ¶
This section is empty.
Functions ¶
func DrawShape ¶
DrawShape writes SVG describing the shape as rendered by the pen to the encoder.
Example ¶
package main
import (
"bytes"
"fmt"
g2d "github.com/jphsd/graphics2d"
"github.com/jphsd/graphics2d/color"
"github.com/jphsd/graphics2d/svg"
)
func main() {
s := g2d.NewShape(g2d.Circle([]float64{200, 200}, 100))
pen := g2d.NewPen(color.Red, 3)
b := &bytes.Buffer{}
enc := svg.NewEncoder(b)
svg.DrawShape(enc, s, pen)
svg.Complete(b)
fmt.Println(b.String())
}
Output: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill="#ff0000"><path d="M 300.75 200.00 L 300.26 209.96 298.80 219.75 296.40 229.30 293.08 238.56 288.88 247.44 283.82 255.90 277.93 263.85 271.24 271.24 263.85 277.93 255.90 283.82 247.44 288.88 238.56 293.08 229.30 296.40 219.75 298.80 209.96 300.26 200.00 300.75 190.04 300.26 180.25 298.80 170.70 296.40 161.44 293.08 152.56 288.88 144.10 283.82 136.15 277.93 128.76 271.24 122.07 263.85 116.18 255.90 111.12 247.44 106.92 238.56 103.60 229.30 101.20 219.75 99.74 209.96 99.25 200.00 99.74 190.04 101.20 180.25 103.60 170.70 106.92 161.44 111.12 152.56 116.18 144.10 122.07 136.15 128.76 128.76 136.15 122.07 144.10 116.18 152.56 111.12 161.44 106.92 170.70 103.60 180.25 101.20 190.04 99.74 200.00 99.25 209.96 99.74 219.75 101.20 229.30 103.60 238.56 106.92 247.44 111.12 255.90 116.18 263.85 122.07 271.24 128.76 277.93 136.15 283.82 144.10 288.88 152.56 293.08 161.44 296.40 170.70 298.80 180.25 300.26 190.04 300.75 200.00 z"></path><path d="M 299.25 200.00 L 298.76 190.19 297.33 180.55 294.96 171.13 291.70 162.02 287.56 153.26 282.57 144.94 276.77 137.10 270.18 129.82 262.90 123.23 255.06 117.43 246.74 112.44 237.98 108.30 228.87 105.04 219.45 102.67 209.81 101.24 200.00 100.75 190.19 101.24 180.55 102.67 171.13 105.04 162.02 108.30 153.26 112.44 144.94 117.43 137.10 123.23 129.82 129.82 123.23 137.10 117.43 144.94 112.44 153.26 108.30 162.02 105.04 171.13 102.67 180.55 101.24 190.19 100.75 200.00 101.24 209.81 102.67 219.45 105.04 228.87 108.30 237.98 112.44 246.74 117.43 255.06 123.23 262.90 129.82 270.18 137.10 276.77 144.94 282.57 153.26 287.56 162.02 291.70 171.13 294.96 180.55 297.33 190.19 298.76 200.00 299.25 209.81 298.76 219.45 297.33 228.87 294.96 237.98 291.70 246.74 287.56 255.06 282.57 262.90 276.77 270.18 270.18 276.77 262.90 282.57 255.06 287.56 246.74 291.70 237.98 294.96 228.87 297.33 219.45 298.76 209.81 299.25 200.00 z"></path></g></svg>
func Image ¶
Image writes img to the encoder as a base64 encoded png using the <image> element.
Example ¶
package main
import (
"bytes"
"fmt"
g2d "github.com/jphsd/graphics2d"
"github.com/jphsd/graphics2d/color"
"github.com/jphsd/graphics2d/image"
"github.com/jphsd/graphics2d/svg"
)
func main() {
s := g2d.NewShape(g2d.Circle([]float64{200, 200}, 100))
img := image.NewRGBA(400, 400, color.White)
pen := g2d.NewPen(color.Red, 3)
g2d.DrawShape(img, s, pen)
b := &bytes.Buffer{}
enc := svg.NewEncoder(b)
svg.Image(enc, img, "")
svg.Complete(b)
fmt.Println(b.String())
}
Output: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><image width="400" height="400" xlink:href="data:image/png;base64,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i9TZs27zmJ+vV19VdbWyszV+vMaN43FVCY9gJZO333bf5AUFOnJEGRkaNcqVa9AgNW7se7LQXLyowkL3T1ixQhUV6tjRRSovT9de63syNBCClXxqarRli/u2X7ZMp0+rVSsNHKjcXFeu7Oy4exhXMKjiYtepoiI39kcfKTNTo0e7Tg0cqJQU3/OhQRGsJBYIaP16d1VVWKiSEtW+AtfAga5cubm67jpv8QoG3dVrUZEbbMsWV1VJPXq4qW6+WbfeqqZN/QwG3wgW/uz48bpAFBVp/37VvlviTTepZ09lZbmPHj301a/G6m//8EPt2+eiWVKivXu1bZtOnXJ/3r17XT1zc9W2baz+dthBsPApx47VlWvHDh04cOl1bDIz6+JV26+OHXXZZUpPV0aG+0hN/aL/Z3W1KircR2WlPv5YR45cKlRJSd0eSnJbp27d1L9/Xad4YDo+iWDhCwWDKi2ty8pfEnPkyGe88GlaWl25ahMm1eWptlOffrZQo0YuebXt+0sHO3WKu5toiCcEC+E7d87tvMrKLvXor9tU+4V0KV5/HbLaL9q3dzupZs18/0tgDMECYAbbbwBmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZvx/AAAA//+r4mCQWD/KpgAAAABJRU5ErkJggg=="></image></svg>
func NewEncoder ¶
NewEncoder returns an xml.Encoder wrapped around w that's already had the SVG header written to it.
func RenderColoredShape ¶
RenderColoredShape writes SVG describing the shape and its color to the encoder.
Example ¶
package main
import (
"bytes"
"fmt"
g2d "github.com/jphsd/graphics2d"
"github.com/jphsd/graphics2d/color"
"github.com/jphsd/graphics2d/svg"
)
func main() {
s := g2d.NewShape(g2d.Circle([]float64{200, 200}, 100))
b := &bytes.Buffer{}
enc := svg.NewEncoder(b)
svg.RenderColoredShape(enc, s, color.Red)
svg.Complete(b)
fmt.Println(b.String())
}
Output: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill="#ff0000"><path d="M 300.00 200.00 L 299.51 209.88 298.06 219.60 295.68 229.08 292.39 238.27 288.22 247.09 283.20 255.48 277.35 263.38 270.71 270.71 263.38 277.35 255.48 283.20 247.09 288.22 238.27 292.39 229.08 295.68 219.60 298.06 209.88 299.51 200.00 300.00 190.12 299.51 180.40 298.06 170.92 295.68 161.73 292.39 152.91 288.22 144.52 283.20 136.62 277.35 129.29 270.71 122.65 263.38 116.80 255.48 111.78 247.09 107.61 238.27 104.32 229.08 101.94 219.60 100.49 209.88 100.00 200.00 100.49 190.12 101.94 180.40 104.32 170.92 107.61 161.73 111.78 152.91 116.80 144.52 122.65 136.62 129.29 129.29 136.62 122.65 144.52 116.80 152.91 111.78 161.73 107.61 170.92 104.32 180.40 101.94 190.12 100.49 200.00 100.00 209.88 100.49 219.60 101.94 229.08 104.32 238.27 107.61 247.09 111.78 255.48 116.80 263.38 122.65 270.71 129.29 277.35 136.62 283.20 144.52 288.22 152.91 292.39 161.73 295.68 170.92 298.06 180.40 299.51 190.12 300.00 200.00 z"></path></g></svg>
func RenderRenderable ¶
RenderRenderable renders the shapes in the renderable with their respective fillers after being transformed.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.