account for 3d offset in bounding box

This commit is contained in:
Alexander Wang 2023-01-19 11:51:30 -08:00
parent 5c068547b2
commit 2d17947a44
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
2 changed files with 16 additions and 10 deletions

View file

@ -38,7 +38,6 @@ import (
const ( const (
DEFAULT_PADDING = 100 DEFAULT_PADDING = 100
MIN_ARROWHEAD_STROKE_WIDTH = 2 MIN_ARROWHEAD_STROKE_WIDTH = 2
threeDeeOffset = 15
appendixIconRadius = 16 appendixIconRadius = 16
) )
@ -578,9 +577,9 @@ func render3dRect(targetShape d2target.Shape) string {
moveTo(d2target.Point{X: 0, Y: 0}), moveTo(d2target.Point{X: 0, Y: 0}),
) )
for _, v := range []d2target.Point{ for _, v := range []d2target.Point{
{X: threeDeeOffset, Y: -threeDeeOffset}, {X: d2target.THREE_DEE_OFFSET, Y: -d2target.THREE_DEE_OFFSET},
{X: targetShape.Width + threeDeeOffset, Y: -threeDeeOffset}, {X: targetShape.Width + d2target.THREE_DEE_OFFSET, Y: -d2target.THREE_DEE_OFFSET},
{X: targetShape.Width + threeDeeOffset, Y: targetShape.Height - threeDeeOffset}, {X: targetShape.Width + d2target.THREE_DEE_OFFSET, Y: targetShape.Height - d2target.THREE_DEE_OFFSET},
{X: targetShape.Width, Y: targetShape.Height}, {X: targetShape.Width, Y: targetShape.Height},
{X: 0, Y: targetShape.Height}, {X: 0, Y: targetShape.Height},
{X: 0, Y: 0}, {X: 0, Y: 0},
@ -594,7 +593,7 @@ func render3dRect(targetShape d2target.Shape) string {
moveTo(d2target.Point{X: targetShape.Width, Y: 0}), moveTo(d2target.Point{X: targetShape.Width, Y: 0}),
) )
borderSegments = append(borderSegments, borderSegments = append(borderSegments,
lineTo(d2target.Point{X: targetShape.Width + threeDeeOffset, Y: -threeDeeOffset}), lineTo(d2target.Point{X: targetShape.Width + d2target.THREE_DEE_OFFSET, Y: -d2target.THREE_DEE_OFFSET}),
) )
border := targetShape border := targetShape
border.Fill = "none" border.Fill = "none"
@ -606,10 +605,10 @@ func render3dRect(targetShape d2target.Shape) string {
maskID := fmt.Sprintf("border-mask-%v", svg.EscapeText(targetShape.ID)) maskID := fmt.Sprintf("border-mask-%v", svg.EscapeText(targetShape.ID))
borderMask := strings.Join([]string{ borderMask := strings.Join([]string{
fmt.Sprintf(`<defs><mask id="%s" maskUnits="userSpaceOnUse" x="%d" y="%d" width="%d" height="%d">`, fmt.Sprintf(`<defs><mask id="%s" maskUnits="userSpaceOnUse" x="%d" y="%d" width="%d" height="%d">`,
maskID, targetShape.Pos.X, targetShape.Pos.Y-threeDeeOffset, targetShape.Width+threeDeeOffset, targetShape.Height+threeDeeOffset, maskID, targetShape.Pos.X, targetShape.Pos.Y-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET,
), ),
fmt.Sprintf(`<rect x="%d" y="%d" width="%d" height="%d" fill="white"></rect>`, fmt.Sprintf(`<rect x="%d" y="%d" width="%d" height="%d" fill="white"></rect>`,
targetShape.Pos.X, targetShape.Pos.Y-threeDeeOffset, targetShape.Width+threeDeeOffset, targetShape.Height+threeDeeOffset, targetShape.Pos.X, targetShape.Pos.Y-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET,
), ),
fmt.Sprintf(`<path d="%s" style="%s;stroke:#000;fill:none;opacity:1;"/></mask></defs>`, fmt.Sprintf(`<path d="%s" style="%s;stroke:#000;fill:none;opacity:1;"/></mask></defs>`,
strings.Join(borderSegments, ""), borderStyle), strings.Join(borderSegments, ""), borderStyle),
@ -626,9 +625,9 @@ func render3dRect(targetShape d2target.Shape) string {
var sidePoints []string var sidePoints []string
for _, v := range []d2target.Point{ for _, v := range []d2target.Point{
{X: 0, Y: 0}, {X: 0, Y: 0},
{X: threeDeeOffset, Y: -threeDeeOffset}, {X: d2target.THREE_DEE_OFFSET, Y: -d2target.THREE_DEE_OFFSET},
{X: targetShape.Width + threeDeeOffset, Y: -threeDeeOffset}, {X: targetShape.Width + d2target.THREE_DEE_OFFSET, Y: -d2target.THREE_DEE_OFFSET},
{X: targetShape.Width + threeDeeOffset, Y: targetShape.Height - threeDeeOffset}, {X: targetShape.Width + d2target.THREE_DEE_OFFSET, Y: targetShape.Height - d2target.THREE_DEE_OFFSET},
{X: targetShape.Width, Y: targetShape.Height}, {X: targetShape.Width, Y: targetShape.Height},
{X: targetShape.Width, Y: 0}, {X: targetShape.Width, Y: 0},
} { } {

View file

@ -21,6 +21,8 @@ import (
const ( const (
DEFAULT_ICON_SIZE = 32 DEFAULT_ICON_SIZE = 32
MAX_ICON_SIZE = 64 MAX_ICON_SIZE = 64
THREE_DEE_OFFSET = 15
) )
type Diagram struct { type Diagram struct {
@ -88,6 +90,11 @@ func (diagram Diagram) BoundingBox() (topLeft, bottomRight Point) {
x2 = go2.Max(x2, int(labelTL.X)+targetShape.LabelWidth) x2 = go2.Max(x2, int(labelTL.X)+targetShape.LabelWidth)
y2 = go2.Max(y2, int(labelTL.Y)+targetShape.LabelHeight) y2 = go2.Max(y2, int(labelTL.Y)+targetShape.LabelHeight)
} }
if targetShape.ThreeDee {
y1 = go2.Min(y1, targetShape.Pos.Y-THREE_DEE_OFFSET-targetShape.StrokeWidth)
x2 = go2.Max(x2, targetShape.Pos.X+THREE_DEE_OFFSET+targetShape.Width+targetShape.StrokeWidth)
}
} }
for _, connection := range diagram.Connections { for _, connection := range diagram.Connections {