From 5e4a806fb50ff64cd712ba2656bf47d5c72629a7 Mon Sep 17 00:00:00 2001 From: seveibar Date: Wed, 18 Dec 2024 17:48:31 -0800 Subject: [PATCH 1/2] add support for computing schematic transform --- bun.lockb | Bin 292326 -> 292793 bytes .../convert-circuit-json-to-schematic-svg.ts | 2 ++ .../get-schematic-bounds-from-circuit-json.ts | 8 +++++- package.json | 1 + tests/sch/transform-attribute.test.tsx | 24 ++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 tests/sch/transform-attribute.test.tsx diff --git a/bun.lockb b/bun.lockb index b27798e04438a6a4e738cfcc83e1b3fe1914d2b8..3ba09f2b768ba16459d0a3ff698a48b61373f658 100755 GIT binary patch delta 54400 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 NLXKSRr1xm}{{uvaho=Al diff --git a/lib/sch/convert-circuit-json-to-schematic-svg.ts b/lib/sch/convert-circuit-json-to-schematic-svg.ts index be8f3ff..a261021 100644 --- a/lib/sch/convert-circuit-json-to-schematic-svg.ts +++ b/lib/sch/convert-circuit-json-to-schematic-svg.ts @@ -10,6 +10,7 @@ import { fromTriangles, type Matrix, fromTwoMovingPoints, + toSVG, } from "transformation-matrix" import { drawSchematicGrid } from "./draw-schematic-grid" import { drawSchematicLabeledPoints } from "./draw-schematic-labeled-points" @@ -161,6 +162,7 @@ export function convertCircuitJsonToSchematicSvg( width: svgWidth.toString(), height: svgHeight.toString(), style: `background-color: ${colorMap.schematic.background}`, + "data-real-to-screen-transform": toSVG(transform), }, children: [ // Add styles diff --git a/lib/sch/get-schematic-bounds-from-circuit-json.ts b/lib/sch/get-schematic-bounds-from-circuit-json.ts index 3054813..752e584 100644 --- a/lib/sch/get-schematic-bounds-from-circuit-json.ts +++ b/lib/sch/get-schematic-bounds-from-circuit-json.ts @@ -41,7 +41,13 @@ export function getSchematicBoundsFromCircuitJson( } else if (item.type === "schematic_text") { updateBounds(item.position, { width: 0.1, height: 0.1 }, 0) } else if (item.type === "schematic_voltage_probe") { - updateBounds(item.position, { width: 0.2, height: 0.4 }, 0) // width and hight of the probe (Arrow) + updateBounds(item.position, { width: 0.2, height: 0.4 }, 0) // width and height of the probe (Arrow) + } else if (item.type === "schematic_box") { + updateBounds( + { x: item.x, y: item.y }, + { width: item.width, height: item.height }, + 0, + ) } } diff --git a/package.json b/package.json index 6da9317..1a0a717 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@tscircuit/routing": "^1.3.5", "@tscircuit/soup-util": "^0.0.41", "@types/node": "^22.5.5", + "bun-types": "^1.1.40", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" } diff --git a/tests/sch/transform-attribute.test.tsx b/tests/sch/transform-attribute.test.tsx new file mode 100644 index 0000000..15d1b07 --- /dev/null +++ b/tests/sch/transform-attribute.test.tsx @@ -0,0 +1,24 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToSchematicSvg } from "lib" + +test("svg should have data-real-to-screen-transform attribute", () => { + const svg = convertCircuitJsonToSchematicSvg([ + { + type: "schematic_box", + x: 0, + y: 0, + width: 10, + height: 10, + schematic_component_id: "1", + }, + ]) + + // Check that the SVG contains the data-real-to-screen-transform attribute + expect(svg).toContain('data-real-to-screen-transform="') + + // Extract the transform value and verify it's a valid matrix string + const match = svg.match(/data-real-to-screen-transform="([^"]+)"/) + + // @ts-ignore + expect(match[1]).toMatchInlineSnapshot(`"matrix(54.5454545455,0,0,-54.5454545455,600,300)"`) +}) From e8b0d20317d7aa6443263b4f420d057d58b8f077 Mon Sep 17 00:00:00 2001 From: seveibar Date: Wed, 18 Dec 2024 17:55:03 -0800 Subject: [PATCH 2/2] format --- tests/sch/transform-attribute.test.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/sch/transform-attribute.test.tsx b/tests/sch/transform-attribute.test.tsx index 15d1b07..f7c065b 100644 --- a/tests/sch/transform-attribute.test.tsx +++ b/tests/sch/transform-attribute.test.tsx @@ -20,5 +20,7 @@ test("svg should have data-real-to-screen-transform attribute", () => { const match = svg.match(/data-real-to-screen-transform="([^"]+)"/) // @ts-ignore - expect(match[1]).toMatchInlineSnapshot(`"matrix(54.5454545455,0,0,-54.5454545455,600,300)"`) + expect(match[1]).toMatchInlineSnapshot( + `"matrix(54.5454545455,0,0,-54.5454545455,600,300)"`, + ) })