| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // package view_actor -- SVG-фигура актора
- package view_actor
- import (
- "log"
- svg "github.com/ajstarks/svgo"
- "gitp78su.ipnodns.ru/svi/kern/v3"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/view_text"
- )
- // ViewActor -- SVG-фигура актора
- type ViewActor struct {
- types.IArchActor
- Coord_ *view_coord.ViewCoord
- text *view_text.ViewText
- }
- var (
- hassert = kern.GetFnHassert()
- )
- // NewViewActor -- возвращает новый SVG-актор
- func NewViewActor(actor types.IArchActor) *ViewActor {
- hassert(actor != nil, "in NewViewActor(), actor is nil")
- sf := &ViewActor{
- IArchActor: actor,
- }
- return sf
- }
- // Draw -- рисует фигуру актора
- func (sf *ViewActor) Draw(canvas *svg.SVG) {
- x, y := sf.Coord_.Int()
- offX, offY := sf.text.Offset().Int()
- // Голова
- 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, sf.text.String(), "font-size: 14px; font-family: sans-serif; fill: black")
- if optErr := sf.InvarCheck(); optErr.IsVal() { // Проверки на ошибки
- canvas.Group("Ошибка")
- canvas.Title(optErr.Val().Error())
- canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png")
- }
- canvas.Gend()
- }
|