diff --git a/d2renderers/d2sketch/sketch.go b/d2renderers/d2sketch/sketch.go
index 16697c0b1..8b318539d 100644
--- a/d2renderers/d2sketch/sketch.go
+++ b/d2renderers/d2sketch/sketch.go
@@ -116,6 +116,47 @@ func Oval(r *Runner, shape d2target.Shape) (string, error) {
return output, nil
}
+func DoubleOval(r *Runner, shape d2target.Shape) (string, error) {
+ js_big_circle := fmt.Sprintf(`node = rc.ellipse(%d, %d, %d, %d, {
+ fill: "%s",
+ stroke: "%s",
+ strokeWidth: %d,
+ %s
+ });`, shape.Width/2, shape.Height/2, shape.Width, shape.Height, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps)
+ js_small_circle := fmt.Sprintf(`node = rc.ellipse(%d, %d, %d, %d, {
+ fill: "%s",
+ stroke: "%s",
+ strokeWidth: %d,
+ %s
+ });`, shape.Width/2, shape.Height/2, shape.Width-15, shape.Height-15, shape.Fill, shape.Stroke, shape.StrokeWidth, baseRoughProps)
+ paths_big_circle, err := computeRoughPaths(r, js_big_circle)
+ if err != nil {
+ return "", err
+ }
+ paths_small_circle, err := computeRoughPaths(r, js_small_circle)
+ if err != nil {
+ return "", err
+ }
+ output := ""
+ for _, p := range paths_big_circle {
+ output += fmt.Sprintf(
+ ``,
+ shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape),
+ )
+ }
+ for _, p := range paths_small_circle {
+ output += fmt.Sprintf(
+ ``,
+ shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape),
+ )
+ }
+ output += fmt.Sprintf(
+ ``,
+ shape.Pos.X+shape.Width/2, shape.Pos.Y+shape.Height/2, shape.Width/2, shape.Height/2,
+ )
+ return output, nil
+}
+
// TODO need to personalize this per shape like we do in Terrastruct app
func Paths(r *Runner, shape d2target.Shape, paths []string) (string, error) {
output := ""
diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go
index 6e719a155..c35fd3806 100644
--- a/d2renderers/d2svg/d2svg.go
+++ b/d2renderers/d2svg/d2svg.go
@@ -788,7 +788,7 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
fmt.Fprint(writer, renderDoubleCircle(multipleTL, width, height, style))
}
if sketchRunner != nil {
- out, err := d2sketch.Oval(sketchRunner, targetShape)
+ out, err := d2sketch.DoubleOval(sketchRunner, targetShape)
if err != nil {
return "", err
}