unique mask id

This commit is contained in:
Alexander Wang 2025-01-26 14:11:53 -07:00
parent a539dae402
commit 654562fc61
No known key found for this signature in database
GPG key ID: BE3937D0D52D8927

View file

@ -739,7 +739,7 @@ func defineShadowFilter(writer io.Writer) {
</defs>`) </defs>`)
} }
func render3DRect(targetShape d2target.Shape, inlineTheme *d2themes.Theme) string { func render3DRect(diagramHash string, targetShape d2target.Shape, inlineTheme *d2themes.Theme) string {
moveTo := func(p d2target.Point) string { moveTo := func(p d2target.Point) string {
return fmt.Sprintf("M%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y) return fmt.Sprintf("M%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
} }
@ -781,7 +781,7 @@ func render3DRect(targetShape d2target.Shape, inlineTheme *d2themes.Theme) strin
renderedBorder := border.Render() renderedBorder := border.Render()
// create mask from border stroke, to cut away from the shape fills // create mask from border stroke, to cut away from the shape fills
maskID := fmt.Sprintf("border-mask-%v", svg.EscapeText(targetShape.ID)) maskID := fmt.Sprintf("border-mask-%v-%v", diagramHash, 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-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET, maskID, targetShape.Pos.X, targetShape.Pos.Y-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET,
@ -835,7 +835,7 @@ func render3DRect(targetShape d2target.Shape, inlineTheme *d2themes.Theme) strin
return borderMask + mainShapeRendered + renderedSides + renderedBorder return borderMask + mainShapeRendered + renderedSides + renderedBorder
} }
func render3DHexagon(targetShape d2target.Shape, inlineTheme *d2themes.Theme) string { func render3DHexagon(diagramHash string, targetShape d2target.Shape, inlineTheme *d2themes.Theme) string {
moveTo := func(p d2target.Point) string { moveTo := func(p d2target.Point) string {
return fmt.Sprintf("M%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y) return fmt.Sprintf("M%d,%d", p.X+targetShape.Pos.X, p.Y+targetShape.Pos.Y)
} }
@ -905,7 +905,7 @@ func render3DHexagon(targetShape d2target.Shape, inlineTheme *d2themes.Theme) st
mainPointsPoly := strings.Join(mainPoints, " ") mainPointsPoly := strings.Join(mainPoints, " ")
// create mask from border stroke, to cut away from the shape fills // create mask from border stroke, to cut away from the shape fills
maskID := fmt.Sprintf("border-mask-%v", svg.EscapeText(targetShape.ID)) maskID := fmt.Sprintf("border-mask-%v-%v", diagramHash, 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-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET, maskID, targetShape.Pos.X, targetShape.Pos.Y-d2target.THREE_DEE_OFFSET, targetShape.Width+d2target.THREE_DEE_OFFSET, targetShape.Height+d2target.THREE_DEE_OFFSET,
@ -1099,7 +1099,7 @@ func drawShape(writer, appendixWriter io.Writer, diagramHash string, targetShape
borderRadius = float64(targetShape.BorderRadius) borderRadius = float64(targetShape.BorderRadius)
} }
if targetShape.ThreeDee { if targetShape.ThreeDee {
fmt.Fprint(writer, render3DRect(targetShape, inlineTheme)) fmt.Fprint(writer, render3DRect(diagramHash, targetShape, inlineTheme))
} else { } else {
if !targetShape.DoubleBorder { if !targetShape.DoubleBorder {
if targetShape.Multiple { if targetShape.Multiple {
@ -1192,7 +1192,7 @@ func drawShape(writer, appendixWriter io.Writer, diagramHash string, targetShape
} }
case d2target.ShapeHexagon: case d2target.ShapeHexagon:
if targetShape.ThreeDee { if targetShape.ThreeDee {
fmt.Fprint(writer, render3DHexagon(targetShape, inlineTheme)) fmt.Fprint(writer, render3DHexagon(diagramHash, targetShape, inlineTheme))
} else { } else {
if targetShape.Multiple { if targetShape.Multiple {
multiplePathData := shape.NewShape(shapeType, geo.NewBox(multipleTL, width, height)).GetSVGPathData() multiplePathData := shape.NewShape(shapeType, geo.NewBox(multipleTL, width, height)).GetSVGPathData()