diff --git a/hw/cam/Makefile b/hw/cam/Makefile new file mode 100644 index 0000000..00c827b --- /dev/null +++ b/hw/cam/Makefile @@ -0,0 +1,4 @@ +.PHONY: pcb + +pcb: + ./doit >job diff --git a/hw/cam/doit b/hw/cam/doit new file mode 100755 index 0000000..32b2181 --- /dev/null +++ b/hw/cam/doit @@ -0,0 +1,21 @@ +#!/bin/sh -e +DIR=/home/moko/svn.openmoko.org/developers/werner/cncmap +RECT=$DIR/rect/rect +ALIGN=$DIR/align/align +ZMAP=$DIR/zmap/zmap +GP2RML=$DIR/gp2rml/gp2rml + +GEN=${1:-./pcb.pl} + +rdata="19.6 13.0 -56.2 19.6 53.1 -56.1 110.7 14.1 -56.2" +# lower Z by 0.5 mm relative to highest point +Z=-56.6 + +rect=`$RECT $rdata | awk '{$3 = ""; print}'` + +$GEN | + awk '{ if ($3 != "") $3 += '$Z'; print $0; }' | + $ALIGN 0 1 $rect | + # angle, reference (lower left corner), rect + $GP2RML 3 0.1 0.1 + # clearance, xy speed, z speed diff --git a/hw/cam/pcb.pl b/hw/cam/pcb.pl new file mode 100755 index 0000000..291a3bf --- /dev/null +++ b/hw/cam/pcb.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +$d = 2.54/1000*12; +$r = $d/2+0.25; + + +sub orig +{ + $x0 = $_[0]; + $y0 = $_[1]; +} + + +sub mil +{ + return $_[0]/1000*25.4; +} + + +sub cut +{ + if (defined $x) { + if ($x == $_[0]+$x0 && $y == $_[1]+$y0) { + shift @_; + shift @_; + } else { + print "\n"; + } + } + while (@_) { + $x = shift @_; + $y = shift @_; +# ($x, $y) = (-$y, $x); + $x += $x0; + $y += $y0; + print "$x $y $z\n"; + } +} + + +sub one +{ + &cut( + &mil( 0)-$r, &mil( 0)-$r, + &mil( 0)-$r, &mil( 460), + &mil( -50)-$r, &mil( 510), + &mil( -50)-$r, &mil(1070)+$r, + &mil( 520)+$r, &mil(1070)+$r, + &mil( 520)+$r, &mil( 510), + &mil( 470)+$r, &mil( 460), + &mil( 470)+$r, &mil( 0)-$r, + &mil( 0)-$r, &mil( 0)-$r); +} + + +$z = -1.6; # full thickness of board +# x: corner offset, compensation for rotation, array position +# y: corner offet +&orig(1+1+17*1, 1) +&one;