|
|
@@ -15,6 +15,8 @@ import (
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
|
|
|
+ "gitp78su.ipnodns.ru/svi/goarch/lev1/coord"
|
|
|
+ "gitp78su.ipnodns.ru/svi/goarch/lev1/size"
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/pkg/elems/canvas"
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/pkg/views/view_actor"
|
|
|
"gitp78su.ipnodns.ru/svi/goarch/pkg/views/view_link"
|
|
|
@@ -30,12 +32,12 @@ var indexHtml []byte
|
|
|
|
|
|
// CanvasSize -- размер хоста
|
|
|
type CanvasSize struct {
|
|
|
- Width int `form:"w"`
|
|
|
- Height int `form:"h"`
|
|
|
+ SizeX_ int `form:"w"`
|
|
|
+ SizeY_ int `form:"h"`
|
|
|
}
|
|
|
|
|
|
func (sf *CanvasSize) String() string {
|
|
|
- return fmt.Sprintf("w:%v; h:%v", sf.Width, sf.Height)
|
|
|
+ return fmt.Sprintf("w:%v; h:%v", sf.SizeX_, sf.SizeY_)
|
|
|
}
|
|
|
|
|
|
// ModHttp -- http-модуль для архитектуры
|
|
|
@@ -43,9 +45,11 @@ type ModHttp struct {
|
|
|
// fibApp *fiber.App
|
|
|
kCtx ktypes.IKernelCtx
|
|
|
log ktypes.ILogBuf
|
|
|
- diaMode string // Режим диаграммы
|
|
|
- oldBinArch []byte // Кеш старой архитектуры
|
|
|
- canvSize CanvasSize // Размер холста
|
|
|
+ diaMode string // Режим диаграммы
|
|
|
+ oldBinArch []byte // Кеш старой архитектуры
|
|
|
+ canvSize CanvasSize // Размер холста
|
|
|
+ size *size.Size // Размер холста в его координатах
|
|
|
+ pos *coord.Coord // Координаты холста
|
|
|
}
|
|
|
|
|
|
// NewModHttp -- возвращает новый сервис
|
|
|
@@ -57,6 +61,8 @@ func NewModHttp() *ModHttp {
|
|
|
kCtx: kern.GetKernelCtx(),
|
|
|
log: log,
|
|
|
diaMode: cons.ModeUseCase,
|
|
|
+ size: size.NewSize(800, 600),
|
|
|
+ pos: coord.NewCoord(0, 0),
|
|
|
}
|
|
|
sHttp := kern.GetKernelServerHttp()
|
|
|
fibApp := sHttp.Fiber()
|
|
|
@@ -83,6 +89,12 @@ func (sf *ModHttp) postSetCanvasSize(ctx *fiber.Ctx) error {
|
|
|
if err != nil {
|
|
|
sf.log.Err("postSetCanvasSize(): on body parser, err=\n\t%v", err)
|
|
|
}
|
|
|
+ if sf.canvSize.SizeX_ > 0 {
|
|
|
+ sf.size.W_ = alias.SizeX(sf.canvSize.SizeX_ - 10)
|
|
|
+ }
|
|
|
+ if sf.canvSize.SizeY_ > 0 {
|
|
|
+ sf.size.H_ = alias.SizeY(sf.canvSize.SizeY_ - 10)
|
|
|
+ }
|
|
|
return ctx.SendString(sf.canvSize.String())
|
|
|
}
|
|
|
|
|
|
@@ -110,7 +122,7 @@ func (sf *ModHttp) canvas(wr *bytes.Buffer, lstElem []map[string]interface{}) (*
|
|
|
if !isFind {
|
|
|
return nil, fmt.Errorf("ServHttp.canvas(): in mapElem, config not found")
|
|
|
}
|
|
|
- confCanvas := canvas.NewCanvas(sf.diaMode, elem)
|
|
|
+ confCanvas := canvas.NewCanvas(sf.diaMode, sf.size, sf.pos)
|
|
|
sizeX, sizeY := confCanvas.Size()
|
|
|
canvas := svg.New(wr)
|
|
|
canvas.Start(int(sizeX), int(sizeY))
|
|
|
@@ -183,29 +195,16 @@ func (sf *ModHttp) useCase(canvas *svg.SVG, lstElem []map[string]interface{}) er
|
|
|
}
|
|
|
var (
|
|
|
drawer types.IElemDrawer
|
|
|
- err error
|
|
|
)
|
|
|
switch strType {
|
|
|
case cons.TypeUseActor: // Нарисовать актора
|
|
|
- drawer, err = view_actor.NewViewActor(elem)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("ServHttp.useCase(): id=%q, in create Actor, err=<br>%v", id, err)
|
|
|
- }
|
|
|
+ view_actor.NewViewActor(actor, elem)
|
|
|
case cons.TypeUseCase: // Нарисовать вариант использования
|
|
|
- drawer, err = view_use_case.NewViewUseCase(elem)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("ServHttp.useCase(): id=%q, err=%w<br>%+v", id, err, string(binElem))
|
|
|
- }
|
|
|
+ drawer = view_use_case.NewViewUseCase(useCase, elem)
|
|
|
case cons.TypeUseLink: // Нарисовать связь
|
|
|
- drawer, err = view_link.NewViewLink(elem)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("ServHttp.useCase(): id=%q, in create Link, err=%w<br>%+v", id, err, string(binElem))
|
|
|
- }
|
|
|
+ drawer = view_link.NewViewLink(useLink)
|
|
|
case cons.TypeUseGroup: // Нарисовать группу вариантов использования
|
|
|
- drawer, err = view_use_group.NewViewUseGroup(elem)
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("ServHttp.useCase(): id=%q, in create UseGroup, err=%w<br>%+v", id, err, string(binElem))
|
|
|
- }
|
|
|
+ drawer = view_use_group.NewViewUseGroup(useGroup, elem)
|
|
|
}
|
|
|
if drawer != nil {
|
|
|
mapDraw[id] = drawer
|
|
|
@@ -214,7 +213,7 @@ func (sf *ModHttp) useCase(canvas *svg.SVG, lstElem []map[string]interface{}) er
|
|
|
}
|
|
|
for _, drawer := range mapDraw {
|
|
|
switch drawer.(type) {
|
|
|
- case types.ILinker:
|
|
|
+ case types.IElemLinker:
|
|
|
}
|
|
|
drawer.Draw(canvas, mapDraw)
|
|
|
}
|