fixes, cleanup
This commit is contained in:
parent
6f9ad8d6dd
commit
6fc9ffa04d
3 changed files with 46 additions and 21 deletions
|
|
@ -1968,6 +1968,6 @@ func (obj *Object) IsMultiple() bool {
|
||||||
return obj.Style.Multiple != nil && obj.Style.Multiple.Value == "true"
|
return obj.Style.Multiple != nil && obj.Style.Multiple.Value == "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (obj *Object) IsThreeDee() 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"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -168,10 +168,15 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
height += float64(obj.LabelDimensions.Height) + label.PADDING
|
height += float64(obj.LabelDimensions.Height) + label.PADDING
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if obj.Style.ThreeDee != nil && obj.Style.ThreeDee.Value == "true" {
|
// reserve extra space for 3d/multiple by padding dagre the larger dimensions
|
||||||
height += d2target.THREE_DEE_OFFSET
|
if obj.Is3d() {
|
||||||
|
if obj.Shape.Value == d2target.ShapeHexagon {
|
||||||
|
height += d2target.THREE_DEE_OFFSET / 2
|
||||||
|
} else {
|
||||||
|
height += d2target.THREE_DEE_OFFSET
|
||||||
|
}
|
||||||
width += d2target.THREE_DEE_OFFSET
|
width += d2target.THREE_DEE_OFFSET
|
||||||
} else if obj.Style.Multiple != nil && obj.Style.Multiple.Value == "true" {
|
} else if obj.IsMultiple() {
|
||||||
height += d2target.MULTIPLE_OFFSET
|
height += d2target.MULTIPLE_OFFSET
|
||||||
width += d2target.MULTIPLE_OFFSET
|
width += d2target.MULTIPLE_OFFSET
|
||||||
}
|
}
|
||||||
|
|
@ -414,20 +419,27 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// separate loop so all descendants have initial placements
|
// remove the extra width/height we added for 3d/multiple after all objects have been placed
|
||||||
|
// and shift the shapes down accordingly
|
||||||
for _, obj := range g.Objects {
|
for _, obj := range g.Objects {
|
||||||
var offset float64
|
var offsetX, offsetY float64
|
||||||
if obj.Style.ThreeDee != nil && obj.Style.ThreeDee.Value == "true" {
|
if obj.Is3d() {
|
||||||
offset = d2target.THREE_DEE_OFFSET
|
offsetX = d2target.THREE_DEE_OFFSET
|
||||||
} else if obj.Style.Multiple != nil && obj.Style.Multiple.Value == "true" {
|
offsetY = d2target.THREE_DEE_OFFSET
|
||||||
offset = d2target.MULTIPLE_OFFSET
|
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 offset != 0 {
|
|
||||||
obj.TopLeft.Y += offset
|
if offsetY != 0 {
|
||||||
obj.ShiftDescendants(0, offset)
|
obj.TopLeft.Y += offsetY
|
||||||
|
obj.ShiftDescendants(0, offsetY)
|
||||||
if !obj.IsContainer() {
|
if !obj.IsContainer() {
|
||||||
obj.Width -= offset
|
obj.Width -= offsetX
|
||||||
obj.Height -= offset
|
obj.Height -= offsetY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -481,9 +493,13 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
originalSrcTL := edge.Src.TopLeft.Copy()
|
originalSrcTL := edge.Src.TopLeft.Copy()
|
||||||
originalDstTL := edge.Dst.TopLeft.Copy()
|
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.IsThreeDee() {
|
if edge.Src.Is3d() {
|
||||||
|
offsetY := d2target.THREE_DEE_OFFSET
|
||||||
|
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
||||||
|
offsetY = d2target.THREE_DEE_OFFSET / 2
|
||||||
|
}
|
||||||
if start.X > edge.Src.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
if start.X > edge.Src.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
||||||
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-d2target.THREE_DEE_OFFSET {
|
start.Y < edge.Src.TopLeft.Y+edge.Src.Height-float64(offsetY) {
|
||||||
edge.Src.TopLeft.X += d2target.THREE_DEE_OFFSET
|
edge.Src.TopLeft.X += d2target.THREE_DEE_OFFSET
|
||||||
edge.Src.TopLeft.Y -= d2target.THREE_DEE_OFFSET
|
edge.Src.TopLeft.Y -= d2target.THREE_DEE_OFFSET
|
||||||
}
|
}
|
||||||
|
|
@ -495,9 +511,13 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
|
||||||
edge.Src.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
edge.Src.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if edge.Dst.IsThreeDee() {
|
if edge.Dst.Is3d() {
|
||||||
|
offsetY := d2target.THREE_DEE_OFFSET
|
||||||
|
if edge.Src.Shape.Value == d2target.ShapeHexagon {
|
||||||
|
offsetY = d2target.THREE_DEE_OFFSET / 2
|
||||||
|
}
|
||||||
if end.X > edge.Dst.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
if end.X > edge.Dst.TopLeft.X+d2target.THREE_DEE_OFFSET &&
|
||||||
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-d2target.THREE_DEE_OFFSET {
|
end.Y < edge.Dst.TopLeft.Y+edge.Dst.Height-float64(offsetY) {
|
||||||
edge.Dst.TopLeft.X += d2target.THREE_DEE_OFFSET
|
edge.Dst.TopLeft.X += d2target.THREE_DEE_OFFSET
|
||||||
edge.Dst.TopLeft.Y -= d2target.THREE_DEE_OFFSET
|
edge.Dst.TopLeft.Y -= d2target.THREE_DEE_OFFSET
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1186,9 +1186,14 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape,
|
||||||
labelPosition := label.Position(targetShape.LabelPosition)
|
labelPosition := label.Position(targetShape.LabelPosition)
|
||||||
var box *geo.Box
|
var box *geo.Box
|
||||||
if labelPosition.IsOutside() {
|
if labelPosition.IsOutside() {
|
||||||
box = s.GetBox()
|
box = s.GetBox().Copy()
|
||||||
|
// if it is 3d/multiple, place label using box around those
|
||||||
if targetShape.ThreeDee {
|
if targetShape.ThreeDee {
|
||||||
box.TopLeft.Y -= d2target.THREE_DEE_OFFSET
|
offsetY := d2target.THREE_DEE_OFFSET
|
||||||
|
if targetShape.Type == d2target.ShapeHexagon {
|
||||||
|
offsetY /= 2
|
||||||
|
}
|
||||||
|
box.TopLeft.Y -= float64(offsetY)
|
||||||
box.Width += d2target.THREE_DEE_OFFSET
|
box.Width += d2target.THREE_DEE_OFFSET
|
||||||
} else if targetShape.Multiple {
|
} else if targetShape.Multiple {
|
||||||
box.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
box.TopLeft.Y -= d2target.MULTIPLE_OFFSET
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue