X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=tinyboard.git;a=blobdiff_plain;f=pcb2panel;fp=pcb2panel;h=ddc7bbfe490db27bde98beca317306c136a83d99;hp=0000000000000000000000000000000000000000;hb=1bf6c604ddb905d6f6898b1472ac94d085f4b223;hpb=6d789ebc45563080cc731487a3a3455a3d8d6ef2 diff --git a/pcb2panel b/pcb2panel new file mode 100755 index 0000000..ddc7bbf --- /dev/null +++ b/pcb2panel @@ -0,0 +1,101 @@ +#!/usr/bin/perl +# -*- perl -*- + +# Copyright 2006 DJ Delorie +# Released under the terms of the GNU General Public License, version 2 + +$mydir = $0; +if ($mydir =~ m@/@) { + $mydir =~ s@[^/]*$@@; +} else { + $mydir = "."; +} + +require "$mydir/panel.pl"; + +if (! @ARGV) { + print "Usage: pcb2panel board1.pcb board2.pcb board3.pcb > boards.pcb\n"; + print "Then edit boards.pcb, putting each outline where you want it\n"; + print "and sizing the board. Then:\n"; + print "panel2pcb boards.pcb\n"; + print "and edit/print boards.panel.pcb\n"; + exit 0; +} + +for $pcb (@ARGV) { + $base = $pcb; + $base =~ s@.*/@@; + $base =~ s@\.pcb$@@; + $base{$pcb} = $base; + push (@pcbs, $pcb); + open(PCB, $pcb); + while () { + if (/^PCB\[".*" (\S+) (\S+)\]/) { + $width{$pcb} = &parseval($1); + $height{$pcb} = &parseval($2); + printf STDERR "%s : %d x %d\n", $pcb, $width{$pcb}, $height{$pcb}; + last; + } + } + $outline = ''; + while () { + if (/Layer\(.*"outline"\)/) { + $junk = ; # open paren + while () { + last if /^\)/; # close paren + ($args) = m@\[(.*)\]@; + ($x1, $y1, $x2, $y2, $width) = split(' ', $args); + $outline .= " ElementLine[$x1 $y1 $x2 $y2 $width]\n"; + } + } + } + push (@outlines, $outline); + close PCB; +} + +$pw = 10000; +$ph = 0; +for $pcb (@pcbs) { + $pw += 10000; + $pw += $width{$pcb}; + $ph = $height{$pcb} if $ph < $height{$pcb}; +} +$ph += 20000; + +print "PCB[\"\" $pw $ph]\n"; +print "Grid[10000.0 0 0 1]\n"; +print "DRC[799 799 800 100 1500 800]\n"; +print "Groups(\"1,c:2,s\")\n"; #" + +$x = 10000; +$y = 10000; +for ($i=0; $i<@pcbs; $i++) { + $pcb = $pcbs[$i]; + $outline = $outlines[$i]; + $desc = $pcb; + $name = $base{$pcb}; + $value = "$width{$pcb} x $height{$pcb}"; + $w = $width{$pcb}; + $h = $height{$pcb}; + + print "Element[\"\" \"$desc\" \"$name\" \"$value\" $x $y 2000 2000 0 50 \"\"] (\n"; + print " Pin[0 0 1000 0 0 400 \"1\" \"1\" \"\"]\n"; + print " Pin[$w 0 1000 0 0 400 \"2\" \"2\" \"\"]\n"; + if ($outline =~ /\S/) { + print $outline; + } else { + print " ElementLine[0 0 $w 0 100]\n"; + print " ElementLine[0 0 0 $h 100]\n"; + print " ElementLine[$w 0 $w $h 100]\n"; + print " ElementLine[0 $h $w $h 100]\n"; + } + print ")\n"; + $x += $w + 10000; +} + +print "Layer(1 \"component\")()\n"; +print "Layer(2 \"solder\")()\n"; +print "Layer(3 \"silk\")()\n"; +print "Layer(4 \"silk\")()\n"; + +exit 0;