view_actor.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // package view_actor -- SVG-фигура актора
  2. package view_actor
  3. import (
  4. "log"
  5. svg "github.com/ajstarks/svgo"
  6. "gitp78su.ipnodns.ru/svi/kern/v3"
  7. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  8. )
  9. // ViewActor -- SVG-фигура актора
  10. type ViewActor struct {
  11. types.IElemActor
  12. }
  13. var (
  14. hassert = kern.GetFnHassert()
  15. )
  16. // NewViewActor -- возвращает новый SVG-актор
  17. func NewViewActor(actor types.IElemActor) *ViewActor {
  18. hassert(actor != nil, "in NewViewActor(), actor is nil")
  19. sf := &ViewActor{
  20. IElemActor: actor,
  21. }
  22. return sf
  23. }
  24. // Draw -- рисует фигуру актора
  25. func (sf *ViewActor) Draw(canvas *svg.SVG) {
  26. x, y := sf.Coord().Int()
  27. offX, offY := sf.Offset().Int()
  28. // Голова
  29. canvas.Circle(x, y, 10, "fill:none;stroke:red")
  30. // Туловище
  31. canvas.Line(x, y+10, x, y+40, "stroke:red;stroke-width:1")
  32. // Руки
  33. canvas.Line(x-15, y+20, x+15, y+20, "stroke:red;stroke-width:1")
  34. // Нога левая
  35. canvas.Line(x, y+40, x-10, y+55, "stroke:red;stroke-width:1")
  36. // Нога правая
  37. canvas.Line(x, y+40, x+10, y+55, "stroke:red;stroke-width:1")
  38. // Надпись
  39. log.Printf("ViewActor.Draw(): x=%d, y=%d, offX=%d, offY=%d", x, y, offX, offY)
  40. canvas.Text(x+offX, y+offY, sf.String(), "font-size: 14px; font-family: sans-serif; fill: black")
  41. if msgErr := sf.Check(); msgErr != "" { // Проверки на ошибки
  42. canvas.Group("Ошибка")
  43. canvas.Title(msgErr)
  44. canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png")
  45. }
  46. canvas.Gend()
  47. }