Root/fab/prettygerbv

1#!/bin/sh
2#
3# prettygerbv - Use gerbv to generate "pretty" views of a PCB
4#
5# Written 2011 by Werner Almesberger
6# Copyright 2011 Werner Almesberger
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13
14
15COPPER="(cons 'color #(65535 50401 10000))"
16PASTE="(cons 'color #(39083 39083 50000))"
17MASK="(cons 'inverted #t) (cons 'color #(8839 53994 8178))"
18SILK="(cons 'color #(65535 65535 65535))"
19EDGE="(cons 'color #(65535 65535 0))"
20DRILL="(cons 'color #(0 0 40000))"
21
22FRONT="(cons 'color #(65535 10000 10000))"
23BACK="(cons 'color #(30000 65535 30000))"
24EDGE2="(cons 'color #(30000 40000 65535))"
25
26
27usage()
28{
29    cat <<EOF 1>&2
30usage: $0 [-d file] project-name view png-file
31
32  view "front", "back", "conn", "all"
33
34  -d file also use drill file (converted to Gerber)
35EOF
36    exit 1
37}
38
39
40layers_begin()
41{
42    curr_layer=$1
43    echo '(gerbv-file-version! "2.0A")' >_gvp
44}
45
46
47layer()
48{
49    file=$1
50    shift
51    [ -e "$file" ] || return
52    cat <<EOF >>_gvp
53(define-layer! $curr_layer (cons 'filename "$file") $*)
54EOF
55    curr_layer=`expr $curr_layer - 1`
56}
57
58
59layers_end()
60{
61    echo '(set-render-type! 2)' >>_gvp
62}
63
64
65run_gerbv()
66{
67    gerbv -p _gvp --dpi=600 -x png -o "$1"
68}
69
70
71front()
72{
73    layers_begin 5
74    layer $NAME-Front.gtl $COPPER
75    [ "$drill" ] && layer $drill $DRILL
76    layer $NAME-SoldP_Front.gtp $PASTE
77    layer $NAME-Mask_Front.gts $INV $MASK
78    layer $NAME-SilkS_Front.gto $SILK
79    layer $NAME-PCB_Edges.gbr $EDGE
80    layers_end
81
82    run_gerbv "$1"
83}
84
85
86back()
87{
88    layers_begin 5
89    layer $NAME-Back.gbl $COPPER
90    [ "$drill" ] && layer $drill $DRILL
91    layer $NAME-SoldP_Back.gbp $PASTE
92    layer $NAME-Mask_Back.gbs $INV $MASK
93    layer $NAME-SilkS_Back.gbo $SILK
94    layer $NAME-PCB_Edges.gbr $EDGE
95    layers_end
96
97    run_gerbv _tmp.png
98    convert -flop _tmp.png "$1"
99    rm -f _tmp.png
100}
101
102
103conn()
104{
105    layers_begin 3
106    layer $NAME-Back.gbl $BACK
107    layer $NAME-Front.gtl $FRONT
108    layer $NAME-PCB_Edges.gbr $EDGE2
109    layers_end
110
111    run_gerbv "$1"
112}
113
114
115all()
116{
117    front _front.png
118    back _back.png
119    conn _conn.png
120    montage -geometry +4+4 _front.png _back.png _conn.png "$1"
121    rm -f _front.png _back.png _conn.png
122}
123
124drill=
125if [ "$1" = -d ]; then
126    drill=$2
127    shift 2
128fi
129
130[ "$4" ] && usage
131[ ! "$3" ] && usage
132
133NAME=$1
134OUT=$3
135
136case "$2" in
137    front|back|conn) ;;
138    all) ;;
139    *) usage;;
140esac
141
142$2 "$OUT"
143
144rm -f _gvp
145

Archive Download this file

Branches:
master



interactive