Root/
1 | #!/bin/sh |
2 | # |
3 | # prettygerbv - Use gerbv to generate "pretty" views of a PCB |
4 | # |
5 | # Written 2011, 2013, 2017 by Werner Almesberger |
6 | # Copyright 2011, 2013, 2017 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 | |
15 | COPPER="(cons 'color #(65535 50401 10000))" |
16 | PASTE="(cons 'color #(39083 39083 50000))" |
17 | MASK="(cons 'inverted #t) (cons 'color #(8839 53994 8178))" |
18 | SILK="(cons 'color #(65535 65535 65535))" |
19 | EDGE="(cons 'color #(65535 65535 0))" |
20 | DRILL="(cons 'color #(0 0 40000))" |
21 | |
22 | FRONT="(cons 'color #(65535 10000 10000))" |
23 | BACK="(cons 'color #(30000 65535 30000))" |
24 | EDGE2="(cons 'color #(30000 40000 65535))" |
25 | |
26 | |
27 | usage() |
28 | { |
29 | cat <<EOF 1>&2 |
30 | usage: $0 [-y] [-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) |
35 | EOF |
36 | exit 1 |
37 | } |
38 | |
39 | |
40 | layers_begin() |
41 | { |
42 | curr_layer=$1 |
43 | echo '(gerbv-file-version! "2.0A")' >_gvp |
44 | } |
45 | |
46 | |
47 | layer() |
48 | { |
49 | file=$1 |
50 | shift |
51 | [ -e "$file" ] || return |
52 | cat <<EOF >>_gvp |
53 | (define-layer! $curr_layer (cons 'filename "$file") $*) |
54 | EOF |
55 | curr_layer=`expr $curr_layer - 1` |
56 | } |
57 | |
58 | |
59 | choose() |
60 | { |
61 | name=$1 |
62 | shift |
63 | for n in "$@"; do |
64 | if [ -e "$name-$n" ]; then |
65 | echo "$name-$n" |
66 | return |
67 | fi |
68 | done |
69 | echo "no choice for $@" 1>&2 |
70 | exit 1 |
71 | } |
72 | |
73 | |
74 | layers_end() |
75 | { |
76 | echo '(set-render-type! 2)' >>_gvp |
77 | } |
78 | |
79 | |
80 | run_gerbv() |
81 | { |
82 | gerbv -p _gvp --dpi=600 -x png -o "$1" |
83 | } |
84 | |
85 | |
86 | front() |
87 | { |
88 | layers_begin 5 |
89 | layer `choose $NAME Front.gtl F_Cu.gtl F.Cu.gbr` $COPPER |
90 | [ "$drill" ] && layer $drill $DRILL |
91 | layer `choose $NAME SoldP_Front.gtp F_Paste.gtp F.Paste.gbr` $PASTE |
92 | layer `choose $NAME Mask_Front.gts F_Mask.gts F.Mask.gbr` $INV $MASK |
93 | layer `choose $NAME SilkS_Front.gto F_SilkS.gto F.SilkS.gbr` $SILK |
94 | layer `choose $NAME PCB_Edges.gbr Edge_Cuts.gbr Edge.Cuts.gbr` $EDGE |
95 | layers_end |
96 | |
97 | run_gerbv "$1" |
98 | } |
99 | |
100 | |
101 | back() |
102 | { |
103 | layers_begin 5 |
104 | layer `choose $NAME Back.gbl B_Cu.gbl B.Cu.gbr` $COPPER |
105 | [ "$drill" ] && layer $drill $DRILL |
106 | layer `choose $NAME SoldP_Back.gbp B_Paste.gbp B.Paste.gbr` $PASTE |
107 | layer `choose $NAME Mask_Back.gbs B_Mask.gbs B.Mask.gbr` $INV $MASK |
108 | layer `choose $NAME SilkS_Back.gbo B_SilkS.gbo B.SilkS.gbr` $SILK |
109 | layer `choose $NAME PCB_Edges.gbr Edge_Cuts.gbr Edge.Cuts.gbr` $EDGE |
110 | layers_end |
111 | |
112 | run_gerbv _tmp.png |
113 | convert -flop _tmp.png "$1" |
114 | rm -f _tmp.png |
115 | } |
116 | |
117 | |
118 | conn() |
119 | { |
120 | layers_begin 3 |
121 | layer `choose $NAME Back.gbl B_Cu.gbl B.Cu.gbr` $BACK |
122 | layer `choose $NAME Front.gtl F_Cu.gtl F.Cu.gbr` $FRONT |
123 | layer `choose $NAME PCB_Edges.gbr Edge_Cuts.gbr Edge.Cuts.gbr` $EDGE2 |
124 | layers_end |
125 | |
126 | run_gerbv "$1" |
127 | } |
128 | |
129 | |
130 | all() |
131 | { |
132 | front _front.png |
133 | back _back.png |
134 | conn _conn.png |
135 | montage -geometry +4+4 $tile _front.png _back.png _conn.png "$1" |
136 | rm -f _front.png _back.png _conn.png |
137 | } |
138 | |
139 | tile= |
140 | if [ "$1" = -y ]; then |
141 | tile="-tile 1x3" |
142 | shift |
143 | fi |
144 | |
145 | drill= |
146 | if [ "$1" = -d ]; then |
147 | drill=$2 |
148 | shift 2 |
149 | fi |
150 | |
151 | [ "$4" ] && usage |
152 | [ ! "$3" ] && usage |
153 | |
154 | NAME=$1 |
155 | OUT=$3 |
156 | |
157 | case "$2" in |
158 | front|back|conn) ;; |
159 | all) ;; |
160 | *) usage;; |
161 | esac |
162 | |
163 | $2 "$OUT" |
164 | |
165 | rm -f _gvp |
166 |
Branches:
master