seveibar/am3352-dev-board-4layer-dogbone
Defines PCB footprints and pin mappings for a TI AM3352ZCZ100 processor, JST GH connectors, and assembly-part lookup helpers for capacitors, resistors, and headers.
- Version
- 0.1.5
- License
- unset
- Stars
- 0
scripts/patch-via-connectivity.mjs
/** Teach the pinned physical connectivity map to join traces through real vias. */
import fs from 'node:fs'
const marker='viaPhysicalContactConnections'
const needle=' return new ConnectivityMap(findConnectedNetworks(connections));'
const addition=` // viaPhysicalContactConnections: a plated barrel joins copper on its spanned layers.
const physicalVias = this.circuitJson.filter(e=>e.type==='pcb_via');
const distanceToSegment = (v,a,b) => {
const dx=b.x-a.x,dy=b.y-a.y,den=dx*dx+dy*dy;
const t=den ? Math.max(0,Math.min(1,((v.x-a.x)*dx+(v.y-a.y)*dy)/den)) : 0;
return Math.hypot(v.x-a.x-t*dx,v.y-a.y-t*dy);
};
for(const via of physicalVias) {
const hits=[];
for(const trace of this.traceIdToElm.values()) {
if(trace.pcb_trace_id===via.pcb_trace_id){hits.push(trace.pcb_trace_id);continue;}
for(let k=0;k<trace.route.length;k++) {
const a=trace.route[k],b=trace.route[k+1];
if(a.route_type!=='wire'||!(via.layers||[via.from_layer,via.to_layer]).includes(a.layer))continue;
const q=b?.route_type==='wire'&&b.layer===a.layer?b:a;
if(distanceToSegment(via,a,q)<=via.outer_diameter/2+(a.width||0)/2+1e-6){hits.push(trace.pcb_trace_id);break;}
}
}
for(const id of hits.slice(1))connections.push([hits[0],id]);
}
`;
let count=0;
for(const file of ['node_modules/circuit-json-to-connectivity-map/dist/index.js','node_modules/@tscircuit/cli/dist/cli/main.js','node_modules/@tscircuit/cli/dist/lib/index.js']) {
if(!fs.existsSync(file))continue;
let s=fs.readFileSync(file,'utf8');if(s.includes(marker))continue;
const method=s.indexOf(' _buildTraceConnectivityMap() {');if(method<0)continue;
const at=s.indexOf(needle,method);if(at<0)throw Error('Unrecognized connectivity map in '+file);
s=s.slice(0,at)+addition+s.slice(at);fs.writeFileSync(file,s);count++;
}
if(!fs.readFileSync('node_modules/circuit-json-to-connectivity-map/dist/index.js','utf8').includes(marker))throw Error('Via connectivity patch was not installed');
console.log('Physical via contact connectivity installed:',count,'files patched');