Documentation
¶
Overview ¶
Package draw provides SVG writing features.
Example (Inline) ¶
package main
import (
"fmt"
"github.com/gregoryv/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"
"github.com/gregoryv/draw/design"
"github.com/gregoryv/draw/internal/app"
"github.com/gregoryv/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 )
View Source
var DefaultClassAttributes = ClassAttributes{
"area-red-label": `font-style="italic" font-family="Arial,Helvetica,sans-serif"`,
"area-green-label": `font-style="italic" font-family="Arial,Helvetica,sans-serif"`,
"area-blue-label": `font-style="italic" font-family="Arial,Helvetica,sans-serif"`,
"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": `font-family="Arial,Helvetica,sans-serif" 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": `font-family="Arial,Helvetica,sans-serif"`,
"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": `font-family="Arial,Helvetica,sans-serif"`,
"internet": `stroke="#d3d3d3" fill="#e2e2e2"`,
"internet-title": `font-family="Arial,Helvetica,sans-serif"`,
"line": `stroke="black"`,
"triangle": `stroke="black"`,
"column-line": `stroke="#d3d3d3"`,
"process": `stroke="#d3d3d3" fill="#ffffff"`,
"process-title": `font-family="Arial,Helvetica,sans-serif"`,
"record": `stroke="#d3d3d3" fill="#ffffff"`,
"record-line": `stroke="#d3d3d3"`,
"record-title": `font-family="Arial,Helvetica,sans-serif"`,
"rect": `stroke="#d3d3d3" fill="#ffffff"`,
"rect-title": `font-family="Arial,Helvetica,sans-serif"`,
"root": `font-family="Arial,Helvetica,sans-serif"`,
"skip": `stroke="#ffffff" stroke-dasharray="2,2,2"`,
"span-green": `stroke="#d3d3d3" fill="#ccff99" rx="5" ry="5"`,
"span-green-title": `font-family="Arial,Helvetica,sans-serif"`,
"span-blue": `stroke="#d3d3d3" fill="#99e6ff" rx="5" ry="5"`,
"span-blue-title": `font-family="Arial,Helvetica,sans-serif"`,
"span-red": `stroke="#d3d3d3" fill="#ff9999" rx="5" ry="5"`,
"span-red-title": `font-family="Arial,Helvetica,sans-serif"`,
"state-title": `font-family="Arial,Helvetica,sans-serif"`,
"state": `stroke="#d3d3d3" fill="#ffffff" rx="10" ry="10"`,
"store": `stroke="#d3d3d3" fill="#ffffff"`,
"store-title": `font-family="Arial,Helvetica,sans-serif"`,
"component": `stroke="#d3d3d3" fill="#ffffff"`,
"component-title": `font-family="Arial,Helvetica,sans-serif"`,
"field": `font-family="Arial,Helvetica,sans-serif"`,
"method": `font-family="Arial,Helvetica,sans-serif"`,
"record-label": `font-family="Arial,Helvetica,sans-serif"`,
"label": `font-family="Arial,Helvetica,sans-serif"`,
"weekend": `font-family="Arial,Helvetica,sans-serif" fill="#f3f3f3"`,
"weekend-title": `font-family="Arial,Helvetica,sans-serif"`,
"caption": `font-family="Arial,Helvetica,sans-serif"`,
"diamond": `stroke="#d3d3d3" fill="#333333"`,
"decision": `stroke="#d3d3d3" fill="#ffffff"`,
}
Functions ¶
This section is empty.
Types ¶
type ClassAttributes ¶ added in v0.13.0
ClassAttributes define mapping between classes and svg attributes. Setting attributes that modify size or position is not advised.
func (ClassAttributes) CSS ¶ added in v0.15.0
func (me ClassAttributes) CSS() string
CSS returns cascading rules for embedding in html
type SVG ¶ added in v0.12.0
type SVG struct {
Content []SVGWriter
// contains filtered or unexported fields
}
type Style ¶ added in v0.13.0
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 ¶ added in v0.13.0
func NewStyle() Style
NewStyle returns a style based on the default values, eg. draw.DefaultFont in this package.
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.
