view_link.go 2.0 KB

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