view_link.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // package view_link -- отображение связи между объектами
  2. package view_link
  3. import (
  4. svg "github.com/ajstarks/svgo"
  5. "gitp78su.ipnodns.ru/svi/kern/v3"
  6. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  7. )
  8. // ViewLink -- отображение связи между объектами
  9. type ViewLink struct {
  10. types.IElemLink
  11. }
  12. var (
  13. hassert = kern.GetFnHassert()
  14. )
  15. // NewViewLink -- возвращает новое отображение связи
  16. func NewViewLink(useLink types.IElemLink) *ViewLink {
  17. hassert(useLink != nil, "NewViewLink: useLink is nil")
  18. sf := &ViewLink{
  19. IElemLink: useLink,
  20. }
  21. return sf
  22. }
  23. // Draw -- рисует связь между объектами
  24. func (sf *ViewLink) Draw(canvas *svg.SVG) {
  25. x, y := sf.Coord().Int()
  26. x1, y1 := sf.CoordEnd().Int()
  27. offX, offY := sf.Offset().Int()
  28. // Линия
  29. canvas.Line(x, y, x1, y1, "stroke:black;stroke-width:1")
  30. strLabel := sf.String()
  31. if strLabel != "" {
  32. canvas.Text(x+offX, y+offY, strLabel, "font-size: 12px; font-family: Courier; fill: black")
  33. }
  34. if sf.TypeLink() != "" {
  35. canvas.Text(x+offX, y+offY+12, "<<"+sf.TypeLink()+">>", "font-size: 12px; font-family: Courier; fill: black")
  36. }
  37. if msgErr := sf.Check(); msgErr != "" { // Проверка на правильность
  38. canvas.Group("Ошибка")
  39. canvas.Title(msgErr)
  40. canvas.Image(x-20+offX, y-20+offY, 16, 16, "/static/img/warning.png")
  41. }
  42. canvas.Gend() // Group end
  43. }