refactor/cleanup
This commit is contained in:
parent
152557fa2c
commit
d06d797025
3 changed files with 80 additions and 144 deletions
|
|
@ -1971,3 +1971,19 @@ func (obj *Object) IsMultiple() bool {
|
||||||
func (obj *Object) Is3d() bool {
|
func (obj *Object) Is3d() bool {
|
||||||
return obj.Style.ThreeDee != nil && obj.Style.ThreeDee.Value == "true"
|
return obj.Style.ThreeDee != nil && obj.Style.ThreeDee.Value == "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return width/height adjustments to account for shapes with 3d or multiple
|
||||||
|
func (obj *Object) GetDimensionAdjustments() (dx, dy float64) {
|
||||||
|
if obj.Is3d() {
|
||||||
|
if obj.Shape.Value == d2target.ShapeHexagon {
|
||||||
|
dy = d2target.THREE_DEE_OFFSET / 2
|
||||||
|
} else {
|
||||||
|
dy = d2target.THREE_DEE_OFFSET
|
||||||
|
}
|
||||||
|
dx = d2target.THREE_DEE_OFFSET
|
||||||
|
} else if obj.IsMultiple() {
|
||||||
|
dy = d2target.MULTIPLE_OFFSET
|
||||||
|
dx = d2target.MULTIPLE_OFFSET
|
||||||
|
}
|
||||||
|
return dx, dy
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -169,17 +169,10 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// reserve extra space for 3d/multiple by providing dagre the larger dimensions
|
// reserve extra space for 3d/multiple by providing dagre the larger dimensions
|
||||||
if obj.Is3d() {
|
dx, dy := obj.GetDimensionAdjustments()
|
||||||
if obj.Shape.Value == d2target.ShapeHexagon {
|
width += dx
|
||||||
height += d2target.THREE_DEE_OFFSET / 2
|
height += dy
|
||||||
} else {
|
|
||||||
height += d2target.THREE_DEE_OFFSET
|
|
||||||
}
|
|
||||||
width += d2target.THREE_DEE_OFFSET
|
|
||||||
} else if obj.IsMultiple() {
|
|
||||||
height += d2target.MULTIPLE_OFFSET
|
|
||||||
width += d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
|
||||||
loadScript += generateAddNodeLine(id, int(width), int(height))
|
loadScript += generateAddNodeLine(id, int(width), int(height))
|
||||||
if obj.Parent != g.Root {
|
if obj.Parent != g.Root {
|
||||||
loadScript += generateAddParentLine(id, obj.Parent.AbsID())
|
loadScript += generateAddParentLine(id, obj.Parent.AbsID())
|
||||||
|
|
@ -422,24 +415,13 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
// remove the extra width/height we added for 3d/multiple after all objects/connections are placed
|
// remove the extra width/height we added for 3d/multiple after all objects/connections are placed
|
||||||
// and shift the shapes down accordingly
|
// and shift the shapes down accordingly
|
||||||
for _, obj := range g.Objects {
|
for _, obj := range g.Objects {
|
||||||
var offsetX, offsetY float64
|
dx, dy := obj.GetDimensionAdjustments()
|
||||||
if obj.Is3d() {
|
if dx != 0 || dy != 0 {
|
||||||
offsetX = d2target.THREE_DEE_OFFSET
|
obj.TopLeft.Y += dy
|
||||||
offsetY = d2target.THREE_DEE_OFFSET
|
obj.ShiftDescendants(0, dy)
|
||||||
if obj.Shape.Value == d2target.ShapeHexagon {
|
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
|
||||||
}
|
|
||||||
} else if obj.IsMultiple() {
|
|
||||||
offsetX = d2target.MULTIPLE_OFFSET
|
|
||||||
offsetY = d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
|
||||||
|
|
||||||
if offsetY != 0 {
|
|
||||||
obj.TopLeft.Y += offsetY
|
|
||||||
obj.ShiftDescendants(0, offsetY)
|
|
||||||
if !obj.IsContainer() {
|
if !obj.IsContainer() {
|
||||||
obj.Width -= offsetX
|
obj.Width -= dx
|
||||||
obj.Height -= offsetY
|
obj.Height -= dy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -490,43 +472,22 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
originalSrcTL := edge.Src.TopLeft.Copy()
|
var originalSrcTL, originalDstTL *geo.Point
|
||||||
originalDstTL := edge.Dst.TopLeft.Copy()
|
|
||||||
// if the edge passes through 3d/multiple, use the offset box for tracing to border
|
// if the edge passes through 3d/multiple, use the offset box for tracing to border
|
||||||
if edge.Src.Is3d() {
|
if srcDx, srcDy := edge.Src.GetDimensionAdjustments(); srcDx != 0 || srcDy != 0 {
|
||||||
offsetY := d2target.THREE_DEE_OFFSET
|
if start.X > edge.Src.TopLeft.X+srcDx &&
|
||||||
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-srcDy {
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
originalSrcTL = edge.Src.TopLeft.Copy()
|
||||||
}
|
edge.Src.TopLeft.X += srcDx
|
||||||
if start.X > edge.Src.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
edge.Src.TopLeft.Y -= srcDy
|
||||||
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-float64(offsetY) {
|
|
||||||
edge.Src.TopLeft.X += d2target.THREE_DEE_OFFSET
|
|
||||||
edge.Src.TopLeft.Y -= float64(offsetY)
|
|
||||||
}
|
|
||||||
} else if edge.Src.IsMultiple() {
|
|
||||||
// if the edge is on the multiple part, use the multiple's box for tracing to border
|
|
||||||
if start.X > edge.Src.TopLeft.X+d2target.MULTIPLE_OFFSET &&
|
|
||||||
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-d2target.MULTIPLE_OFFSET {
|
|
||||||
edge.Src.TopLeft.X += d2target.MULTIPLE_OFFSET
|
|
||||||
edge.Src.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if edge.Dst.Is3d() {
|
if dstDx, dstDy := edge.Dst.GetDimensionAdjustments(); dstDx != 0 || dstDy != 0 {
|
||||||
offsetY := d2target.THREE_DEE_OFFSET
|
if end.X > edge.Dst.TopLeft.X+dstDx &&
|
||||||
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-dstDy {
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
originalDstTL = edge.Dst.TopLeft.Copy()
|
||||||
}
|
edge.Dst.TopLeft.X += dstDx
|
||||||
if end.X > edge.Dst.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
edge.Dst.TopLeft.Y -= dstDy
|
||||||
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-float64(offsetY) {
|
|
||||||
edge.Dst.TopLeft.X += d2target.THREE_DEE_OFFSET
|
|
||||||
edge.Dst.TopLeft.Y -= float64(offsetY)
|
|
||||||
}
|
|
||||||
} else if edge.Dst.IsMultiple() {
|
|
||||||
// if the edge is on the multiple part, use the multiple's box for tracing to border
|
|
||||||
if end.X > edge.Dst.TopLeft.X+d2target.MULTIPLE_OFFSET &&
|
|
||||||
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-d2target.MULTIPLE_OFFSET {
|
|
||||||
edge.Dst.TopLeft.X += d2target.MULTIPLE_OFFSET
|
|
||||||
edge.Dst.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -596,10 +557,14 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
}
|
}
|
||||||
|
|
||||||
// undo 3d/multiple offset
|
// undo 3d/multiple offset
|
||||||
edge.Src.TopLeft.X = originalSrcTL.X
|
if originalSrcTL != nil {
|
||||||
edge.Src.TopLeft.Y = originalSrcTL.Y
|
edge.Src.TopLeft.X = originalSrcTL.X
|
||||||
edge.Dst.TopLeft.X = originalDstTL.X
|
edge.Src.TopLeft.Y = originalSrcTL.Y
|
||||||
edge.Dst.TopLeft.Y = originalDstTL.Y
|
}
|
||||||
|
if originalDstTL != nil {
|
||||||
|
edge.Dst.TopLeft.X = originalDstTL.X
|
||||||
|
edge.Dst.TopLeft.Y = originalDstTL.Y
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -223,17 +223,9 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
width = go2.Max(width, float64(obj.LabelDimensions.Width))
|
width = go2.Max(width, float64(obj.LabelDimensions.Width))
|
||||||
}
|
}
|
||||||
// reserve extra space for 3d/multiple by providing elk the larger dimensions
|
// reserve extra space for 3d/multiple by providing elk the larger dimensions
|
||||||
if obj.Is3d() {
|
dx, dy := obj.GetDimensionAdjustments()
|
||||||
if obj.Shape.Value == d2target.ShapeHexagon {
|
width += dx
|
||||||
height += d2target.THREE_DEE_OFFSET / 2
|
height += dy
|
||||||
} else {
|
|
||||||
height += d2target.THREE_DEE_OFFSET
|
|
||||||
}
|
|
||||||
width += d2target.THREE_DEE_OFFSET
|
|
||||||
} else if obj.IsMultiple() {
|
|
||||||
height += d2target.MULTIPLE_OFFSET
|
|
||||||
width += d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
|
||||||
|
|
||||||
n := &ELKNode{
|
n := &ELKNode{
|
||||||
ID: obj.AbsID(),
|
ID: obj.AbsID(),
|
||||||
|
|
@ -472,24 +464,13 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
// remove the extra width/height we added for 3d/multiple after all objects/connections are placed
|
// remove the extra width/height we added for 3d/multiple after all objects/connections are placed
|
||||||
// and shift the shapes down accordingly
|
// and shift the shapes down accordingly
|
||||||
for _, obj := range g.Objects {
|
for _, obj := range g.Objects {
|
||||||
var offsetX, offsetY float64
|
dx, dy := obj.GetDimensionAdjustments()
|
||||||
if obj.Is3d() {
|
if dx != 0 || dy != 0 {
|
||||||
offsetX = d2target.THREE_DEE_OFFSET
|
obj.TopLeft.Y += dy
|
||||||
offsetY = d2target.THREE_DEE_OFFSET
|
obj.ShiftDescendants(0, dy)
|
||||||
if obj.Shape.Value == d2target.ShapeHexagon {
|
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
|
||||||
}
|
|
||||||
} else if obj.IsMultiple() {
|
|
||||||
offsetX = d2target.MULTIPLE_OFFSET
|
|
||||||
offsetY = d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
|
||||||
|
|
||||||
if offsetY != 0 {
|
|
||||||
obj.TopLeft.Y += offsetY
|
|
||||||
obj.ShiftDescendants(0, offsetY)
|
|
||||||
if !obj.IsContainer() {
|
if !obj.IsContainer() {
|
||||||
obj.Width -= offsetX
|
obj.Width -= dx
|
||||||
obj.Height -= offsetY
|
obj.Height -= dy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -501,43 +482,22 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
start := points[startIndex]
|
start := points[startIndex]
|
||||||
end := points[endIndex]
|
end := points[endIndex]
|
||||||
|
|
||||||
originalSrcTL := edge.Src.TopLeft.Copy()
|
var originalSrcTL, originalDstTL *geo.Point
|
||||||
originalDstTL := edge.Dst.TopLeft.Copy()
|
|
||||||
// if the edge passes through 3d/multiple, use the offset box for tracing to border
|
// if the edge passes through 3d/multiple, use the offset box for tracing to border
|
||||||
if edge.Src.Is3d() {
|
if srcDx, srcDy := edge.Src.GetDimensionAdjustments(); srcDx != 0 || srcDy != 0 {
|
||||||
offsetY := d2target.THREE_DEE_OFFSET
|
if start.X > edge.Src.TopLeft.X+srcDx &&
|
||||||
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-srcDy {
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
originalSrcTL = edge.Src.TopLeft.Copy()
|
||||||
}
|
edge.Src.TopLeft.X += srcDx
|
||||||
if start.X > edge.Src.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
edge.Src.TopLeft.Y -= srcDy
|
||||||
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-float64(offsetY) {
|
|
||||||
edge.Src.TopLeft.X += d2target.THREE_DEE_OFFSET
|
|
||||||
edge.Src.TopLeft.Y -= float64(offsetY)
|
|
||||||
}
|
|
||||||
} else if edge.Src.IsMultiple() {
|
|
||||||
// if the edge is on the multiple part, use the multiple's box for tracing to border
|
|
||||||
if start.X > edge.Src.TopLeft.X+d2target.MULTIPLE_OFFSET &&
|
|
||||||
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-d2target.MULTIPLE_OFFSET {
|
|
||||||
edge.Src.TopLeft.X += d2target.MULTIPLE_OFFSET
|
|
||||||
edge.Src.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if edge.Dst.Is3d() {
|
if dstDx, dstDy := edge.Dst.GetDimensionAdjustments(); dstDx != 0 || dstDy != 0 {
|
||||||
offsetY := d2target.THREE_DEE_OFFSET
|
if end.X > edge.Dst.TopLeft.X+dstDx &&
|
||||||
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-dstDy {
|
||||||
offsetY = d2target.THREE_DEE_OFFSET / 2
|
originalDstTL = edge.Dst.TopLeft.Copy()
|
||||||
}
|
edge.Dst.TopLeft.X += dstDx
|
||||||
if end.X > edge.Dst.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
edge.Dst.TopLeft.Y -= dstDy
|
||||||
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-float64(offsetY) {
|
|
||||||
edge.Dst.TopLeft.X += d2target.THREE_DEE_OFFSET
|
|
||||||
edge.Dst.TopLeft.Y -= float64(offsetY)
|
|
||||||
}
|
|
||||||
} else if edge.Dst.IsMultiple() {
|
|
||||||
// if the edge is on the multiple part, use the multiple's box for tracing to border
|
|
||||||
if end.X > edge.Dst.TopLeft.X+d2target.MULTIPLE_OFFSET &&
|
|
||||||
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-d2target.MULTIPLE_OFFSET {
|
|
||||||
edge.Dst.TopLeft.X += d2target.MULTIPLE_OFFSET
|
|
||||||
edge.Dst.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -555,10 +515,14 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
edge.Route = points
|
edge.Route = points
|
||||||
|
|
||||||
// undo 3d/multiple offset
|
// undo 3d/multiple offset
|
||||||
edge.Src.TopLeft.X = originalSrcTL.X
|
if originalSrcTL != nil {
|
||||||
edge.Src.TopLeft.Y = originalSrcTL.Y
|
edge.Src.TopLeft.X = originalSrcTL.X
|
||||||
edge.Dst.TopLeft.X = originalDstTL.X
|
edge.Src.TopLeft.Y = originalSrcTL.Y
|
||||||
edge.Dst.TopLeft.Y = originalDstTL.Y
|
}
|
||||||
|
if originalDstTL != nil {
|
||||||
|
edge.Dst.TopLeft.X = originalDstTL.X
|
||||||
|
edge.Dst.TopLeft.Y = originalDstTL.Y
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteBends(g)
|
deleteBends(g)
|
||||||
|
|
@ -596,21 +560,12 @@ func deleteBends(g *d2graph.Graph) {
|
||||||
endpoint = e.Dst
|
endpoint = e.Dst
|
||||||
}
|
}
|
||||||
|
|
||||||
var padding int
|
|
||||||
if endpoint.Is3d() {
|
|
||||||
padding = d2target.THREE_DEE_OFFSET
|
|
||||||
if endpoint.Shape.Value == d2target.ShapeHexagon {
|
|
||||||
padding /= 2
|
|
||||||
}
|
|
||||||
} else if endpoint.IsMultiple() {
|
|
||||||
padding = d2target.MULTIPLE_OFFSET
|
|
||||||
}
|
|
||||||
|
|
||||||
isHorizontal := math.Ceil(start.Y) == math.Ceil(corner.Y)
|
isHorizontal := math.Ceil(start.Y) == math.Ceil(corner.Y)
|
||||||
|
dx, dy := endpoint.GetDimensionAdjustments()
|
||||||
|
|
||||||
// Make sure it's still attached
|
// Make sure it's still attached
|
||||||
if isHorizontal {
|
if isHorizontal {
|
||||||
if end.Y <= endpoint.TopLeft.Y+10-float64(padding) {
|
if end.Y <= endpoint.TopLeft.Y+10-dy {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if end.Y >= endpoint.TopLeft.Y+endpoint.Height-10 {
|
if end.Y >= endpoint.TopLeft.Y+endpoint.Height-10 {
|
||||||
|
|
@ -620,7 +575,7 @@ func deleteBends(g *d2graph.Graph) {
|
||||||
if end.X <= endpoint.TopLeft.X+10 {
|
if end.X <= endpoint.TopLeft.X+10 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if end.X >= endpoint.TopLeft.X+endpoint.Width-10+float64(padding) {
|
if end.X >= endpoint.TopLeft.X+endpoint.Width-10+dx {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue