From a64d87eb61dbd2b27e9dda674f276002b0d1b78a Mon Sep 17 00:00:00 2001 From: OneRain2333 Date: Fri, 30 Dec 2022 17:30:29 +0800 Subject: [PATCH] Implement the sketch of double circle --- d2renderers/d2sketch/sketch.go | 41 ++++++++++++++++++++++++++++++++++ d2renderers/d2svg/d2svg.go | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) 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 }