Documentation
¶
Overview ¶
Package draw provides SVG writing features.
Example (Inline) ¶
package main
import (
"fmt"
"sogvin.com/draw/design"
)
func main() {
d := design.NewSequenceDiagram()
fmt.Println(d.Inline())
}
Output: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" font-family="Arial,Helvetica,sans-serif" width="1" height="1"></svg>
Example (Overview) ¶
The overview is used as social preview in github. Transform to png with e.g. inkscape -z -w 890 -h 356 overview.svg -e overview.png
package main
import (
"database/sql"
"sogvin.com/draw/design"
"sogvin.com/draw/internal/app"
"sogvin.com/draw/shape"
)
func main() {
var (
d = design.NewSequenceDiagram()
cli = d.AddStruct(app.Client{})
srv = d.AddStruct(app.Server{})
db = d.AddStruct(sql.DB{})
)
d.Link(cli, srv, "connect()")
d.Link(srv, db, "...")
// Flow part
var (
start = shape.NewDot()
run = shape.NewState("Run")
end = shape.NewExitDot()
)
d.Place(start).At(100, 140)
d.Place(run, end).Below(start)
d.VAlignCenter(start, run, end)
d.LinkAll(start, run, end)
// Class diagram (manual)
var (
circle = design.NewVRecord(shape.Circle{})
shp = design.NewVRecord((*shape.Shape)(nil))
)
circle.HideMethods()
d.Place(shp).RightOf(start, 100)
d.Place(circle).RightOf(shp, 100)
d.HAlignBottom(shp, circle)
lnk := shape.NewArrowBetween(circle, shp)
lnk.SetClass("implements-arrow")
d.Place(lnk)
// Actors and notes
var (
note = shape.NewNote("Anything is possible!\nGo draw your next design")
actor = shape.NewActor()
)
d.Place(note).Above(circle, 60)
shape.Move(note, 50, 0)
d.Place(actor).Above(note)
d.VAlignLeft(note, actor)
d.Place(shape.NewArrowBetween(actor, note))
// components
var (
dbcomp = shape.NewDatabase("database")
inet = shape.NewInternet()
service = shape.NewComponent("Service")
browser = shape.NewComponent("Browser")
)
browser.SetClass("external")
d.Place(service).RightOf(note, 70)
shape.Move(service, 0, -70)
d.Place(dbcomp).RightOf(service)
d.Place(inet).Below(service)
d.Place(browser).Below(inet)
d.VAlignCenter(service, inet, browser)
d.SetCaption("gregoryv/draw provided shapes and diagrams")
d.SaveAs("overview.svg")
}
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( DefaultFont = Font{Height: 12, LineHeight: 16, /* contains filtered or unexported fields */} DefaultTextPad = Padding{Left: 6, Top: 4, Bottom: 6, Right: 10} DefaultPad = Padding{Left: 10, Top: 2, Bottom: 7, Right: 10} DefaultSpacing = 30 // between elements DefaultFontFamily = `font-family="Arial,Helvetica,sans-serif"` DefaultClassAttributes = ClassAttributes{ "area-red-label": `font-style="italic" ` + DefaultFontFamily, "area-green-label": `font-style="italic" ` + DefaultFontFamily, "area-blue-label": `font-style="italic" ` + DefaultFontFamily, "area-red": `stroke="black" stroke-width="0" fill="#ff9999" fill-opacity="0.1"`, "area-green": `stroke="black" stroke-width="0" fill="#ccff99" fill-opacity="0.1"`, "area-blue": `stroke="black" stroke-width="0" fill="#99e6ff" fill-opacity="0.1"`, "actor": `stroke="black" stroke-width="2" fill="#ffffff"`, "circle": `stroke="#d3d3d3" stroke-width="2" fill="#ffffff"`, "container": `stroke="#737373" stroke-dasharray="5,5,5" fill="transparent"`, "cylinder": `stroke="#d3d3d3" stroke-width="1" fill="#ffffff"`, "card": `stroke="#d3d3d3" stroke-width="1" fill="#ffffff"`, "card-external": `stroke="#d3d3d3" stroke-width="1" fill="#f8f9fa"`, "card-title": DefaultFontFamily + ` font-weight="bold"`, "database": `stroke="#d3d3d3" stroke-width="1" fill="#ffffff"`, "dot": `stroke="black"`, "exit": `stroke="black" stroke-width="2" fill="#ffffff"`, "exit-dot": `stroke="black"`, "note": DefaultFontFamily, "note-box": `stroke="#d3d3d3" fill="#ffffcc"`, "highlight": `stroke="red"`, "highlight-head": `stroke="red" fill="#ffffff"`, "implements-arrow": `stroke="black" stroke-dasharray="5,5,5"`, "implements-arrow-head": `stroke="black" fill="#ffffff"`, "arrow": `stroke="black"`, "arrow-head": `stroke="black" fill="#ffffff"`, "arrow-tail": `stroke="black" fill="#777777"`, "dashed-arrow": `stroke="black"`, "dashed-arrow-head": `stroke="black" fill="#ffffff"`, "dashed-arrow-tail": `stroke="black" fill="#777777"`, "activity-arrow": `stroke="black"`, "activity-arrow-head": `stroke="black" fill="#ffffff"`, "activity-arrow-tail": `stroke="black" fill="#777777"`, "compose-arrow": `stroke="black"`, "compose-arrow-head": `stroke="black" fill="#ffffff"`, "compose-arrow-tail": `stroke="black" fill="#777777"`, "aggregate-arrow": `stroke="black"`, "aggregate-arrow-head": `stroke="black" fill="#ffffff"`, "aggregate-arrow-tail": `stroke="black" fill="#ffffff"`, "external": `stroke="#d3d3d3" fill="#e2e2e2"`, "dim": `stroke="#d3d3d3" fill="#e2e2e2"`, "hexagon": `stroke="#d3d3d3" fill="#ffffff"`, "hexagon-title": DefaultFontFamily, "internet": `stroke="#d3d3d3" fill="#e2e2e2"`, "internet-title": DefaultFontFamily, "line": `stroke="black"`, "triangle": `stroke="black"`, "column-line": `stroke="#d3d3d3"`, "process": `stroke="#d3d3d3" fill="#ffffff"`, "process-title": DefaultFontFamily, "record": `stroke="#d3d3d3" fill="#ffffff"`, "record-line": `stroke="#d3d3d3"`, "record-title": DefaultFontFamily, "rect": `stroke="#d3d3d3" fill="#ffffff"`, "rect-title": DefaultFontFamily, "root": DefaultFontFamily, "skip": `stroke="#ffffff" stroke-dasharray="2,2,2"`, "span-green": `stroke="#d3d3d3" fill="#ccff99" rx="5" ry="5"`, "span-green-title": DefaultFontFamily, "span-blue": `stroke="#d3d3d3" fill="#99e6ff" rx="5" ry="5"`, "span-blue-title": DefaultFontFamily, "span-red": `stroke="#d3d3d3" fill="#ff9999" rx="5" ry="5"`, "span-red-title": DefaultFontFamily, "state-title": DefaultFontFamily, "state": `stroke="#d3d3d3" fill="#ffffff" rx="10" ry="10"`, "store": `stroke="#d3d3d3" fill="#ffffff"`, "store-title": DefaultFontFamily, "component": `stroke="#d3d3d3" fill="#ffffff"`, "component-title": DefaultFontFamily, "field": DefaultFontFamily, "method": DefaultFontFamily, "record-label": DefaultFontFamily, "label": DefaultFontFamily, "weekend": DefaultFontFamily + ` fill="#f3f3f3"`, "weekend-title": DefaultFontFamily, "caption": DefaultFontFamily, "diamond": `stroke="#d3d3d3" fill="#333333"`, "decision": `stroke="#d3d3d3" fill="#ffffff"`, } )
Functions ¶
This section is empty.
Types ¶
type ClassAttributes ¶
ClassAttributes define mapping between classes and svg attributes. Setting attributes that modify size or position is not advised.
func (ClassAttributes) CSS ¶
func (me ClassAttributes) CSS() string
CSS returns cascading rules for embedding in html
type Font ¶
type SVG ¶
type SVG struct {
Content []SVGWriter
// contains filtered or unexported fields
}
func NewSVG ¶
func NewSVG() *SVG
NewSVG returns an empty SVG of size 100x100
Example ¶
package main
import (
"os"
"sogvin.com/draw"
)
func main() {
s := draw.NewSVG()
s.WriteSVG(os.Stdout)
}
Output: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="root" width="100" height="100"></svg>
type Style ¶
type Style struct {
Font
TextPad Padding // Surrounding text
Pad Padding // E.g. records
Spacing int // Between shapes in e.g. diagrams
// contains filtered or unexported fields
}
func NewStyle ¶
func NewStyle() Style
NewStyle returns a style based on the default values, eg. draw.DefaultFont in this package.
func (*Style) SetOutput ¶
SetOutput sets the destination of calls to Write.
Source Files
¶
- font.go
- padding.go
- style.go
- svg.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Package design provides diagram creators
|
Package design provides diagram creators |
|
Package docs provides the content of github pages at https://gregoryv.github.io/draw/
|
Package docs provides the content of github pages at https://gregoryv.github.io/draw/ |
|
Package goviz provides means to generate Go diagrams.
|
Package goviz provides means to generate Go diagrams. |
|
internal
|
|
|
Package shape provides various SVG shapes
|
Package shape provides various SVG shapes |
|
Package xy provides xy Position
|
Package xy provides xy Position |
Click to show internal directories.
Click to hide internal directories.
