// package view_link -- отображение связи между объектами package view_link import ( svg "github.com/ajstarks/svgo" "gitp78su.ipnodns.ru/svi/goarch/lev0/alias" "gitp78su.ipnodns.ru/svi/goarch/lev0/types" "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/use_link" "gitp78su.ipnodns.ru/svi/kern/v3" ) // Link -- отображение связи между объектами type Link struct { UseLink_ *use_link.UseLink } var( hassert=kern.GetFnHassert() ) // NewViewLink -- возвращает новое отображение связи func NewViewLink(useLink *use_link.UseLink) *Link { hassert(useLink!=nil, "NewViewLink: useLink is nil") sf := &Link{ UseLink_: useLink, } return sf } // Draw -- рисует связь между объектами func (sf *Link) Draw(canvas *svg.SVG, mapDrawer map[alias.Id]types.IElemDrawer) { _x, _y := sf.UseLink_.ElemBase_.Label_.Coord_.Coord() x := int(_x) y := int(_y) _x, _y = sf.UseLink_.CoordEnd_.Coord() x1 := int(_x) y1 := int(_y) _x, _y = sf.UseLink_.ElemBase_.Label_.Offset_.Offset() offX := int(_x) offY := int(_y) // Линия canvas.Line(x, y, x1, y1, "stroke:black;stroke-width:1") strLabel:=string(sf.UseLink_.ElemBase_.Label_.Val_) if strLabel != "" { canvas.Text(x+offX, y+offY, strLabel, "font-size: 12px; font-family: Courier; fill: black") } strTypeLink:=string(sf.UseLink_.TypeLink_) if strTypeLink != "" { canvas.Text(x+offX, y+offY+12, "<<"+strTypeLink+">>", "font-size: 12px; font-family: Courier; fill: black") } if msgErr := sf.UseLink_.ElemBase_.Check(mapDrawer); msgErr != "" { // Проверка на правильность canvas.Group("Ошибка") canvas.Title(msgErr) canvas.Image(x-20+offX, y-20+offY, 16, 16, "/static/img/warning.png") canvas.Gend() // Group end } } // SrcId -- возвращает источник связи func (sf *Link) SrcId() alias.Id { return sf.Src_ } // DstId -- возвращает получателя связи func (sf *Link) DstId() alias.Id { return sf.Dst_ }