0hmX/dual-usb-peltier-assembly

A tscircuit package created by 0hmX.

Version
0.4.12
License
unset
Stars
0

src/board/routed-copper.tsx

import { Fragment } from "react"
import type { CopperPourProps, ViaProps } from "@tscircuit/props"
import type { PcbTraceRoutePoint } from "circuit-json"

export type CopperPoint = Exclude<PcbTraceRoutePoint, { route_type: "through_pad" }>
export interface CopperRoute {
  net: string; route: CopperPoint[]; sourceTraceId?: string; sourceTraceKey?: string
  /** Binds a local branch to this endpoint; required for single-pin constraints. Omit for supply trunks. */
  sourcePort?: string
}
export interface CopperVia { name?: string; net: string; x: number; y: number; holeDiameter: number; outerDiameter: number; tented?: ViaProps["tented"] }
export interface RoutedCopperData {
  routes: CopperRoute[]
  vias: CopperVia[]
  pours?: CopperPourProps[]
}

// Coordinates are in the board frame. The parent board keeps routeRemaining=false
// and routing enabled so native connectivity/clearance checks validate this copper.
export function RoutedCopper({ routes, vias, pours = [] }: RoutedCopperData) {
  return <>
    {routes.map(({ route, sourceTraceId }, index) => <Fragment key={index}>
      <pcbtrace route={route} {...{ source_trace_id: sourceTraceId }} />
    </Fragment>)}
    {vias.map(({ name, net, x, y, holeDiameter, outerDiameter, tented }, index) =>
      <Fragment key={index}><via name={name} pcbX={x} pcbY={y} fromLayer="top" toLayer="bottom"
        holeDiameter={holeDiameter} outerDiameter={outerDiameter} tented={tented} connectsTo={`net.${net}`} /></Fragment>)}
    {pours.map((pour, index) => <Fragment key={index}><copperpour {...pour} /></Fragment>)}
  </>
}