view_link.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // package view_link -- отображение связи между объектами
  2. package view_link
  3. import (
  4. "fmt"
  5. svg "github.com/ajstarks/svgo"
  6. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  7. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  8. "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/use_link"
  9. )
  10. // Link -- отображение связи между объектами
  11. type Link struct {
  12. *use_link.UseLink
  13. }
  14. // NewViewLink -- возвращает новое отображение связи
  15. func NewViewLink(elem map[string]interface{}) (*Link, error) {
  16. link, err := use_link.NewUseLink(elem)
  17. if err != nil {
  18. return nil, fmt.Errorf("NewLNewViewLink(): in create Link, err=\n\t%w", err)
  19. }
  20. sf := &Link{
  21. UseLink: link,
  22. }
  23. return sf, nil
  24. }
  25. // Draw -- рисует связь между объектами
  26. func (sf *Link) Draw(canvas *svg.SVG, mapDrawer map[alias.Id]types.IElemDrawer) {
  27. _x, _y := sf.Coord_.Coord()
  28. x := int(_x)
  29. y := int(_y)
  30. _x, _y = sf.CoordEnd_.Coord()
  31. x1 := int(_x)
  32. y1 := int(_y)
  33. _x, _y = sf.Offset_.Offset()
  34. offX := int(_x)
  35. offY := int(_y)
  36. // Линия
  37. canvas.Line(x, y, x1, y1, "stroke:black;stroke-width:1")
  38. if sf.Label_ != "" {
  39. canvas.Text(x+offX, y+offY, string(sf.Label_), "font-size: 12px; font-family: Courier; fill: black")
  40. }
  41. if sf.TypeLink_ != "" {
  42. canvas.Text(x+offX, y+offY+12, "<<"+sf.TypeLink_+">>", "font-size: 12px; font-family: Courier; fill: black")
  43. }
  44. if msgErr := sf.Check(mapDrawer); msgErr != "" { // Проверка на правильность
  45. canvas.Group("Ошибка")
  46. canvas.Title(msgErr)
  47. canvas.Image(x-20+offX, y-20+offY, 16, 16, "/static/img/warning.png")
  48. canvas.Gend()
  49. }
  50. }
  51. // SrcId -- возвращает источник связи
  52. func (sf *Link) SrcId() alias.Id {
  53. return sf.Src_
  54. }
  55. // DstId -- возвращает получателя связи
  56. func (sf *Link) DstId() alias.Id {
  57. return sf.Dst_
  58. }