// package view_actor -- SVG-фигура актора package view_actor import ( "log" svg "github.com/ajstarks/svgo" "gitp78su.ipnodns.ru/svi/goarch/lev0/alias" "gitp78su.ipnodns.ru/svi/goarch/lev0/types" "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/actor" "gitp78su.ipnodns.ru/svi/kern/v3" ) // ViewActor -- SVG-фигура актора type ViewActor struct { Actor_ *actor.Actor } var ( hassert = kern.GetFnHassert() ) // NewViewActor -- возвращает новый SVG-актор func NewViewActor(actor *actor.Actor, elem map[string]interface{}) *ViewActor { hassert(actor != nil, "in NewViewActor(), actor is nil") sf := &ViewActor{ Actor_: actor, } return sf } // Draw -- рисует фигуру актора func (sf *ViewActor) Draw(canvas *svg.SVG, mapElem map[alias.Id]types.IDrawer) { x := int(sf.Actor_.Label_.Coord_.X_) y := int(sf.Actor_.Label_.Coord_.Y_) offX := int(sf.Actor_.Label_.Offset_.X_) offY := int(sf.Actor_.Label_.Offset_.Y_) // Голова canvas.Circle(x, y, 10, "fill:none;stroke:red") // Туловище canvas.Line(x, y+10, x, y+40, "stroke:red;stroke-width:1") // Руки canvas.Line(x-15, y+20, x+15, y+20, "stroke:red;stroke-width:1") // Нога левая canvas.Line(x, y+40, x-10, y+55, "stroke:red;stroke-width:1") // Нога правая canvas.Line(x, y+40, x+10, y+55, "stroke:red;stroke-width:1") // Надпись log.Printf("ViewActor.Draw(): x=%d, y=%d, offX=%d, offY=%d", x, y, offX, offY) canvas.Text(x+offX, y+offY, string(sf.Actor_.Label_.Get()), "font-size: 14px; font-family: sans-serif; fill: black") if msgErr := sf.Check(mapElem); msgErr != "" { // Проверки на ошибки canvas.Group("Ошибка") canvas.Title(msgErr) canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png") canvas.Gend() } }