// package view_link -- отображение связи между объектами package view_link import ( svg "github.com/ajstarks/svgo" "gitp78su.ipnodns.ru/svi/kern/v3" "gitp78su.ipnodns.ru/svi/goarch/lev0/types" "gitp78su.ipnodns.ru/svi/goarch/lev1/arch_link" ) // ViewLink -- отображение связи между объектами type ViewLink struct { *arch_link.ArchLink Coord_ types.IViewCoord CoordEnd_ types.IViewCoord Offset_ types.IViewOffset } var ( hassert = kern.GetFnHassert() ) // NewViewLink -- возвращает новое отображение связи func NewViewLink(archLink *arch_link.ArchLink, coord, coordEnd types.IViewCoord, offset types.IViewOffset) *ViewLink { hassert(archLink != nil, "NewViewLink: archLink == nil") hassert(coord != nil, "NewViewLink: coord == nil") hassert(offset != nil, "NewViewLink: offset == nil") sf := &ViewLink{ ArchLink: archLink, Coord_: coord, CoordEnd_: coordEnd, Offset_: offset, } return sf } // Draw -- рисует связь между объектами func (sf *ViewLink) Draw(canvas *svg.SVG) { x, y := sf.Coord_.Int() x1, y1 := sf.CoordEnd_.Int() offX, offY := sf.Offset_.Int() // Линия canvas.Line(x, y, x1, y1, "stroke:black;stroke-width:1") strLabel := sf.String() if strLabel != "" { canvas.Text(x+offX, y+offY, strLabel, "font-size: 12px; font-family: Courier; fill: black") } if sf.TypeLink() != "" { canvas.Text(x+offX, y+offY+12, "<<"+sf.TypeLink()+">>", "font-size: 12px; font-family: Courier; fill: black") } if msgErr := sf.Check(); msgErr != "" { // Проверка на правильность canvas.Group("Ошибка") canvas.Title(msgErr) canvas.Image(x-20+offX, y-20+offY, 16, 16, "/static/img/warning.png") } canvas.Gend() // Group end } // CoordEnd -- координаты конца связи // //go:fix inline func (sf *ViewLink) CoordEnd() types.IViewCoord { return sf.CoordEnd_ }