diff --git a/lib/Project.ts b/lib/Circuit.ts similarity index 92% rename from lib/Project.ts rename to lib/Circuit.ts index cf53368..f7acaff 100644 --- a/lib/Project.ts +++ b/lib/Circuit.ts @@ -33,6 +33,17 @@ export class Circuit { this.children.push(component) } + /** + * Get the main board for this Circuit. + */ + _getBoard(): PrimitiveComponent & { boardThickness: number } { + return this.children.find( + (c) => c.componentName === "Board", + ) as PrimitiveComponent & { + boardThickness: number + } + } + _guessRootComponent() { if (this.firstChild) return if (this.children.length === 1) { diff --git a/lib/components/base-components/NormalComponent.ts b/lib/components/base-components/NormalComponent.ts index 9c45217..b0b7f76 100644 --- a/lib/components/base-components/NormalComponent.ts +++ b/lib/components/base-components/NormalComponent.ts @@ -420,6 +420,7 @@ export class NormalComponent< doInitialCadModelRender(): void { const { db } = this.root! + const { boardThickness = 0 } = this.root?._getBoard() ?? {} const { _parsedProps: props } = this if (props.cadModel) { @@ -434,15 +435,24 @@ export class NormalComponent< const cad_model = db.cad_component.insert({ // TODO z maybe depends on layer - position: { x: bounds.center.x, y: bounds.center.y, z: 0 }, + position: { + x: bounds.center.x, + y: bounds.center.y, + z: + this.props.layer === "bottom" + ? -boardThickness / 2 + : boardThickness / 2, + }, pcb_component_id: this.pcb_component_id!, source_component_id: this.source_component_id!, model_stl_url: "stlUrl" in cadModel ? cadModel.stlUrl : undefined, model_obj_url: "objUrl" in cadModel ? cadModel.objUrl : undefined, model_jscad: "jscad" in cadModel ? cadModel.jscad : undefined, - // TODO - // footprinter_string: + footprinter_string: + typeof this.props.footprint === "string" && !cadModel + ? this.props.footprint + : undefined, }) } } diff --git a/lib/components/base-components/PrimitiveComponent.ts b/lib/components/base-components/PrimitiveComponent.ts index 6520a92..1083799 100644 --- a/lib/components/base-components/PrimitiveComponent.ts +++ b/lib/components/base-components/PrimitiveComponent.ts @@ -1,5 +1,5 @@ import type { AnySoupElement, AnySourceComponent } from "@tscircuit/soup" -import type { Circuit } from "../../Project" +import type { Circuit } from "../../Circuit" import type { ZodType } from "zod" import { z } from "zod" import { symbols, type SchSymbol, type BaseSymbolName } from "schematic-symbols" diff --git a/lib/components/normal-components/Board.ts b/lib/components/normal-components/Board.ts index 70630b2..ffd6b02 100644 --- a/lib/components/normal-components/Board.ts +++ b/lib/components/normal-components/Board.ts @@ -17,6 +17,11 @@ export class Board extends Group { } } + get boardThickness() { + const { _parsedProps: props } = this + return 1.4 // TODO use prop + } + doInitialPcbComponentRender(): void { const { db } = this.root! const { _parsedProps: props } = this diff --git a/lib/index.ts b/lib/index.ts index e37e065..a432364 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,5 +1,5 @@ export * from "./components" -export * from "./Project" +export * from "./Circuit" import "./register-catalogue" import "./fiber/intrinsic-jsx" diff --git a/tests/components/base-components/select-methods.test.tsx b/tests/components/base-components/select-methods.test.tsx index a61a45c..ef71176 100644 --- a/tests/components/base-components/select-methods.test.tsx +++ b/tests/components/base-components/select-methods.test.tsx @@ -1,5 +1,5 @@ import { it, expect } from "bun:test" -import { Circuit } from "lib/Project" +import { Circuit } from "lib/Circuit" import "lib/register-catalogue" it("should correctly use selectAll and selectOne methods", () => { diff --git a/tests/components/normal-components/chip-aliases.test.tsx b/tests/components/normal-components/chip-aliases.test.tsx index 7d00a33..42d5ed3 100644 --- a/tests/components/normal-components/chip-aliases.test.tsx +++ b/tests/components/normal-components/chip-aliases.test.tsx @@ -1,5 +1,5 @@ import { it, expect } from "bun:test" -import { Circuit } from "lib/Project" +import { Circuit } from "lib/Circuit" import { Chip } from "lib/components/normal-components/Chip" import "lib/register-catalogue" import { getTestFixture } from "tests/fixtures/get-test-fixture" diff --git a/tests/components/normal-components/chip.test.tsx b/tests/components/normal-components/chip.test.tsx index f577dbb..65122b1 100644 --- a/tests/components/normal-components/chip.test.tsx +++ b/tests/components/normal-components/chip.test.tsx @@ -1,5 +1,5 @@ import { it, expect } from "bun:test" -import { Circuit } from "lib/Project" +import { Circuit } from "lib/Circuit" import { Chip } from "lib/components/normal-components/Chip" import "lib/register-catalogue" import { getTestFixture } from "tests/fixtures/get-test-fixture" diff --git a/tests/fixtures/extend-expect-circuit-snapshot.ts b/tests/fixtures/extend-expect-circuit-snapshot.ts index ce75ba8..157e0fb 100644 --- a/tests/fixtures/extend-expect-circuit-snapshot.ts +++ b/tests/fixtures/extend-expect-circuit-snapshot.ts @@ -4,7 +4,7 @@ import * as fs from "node:fs" import * as path from "node:path" import looksSame from "looks-same" import type { AnySoupElement } from "@tscircuit/soup" -import { Circuit } from "lib/Project" +import { Circuit } from "lib/Circuit" async function saveSnapshotOfSoup({ soup, diff --git a/tests/fixtures/get-test-fixture.ts b/tests/fixtures/get-test-fixture.ts index ee4e821..77e66f2 100644 --- a/tests/fixtures/get-test-fixture.ts +++ b/tests/fixtures/get-test-fixture.ts @@ -1,4 +1,4 @@ -import { Circuit } from "lib/Project" +import { Circuit } from "lib/Circuit" import { logSoup } from "@tscircuit/log-soup" import "lib/register-catalogue" import "./extend-expect-circuit-snapshot"