rushabhcodes/desk-fidget-counter
A desk knob assembly combining a circuit board with PETG-printed mechanical parts and vendor CAD-modeled hardware.
- Version
- 5.6.1
- License
- MIT
- Stars
- 0
scripts/previews.mjs
// SPDX-License-Identifier: MIT
import fs from 'node:fs'
import {convertCircuitJsonToPcbSvg,convertCircuitJsonToSchematicSvg} from 'circuit-to-svg'
import {Resvg} from '@resvg/resvg-js'
const cj=JSON.parse(fs.readFileSync('dist/index/circuit.json','utf8'))
const cleanSvg=svg=>svg.replace(/^[\t ]+$/gm,'').trimEnd()+'\n'
fs.mkdirSync('previews',{recursive:true})
for(const p of fs.readdirSync('previews').filter(p=>/^schematic-\d+-.*\.(svg|png)$/.test(p))) fs.unlinkSync('previews/'+p)
for(const sheet of cj.filter(x=>x.type==='schematic_sheet')){
const svg=convertCircuitJsonToSchematicSvg(cj,{schematicSheetId:sheet.schematic_sheet_id,width:1800,height:1250})
const name=`previews/schematic-${sheet.sheet_index+1}-${sheet.display_name.toLowerCase().replace(/[^a-z0-9]+/g,"-")}`
fs.writeFileSync(name+'.svg',cleanSvg(svg));fs.writeFileSync(name+'.png',new Resvg(svg).render().asPng())
}
for(const layer of ['top','bottom']){
const svg=convertCircuitJsonToPcbSvg(cj,{layer,width:1500,height:1500})
fs.writeFileSync(`previews/pcb-${layer}.svg`,cleanSvg(svg))
fs.writeFileSync(`previews/pcb-${layer}.png`,new Resvg(svg).render().asPng())
}
// Run bom-and-assembly.py before this script to refresh its pin-1 diagrams.
if(fs.existsSync('previews/wiring.svg')) fs.writeFileSync('previews/wiring.png',new Resvg(fs.readFileSync('previews/wiring.svg','utf8')).render().asPng())
for (const side of ['top','bottom']) {
const path=`previews/assembly-${side}`
if(fs.existsSync(path+'.svg')) fs.writeFileSync(path+'.png',new Resvg(fs.readFileSync(path+'.svg','utf8')).render().asPng())
}
