Skip to content

Commit

Permalink
feat: Silkscreen added
Browse files Browse the repository at this point in the history
  • Loading branch information
imrishabh18 committed Oct 10, 2024
1 parent b6b8f59 commit 5788fe1
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 18 deletions.
2 changes: 1 addition & 1 deletion lib/components/base-components/PrimitiveComponent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ export abstract class PrimitiveComponent<

getSubcircuit(): PrimitiveComponent {
if (this.isSubcircuit) return this
const group = this.parent?.getSubcircuit()
const group = this.parent?.getSubcircuit?.()
if (!group)
throw new Error("Component is not inside an opaque group (no board?)")
return group
Expand Down
34 changes: 18 additions & 16 deletions lib/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,27 @@ export { NormalComponent } from "./base-components/NormalComponent"
export { PrimitiveComponent } from "./base-components/PrimitiveComponent"
export { Renderable, type IRenderable } from "./base-components/Renderable"
export { Board } from "./normal-components/Board"
export { Footprint } from "./primitive-components/Footprint"
export { SmtPad } from "./primitive-components/SmtPad"
export { Port } from "./primitive-components/Port"
export { Resistor } from "./normal-components/Resistor"
export { Led } from "./normal-components/Led"
export { Diode } from "./normal-components/Diode"
export { Capacitor } from "./normal-components/Capacitor"
export { Net } from "./primitive-components/Net"
export { Trace } from "./primitive-components/Trace"
export { TraceHint } from "./primitive-components/TraceHint"
export { Group } from "./primitive-components/Group"
export { Chip } from "./normal-components/Chip"
export { Diode } from "./normal-components/Diode"
export { Jumper } from "./normal-components/Jumper"
export { SilkscreenPath } from "./primitive-components/SilkscreenPath"
export { PlatedHole } from "./primitive-components/PlatedHole"
export { Led } from "./normal-components/Led"
export { Resistor } from "./normal-components/Resistor"
export { Constraint } from "./primitive-components/Constraint"
export { FabricationNotePath } from "./primitive-components/FabricationNotePath"
export { FabricationNoteText } from "./primitive-components/FabricationNoteText"
export { Footprint } from "./primitive-components/Footprint"
export { Group } from "./primitive-components/Group"
export { Hole } from "./primitive-components/Hole"
export { SilkscreenText } from "./primitive-components/SilkscreenText"
export { Keepout } from "./primitive-components/Keepout"
export { FabricationNoteText } from "./primitive-components/FabricationNoteText"
export { FabricationNotePath } from "./primitive-components/FabricationNotePath"
export { Via } from "./primitive-components/Via"
export { Net } from "./primitive-components/Net"
export { PlatedHole } from "./primitive-components/PlatedHole"
export { Port } from "./primitive-components/Port"
export { SilkscreenCircle } from "./primitive-components/SilkscreenCircle"
export { SilkscreenPath } from "./primitive-components/SilkscreenPath"
export { SilkscreenRect } from "./primitive-components/SilkscreenRect"
export { SilkscreenText } from "./primitive-components/SilkscreenText"
export { SmtPad } from "./primitive-components/SmtPad"
export { Trace } from "./primitive-components/Trace"
export { TraceHint } from "./primitive-components/TraceHint"
export { Via } from "./primitive-components/Via"
46 changes: 46 additions & 0 deletions lib/components/primitive-components/SilkscreenCircle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { silkscreenCircleProps } from "@tscircuit/props"
import { applyToPoint } from "transformation-matrix"
import { PrimitiveComponent } from "../base-components/PrimitiveComponent"

export class SilkscreenCircle extends PrimitiveComponent<
typeof silkscreenCircleProps
> {
pcb_silkscreen_circle_id: string | null = null

get config() {
return {
componentName: "SilkscreenCircle",
zodProps: silkscreenCircleProps,
}
}

doInitialPcbPrimitiveRender(): void {
const { db } = this.root!
const { _parsedProps: props } = this
const layer = props.layer ?? "top"
if (layer !== "top" && layer !== "bottom") {
throw new Error(
`Invalid layer "${layer}" for SilkscreenCircle. Must be "top" or "bottom".`,
)
}

const transform = this._computePcbGlobalTransformBeforeLayout()
const transformedCenter = applyToPoint(transform, {
x: props.pcbX ?? 0,
y: props.pcbY ?? 0,
})

const pcb_silkscreen_circle = db.pcb_silkscreen_circle.insert({
pcb_component_id: this.parent?.pcb_component_id!,
layer,
center: {
x: transformedCenter.x,
y: transformedCenter.y,
},
radius: props.radius,
})

this.pcb_silkscreen_circle_id =
pcb_silkscreen_circle.pcb_silkscreen_circle_id
}
}
47 changes: 47 additions & 0 deletions lib/components/primitive-components/SilkscreenRect.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { silkscreenRectProps } from "@tscircuit/props"
import { applyToPoint } from "transformation-matrix"
import { PrimitiveComponent } from "../base-components/PrimitiveComponent"

export class SilkscreenRect extends PrimitiveComponent<
typeof silkscreenRectProps
> {
pcb_silkscreen_rect_id: string | null = null

get config() {
return {
componentName: "SilkscreenRect",
zodProps: silkscreenRectProps,
}
}

doInitialPcbPrimitiveRender(): void {
const { db } = this.root!
const { _parsedProps: props } = this

const layer = props.layer ?? "top"
if (layer !== "top" && layer !== "bottom") {
throw new Error(
`Invalid layer "${layer}" for SilkscreenRect. Must be "top" or "bottom".`,
)
}

const transform = this._computePcbGlobalTransformBeforeLayout()
const transformedCenter = applyToPoint(transform, {
x: props.pcbX ?? 0,
y: props.pcbY ?? 0,
})

const pcb_silkscreen_rect = db.pcb_silkscreen_rect.insert({
pcb_component_id: this.parent?.pcb_component_id!,
layer,
center: {
x: transformedCenter.x,
y: transformedCenter.y,
},
width: props.width,
height: props.height,
})

this.pcb_silkscreen_rect_id = pcb_silkscreen_rect.pcb_silkscreen_rect_id
}
}
1 change: 0 additions & 1 deletion lib/components/primitive-components/Via.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ export class Via extends PrimitiveComponent<typeof viaProps> {
x: newCenter.x,
y: newCenter.y,
})
this.matchedPort?._setPositionFromLayout(newCenter)
}

doInitialPcbPrimitiveRender(): void {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions tests/components/primitive-components/via.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ it("should create a Via component with correct properties", () => {

project.render();

expect(project).toMatchPcbSnapshot(import.meta.path)

const via = project.selectOne("via") as Via;

expect(via).not.toBeNull();
Expand Down

0 comments on commit 5788fe1

Please sign in to comment.