imrishabh18/corne-keyboard

The code defines and renders two surface-mount chip components with SMT pads, silkscreen outlines, and 3D CAD models (OBJ and STEP) for PCB assembly.

Version
2.0.21
License
unset
Stars
1

scripts/finish-left-coupled.ts

import fs from 'node:fs'
import * as C from '@tscircuit/checks'
const base=JSON.parse(fs.readFileSync('../left-clean.circuit.json','utf8'))
const fns=['checkEachPcbTraceNonOverlapping','checkPadTraceClearance','checkViaTraceClearance','checkViaPadClearance','checkSameNetViaSpacing','checkDifferentNetViaSpacing']
search:for(const viaDy of [.08,.12,.2,.3])for(const traceDy of [.06,.08,.1])for(const traceDx of [-.03,0,.03]){
const c=structuredClone(base),via=c.find((x:any)=>x.pcb_via_id==='pcb_via_271'),old={...via};via.y+=viaDy
for(const t of c.filter((x:any)=>x.type==='pcb_trace'))for(const p of t.route)if(Math.hypot(p.x-old.x,p.y-old.y)<1e-6&&!p.start_pcb_port_id&&!p.end_pcb_port_id)p.y+=viaDy
const t=c.find((x:any)=>x.type==='pcb_trace'&&x.pcb_trace_id==='source_trace_106_mst0_0');for(const i of [16,17]){t.route[i].x+=traceDx;t.route[i].y+=traceDy}
const e=C.dedupePcbDrcErrors(fns.flatMap(k=>(C as any)[k](c)))
console.log(viaDy,traceDy,traceDx,e.length)
if(!e.length){const full=C.dedupePcbDrcErrors([...(await C.runAllRoutingChecks(c)),...C.checkCopperToBoardEdgeClearance(c),...C.checkPcbCopperOverKeepout(c)]);console.log('FULL',full.length,full);if(!full.length){fs.writeFileSync('../left-clean.circuit.json',JSON.stringify(c,null,2));fs.writeFileSync('../left-clean.errors.json','[]');break search}}
}