view_actor.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // package view_actor -- SVG-фигура актора
  2. package view_actor
  3. import (
  4. "fmt"
  5. "log"
  6. svg "github.com/ajstarks/svgo"
  7. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  8. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  9. "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/actor"
  10. )
  11. // ViewActor -- SVG-фигура актора
  12. type ViewActor struct {
  13. *actor.Actor
  14. }
  15. // NewViewActor -- возвращает новый SVG-актор
  16. func NewViewActor(elem map[string]interface{}) (*ViewActor, error) {
  17. actor, err := actor.NewActor(elem)
  18. if err != nil {
  19. return nil, fmt.Errorf("NewViewActor(): in create Actor, err=\n\t%w", err)
  20. }
  21. sf := &ViewActor{
  22. Actor: actor,
  23. }
  24. return sf, nil
  25. }
  26. // Draw -- рисует фигуру актора
  27. func (sf *ViewActor) Draw(canvas *svg.SVG, mapElem map[alias.Id]types.IElemDrawer) {
  28. x := int(sf.Coord_.X_)
  29. y := int(sf.Coord_.Y_)
  30. offX := int(sf.Offset_.X_)
  31. offY := int(sf.Offset_.Y_)
  32. // Голова
  33. canvas.Circle(x, y, 10, "fill:none;stroke:red")
  34. // Туловище
  35. canvas.Line(x, y+10, x, y+40, "stroke:red;stroke-width:1")
  36. // Руки
  37. canvas.Line(x-15, y+20, x+15, y+20, "stroke:red;stroke-width:1")
  38. // Нога левая
  39. canvas.Line(x, y+40, x-10, y+55, "stroke:red;stroke-width:1")
  40. // Нога правая
  41. canvas.Line(x, y+40, x+10, y+55, "stroke:red;stroke-width:1")
  42. // Надпись
  43. log.Printf("ViewActor.Draw(): x=%d, y=%d, offX=%d, offY=%d", x, y, offX, offY)
  44. canvas.Text(x+offX, y+offY, string(sf.Get()), "font-size: 14px; font-family: sans-serif; fill: black")
  45. if msgErr := sf.Check(mapElem); msgErr != "" { // Проверки на ошибки
  46. canvas.Group("Ошибка")
  47. canvas.Title(msgErr)
  48. canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png")
  49. canvas.Gend()
  50. }
  51. }