Skip to content

Support courtyard elements + silkscreen circles in footprint TSX#21

Open
Mukedlii wants to merge 11 commits intotscircuit:mainfrom
Mukedlii:feat/courtyard-silkscreen-circle
Open

Support courtyard elements + silkscreen circles in footprint TSX#21
Mukedlii wants to merge 11 commits intotscircuit:mainfrom
Mukedlii:feat/courtyard-silkscreen-circle

Conversation

@Mukedlii
Copy link
Copy Markdown

Adds footprint TSX generation support for:

• pcb_silkscreen_circle → emits <silkscreencircle ... /> (includes optional strokeWidth)
• Courtyard elements: • pcb_courtyard_circle → <courtyardcircle ... />
• pcb_courtyard_rect → <courtyardrect ... /> (supports optional color)
• pcb_courtyard_outline →

Also adds a test:

• tests/test7-support-courtyard-and-circles.test.tsx
If you want, a 1-liner at the end:
Test: bun test

Comment on lines +110 to +114
for (const courtyardCircle of courtyardCircles) {
elementStrings.push(
`<courtyardcircle pcbX="${mmStr(courtyardCircle.center.x)}" pcbY="${mmStr(courtyardCircle.center.y)}" radius="${mmStr(courtyardCircle.radius)}" />`,
)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing null safety for courtyardCircle.center. The code directly accesses courtyardCircle.center.x and courtyardCircle.center.y without optional chaining, which will throw a runtime error if center is undefined or null.

This is inconsistent with the silkscreen circle implementation (lines 75-76) which safely uses silkscreenCircle.center?.x ?? 0.

Fix:

for (const courtyardCircle of courtyardCircles) {
  const pcbX = courtyardCircle.center?.x ?? 0
  const pcbY = courtyardCircle.center?.y ?? 0
  elementStrings.push(
    `<courtyardcircle pcbX="${mmStr(pcbX)}" pcbY="${mmStr(pcbY)}" radius="${mmStr(courtyardCircle.radius)}" />`,
  )
}
Suggested change
for (const courtyardCircle of courtyardCircles) {
elementStrings.push(
`<courtyardcircle pcbX="${mmStr(courtyardCircle.center.x)}" pcbY="${mmStr(courtyardCircle.center.y)}" radius="${mmStr(courtyardCircle.radius)}" />`,
)
}
for (const courtyardCircle of courtyardCircles) {
const pcbX = courtyardCircle.center?.x ?? 0
const pcbY = courtyardCircle.center?.y ?? 0
elementStrings.push(
`<courtyardcircle pcbX="${mmStr(pcbX)}" pcbY="${mmStr(pcbY)}" radius="${mmStr(courtyardCircle.radius)}" />`,
)
}

Spotted by Graphite Agent

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Comment thread lib/generate-footprint-tsx.tsx Outdated
? ` color="${courtyardRect.color}"`
: ""
elementStrings.push(
`<courtyardrect pcbX="${mmStr(courtyardRect.center.x)}" pcbY="${mmStr(courtyardRect.center.y)}" width="${mmStr(courtyardRect.width)}" height="${mmStr(courtyardRect.height)}"${colorAttr} />`,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing null-safety checks on courtyardRect.center, width, and height properties. This is inconsistent with the defensive pattern used for circles (e.g., lines 75-76, 111-112 use optional chaining center?.x ?? 0).

If courtyardRect.center is undefined or null, this will throw: Cannot read property 'x' of undefined.

Fix:

const pcbX = courtyardRect.center?.x ?? 0
const pcbY = courtyardRect.center?.y ?? 0
const width = mmStr(courtyardRect.width ?? 0)
const height = mmStr(courtyardRect.height ?? 0)
const colorAttr = courtyardRect.color
  ? ` color="${courtyardRect.color}"`
  : ""
elementStrings.push(
  `<courtyardrect pcbX="${mmStr(pcbX)}" pcbY="${mmStr(pcbY)}" width="${width}" height="${height}"${colorAttr} />`,
)
Suggested change
`<courtyardrect pcbX="${mmStr(courtyardRect.center.x)}" pcbY="${mmStr(courtyardRect.center.y)}" width="${mmStr(courtyardRect.width)}" height="${mmStr(courtyardRect.height)}"${colorAttr} />`,
const pcbX = courtyardRect.center?.x ?? 0
const pcbY = courtyardRect.center?.y ?? 0
const width = mmStr(courtyardRect.width ?? 0)
const height = mmStr(courtyardRect.height ?? 0)
const colorAttr = courtyardRect.color
? ` color="${courtyardRect.color}"`
: ""
elementStrings.push(
`<courtyardrect pcbX="${mmStr(pcbX)}" pcbY="${mmStr(pcbY)}" width="${width}" height="${height}"${colorAttr} />`,
)

Spotted by Graphite Agent

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant