├── .gitignore
├── LICENSE
├── README.md
├── docs
└── images
│ ├── GerberDifferenceViewer.png
│ └── diffgerber-logo.png
├── examples
├── pcb-1-a
│ ├── bottom.grb
│ └── top.grb
├── pcb-1-b
│ ├── bottom.grb
│ └── top.grb
├── pcb-2-a
│ ├── tec-controller-B_Cu.gbr
│ ├── tec-controller-B_Mask.gbr
│ ├── tec-controller-B_Paste.gbr
│ ├── tec-controller-B_Silkscreen.gbr
│ ├── tec-controller-Edge_Cuts.gbr
│ ├── tec-controller-F_Cu.gbr
│ ├── tec-controller-F_Mask.gbr
│ ├── tec-controller-F_Paste.gbr
│ ├── tec-controller-F_Silkscreen.gbr
│ └── tec-controller-job.gbrjob
└── pcb-2-b
│ ├── tec-controller-B_Cu.gbr
│ ├── tec-controller-B_Mask.gbr
│ ├── tec-controller-B_Paste.gbr
│ ├── tec-controller-B_Silkscreen.gbr
│ ├── tec-controller-Edge_Cuts.gbr
│ ├── tec-controller-F_Cu.gbr
│ ├── tec-controller-F_Mask.gbr
│ ├── tec-controller-F_Paste.gbr
│ ├── tec-controller-F_Silkscreen.gbr
│ └── tec-controller-job.gbrjob
├── pyproject.toml
├── requirements.txt
├── setup.py
└── src
├── color_generator.py
├── diffgerber-cli.py
├── diffgerber.py
├── icon.png
└── loader
├── __init__.py
├── dirSelectDialog.py
├── gerbLoader.py
└── simple_color_generator.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Compiled Object files
5 | *.slo
6 | *.lo
7 | *.o
8 | *.obj
9 |
10 | # Precompiled Headers
11 | *.gch
12 | *.pch
13 |
14 | # Compiled Dynamic libraries
15 | *.so
16 | *.dylib
17 | *.dll
18 |
19 | # Fortran module files
20 | *.mod
21 | *.smod
22 |
23 | # Compiled Static libraries
24 | *.lai
25 | *.la
26 | *.a
27 | *.lib
28 |
29 | # Executables
30 | *.exe
31 | *.out
32 | *.app
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Andy
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # diffgerber
2 |
3 |
4 |
5 |
6 |
7 | Graphical tool to help users compare gerber files, the output from EDA tools (PCB CAD software) such as KiCAD using pygerber 2.0.0.
8 |
9 | 
10 |
11 | # Setup
12 |
13 | 1. Install in editable format:
14 |
15 | ```bash
16 | git clone https://github.com/ajw287/diffgerber.git
17 | cd diffgerber
18 | python3 -venv venv
19 | source ./venv/bin/activate
20 | pip install -r requirements.txt
21 | pip install -e .
22 | ```
23 | ## Or:
24 |
25 | This project depends on python3, pillow, tkinter, difflib & pygerber. The following commands are recommended:
26 |
27 | 1. Setup a python venv
28 | ```bash
29 | python -m venv diffgerber
30 | source ./diffgerber/bin/activate
31 | ```
32 | 2. Install dependencies
33 | ```bash
34 | pip install tk pillow pygerber difflib
35 | ```
36 | 4. Run the program:
37 | ```bash
38 | python diffgerber.py
39 | ```
40 |
41 | # Using diffgerber
42 | This is a basic tool to highlight differences in gerber files so that they can be compared. At this time two directories of gerber files can be opened, layers are matched based on filename and checked for similarity. If they are identical no differences will be expected, if there is more than 25% similarity, then a graphical "diff" is attempted.
43 |
44 | Aug-23: Started on a V2.0 with only pygerber backend. The original 3 backends (pygerber 1.0, pcb-tools, gerbv) each had eccentricities and limitations, this meant developing and testing for each one and limited features.
45 |
46 | 1. Click "Browse" on the left-hand column, navigate to "./example/1/" click "OK". You should see two layers of gerbers
47 |
48 | 2. Click "Browse" on the right-hand column, navigate to "./example/2/" click "OK". You should see another two layers of gerbers
49 |
50 | 3. Because they have the same name, they are paired. Select a 'top.grb' file, the label will tell you that they are identical.
51 |
52 | 4. Select a 'bottom.grb' file, the label will tell you the similarity value. Can you see the difference?
53 |
54 | 5. Click the "Highlight Differences" button, the differences will be highlighted with an outliine.
55 |
--------------------------------------------------------------------------------
/docs/images/GerberDifferenceViewer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ajw287/diffgerber/b0b51b5cf0ea3406331e8d3f6701865b7d7fb413/docs/images/GerberDifferenceViewer.png
--------------------------------------------------------------------------------
/docs/images/diffgerber-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ajw287/diffgerber/b0b51b5cf0ea3406331e8d3f6701865b7d7fb413/docs/images/diffgerber-logo.png
--------------------------------------------------------------------------------
/examples/pcb-1-a/bottom.grb:
--------------------------------------------------------------------------------
1 | G04 FreePCB version 1.355*
2 | G04 C:\FcPoly-Ttest\top_copper.grb*
3 | G04 top copper layer *
4 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
5 | %FSLAX24Y24*%
6 | %MOIN*%
7 | %LN top copper *%
8 | G04 Rounded Rectangle Macro, params: W/2, H/2, R *
9 | %AMRNDREC*
10 | 21,1,$1+$1,$2+$2-$3-$3,0,0,0*
11 | 21,1,$1+$1-$3-$3,$2+$2,0,0,0*
12 | 1,1,$3+$3,$1-$3,$2-$3*
13 | 1,1,$3+$3,$3-$1,$2-$3*
14 | 1,1,$3+$3,$1-$3,$3-$2*
15 | 1,1,$3+$3,$3-$1,$3-$2*%
16 | G04 Rectangular Thermal Macro, params: W/2, H/2, T/2 *
17 | %AMRECTHERM*
18 | $4=$3/2*
19 | 21,1,$1-$3,$2-$3,0-$1/2-$4,0-$2/2-$4,0*
20 | 21,1,$1-$3,$2-$3,0-$1/2-$4,$2/2+$4,0*
21 | 21,1,$1-$3,$2-$3,$1/2+$4,0-$2/2-$4,0*
22 | 21,1,$1-$3,$2-$3,$1/2+$4,$2/2+$4,0*%
23 | %ADD10C,0.005000*%
24 | %ADD11C,0.120000*%
25 | %ADD12C,0.001000*%
26 | %ADD13R,0.110000X0.110000*%
27 | %ADD14R,0.130000X0.162000*%
28 | %ADD15R,0.140000X0.084000*%
29 | %ADD16R,0.120000X0.120000*%
30 | %ADD17C,0.075000*%
31 | %ADD18C,0.085000*%
32 | %ADD19C,0.060000*%
33 | %ADD20R,0.050000X0.050000*%
34 | %ADD21R,0.070000X0.102000*%
35 | %ADD22R,0.080000X0.024000*%
36 | %ADD23R,0.060000X0.060000*%
37 | %ADD24C,0.015000*%
38 | %ADD25C,0.025000*%
39 | %ADD26C,0.024000*%
40 | %ADD27C,0.010000*%
41 | G90*
42 | G70D02*
43 |
44 | G04 Step and Repeat for panelization *
45 |
46 | G04 ----------------------- Draw board outline (positive)*
47 | %LPD*%
48 | G54D10*
49 | G01X0Y11800D02*
50 | G01X23250Y11800D01*
51 | G04 end of side 1*
52 | G01X23250Y0D01*
53 | G04 end of side 2*
54 | G01X0Y0D01*
55 | G04 end of side 3*
56 | G01X0Y11800D01*
57 |
58 | G04 ----------------------- Draw copper area (positive)*
59 | G36*
60 | G01X11140Y0D02*
61 | G01X0Y0D01*
62 | G01X0Y11800D01*
63 | G01X11140Y11800D01*
64 | G01X11140Y0D01*
65 | G37*
66 |
67 | G04 ----------------------- Draw copper area (positive)*
68 | G36*
69 | G01X23250Y0D02*
70 | G01X12000Y0D01*
71 | G01X12000Y11800D01*
72 | G01X23250Y11800D01*
73 | G01X23250Y0D01*
74 | G37*
75 |
76 | G04 -------------------- Draw copper area clearances (negative)*
77 | %LPC*%
78 |
79 | G04 Draw clearances for pads*
80 | G54D11*
81 | G01X3960Y7900D03*
82 | G01X3960Y6900D03*
83 | G01X3960Y5900D03*
84 | G54D12*
85 | G54D13*
86 | G01X6280Y9000D03*
87 | G54D12*
88 | G54D14*
89 | G01X8000Y8240D03*
90 | G54D12*
91 | G54D15*
92 | G01X9630Y5200D03*
93 | G54D12*
94 | G54D15*
95 | G01X9630Y4200D03*
96 | G01X9630Y3700D03*
97 | G01X9630Y3200D03*
98 | G01X9630Y2700D03*
99 | G01X9630Y2200D03*
100 | G54D12*
101 | G54D15*
102 | G01X13630Y2200D03*
103 | G01X13630Y2700D03*
104 | G01X13630Y3200D03*
105 | G01X13630Y3700D03*
106 | G01X13630Y4200D03*
107 | G54D12*
108 | G54D15*
109 | G01X13630Y5200D03*
110 | G54D12*
111 | G54D13*
112 | G01X8320Y3950D03*
113 | G01X8320Y6380D03*
114 | G54D12*
115 | G54D13*
116 | G01X14950Y6700D03*
117 | G54D12*
118 | G54D13*
119 | G01X14950Y4200D03*
120 | G54D16*
121 | G01X5440Y5650D03*
122 | G01X5440Y6900D03*
123 | G01X6800Y2200D03*
124 | G01X5550Y2200D03*
125 | G01X17720Y6860D03*
126 | G01X17720Y5610D03*
127 | G01X17740Y2200D03*
128 | G01X16490Y2200D03*
129 | G54D11*
130 | G01X19280Y7860D03*
131 | G01X19280Y6860D03*
132 | G01X19280Y5860D03*
133 | G54D12*
134 | G54D13*
135 | G01X16960Y8980D03*
136 | G54D12*
137 | G54D14*
138 | G01X15100Y8240D03*
139 | G54D12*
140 | G54D11*
141 | G01X16340Y6700D03*
142 | G01X16340Y5700D03*
143 | G54D12*
144 | G54D11*
145 | G01X6920Y6700D03*
146 | G01X6920Y5700D03*
147 | G54D12*
148 | G54D11*
149 | G01X11130Y7000D03*
150 | G54D12*
151 | G54D11*
152 | G01X13130Y7000D03*
153 | G04 Draw clearances for traces*
154 | G54D17*
155 | G01X19280Y5860D02*
156 | G01X19010Y5860D01*
157 | G01X19010Y5860D02*
158 | G01X18450Y5300D01*
159 | G01X18450Y5300D02*
160 | G01X18450Y2910D01*
161 | G01X18450Y2910D02*
162 | G01X17740Y2200D01*
163 | G54D18*
164 | G01X3960Y7900D02*
165 | G01X7990Y7900D01*
166 | G01X7990Y7900D02*
167 | G01X8000Y8240D01*
168 | G01X8320Y6380D02*
169 | G01X9630Y6380D01*
170 | G01X9630Y6380D02*
171 | G01X9630Y5200D01*
172 | G01X8320Y6380D02*
173 | G01X10840Y6380D01*
174 | G01X10840Y6380D02*
175 | G01X11130Y6670D01*
176 | G01X11130Y6670D02*
177 | G01X11130Y7000D01*
178 | G01X8000Y8240D02*
179 | G01X8000Y7900D01*
180 | G01X8000Y7900D02*
181 | G01X6280Y7900D01*
182 | G01X6280Y7900D02*
183 | G01X6280Y9000D01*
184 | G01X6920Y6700D02*
185 | G01X6920Y7900D01*
186 | G01X6920Y7900D02*
187 | G01X8000Y7900D01*
188 | G01X8000Y7900D02*
189 | G01X8000Y8240D01*
190 | G01X8000Y8240D02*
191 | G01X8000Y7310D01*
192 | G01X8000Y7310D02*
193 | G01X8320Y6990D01*
194 | G01X8320Y6990D02*
195 | G01X8320Y6380D01*
196 | G01X13130Y7000D02*
197 | G01X13130Y6310D01*
198 | G01X13130Y6310D02*
199 | G01X13630Y5810D01*
200 | G01X13630Y5810D02*
201 | G01X13630Y5200D01*
202 | G01X15100Y8240D02*
203 | G01X15940Y8240D01*
204 | G01X15940Y8240D02*
205 | G01X16340Y7860D01*
206 | G01X16340Y7860D02*
207 | G01X16340Y6700D01*
208 | G01X15100Y8240D02*
209 | G01X15940Y8240D01*
210 | G01X15940Y8240D02*
211 | G01X16320Y7860D01*
212 | G01X16320Y7860D02*
213 | G01X16960Y7860D01*
214 | G01X16960Y7860D02*
215 | G01X16960Y8980D01*
216 | G01X15100Y8240D02*
217 | G01X14370Y8240D01*
218 | G01X14370Y8240D02*
219 | G01X13130Y7000D01*
220 | G01X15100Y8240D02*
221 | G01X15960Y8240D01*
222 | G01X15960Y8240D02*
223 | G01X16340Y7860D01*
224 | G01X16340Y7860D02*
225 | G01X19280Y7860D01*
226 | G01X14950Y6700D02*
227 | G01X16340Y6700D01*
228 | G54D17*
229 | G01X13630Y2200D02*
230 | G01X16490Y2200D01*
231 | G01X13630Y4200D02*
232 | G01X13070Y4200D01*
233 | G01X13070Y4200D02*
234 | G01X12820Y3950D01*
235 | G01X12820Y3950D02*
236 | G01X12820Y3460D01*
237 | G01X12820Y3460D02*
238 | G01X13080Y3200D01*
239 | G01X13080Y3200D02*
240 | G01X13630Y3200D01*
241 | G01X14950Y4200D02*
242 | G01X13630Y4200D01*
243 | G01X16340Y5700D02*
244 | G01X16640Y5690D01*
245 | G01X16640Y5690D02*
246 | G01X17000Y5330D01*
247 | G01X17000Y5330D02*
248 | G01X17000Y4080D01*
249 | G01X17000Y4080D02*
250 | G01X16620Y3700D01*
251 | G01X16620Y3700D02*
252 | G01X13630Y3700D01*
253 | G54D12*
254 | G54D17*
255 | G01X6920Y5700D02*
256 | G01X6480Y5700D01*
257 | G01X6480Y5700D02*
258 | G01X6120Y5340D01*
259 | G01X6120Y5340D02*
260 | G01X6120Y3910D01*
261 | G01X6120Y3910D02*
262 | G01X6420Y3610D01*
263 | G01X6420Y3610D02*
264 | G01X7450Y3610D01*
265 | G01X7450Y3610D02*
266 | G01X7860Y3200D01*
267 | G01X7860Y3200D02*
268 | G01X9630Y3200D01*
269 | G54D12*
270 | G54D17*
271 | G01X5440Y5650D02*
272 | G01X5440Y3570D01*
273 | G01X5440Y3570D02*
274 | G01X5950Y3060D01*
275 | G01X5950Y3060D02*
276 | G01X7360Y3060D01*
277 | G01X7360Y3060D02*
278 | G01X7720Y2700D01*
279 | G01X7720Y2700D02*
280 | G01X9630Y2700D01*
281 | G01X6800Y2200D02*
282 | G01X9630Y2200D01*
283 | G01X9630Y3700D02*
284 | G01X9630Y4200D01*
285 | G01X9630Y3700D02*
286 | G01X8570Y3700D01*
287 | G01X8570Y3700D02*
288 | G01X8320Y3950D01*
289 | G01X3960Y6900D02*
290 | G01X5440Y6900D01*
291 | G01X3960Y5900D02*
292 | G01X4090Y5900D01*
293 | G01X4090Y5900D02*
294 | G01X4760Y5230D01*
295 | G01X4760Y5230D02*
296 | G01X4760Y2990D01*
297 | G01X4760Y2990D02*
298 | G01X5550Y2200D01*
299 | G01X19280Y6860D02*
300 | G01X17720Y6860D01*
301 | G01X13630Y2700D02*
302 | G01X14885Y2700D01*
303 | G01X14885Y2700D02*
304 | G01X15314Y3120D01*
305 | G01X15314Y3120D02*
306 | G01X16950Y3120D01*
307 | G01X16950Y3120D02*
308 | G01X17720Y3890D01*
309 | G01X17720Y3890D02*
310 | G01X17720Y5610D01*
311 |
312 | G04 Draw clearances for text*
313 |
314 | G04 -------------- Draw Parts, Pads, Traces, Vias and Text (positive)*
315 | %LPD*%
316 | G04 Draw part J1*
317 | G54D19*
318 | G01X3960Y7900D03*
319 | G01X3960Y6900D03*
320 | G01X3960Y5900D03*
321 | G01X3960Y4900D03*
322 | G01X3960Y3900D03*
323 | G04 Draw part C1*
324 | G54D20*
325 | G01X6280Y9000D03*
326 | G01X6280Y9750D03*
327 | G04 Draw part C2*
328 | G54D21*
329 | G01X8000Y8240D03*
330 | G01X8000Y9740D03*
331 | G04 Draw part U1*
332 | G54D22*
333 | G01X9630Y5200D03*
334 | G01X9630Y4700D03*
335 | G01X9630Y4200D03*
336 | G01X9630Y3700D03*
337 | G01X9630Y3200D03*
338 | G01X9630Y2700D03*
339 | G01X9630Y2200D03*
340 | G01X9630Y1700D03*
341 | G01X13630Y1700D03*
342 | G01X13630Y2200D03*
343 | G01X13630Y2700D03*
344 | G01X13630Y3200D03*
345 | G01X13630Y3700D03*
346 | G01X13630Y4200D03*
347 | G01X13630Y4700D03*
348 | G01X13630Y5200D03*
349 | G04 Draw part C3*
350 | G54D20*
351 | G01X8320Y4700D03*
352 | G01X8320Y3950D03*
353 | G04 Draw part C4*
354 | G01X8320Y6380D03*
355 | G01X8320Y5630D03*
356 | G04 Draw part C5*
357 | G01X14950Y6700D03*
358 | G01X14950Y5950D03*
359 | G04 Draw part C6*
360 | G01X14950Y4950D03*
361 | G01X14950Y4200D03*
362 | G04 Draw part R1*
363 | G54D23*
364 | G01X5440Y5650D03*
365 | G01X5440Y6900D03*
366 | G04 Draw part R2*
367 | G01X6800Y2200D03*
368 | G01X5550Y2200D03*
369 | G04 Draw part R3*
370 | G01X17720Y6860D03*
371 | G01X17720Y5610D03*
372 | G04 Draw part R4*
373 | G01X17740Y2200D03*
374 | G01X16490Y2200D03*
375 | G04 Draw part J2*
376 | G54D19*
377 | G01X19280Y7860D03*
378 | G01X19280Y6860D03*
379 | G01X19280Y5860D03*
380 | G01X19280Y4860D03*
381 | G01X19280Y3860D03*
382 | G04 Draw part C7*
383 | G54D20*
384 | G01X16960Y8980D03*
385 | G01X16960Y9730D03*
386 | G04 Draw part C8*
387 | G54D21*
388 | G01X15100Y8240D03*
389 | G01X15100Y9740D03*
390 | G04 Draw part J3*
391 | G54D19*
392 | G01X16340Y6700D03*
393 | G01X16340Y5700D03*
394 | G01X16340Y4700D03*
395 | G04 Draw part J4*
396 | G01X6920Y6700D03*
397 | G01X6920Y5700D03*
398 | G01X6920Y4700D03*
399 | G04 Draw part U2*
400 | G01X10130Y7000D03*
401 | G01X11130Y7000D03*
402 | G01X12130Y7000D03*
403 | G01X13130Y7000D03*
404 |
405 | G04 Draw traces*
406 | G54D24*
407 | G01X19280Y5860D02*
408 | G01X19010Y5860D01*
409 | G01X19010Y5860D02*
410 | G01X18450Y5300D01*
411 | G01X18450Y5300D02*
412 | G01X18450Y2910D01*
413 | G01X18450Y2910D02*
414 | G01X17740Y2200D01*
415 | G54D25*
416 | G01X3960Y7900D02*
417 | G01X7990Y7900D01*
418 | G01X7990Y7900D02*
419 | G01X8000Y8240D01*
420 | G01X8320Y6380D02*
421 | G01X9630Y6380D01*
422 | G01X9630Y6380D02*
423 | G01X9630Y5200D01*
424 | G01X8320Y6380D02*
425 | G01X10840Y6380D01*
426 | G01X10840Y6380D02*
427 | G01X11130Y6670D01*
428 | G01X11130Y6670D02*
429 | G01X11130Y7000D01*
430 | G01X8000Y8240D02*
431 | G01X8000Y7900D01*
432 | G01X8000Y7900D02*
433 | G01X6280Y7900D01*
434 | G01X6280Y7900D02*
435 | G01X6280Y9000D01*
436 | G01X6920Y6700D02*
437 | G01X6920Y7900D01*
438 | G01X6920Y7900D02*
439 | G01X8000Y7900D01*
440 | G01X8000Y7900D02*
441 | G01X8000Y8240D01*
442 | G01X8000Y8240D02*
443 | G01X8000Y7310D01*
444 | G01X8000Y7310D02*
445 | G01X8320Y6990D01*
446 | G01X8320Y6990D02*
447 | G01X8320Y6380D01*
448 | G01X13130Y7000D02*
449 | G01X13130Y6310D01*
450 | G01X13130Y6310D02*
451 | G01X13630Y5810D01*
452 | G01X13630Y5810D02*
453 | G01X13630Y5200D01*
454 | G01X15100Y8240D02*
455 | G01X15940Y8240D01*
456 | G01X15940Y8240D02*
457 | G01X16340Y7860D01*
458 | G01X16340Y7860D02*
459 | G01X16340Y6700D01*
460 | G01X15100Y8240D02*
461 | G01X15940Y8240D01*
462 | G01X15940Y8240D02*
463 | G01X16320Y7860D01*
464 | G01X16320Y7860D02*
465 | G01X16960Y7860D01*
466 | G01X16960Y7860D02*
467 | G01X16960Y8980D01*
468 | G01X15100Y8240D02*
469 | G01X14370Y8240D01*
470 | G01X14370Y8240D02*
471 | G01X13130Y7000D01*
472 | G01X15100Y8240D02*
473 | G01X15960Y8240D01*
474 | G01X15960Y8240D02*
475 | G01X16340Y7860D01*
476 | G01X16340Y7860D02*
477 | G01X19280Y7860D01*
478 | G01X14950Y6700D02*
479 | G01X16340Y6700D01*
480 | G54D24*
481 | G01X13630Y2200D02*
482 | G01X16490Y2200D01*
483 | G01X13630Y4200D02*
484 | G01X13070Y4200D01*
485 | G01X13070Y4200D02*
486 | G01X12820Y3950D01*
487 | G01X12820Y3950D02*
488 | G01X12820Y3460D01*
489 | G01X12820Y3460D02*
490 | G01X13080Y3200D01*
491 | G01X13080Y3200D02*
492 | G01X13630Y3200D01*
493 | G01X14950Y4200D02*
494 | G01X13630Y4200D01*
495 | G01X16340Y5700D02*
496 | G01X16640Y5690D01*
497 | G01X16640Y5690D02*
498 | G01X17000Y5330D01*
499 | G01X17000Y5330D02*
500 | G01X17000Y4080D01*
501 | G01X17000Y4080D02*
502 | G01X16620Y3700D01*
503 | G01X16620Y3700D02*
504 | G01X13630Y3700D01*
505 | G54D26*
506 | G01X9630Y4700D02*
507 | G01X10430Y4700D01*
508 | G01X10430Y4700D02*
509 | G01X10430Y1920D01*
510 | G01X10430Y1920D02*
511 | G01X10210Y1700D01*
512 | G01X10210Y1700D02*
513 | G01X9630Y1700D01*
514 | G01X3960Y3900D02*
515 | G01X3960Y1160D01*
516 | G01X3960Y1160D02*
517 | G01X8720Y1160D01*
518 | G01X8720Y1160D02*
519 | G01X8720Y1700D01*
520 | G01X8720Y1700D02*
521 | G01X9630Y1700D01*
522 | G01X10130Y7000D02*
523 | G01X10130Y9740D01*
524 | G01X10130Y9740D02*
525 | G01X8000Y9740D01*
526 | G01X6280Y9750D02*
527 | G01X2670Y9750D01*
528 | G01X2670Y9750D02*
529 | G01X2670Y4900D01*
530 | G01X2670Y4900D02*
531 | G01X3960Y4900D01*
532 | G01X8000Y9740D02*
533 | G01X6280Y9750D01*
534 | G01X8320Y5630D02*
535 | G01X8320Y4700D01*
536 | G01X8320Y4700D02*
537 | G01X9630Y4700D01*
538 | G01X6920Y4700D02*
539 | G01X8320Y4700D01*
540 | G54D24*
541 | G01X6920Y5700D02*
542 | G01X6480Y5700D01*
543 | G01X6480Y5700D02*
544 | G01X6120Y5340D01*
545 | G01X6120Y5340D02*
546 | G01X6120Y3910D01*
547 | G01X6120Y3910D02*
548 | G01X6420Y3610D01*
549 | G01X6420Y3610D02*
550 | G01X7450Y3610D01*
551 | G01X7450Y3610D02*
552 | G01X7860Y3200D01*
553 | G01X7860Y3200D02*
554 | G01X9630Y3200D01*
555 | G54D26*
556 | G01X12130Y7000D02*
557 | G01X12130Y4700D01*
558 | G01X12130Y4700D02*
559 | G01X13630Y4700D01*
560 | G01X12130Y7000D02*
561 | G01X12130Y9740D01*
562 | G01X12130Y9740D02*
563 | G01X15100Y9740D01*
564 | G01X16960Y9730D02*
565 | G01X20390Y9722D01*
566 | G01X20390Y9722D02*
567 | G01X20390Y4860D01*
568 | G01X20390Y4860D02*
569 | G01X19280Y4860D01*
570 | G01X15100Y9740D02*
571 | G01X16960Y9730D01*
572 | G01X14950Y4950D02*
573 | G01X14950Y5950D01*
574 | G01X13630Y4700D02*
575 | G01X14150Y4700D01*
576 | G01X14150Y4700D02*
577 | G01X14400Y4950D01*
578 | G01X14400Y4950D02*
579 | G01X14950Y4950D01*
580 | G01X14950Y4950D02*
581 | G01X15420Y4950D01*
582 | G01X15420Y4950D02*
583 | G01X15670Y4700D01*
584 | G01X15670Y4700D02*
585 | G01X16340Y4700D01*
586 | G01X13630Y1700D02*
587 | G01X14560Y1700D01*
588 | G01X14560Y1700D02*
589 | G01X14560Y1170D01*
590 | G01X14560Y1170D02*
591 | G01X19280Y1170D01*
592 | G01X19280Y1170D02*
593 | G01X19280Y3860D01*
594 | G01X12130Y7000D02*
595 | G01X12130Y1700D01*
596 | G01X12130Y1700D02*
597 | G01X13630Y1700D01*
598 | G54D24*
599 | G01X5440Y5650D02*
600 | G01X5440Y3570D01*
601 | G01X5440Y3570D02*
602 | G01X5950Y3060D01*
603 | G01X5950Y3060D02*
604 | G01X7360Y3060D01*
605 | G01X7360Y3060D02*
606 | G01X7720Y2700D01*
607 | G01X7720Y2700D02*
608 | G01X9630Y2700D01*
609 | G01X6800Y2200D02*
610 | G01X9630Y2200D01*
611 | G01X9630Y3700D02*
612 | G01X9630Y4200D01*
613 | G01X9630Y3700D02*
614 | G01X8570Y3700D01*
615 | G01X8570Y3700D02*
616 | G01X8320Y3950D01*
617 | G01X3960Y6900D02*
618 | G01X5440Y6900D01*
619 | G01X3960Y5900D02*
620 | G01X4090Y5900D01*
621 | G01X4090Y5900D02*
622 | G01X4760Y5230D01*
623 | G01X4760Y5230D02*
624 | G01X4760Y2990D01*
625 | G01X4760Y2990D02*
626 | G01X5550Y2200D01*
627 | G01X19280Y6860D02*
628 | G01X17720Y6860D01*
629 | G01X13630Y2700D02*
630 | G01X14885Y2700D01*
631 | G01X14885Y2700D02*
632 | G01X15314Y3120D01*
633 | G01X15314Y3120D02*
634 | G01X16950Y3120D01*
635 | G01X16950Y3120D02*
636 | G01X17720Y3890D01*
637 | G01X17720Y3890D02*
638 | G01X17720Y5610D01*
639 |
640 | G04 Draw Text*
641 |
642 | G04 ----------------------- Draw Pilot Holes (scratch)*
643 | %LPC*%
644 | G04 draw pilot holes for part J1*
645 | G54D27*
646 | G01X3960Y7900D03*
647 | G01X3960Y6900D03*
648 | G01X3960Y5900D03*
649 | G01X3960Y4900D03*
650 | G01X3960Y3900D03*
651 | G04 draw pilot holes for part C1*
652 | G04 draw pilot holes for part C2*
653 | G04 draw pilot holes for part U1*
654 | G04 draw pilot holes for part C3*
655 | G04 draw pilot holes for part C4*
656 | G04 draw pilot holes for part C5*
657 | G04 draw pilot holes for part C6*
658 | G04 draw pilot holes for part R1*
659 | G04 draw pilot holes for part R2*
660 | G04 draw pilot holes for part R3*
661 | G04 draw pilot holes for part R4*
662 | G04 draw pilot holes for part J2*
663 | G01X19280Y7860D03*
664 | G01X19280Y6860D03*
665 | G01X19280Y5860D03*
666 | G01X19280Y4860D03*
667 | G01X19280Y3860D03*
668 | G04 draw pilot holes for part C7*
669 | G04 draw pilot holes for part C8*
670 | G04 draw pilot holes for part J3*
671 | G01X16340Y6700D03*
672 | G01X16340Y5700D03*
673 | G01X16340Y4700D03*
674 | G04 draw pilot holes for part J4*
675 | G01X6920Y6700D03*
676 | G01X6920Y5700D03*
677 | G01X6920Y4700D03*
678 | G04 draw pilot holes for part U2*
679 | G01X10130Y7000D03*
680 | G01X11130Y7000D03*
681 | G01X12130Y7000D03*
682 | G01X13130Y7000D03*
683 |
684 | G04 Draw pilot holes for vias*
685 | M00*
686 | M02*
687 |
--------------------------------------------------------------------------------
/examples/pcb-1-a/top.grb:
--------------------------------------------------------------------------------
1 | G04 FreePCB version 1.355*
2 | G04 C:\FcPoly-Ttest\top_silk.grb*
3 | G04 top silk layer *
4 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
5 | %FSLAX24Y24*%
6 | %MOIN*%
7 | %LN top silk *%
8 | G04 Rounded Rectangle Macro, params: W/2, H/2, R *
9 | %AMRNDREC*
10 | 21,1,$1+$1,$2+$2-$3-$3,0,0,0*
11 | 21,1,$1+$1-$3-$3,$2+$2,0,0,0*
12 | 1,1,$3+$3,$1-$3,$2-$3*
13 | 1,1,$3+$3,$3-$1,$2-$3*
14 | 1,1,$3+$3,$1-$3,$3-$2*
15 | 1,1,$3+$3,$3-$1,$3-$2*%
16 | G04 Rectangular Thermal Macro, params: W/2, H/2, T/2 *
17 | %AMRECTHERM*
18 | $4=$3/2*
19 | 21,1,$1-$3,$2-$3,0-$1/2-$4,0-$2/2-$4,0*
20 | 21,1,$1-$3,$2-$3,0-$1/2-$4,$2/2+$4,0*
21 | 21,1,$1-$3,$2-$3,$1/2+$4,0-$2/2-$4,0*
22 | 21,1,$1-$3,$2-$3,$1/2+$4,$2/2+$4,0*%
23 | %ADD10C,0.005000*%
24 | %ADD11C,0.007000*%
25 | %ADD12C,0.010000*%
26 | G90*
27 | G70D02*
28 |
29 | G04 Step and Repeat for panelization *
30 |
31 | G04 ----------------------- Draw board outline (positive)*
32 | %LPD*%
33 | G54D10*
34 | G01X0Y11800D02*
35 | G01X23250Y11800D01*
36 | G04 end of side 1*
37 | G01X23250Y0D01*
38 | G04 end of side 2*
39 | G01X0Y0D01*
40 | G04 end of side 3*
41 | G01X0Y11800D01*
42 |
43 | G04 -------------- Draw Parts, Pads, Traces, Vias and Text (positive)*
44 | %LPD*%
45 | G04 Draw part J1*
46 | G04 draw part outline for part J1*
47 | G54D11*
48 | G01X4460Y8400D02*
49 | G01X4460Y3400D01*
50 | G01X4460Y3400D02*
51 | G01X3460Y3400D01*
52 | G01X3460Y3400D02*
53 | G01X3460Y8400D01*
54 | G01X3460Y8400D02*
55 | G01X4460Y8400D01*
56 | G04 draw reference designator for part J1*
57 | G01X3869Y8834D02*
58 | G01X3869Y8579D01*
59 | G01X3869Y8579D02*
60 | G01X3853Y8531D01*
61 | G01X3853Y8531D02*
62 | G01X3837Y8515D01*
63 | G01X3837Y8515D02*
64 | G01X3805Y8500D01*
65 | G01X3773Y8500D02*
66 | G01X3805Y8500D01*
67 | G01X3741Y8515D02*
68 | G01X3773Y8500D01*
69 | G01X3725Y8531D02*
70 | G01X3741Y8515D01*
71 | G01X3710Y8579D02*
72 | G01X3725Y8531D01*
73 | G01X3710Y8611D02*
74 | G01X3710Y8579D01*
75 | G01X4028Y8786D02*
76 | G01X3996Y8770D01*
77 | G01X4075Y8834D02*
78 | G01X4028Y8786D01*
79 | G01X4075Y8834D02*
80 | G01X4075Y8500D01*
81 | G04 Draw part C1*
82 | G04 draw part outline for part C1*
83 | G01X5886Y8625D02*
84 | G01X5886Y10122D01*
85 | G01X5886Y10122D02*
86 | G01X6673Y10122D01*
87 | G01X6673Y10122D02*
88 | G01X6673Y8625D01*
89 | G01X6673Y8625D02*
90 | G01X5886Y8625D01*
91 | G04 draw reference designator for part C1*
92 | G01X5993Y9322D02*
93 | G01X6025Y9338D01*
94 | G01X5961Y9290D02*
95 | G01X5993Y9322D01*
96 | G01X5945Y9259D02*
97 | G01X5961Y9290D01*
98 | G01X5945Y9195D02*
99 | G01X5945Y9259D01*
100 | G01X5945Y9195D02*
101 | G01X5961Y9163D01*
102 | G01X5961Y9163D02*
103 | G01X5993Y9131D01*
104 | G01X5993Y9131D02*
105 | G01X6025Y9115D01*
106 | G01X6025Y9115D02*
107 | G01X6073Y9100D01*
108 | G01X6073Y9100D02*
109 | G01X6152Y9100D01*
110 | G01X6152Y9100D02*
111 | G01X6200Y9115D01*
112 | G01X6200Y9115D02*
113 | G01X6232Y9131D01*
114 | G01X6232Y9131D02*
115 | G01X6264Y9163D01*
116 | G01X6264Y9163D02*
117 | G01X6280Y9195D01*
118 | G01X6280Y9259D02*
119 | G01X6280Y9195D01*
120 | G01X6264Y9290D02*
121 | G01X6280Y9259D01*
122 | G01X6232Y9322D02*
123 | G01X6264Y9290D01*
124 | G01X6200Y9338D02*
125 | G01X6232Y9322D01*
126 | G01X5993Y9497D02*
127 | G01X6009Y9465D01*
128 | G01X5945Y9545D02*
129 | G01X5993Y9497D01*
130 | G01X5945Y9545D02*
131 | G01X6280Y9545D01*
132 | G04 draw value for part C1*
133 | G01X6393Y8631D02*
134 | G01X6409Y8600D01*
135 | G01X6345Y8679D02*
136 | G01X6393Y8631D01*
137 | G01X6345Y8679D02*
138 | G01X6680Y8679D01*
139 | G01X6345Y8902D02*
140 | G01X6361Y8854D01*
141 | G01X6361Y8854D02*
142 | G01X6409Y8822D01*
143 | G01X6409Y8822D02*
144 | G01X6489Y8806D01*
145 | G01X6489Y8806D02*
146 | G01X6536Y8806D01*
147 | G01X6536Y8806D02*
148 | G01X6616Y8822D01*
149 | G01X6616Y8822D02*
150 | G01X6664Y8854D01*
151 | G01X6664Y8854D02*
152 | G01X6680Y8902D01*
153 | G01X6680Y8934D02*
154 | G01X6680Y8902D01*
155 | G01X6664Y8981D02*
156 | G01X6680Y8934D01*
157 | G01X6616Y9013D02*
158 | G01X6664Y8981D01*
159 | G01X6536Y9029D02*
160 | G01X6616Y9013D01*
161 | G01X6489Y9029D02*
162 | G01X6536Y9029D01*
163 | G01X6409Y9013D02*
164 | G01X6489Y9029D01*
165 | G01X6361Y8981D02*
166 | G01X6409Y9013D01*
167 | G01X6345Y8934D02*
168 | G01X6361Y8981D01*
169 | G01X6345Y8902D02*
170 | G01X6345Y8934D01*
171 | G01X6345Y9252D02*
172 | G01X6361Y9204D01*
173 | G01X6361Y9204D02*
174 | G01X6409Y9172D01*
175 | G01X6409Y9172D02*
176 | G01X6489Y9156D01*
177 | G01X6489Y9156D02*
178 | G01X6536Y9156D01*
179 | G01X6536Y9156D02*
180 | G01X6616Y9172D01*
181 | G01X6616Y9172D02*
182 | G01X6664Y9204D01*
183 | G01X6664Y9204D02*
184 | G01X6680Y9252D01*
185 | G01X6680Y9284D02*
186 | G01X6680Y9252D01*
187 | G01X6664Y9331D02*
188 | G01X6680Y9284D01*
189 | G01X6616Y9363D02*
190 | G01X6664Y9331D01*
191 | G01X6536Y9379D02*
192 | G01X6616Y9363D01*
193 | G01X6489Y9379D02*
194 | G01X6536Y9379D01*
195 | G01X6409Y9363D02*
196 | G01X6489Y9379D01*
197 | G01X6361Y9331D02*
198 | G01X6409Y9363D01*
199 | G01X6345Y9284D02*
200 | G01X6361Y9331D01*
201 | G01X6345Y9252D02*
202 | G01X6345Y9284D01*
203 | G01X6457Y9506D02*
204 | G01X6680Y9506D01*
205 | G01X6473Y9554D02*
206 | G01X6520Y9506D01*
207 | G01X6457Y9586D02*
208 | G01X6473Y9554D01*
209 | G01X6457Y9634D02*
210 | G01X6457Y9586D01*
211 | G01X6457Y9634D02*
212 | G01X6473Y9665D01*
213 | G01X6473Y9665D02*
214 | G01X6520Y9681D01*
215 | G01X6520Y9681D02*
216 | G01X6680Y9681D01*
217 | G04 Draw part C2*
218 | G04 draw part outline for part C2*
219 | G01X7100Y8240D02*
220 | G01X7100Y9990D01*
221 | G01X7100Y9990D02*
222 | G01X8900Y9990D01*
223 | G01X8900Y9990D02*
224 | G01X8900Y8240D01*
225 | G01X8900Y8240D02*
226 | G01X8550Y7990D01*
227 | G01X8550Y7990D02*
228 | G01X7450Y7990D01*
229 | G01X7450Y7990D02*
230 | G01X7100Y8240D01*
231 | G04 draw reference designator for part C2*
232 | G01X7872Y9376D02*
233 | G01X7888Y9344D01*
234 | G01X7840Y9408D02*
235 | G01X7872Y9376D01*
236 | G01X7809Y9424D02*
237 | G01X7840Y9408D01*
238 | G01X7745Y9424D02*
239 | G01X7809Y9424D01*
240 | G01X7745Y9424D02*
241 | G01X7713Y9408D01*
242 | G01X7713Y9408D02*
243 | G01X7681Y9376D01*
244 | G01X7681Y9376D02*
245 | G01X7665Y9344D01*
246 | G01X7665Y9344D02*
247 | G01X7650Y9296D01*
248 | G01X7650Y9296D02*
249 | G01X7650Y9217D01*
250 | G01X7650Y9217D02*
251 | G01X7665Y9169D01*
252 | G01X7665Y9169D02*
253 | G01X7681Y9137D01*
254 | G01X7681Y9137D02*
255 | G01X7713Y9105D01*
256 | G01X7713Y9105D02*
257 | G01X7745Y9090D01*
258 | G01X7809Y9090D02*
259 | G01X7745Y9090D01*
260 | G01X7840Y9105D02*
261 | G01X7809Y9090D01*
262 | G01X7872Y9137D02*
263 | G01X7840Y9105D01*
264 | G01X7888Y9169D02*
265 | G01X7872Y9137D01*
266 | G01X8031Y9360D02*
267 | G01X8031Y9344D01*
268 | G01X8047Y9392D02*
269 | G01X8031Y9360D01*
270 | G01X8063Y9408D02*
271 | G01X8047Y9392D01*
272 | G01X8095Y9424D02*
273 | G01X8063Y9408D01*
274 | G01X8159Y9424D02*
275 | G01X8095Y9424D01*
276 | G01X8159Y9424D02*
277 | G01X8190Y9408D01*
278 | G01X8190Y9408D02*
279 | G01X8206Y9392D01*
280 | G01X8206Y9392D02*
281 | G01X8222Y9360D01*
282 | G01X8222Y9360D02*
283 | G01X8222Y9328D01*
284 | G01X8222Y9328D02*
285 | G01X8206Y9296D01*
286 | G01X8206Y9296D02*
287 | G01X8175Y9249D01*
288 | G01X8175Y9249D02*
289 | G01X8015Y9090D01*
290 | G01X8238Y9090D02*
291 | G01X8015Y9090D01*
292 | G04 draw value for part C2*
293 | G01X7482Y8908D02*
294 | G01X7451Y8892D01*
295 | G01X7530Y8956D02*
296 | G01X7482Y8908D01*
297 | G01X7530Y8956D02*
298 | G01X7530Y8622D01*
299 | G01X7753Y8956D02*
300 | G01X7705Y8940D01*
301 | G01X7705Y8940D02*
302 | G01X7673Y8892D01*
303 | G01X7673Y8892D02*
304 | G01X7657Y8812D01*
305 | G01X7657Y8812D02*
306 | G01X7657Y8765D01*
307 | G01X7657Y8765D02*
308 | G01X7673Y8685D01*
309 | G01X7673Y8685D02*
310 | G01X7705Y8637D01*
311 | G01X7705Y8637D02*
312 | G01X7753Y8622D01*
313 | G01X7785Y8622D02*
314 | G01X7753Y8622D01*
315 | G01X7832Y8637D02*
316 | G01X7785Y8622D01*
317 | G01X7864Y8685D02*
318 | G01X7832Y8637D01*
319 | G01X7880Y8765D02*
320 | G01X7864Y8685D01*
321 | G01X7880Y8812D02*
322 | G01X7880Y8765D01*
323 | G01X7864Y8892D02*
324 | G01X7880Y8812D01*
325 | G01X7832Y8940D02*
326 | G01X7864Y8892D01*
327 | G01X7785Y8956D02*
328 | G01X7832Y8940D01*
329 | G01X7753Y8956D02*
330 | G01X7785Y8956D01*
331 | G01X8103Y8956D02*
332 | G01X8055Y8940D01*
333 | G01X8055Y8940D02*
334 | G01X8023Y8892D01*
335 | G01X8023Y8892D02*
336 | G01X8007Y8812D01*
337 | G01X8007Y8812D02*
338 | G01X8007Y8765D01*
339 | G01X8007Y8765D02*
340 | G01X8023Y8685D01*
341 | G01X8023Y8685D02*
342 | G01X8055Y8637D01*
343 | G01X8055Y8637D02*
344 | G01X8103Y8622D01*
345 | G01X8135Y8622D02*
346 | G01X8103Y8622D01*
347 | G01X8182Y8637D02*
348 | G01X8135Y8622D01*
349 | G01X8214Y8685D02*
350 | G01X8182Y8637D01*
351 | G01X8230Y8765D02*
352 | G01X8214Y8685D01*
353 | G01X8230Y8812D02*
354 | G01X8230Y8765D01*
355 | G01X8214Y8892D02*
356 | G01X8230Y8812D01*
357 | G01X8182Y8940D02*
358 | G01X8214Y8892D01*
359 | G01X8135Y8956D02*
360 | G01X8182Y8940D01*
361 | G01X8103Y8956D02*
362 | G01X8135Y8956D01*
363 | G01X8357Y8844D02*
364 | G01X8357Y8685D01*
365 | G01X8357Y8685D02*
366 | G01X8373Y8637D01*
367 | G01X8373Y8637D02*
368 | G01X8405Y8622D01*
369 | G01X8453Y8622D02*
370 | G01X8405Y8622D01*
371 | G01X8485Y8637D02*
372 | G01X8453Y8622D01*
373 | G01X8532Y8685D02*
374 | G01X8485Y8637D01*
375 | G01X8532Y8844D02*
376 | G01X8532Y8622D01*
377 | G04 Draw part U1*
378 | G04 draw part outline for part U1*
379 | G01X10259Y5475D02*
380 | G01X10259Y1424D01*
381 | G01X10259Y1424D02*
382 | G01X12976Y1420D01*
383 | G01X12976Y1420D02*
384 | G01X12976Y5475D01*
385 | G01X12976Y5475D02*
386 | G01X10259Y5475D01*
387 | G01X11126Y5475D02*
388 | G01X11126Y5278D01*
389 | G01X11126Y5278D02*
390 | G01X11992Y5278D01*
391 | G01X11992Y5278D02*
392 | G01X11992Y5475D01*
393 | G01X11992Y5475D02*
394 | G01X11126Y5475D01*
395 | G04 draw reference designator for part U1*
396 | G01X10950Y3150D02*
397 | G01X11257Y3150D01*
398 | G01X11257Y3150D02*
399 | G01X11318Y3170D01*
400 | G01X11318Y3170D02*
401 | G01X11359Y3211D01*
402 | G01X11359Y3211D02*
403 | G01X11380Y3272D01*
404 | G01X11380Y3313D02*
405 | G01X11380Y3272D01*
406 | G01X11359Y3375D02*
407 | G01X11380Y3313D01*
408 | G01X11318Y3415D02*
409 | G01X11359Y3375D01*
410 | G01X11257Y3436D02*
411 | G01X11318Y3415D01*
412 | G01X10950Y3436D02*
413 | G01X11257Y3436D01*
414 | G01X11011Y3640D02*
415 | G01X11032Y3600D01*
416 | G01X10950Y3702D02*
417 | G01X11011Y3640D01*
418 | G01X10950Y3702D02*
419 | G01X11380Y3702D01*
420 | G04 draw value for part U1*
421 | G01X11711Y1859D02*
422 | G01X12141Y1696D01*
423 | G01X11711Y1859D02*
424 | G01X12141Y2023D01*
425 | G01X11997Y1961D02*
426 | G01X11997Y1757D01*
427 | G01X11711Y2186D02*
428 | G01X12141Y2186D01*
429 | G01X11711Y2330D02*
430 | G01X11711Y2186D01*
431 | G01X11711Y2330D02*
432 | G01X11731Y2391D01*
433 | G01X11731Y2391D02*
434 | G01X11772Y2432D01*
435 | G01X11772Y2432D02*
436 | G01X11813Y2452D01*
437 | G01X11813Y2452D02*
438 | G01X11875Y2473D01*
439 | G01X11875Y2473D02*
440 | G01X11977Y2473D01*
441 | G01X11977Y2473D02*
442 | G01X12038Y2452D01*
443 | G01X12038Y2452D02*
444 | G01X12079Y2432D01*
445 | G01X12079Y2432D02*
446 | G01X12120Y2391D01*
447 | G01X12120Y2391D02*
448 | G01X12141Y2330D01*
449 | G01X12141Y2186D02*
450 | G01X12141Y2330D01*
451 | G01X11711Y2636D02*
452 | G01X12018Y2636D01*
453 | G01X12018Y2636D02*
454 | G01X12079Y2657D01*
455 | G01X12079Y2657D02*
456 | G01X12120Y2698D01*
457 | G01X12120Y2698D02*
458 | G01X12141Y2759D01*
459 | G01X12141Y2800D02*
460 | G01X12141Y2759D01*
461 | G01X12120Y2861D02*
462 | G01X12141Y2800D01*
463 | G01X12079Y2902D02*
464 | G01X12120Y2861D01*
465 | G01X12018Y2923D02*
466 | G01X12079Y2902D01*
467 | G01X11711Y2923D02*
468 | G01X12018Y2923D01*
469 | G01X11711Y3086D02*
470 | G01X12141Y3086D01*
471 | G01X11711Y3086D02*
472 | G01X12141Y3250D01*
473 | G01X11711Y3414D02*
474 | G01X12141Y3250D01*
475 | G01X11711Y3414D02*
476 | G01X12141Y3414D01*
477 | G01X11711Y3782D02*
478 | G01X11997Y3577D01*
479 | G01X11997Y3884D02*
480 | G01X11997Y3577D01*
481 | G01X11711Y3782D02*
482 | G01X12141Y3782D01*
483 | G01X11772Y4089D02*
484 | G01X11793Y4048D01*
485 | G01X11711Y4150D02*
486 | G01X11772Y4089D01*
487 | G01X11711Y4150D02*
488 | G01X12141Y4150D01*
489 | G01X11731Y4539D02*
490 | G01X11772Y4559D01*
491 | G01X11711Y4477D02*
492 | G01X11731Y4539D01*
493 | G01X11711Y4436D02*
494 | G01X11711Y4477D01*
495 | G01X11711Y4436D02*
496 | G01X11731Y4375D01*
497 | G01X11731Y4375D02*
498 | G01X11793Y4334D01*
499 | G01X11793Y4334D02*
500 | G01X11895Y4314D01*
501 | G01X11895Y4314D02*
502 | G01X11997Y4314D01*
503 | G01X11997Y4314D02*
504 | G01X12079Y4334D01*
505 | G01X12079Y4334D02*
506 | G01X12120Y4375D01*
507 | G01X12120Y4375D02*
508 | G01X12141Y4436D01*
509 | G01X12141Y4457D02*
510 | G01X12141Y4436D01*
511 | G01X12120Y4518D02*
512 | G01X12141Y4457D01*
513 | G01X12079Y4559D02*
514 | G01X12120Y4518D01*
515 | G01X12018Y4580D02*
516 | G01X12079Y4559D01*
517 | G01X11997Y4580D02*
518 | G01X12018Y4580D01*
519 | G01X11936Y4559D02*
520 | G01X11997Y4580D01*
521 | G01X11895Y4518D02*
522 | G01X11936Y4559D01*
523 | G01X11875Y4457D02*
524 | G01X11895Y4518D01*
525 | G01X11875Y4436D02*
526 | G01X11875Y4457D01*
527 | G01X11875Y4436D02*
528 | G01X11895Y4375D01*
529 | G01X11895Y4375D02*
530 | G01X11936Y4334D01*
531 | G01X11936Y4334D02*
532 | G01X11997Y4314D01*
533 | G01X11711Y4866D02*
534 | G01X11731Y4805D01*
535 | G01X11731Y4805D02*
536 | G01X11793Y4764D01*
537 | G01X11793Y4764D02*
538 | G01X11895Y4743D01*
539 | G01X11895Y4743D02*
540 | G01X11956Y4743D01*
541 | G01X11956Y4743D02*
542 | G01X12059Y4764D01*
543 | G01X12059Y4764D02*
544 | G01X12120Y4805D01*
545 | G01X12120Y4805D02*
546 | G01X12141Y4866D01*
547 | G01X12141Y4907D02*
548 | G01X12141Y4866D01*
549 | G01X12120Y4968D02*
550 | G01X12141Y4907D01*
551 | G01X12059Y5009D02*
552 | G01X12120Y4968D01*
553 | G01X11956Y5030D02*
554 | G01X12059Y5009D01*
555 | G01X11895Y5030D02*
556 | G01X11956Y5030D01*
557 | G01X11793Y5009D02*
558 | G01X11895Y5030D01*
559 | G01X11731Y4968D02*
560 | G01X11793Y5009D01*
561 | G01X11711Y4907D02*
562 | G01X11731Y4968D01*
563 | G01X11711Y4866D02*
564 | G01X11711Y4907D01*
565 | G04 Draw part C3*
566 | G04 draw part outline for part C3*
567 | G01X8713Y5074D02*
568 | G01X8713Y3577D01*
569 | G01X8713Y3577D02*
570 | G01X7926Y3577D01*
571 | G01X7926Y3577D02*
572 | G01X7926Y5074D01*
573 | G01X7926Y5074D02*
574 | G01X8713Y5074D01*
575 | G04 draw reference designator for part C3*
576 | G01X8033Y4222D02*
577 | G01X8065Y4238D01*
578 | G01X8001Y4190D02*
579 | G01X8033Y4222D01*
580 | G01X7985Y4159D02*
581 | G01X8001Y4190D01*
582 | G01X7985Y4095D02*
583 | G01X7985Y4159D01*
584 | G01X7985Y4095D02*
585 | G01X8001Y4063D01*
586 | G01X8001Y4063D02*
587 | G01X8033Y4031D01*
588 | G01X8033Y4031D02*
589 | G01X8065Y4015D01*
590 | G01X8065Y4015D02*
591 | G01X8113Y4000D01*
592 | G01X8113Y4000D02*
593 | G01X8192Y4000D01*
594 | G01X8192Y4000D02*
595 | G01X8240Y4015D01*
596 | G01X8240Y4015D02*
597 | G01X8272Y4031D01*
598 | G01X8272Y4031D02*
599 | G01X8304Y4063D01*
600 | G01X8304Y4063D02*
601 | G01X8320Y4095D01*
602 | G01X8320Y4159D02*
603 | G01X8320Y4095D01*
604 | G01X8304Y4190D02*
605 | G01X8320Y4159D01*
606 | G01X8272Y4222D02*
607 | G01X8304Y4190D01*
608 | G01X8240Y4238D02*
609 | G01X8272Y4222D01*
610 | G01X7985Y4572D02*
611 | G01X7985Y4397D01*
612 | G01X7985Y4572D02*
613 | G01X8113Y4477D01*
614 | G01X8113Y4525D02*
615 | G01X8113Y4477D01*
616 | G01X8113Y4525D02*
617 | G01X8129Y4556D01*
618 | G01X8129Y4556D02*
619 | G01X8145Y4572D01*
620 | G01X8145Y4572D02*
621 | G01X8192Y4588D01*
622 | G01X8192Y4588D02*
623 | G01X8224Y4588D01*
624 | G01X8224Y4588D02*
625 | G01X8272Y4572D01*
626 | G01X8272Y4572D02*
627 | G01X8304Y4540D01*
628 | G01X8304Y4540D02*
629 | G01X8320Y4493D01*
630 | G01X8320Y4445D02*
631 | G01X8320Y4493D01*
632 | G01X8304Y4397D02*
633 | G01X8320Y4445D01*
634 | G01X8288Y4381D02*
635 | G01X8304Y4397D01*
636 | G01X8256Y4365D02*
637 | G01X8288Y4381D01*
638 | G04 draw value for part C3*
639 | G01X8445Y3854D02*
640 | G01X8461Y3823D01*
641 | G01X8397Y3902D02*
642 | G01X8445Y3854D01*
643 | G01X8397Y3902D02*
644 | G01X8732Y3902D01*
645 | G01X8397Y4125D02*
646 | G01X8413Y4077D01*
647 | G01X8413Y4077D02*
648 | G01X8461Y4045D01*
649 | G01X8461Y4045D02*
650 | G01X8541Y4029D01*
651 | G01X8541Y4029D02*
652 | G01X8588Y4029D01*
653 | G01X8588Y4029D02*
654 | G01X8668Y4045D01*
655 | G01X8668Y4045D02*
656 | G01X8716Y4077D01*
657 | G01X8716Y4077D02*
658 | G01X8732Y4125D01*
659 | G01X8732Y4157D02*
660 | G01X8732Y4125D01*
661 | G01X8716Y4204D02*
662 | G01X8732Y4157D01*
663 | G01X8668Y4236D02*
664 | G01X8716Y4204D01*
665 | G01X8588Y4252D02*
666 | G01X8668Y4236D01*
667 | G01X8541Y4252D02*
668 | G01X8588Y4252D01*
669 | G01X8461Y4236D02*
670 | G01X8541Y4252D01*
671 | G01X8413Y4204D02*
672 | G01X8461Y4236D01*
673 | G01X8397Y4157D02*
674 | G01X8413Y4204D01*
675 | G01X8397Y4125D02*
676 | G01X8397Y4157D01*
677 | G01X8397Y4475D02*
678 | G01X8413Y4427D01*
679 | G01X8413Y4427D02*
680 | G01X8461Y4395D01*
681 | G01X8461Y4395D02*
682 | G01X8541Y4379D01*
683 | G01X8541Y4379D02*
684 | G01X8588Y4379D01*
685 | G01X8588Y4379D02*
686 | G01X8668Y4395D01*
687 | G01X8668Y4395D02*
688 | G01X8716Y4427D01*
689 | G01X8716Y4427D02*
690 | G01X8732Y4475D01*
691 | G01X8732Y4507D02*
692 | G01X8732Y4475D01*
693 | G01X8716Y4554D02*
694 | G01X8732Y4507D01*
695 | G01X8668Y4586D02*
696 | G01X8716Y4554D01*
697 | G01X8588Y4602D02*
698 | G01X8668Y4586D01*
699 | G01X8541Y4602D02*
700 | G01X8588Y4602D01*
701 | G01X8461Y4586D02*
702 | G01X8541Y4602D01*
703 | G01X8413Y4554D02*
704 | G01X8461Y4586D01*
705 | G01X8397Y4507D02*
706 | G01X8413Y4554D01*
707 | G01X8397Y4475D02*
708 | G01X8397Y4507D01*
709 | G01X8509Y4729D02*
710 | G01X8732Y4729D01*
711 | G01X8525Y4777D02*
712 | G01X8572Y4729D01*
713 | G01X8509Y4809D02*
714 | G01X8525Y4777D01*
715 | G01X8509Y4857D02*
716 | G01X8509Y4809D01*
717 | G01X8509Y4857D02*
718 | G01X8525Y4888D01*
719 | G01X8525Y4888D02*
720 | G01X8572Y4904D01*
721 | G01X8572Y4904D02*
722 | G01X8732Y4904D01*
723 | G04 Draw part C4*
724 | G04 draw part outline for part C4*
725 | G01X8713Y6754D02*
726 | G01X8713Y5257D01*
727 | G01X8713Y5257D02*
728 | G01X7926Y5257D01*
729 | G01X7926Y5257D02*
730 | G01X7926Y6754D01*
731 | G01X7926Y6754D02*
732 | G01X8713Y6754D01*
733 | G04 draw reference designator for part C4*
734 | G01X8033Y5952D02*
735 | G01X8065Y5968D01*
736 | G01X8001Y5920D02*
737 | G01X8033Y5952D01*
738 | G01X7985Y5889D02*
739 | G01X8001Y5920D01*
740 | G01X7985Y5825D02*
741 | G01X7985Y5889D01*
742 | G01X7985Y5825D02*
743 | G01X8001Y5793D01*
744 | G01X8001Y5793D02*
745 | G01X8033Y5761D01*
746 | G01X8033Y5761D02*
747 | G01X8065Y5745D01*
748 | G01X8065Y5745D02*
749 | G01X8113Y5730D01*
750 | G01X8113Y5730D02*
751 | G01X8192Y5730D01*
752 | G01X8192Y5730D02*
753 | G01X8240Y5745D01*
754 | G01X8240Y5745D02*
755 | G01X8272Y5761D01*
756 | G01X8272Y5761D02*
757 | G01X8304Y5793D01*
758 | G01X8304Y5793D02*
759 | G01X8320Y5825D01*
760 | G01X8320Y5889D02*
761 | G01X8320Y5825D01*
762 | G01X8304Y5920D02*
763 | G01X8320Y5889D01*
764 | G01X8272Y5952D02*
765 | G01X8304Y5920D01*
766 | G01X8240Y5968D02*
767 | G01X8272Y5952D01*
768 | G01X7985Y6255D02*
769 | G01X8208Y6095D01*
770 | G01X8208Y6334D02*
771 | G01X8208Y6095D01*
772 | G01X7985Y6255D02*
773 | G01X8320Y6255D01*
774 | G04 draw value for part C4*
775 | G01X8454Y5438D02*
776 | G01X8470Y5407D01*
777 | G01X8406Y5486D02*
778 | G01X8454Y5438D01*
779 | G01X8406Y5486D02*
780 | G01X8741Y5486D01*
781 | G01X8406Y5709D02*
782 | G01X8422Y5661D01*
783 | G01X8422Y5661D02*
784 | G01X8470Y5629D01*
785 | G01X8470Y5629D02*
786 | G01X8550Y5613D01*
787 | G01X8550Y5613D02*
788 | G01X8597Y5613D01*
789 | G01X8597Y5613D02*
790 | G01X8677Y5629D01*
791 | G01X8677Y5629D02*
792 | G01X8725Y5661D01*
793 | G01X8725Y5661D02*
794 | G01X8741Y5709D01*
795 | G01X8741Y5741D02*
796 | G01X8741Y5709D01*
797 | G01X8725Y5788D02*
798 | G01X8741Y5741D01*
799 | G01X8677Y5820D02*
800 | G01X8725Y5788D01*
801 | G01X8597Y5836D02*
802 | G01X8677Y5820D01*
803 | G01X8550Y5836D02*
804 | G01X8597Y5836D01*
805 | G01X8470Y5820D02*
806 | G01X8550Y5836D01*
807 | G01X8422Y5788D02*
808 | G01X8470Y5820D01*
809 | G01X8406Y5741D02*
810 | G01X8422Y5788D01*
811 | G01X8406Y5709D02*
812 | G01X8406Y5741D01*
813 | G01X8406Y6059D02*
814 | G01X8422Y6011D01*
815 | G01X8422Y6011D02*
816 | G01X8470Y5979D01*
817 | G01X8470Y5979D02*
818 | G01X8550Y5963D01*
819 | G01X8550Y5963D02*
820 | G01X8597Y5963D01*
821 | G01X8597Y5963D02*
822 | G01X8677Y5979D01*
823 | G01X8677Y5979D02*
824 | G01X8725Y6011D01*
825 | G01X8725Y6011D02*
826 | G01X8741Y6059D01*
827 | G01X8741Y6091D02*
828 | G01X8741Y6059D01*
829 | G01X8725Y6138D02*
830 | G01X8741Y6091D01*
831 | G01X8677Y6170D02*
832 | G01X8725Y6138D01*
833 | G01X8597Y6186D02*
834 | G01X8677Y6170D01*
835 | G01X8550Y6186D02*
836 | G01X8597Y6186D01*
837 | G01X8470Y6170D02*
838 | G01X8550Y6186D01*
839 | G01X8422Y6138D02*
840 | G01X8470Y6170D01*
841 | G01X8406Y6091D02*
842 | G01X8422Y6138D01*
843 | G01X8406Y6059D02*
844 | G01X8406Y6091D01*
845 | G01X8518Y6313D02*
846 | G01X8741Y6313D01*
847 | G01X8534Y6361D02*
848 | G01X8581Y6313D01*
849 | G01X8518Y6393D02*
850 | G01X8534Y6361D01*
851 | G01X8518Y6441D02*
852 | G01X8518Y6393D01*
853 | G01X8518Y6441D02*
854 | G01X8534Y6472D01*
855 | G01X8534Y6472D02*
856 | G01X8581Y6488D01*
857 | G01X8581Y6488D02*
858 | G01X8741Y6488D01*
859 | G04 Draw part C5*
860 | G04 draw part outline for part C5*
861 | G01X15343Y7074D02*
862 | G01X15343Y5577D01*
863 | G01X15343Y5577D02*
864 | G01X14556Y5577D01*
865 | G01X14556Y5577D02*
866 | G01X14556Y7074D01*
867 | G01X14556Y7074D02*
868 | G01X15343Y7074D01*
869 | G04 draw reference designator for part C5*
870 | G01X14663Y6222D02*
871 | G01X14695Y6238D01*
872 | G01X14631Y6190D02*
873 | G01X14663Y6222D01*
874 | G01X14615Y6159D02*
875 | G01X14631Y6190D01*
876 | G01X14615Y6095D02*
877 | G01X14615Y6159D01*
878 | G01X14615Y6095D02*
879 | G01X14631Y6063D01*
880 | G01X14631Y6063D02*
881 | G01X14663Y6031D01*
882 | G01X14663Y6031D02*
883 | G01X14695Y6015D01*
884 | G01X14695Y6015D02*
885 | G01X14743Y6000D01*
886 | G01X14743Y6000D02*
887 | G01X14822Y6000D01*
888 | G01X14822Y6000D02*
889 | G01X14870Y6015D01*
890 | G01X14870Y6015D02*
891 | G01X14902Y6031D01*
892 | G01X14902Y6031D02*
893 | G01X14934Y6063D01*
894 | G01X14934Y6063D02*
895 | G01X14950Y6095D01*
896 | G01X14950Y6159D02*
897 | G01X14950Y6095D01*
898 | G01X14934Y6190D02*
899 | G01X14950Y6159D01*
900 | G01X14902Y6222D02*
901 | G01X14934Y6190D01*
902 | G01X14870Y6238D02*
903 | G01X14902Y6222D01*
904 | G01X14615Y6397D02*
905 | G01X14615Y6556D01*
906 | G01X14615Y6397D02*
907 | G01X14759Y6381D01*
908 | G01X14743Y6397D02*
909 | G01X14759Y6381D01*
910 | G01X14727Y6445D02*
911 | G01X14743Y6397D01*
912 | G01X14727Y6493D02*
913 | G01X14727Y6445D01*
914 | G01X14727Y6493D02*
915 | G01X14743Y6540D01*
916 | G01X14743Y6540D02*
917 | G01X14775Y6572D01*
918 | G01X14775Y6572D02*
919 | G01X14822Y6588D01*
920 | G01X14822Y6588D02*
921 | G01X14854Y6588D01*
922 | G01X14854Y6588D02*
923 | G01X14902Y6572D01*
924 | G01X14902Y6572D02*
925 | G01X14934Y6540D01*
926 | G01X14934Y6540D02*
927 | G01X14950Y6493D01*
928 | G01X14950Y6445D02*
929 | G01X14950Y6493D01*
930 | G01X14934Y6397D02*
931 | G01X14950Y6445D01*
932 | G01X14918Y6381D02*
933 | G01X14934Y6397D01*
934 | G01X14886Y6365D02*
935 | G01X14918Y6381D01*
936 | G04 draw value for part C5*
937 | G01X15063Y5798D02*
938 | G01X15079Y5767D01*
939 | G01X15015Y5846D02*
940 | G01X15063Y5798D01*
941 | G01X15015Y5846D02*
942 | G01X15350Y5846D01*
943 | G01X15015Y6069D02*
944 | G01X15031Y6021D01*
945 | G01X15031Y6021D02*
946 | G01X15079Y5989D01*
947 | G01X15079Y5989D02*
948 | G01X15159Y5973D01*
949 | G01X15159Y5973D02*
950 | G01X15206Y5973D01*
951 | G01X15206Y5973D02*
952 | G01X15286Y5989D01*
953 | G01X15286Y5989D02*
954 | G01X15334Y6021D01*
955 | G01X15334Y6021D02*
956 | G01X15350Y6069D01*
957 | G01X15350Y6101D02*
958 | G01X15350Y6069D01*
959 | G01X15334Y6148D02*
960 | G01X15350Y6101D01*
961 | G01X15286Y6180D02*
962 | G01X15334Y6148D01*
963 | G01X15206Y6196D02*
964 | G01X15286Y6180D01*
965 | G01X15159Y6196D02*
966 | G01X15206Y6196D01*
967 | G01X15079Y6180D02*
968 | G01X15159Y6196D01*
969 | G01X15031Y6148D02*
970 | G01X15079Y6180D01*
971 | G01X15015Y6101D02*
972 | G01X15031Y6148D01*
973 | G01X15015Y6069D02*
974 | G01X15015Y6101D01*
975 | G01X15015Y6419D02*
976 | G01X15031Y6371D01*
977 | G01X15031Y6371D02*
978 | G01X15079Y6339D01*
979 | G01X15079Y6339D02*
980 | G01X15159Y6323D01*
981 | G01X15159Y6323D02*
982 | G01X15206Y6323D01*
983 | G01X15206Y6323D02*
984 | G01X15286Y6339D01*
985 | G01X15286Y6339D02*
986 | G01X15334Y6371D01*
987 | G01X15334Y6371D02*
988 | G01X15350Y6419D01*
989 | G01X15350Y6451D02*
990 | G01X15350Y6419D01*
991 | G01X15334Y6498D02*
992 | G01X15350Y6451D01*
993 | G01X15286Y6530D02*
994 | G01X15334Y6498D01*
995 | G01X15206Y6546D02*
996 | G01X15286Y6530D01*
997 | G01X15159Y6546D02*
998 | G01X15206Y6546D01*
999 | G01X15079Y6530D02*
1000 | G01X15159Y6546D01*
1001 | G01X15031Y6498D02*
1002 | G01X15079Y6530D01*
1003 | G01X15015Y6451D02*
1004 | G01X15031Y6498D01*
1005 | G01X15015Y6419D02*
1006 | G01X15015Y6451D01*
1007 | G01X15127Y6673D02*
1008 | G01X15350Y6673D01*
1009 | G01X15143Y6721D02*
1010 | G01X15190Y6673D01*
1011 | G01X15127Y6753D02*
1012 | G01X15143Y6721D01*
1013 | G01X15127Y6801D02*
1014 | G01X15127Y6753D01*
1015 | G01X15127Y6801D02*
1016 | G01X15143Y6832D01*
1017 | G01X15143Y6832D02*
1018 | G01X15190Y6848D01*
1019 | G01X15190Y6848D02*
1020 | G01X15350Y6848D01*
1021 | G04 Draw part C6*
1022 | G04 draw part outline for part C6*
1023 | G01X15343Y5324D02*
1024 | G01X15343Y3827D01*
1025 | G01X15343Y3827D02*
1026 | G01X14556Y3827D01*
1027 | G01X14556Y3827D02*
1028 | G01X14556Y5324D01*
1029 | G01X14556Y5324D02*
1030 | G01X15343Y5324D01*
1031 | G04 draw reference designator for part C6*
1032 | G01X14663Y4472D02*
1033 | G01X14695Y4488D01*
1034 | G01X14631Y4440D02*
1035 | G01X14663Y4472D01*
1036 | G01X14615Y4409D02*
1037 | G01X14631Y4440D01*
1038 | G01X14615Y4345D02*
1039 | G01X14615Y4409D01*
1040 | G01X14615Y4345D02*
1041 | G01X14631Y4313D01*
1042 | G01X14631Y4313D02*
1043 | G01X14663Y4281D01*
1044 | G01X14663Y4281D02*
1045 | G01X14695Y4265D01*
1046 | G01X14695Y4265D02*
1047 | G01X14743Y4250D01*
1048 | G01X14743Y4250D02*
1049 | G01X14822Y4250D01*
1050 | G01X14822Y4250D02*
1051 | G01X14870Y4265D01*
1052 | G01X14870Y4265D02*
1053 | G01X14902Y4281D01*
1054 | G01X14902Y4281D02*
1055 | G01X14934Y4313D01*
1056 | G01X14934Y4313D02*
1057 | G01X14950Y4345D01*
1058 | G01X14950Y4409D02*
1059 | G01X14950Y4345D01*
1060 | G01X14934Y4440D02*
1061 | G01X14950Y4409D01*
1062 | G01X14902Y4472D02*
1063 | G01X14934Y4440D01*
1064 | G01X14870Y4488D02*
1065 | G01X14902Y4472D01*
1066 | G01X14631Y4790D02*
1067 | G01X14663Y4806D01*
1068 | G01X14615Y4743D02*
1069 | G01X14631Y4790D01*
1070 | G01X14615Y4711D02*
1071 | G01X14615Y4743D01*
1072 | G01X14615Y4711D02*
1073 | G01X14631Y4663D01*
1074 | G01X14631Y4663D02*
1075 | G01X14679Y4631D01*
1076 | G01X14679Y4631D02*
1077 | G01X14759Y4615D01*
1078 | G01X14759Y4615D02*
1079 | G01X14838Y4615D01*
1080 | G01X14838Y4615D02*
1081 | G01X14902Y4631D01*
1082 | G01X14902Y4631D02*
1083 | G01X14934Y4663D01*
1084 | G01X14934Y4663D02*
1085 | G01X14950Y4711D01*
1086 | G01X14950Y4727D02*
1087 | G01X14950Y4711D01*
1088 | G01X14934Y4775D02*
1089 | G01X14950Y4727D01*
1090 | G01X14902Y4806D02*
1091 | G01X14934Y4775D01*
1092 | G01X14854Y4822D02*
1093 | G01X14902Y4806D01*
1094 | G01X14838Y4822D02*
1095 | G01X14854Y4822D01*
1096 | G01X14790Y4806D02*
1097 | G01X14838Y4822D01*
1098 | G01X14759Y4775D02*
1099 | G01X14790Y4806D01*
1100 | G01X14743Y4727D02*
1101 | G01X14759Y4775D01*
1102 | G01X14743Y4711D02*
1103 | G01X14743Y4727D01*
1104 | G01X14743Y4711D02*
1105 | G01X14759Y4663D01*
1106 | G01X14759Y4663D02*
1107 | G01X14790Y4631D01*
1108 | G01X14790Y4631D02*
1109 | G01X14838Y4615D01*
1110 | G04 draw value for part C6*
1111 | G01X15092Y4053D02*
1112 | G01X15108Y4022D01*
1113 | G01X15044Y4101D02*
1114 | G01X15092Y4053D01*
1115 | G01X15044Y4101D02*
1116 | G01X15379Y4101D01*
1117 | G01X15044Y4324D02*
1118 | G01X15060Y4276D01*
1119 | G01X15060Y4276D02*
1120 | G01X15108Y4244D01*
1121 | G01X15108Y4244D02*
1122 | G01X15188Y4228D01*
1123 | G01X15188Y4228D02*
1124 | G01X15235Y4228D01*
1125 | G01X15235Y4228D02*
1126 | G01X15315Y4244D01*
1127 | G01X15315Y4244D02*
1128 | G01X15363Y4276D01*
1129 | G01X15363Y4276D02*
1130 | G01X15379Y4324D01*
1131 | G01X15379Y4356D02*
1132 | G01X15379Y4324D01*
1133 | G01X15363Y4403D02*
1134 | G01X15379Y4356D01*
1135 | G01X15315Y4435D02*
1136 | G01X15363Y4403D01*
1137 | G01X15235Y4451D02*
1138 | G01X15315Y4435D01*
1139 | G01X15188Y4451D02*
1140 | G01X15235Y4451D01*
1141 | G01X15108Y4435D02*
1142 | G01X15188Y4451D01*
1143 | G01X15060Y4403D02*
1144 | G01X15108Y4435D01*
1145 | G01X15044Y4356D02*
1146 | G01X15060Y4403D01*
1147 | G01X15044Y4324D02*
1148 | G01X15044Y4356D01*
1149 | G01X15044Y4674D02*
1150 | G01X15060Y4626D01*
1151 | G01X15060Y4626D02*
1152 | G01X15108Y4594D01*
1153 | G01X15108Y4594D02*
1154 | G01X15188Y4578D01*
1155 | G01X15188Y4578D02*
1156 | G01X15235Y4578D01*
1157 | G01X15235Y4578D02*
1158 | G01X15315Y4594D01*
1159 | G01X15315Y4594D02*
1160 | G01X15363Y4626D01*
1161 | G01X15363Y4626D02*
1162 | G01X15379Y4674D01*
1163 | G01X15379Y4706D02*
1164 | G01X15379Y4674D01*
1165 | G01X15363Y4753D02*
1166 | G01X15379Y4706D01*
1167 | G01X15315Y4785D02*
1168 | G01X15363Y4753D01*
1169 | G01X15235Y4801D02*
1170 | G01X15315Y4785D01*
1171 | G01X15188Y4801D02*
1172 | G01X15235Y4801D01*
1173 | G01X15108Y4785D02*
1174 | G01X15188Y4801D01*
1175 | G01X15060Y4753D02*
1176 | G01X15108Y4785D01*
1177 | G01X15044Y4706D02*
1178 | G01X15060Y4753D01*
1179 | G01X15044Y4674D02*
1180 | G01X15044Y4706D01*
1181 | G01X15156Y4928D02*
1182 | G01X15379Y4928D01*
1183 | G01X15172Y4976D02*
1184 | G01X15219Y4928D01*
1185 | G01X15156Y5008D02*
1186 | G01X15172Y4976D01*
1187 | G01X15156Y5056D02*
1188 | G01X15156Y5008D01*
1189 | G01X15156Y5056D02*
1190 | G01X15172Y5087D01*
1191 | G01X15172Y5087D02*
1192 | G01X15219Y5103D01*
1193 | G01X15219Y5103D02*
1194 | G01X15379Y5103D01*
1195 | G04 Draw part R1*
1196 | G04 draw part outline for part R1*
1197 | G01X5006Y5216D02*
1198 | G01X5006Y7342D01*
1199 | G01X5006Y7342D02*
1200 | G01X5873Y7342D01*
1201 | G01X5873Y7342D02*
1202 | G01X5873Y5216D01*
1203 | G01X5873Y5216D02*
1204 | G01X5006Y5216D01*
1205 | G04 draw reference designator for part R1*
1206 | G01X5065Y6000D02*
1207 | G01X5400Y6000D01*
1208 | G01X5065Y6143D02*
1209 | G01X5065Y6000D01*
1210 | G01X5065Y6143D02*
1211 | G01X5081Y6190D01*
1212 | G01X5081Y6190D02*
1213 | G01X5097Y6206D01*
1214 | G01X5097Y6206D02*
1215 | G01X5129Y6222D01*
1216 | G01X5129Y6222D02*
1217 | G01X5161Y6222D01*
1218 | G01X5161Y6222D02*
1219 | G01X5193Y6206D01*
1220 | G01X5193Y6206D02*
1221 | G01X5209Y6190D01*
1222 | G01X5209Y6190D02*
1223 | G01X5225Y6143D01*
1224 | G01X5225Y6000D02*
1225 | G01X5225Y6143D01*
1226 | G01X5225Y6111D02*
1227 | G01X5400Y6222D01*
1228 | G01X5113Y6381D02*
1229 | G01X5129Y6350D01*
1230 | G01X5065Y6429D02*
1231 | G01X5113Y6381D01*
1232 | G01X5065Y6429D02*
1233 | G01X5400Y6429D01*
1234 | G04 draw value for part R1*
1235 | G01X5626Y5757D02*
1236 | G01X5642Y5757D01*
1237 | G01X5594Y5773D02*
1238 | G01X5626Y5757D01*
1239 | G01X5578Y5789D02*
1240 | G01X5594Y5773D01*
1241 | G01X5562Y5821D02*
1242 | G01X5578Y5789D01*
1243 | G01X5562Y5885D02*
1244 | G01X5562Y5821D01*
1245 | G01X5562Y5885D02*
1246 | G01X5578Y5917D01*
1247 | G01X5578Y5917D02*
1248 | G01X5594Y5932D01*
1249 | G01X5594Y5932D02*
1250 | G01X5626Y5948D01*
1251 | G01X5626Y5948D02*
1252 | G01X5658Y5948D01*
1253 | G01X5658Y5948D02*
1254 | G01X5690Y5932D01*
1255 | G01X5690Y5932D02*
1256 | G01X5737Y5901D01*
1257 | G01X5737Y5901D02*
1258 | G01X5897Y5742D01*
1259 | G01X5897Y5964D02*
1260 | G01X5897Y5742D01*
1261 | G01X5562Y6251D02*
1262 | G01X5785Y6092D01*
1263 | G01X5785Y6330D02*
1264 | G01X5785Y6092D01*
1265 | G01X5562Y6251D02*
1266 | G01X5897Y6251D01*
1267 | G01X5562Y6457D02*
1268 | G01X5897Y6457D01*
1269 | G01X5562Y6601D02*
1270 | G01X5562Y6457D01*
1271 | G01X5562Y6601D02*
1272 | G01X5578Y6648D01*
1273 | G01X5578Y6648D02*
1274 | G01X5594Y6664D01*
1275 | G01X5594Y6664D02*
1276 | G01X5626Y6680D01*
1277 | G01X5626Y6680D02*
1278 | G01X5658Y6680D01*
1279 | G01X5658Y6680D02*
1280 | G01X5690Y6664D01*
1281 | G01X5690Y6664D02*
1282 | G01X5706Y6648D01*
1283 | G01X5706Y6648D02*
1284 | G01X5722Y6601D01*
1285 | G01X5722Y6457D02*
1286 | G01X5722Y6601D01*
1287 | G01X5722Y6569D02*
1288 | G01X5897Y6680D01*
1289 | G04 Draw part R2*
1290 | G04 draw part outline for part R2*
1291 | G01X7233Y1766D02*
1292 | G01X5107Y1766D01*
1293 | G01X5107Y1766D02*
1294 | G01X5107Y2633D01*
1295 | G01X5107Y2633D02*
1296 | G01X7233Y2633D01*
1297 | G01X7233Y2633D02*
1298 | G01X7233Y1766D01*
1299 | G04 draw reference designator for part R2*
1300 | G01X5850Y2584D02*
1301 | G01X5850Y2250D01*
1302 | G01X5993Y2584D02*
1303 | G01X5850Y2584D01*
1304 | G01X5993Y2584D02*
1305 | G01X6040Y2568D01*
1306 | G01X6040Y2568D02*
1307 | G01X6056Y2552D01*
1308 | G01X6056Y2552D02*
1309 | G01X6072Y2520D01*
1310 | G01X6072Y2520D02*
1311 | G01X6072Y2488D01*
1312 | G01X6072Y2488D02*
1313 | G01X6056Y2456D01*
1314 | G01X6056Y2456D02*
1315 | G01X6040Y2440D01*
1316 | G01X6040Y2440D02*
1317 | G01X5993Y2425D01*
1318 | G01X5850Y2425D02*
1319 | G01X5993Y2425D01*
1320 | G01X5961Y2425D02*
1321 | G01X6072Y2250D01*
1322 | G01X6215Y2520D02*
1323 | G01X6215Y2504D01*
1324 | G01X6231Y2552D02*
1325 | G01X6215Y2520D01*
1326 | G01X6247Y2568D02*
1327 | G01X6231Y2552D01*
1328 | G01X6279Y2584D02*
1329 | G01X6247Y2568D01*
1330 | G01X6343Y2584D02*
1331 | G01X6279Y2584D01*
1332 | G01X6343Y2584D02*
1333 | G01X6375Y2568D01*
1334 | G01X6375Y2568D02*
1335 | G01X6390Y2552D01*
1336 | G01X6390Y2552D02*
1337 | G01X6406Y2520D01*
1338 | G01X6406Y2520D02*
1339 | G01X6406Y2488D01*
1340 | G01X6406Y2488D02*
1341 | G01X6390Y2456D01*
1342 | G01X6390Y2456D02*
1343 | G01X6359Y2409D01*
1344 | G01X6359Y2409D02*
1345 | G01X6200Y2250D01*
1346 | G01X6422Y2250D02*
1347 | G01X6200Y2250D01*
1348 | G04 draw value for part R2*
1349 | G01X5702Y2000D02*
1350 | G01X5702Y1984D01*
1351 | G01X5718Y2032D02*
1352 | G01X5702Y2000D01*
1353 | G01X5734Y2048D02*
1354 | G01X5718Y2032D01*
1355 | G01X5766Y2064D02*
1356 | G01X5734Y2048D01*
1357 | G01X5830Y2064D02*
1358 | G01X5766Y2064D01*
1359 | G01X5830Y2064D02*
1360 | G01X5862Y2048D01*
1361 | G01X5862Y2048D02*
1362 | G01X5877Y2032D01*
1363 | G01X5877Y2032D02*
1364 | G01X5893Y2000D01*
1365 | G01X5893Y2000D02*
1366 | G01X5893Y1968D01*
1367 | G01X5893Y1968D02*
1368 | G01X5877Y1936D01*
1369 | G01X5877Y1936D02*
1370 | G01X5846Y1889D01*
1371 | G01X5846Y1889D02*
1372 | G01X5687Y1730D01*
1373 | G01X5909Y1730D02*
1374 | G01X5687Y1730D01*
1375 | G01X6196Y2064D02*
1376 | G01X6037Y1841D01*
1377 | G01X6275Y1841D02*
1378 | G01X6037Y1841D01*
1379 | G01X6196Y2064D02*
1380 | G01X6196Y1730D01*
1381 | G01X6402Y2064D02*
1382 | G01X6402Y1730D01*
1383 | G01X6546Y2064D02*
1384 | G01X6402Y2064D01*
1385 | G01X6546Y2064D02*
1386 | G01X6593Y2048D01*
1387 | G01X6593Y2048D02*
1388 | G01X6609Y2032D01*
1389 | G01X6609Y2032D02*
1390 | G01X6625Y2000D01*
1391 | G01X6625Y2000D02*
1392 | G01X6625Y1968D01*
1393 | G01X6625Y1968D02*
1394 | G01X6609Y1936D01*
1395 | G01X6609Y1936D02*
1396 | G01X6593Y1920D01*
1397 | G01X6593Y1920D02*
1398 | G01X6546Y1905D01*
1399 | G01X6402Y1905D02*
1400 | G01X6546Y1905D01*
1401 | G01X6514Y1905D02*
1402 | G01X6625Y1730D01*
1403 | G04 Draw part R3*
1404 | G04 draw part outline for part R3*
1405 | G01X18153Y7293D02*
1406 | G01X18153Y5167D01*
1407 | G01X18153Y5167D02*
1408 | G01X17286Y5167D01*
1409 | G01X17286Y5167D02*
1410 | G01X17286Y7293D01*
1411 | G01X17286Y7293D02*
1412 | G01X18153Y7293D01*
1413 | G04 draw reference designator for part R3*
1414 | G01X17385Y5910D02*
1415 | G01X17720Y5910D01*
1416 | G01X17385Y6053D02*
1417 | G01X17385Y5910D01*
1418 | G01X17385Y6053D02*
1419 | G01X17401Y6100D01*
1420 | G01X17401Y6100D02*
1421 | G01X17417Y6116D01*
1422 | G01X17417Y6116D02*
1423 | G01X17449Y6132D01*
1424 | G01X17449Y6132D02*
1425 | G01X17481Y6132D01*
1426 | G01X17481Y6132D02*
1427 | G01X17513Y6116D01*
1428 | G01X17513Y6116D02*
1429 | G01X17529Y6100D01*
1430 | G01X17529Y6100D02*
1431 | G01X17545Y6053D01*
1432 | G01X17545Y5910D02*
1433 | G01X17545Y6053D01*
1434 | G01X17545Y6021D02*
1435 | G01X17720Y6132D01*
1436 | G01X17385Y6466D02*
1437 | G01X17385Y6291D01*
1438 | G01X17385Y6466D02*
1439 | G01X17513Y6371D01*
1440 | G01X17513Y6419D02*
1441 | G01X17513Y6371D01*
1442 | G01X17513Y6419D02*
1443 | G01X17529Y6450D01*
1444 | G01X17529Y6450D02*
1445 | G01X17545Y6466D01*
1446 | G01X17545Y6466D02*
1447 | G01X17592Y6482D01*
1448 | G01X17592Y6482D02*
1449 | G01X17624Y6482D01*
1450 | G01X17624Y6482D02*
1451 | G01X17672Y6466D01*
1452 | G01X17672Y6466D02*
1453 | G01X17704Y6435D01*
1454 | G01X17704Y6435D02*
1455 | G01X17720Y6387D01*
1456 | G01X17720Y6339D02*
1457 | G01X17720Y6387D01*
1458 | G01X17704Y6291D02*
1459 | G01X17720Y6339D01*
1460 | G01X17688Y6275D02*
1461 | G01X17704Y6291D01*
1462 | G01X17656Y6260D02*
1463 | G01X17688Y6275D01*
1464 | G04 draw value for part R3*
1465 | G01X17864Y5745D02*
1466 | G01X17880Y5745D01*
1467 | G01X17832Y5761D02*
1468 | G01X17864Y5745D01*
1469 | G01X17816Y5777D02*
1470 | G01X17832Y5761D01*
1471 | G01X17800Y5809D02*
1472 | G01X17816Y5777D01*
1473 | G01X17800Y5873D02*
1474 | G01X17800Y5809D01*
1475 | G01X17800Y5873D02*
1476 | G01X17816Y5905D01*
1477 | G01X17816Y5905D02*
1478 | G01X17832Y5920D01*
1479 | G01X17832Y5920D02*
1480 | G01X17864Y5936D01*
1481 | G01X17864Y5936D02*
1482 | G01X17896Y5936D01*
1483 | G01X17896Y5936D02*
1484 | G01X17928Y5920D01*
1485 | G01X17928Y5920D02*
1486 | G01X17975Y5889D01*
1487 | G01X17975Y5889D02*
1488 | G01X18135Y5730D01*
1489 | G01X18135Y5952D02*
1490 | G01X18135Y5730D01*
1491 | G01X17800Y6239D02*
1492 | G01X18023Y6080D01*
1493 | G01X18023Y6318D02*
1494 | G01X18023Y6080D01*
1495 | G01X17800Y6239D02*
1496 | G01X18135Y6239D01*
1497 | G01X17800Y6445D02*
1498 | G01X18135Y6445D01*
1499 | G01X17800Y6589D02*
1500 | G01X17800Y6445D01*
1501 | G01X17800Y6589D02*
1502 | G01X17816Y6636D01*
1503 | G01X17816Y6636D02*
1504 | G01X17832Y6652D01*
1505 | G01X17832Y6652D02*
1506 | G01X17864Y6668D01*
1507 | G01X17864Y6668D02*
1508 | G01X17896Y6668D01*
1509 | G01X17896Y6668D02*
1510 | G01X17928Y6652D01*
1511 | G01X17928Y6652D02*
1512 | G01X17944Y6636D01*
1513 | G01X17944Y6636D02*
1514 | G01X17960Y6589D01*
1515 | G01X17960Y6445D02*
1516 | G01X17960Y6589D01*
1517 | G01X17960Y6557D02*
1518 | G01X18135Y6668D01*
1519 | G04 Draw part R4*
1520 | G04 draw part outline for part R4*
1521 | G01X18173Y1766D02*
1522 | G01X16047Y1766D01*
1523 | G01X16047Y1766D02*
1524 | G01X16047Y2633D01*
1525 | G01X16047Y2633D02*
1526 | G01X18173Y2633D01*
1527 | G01X18173Y2633D02*
1528 | G01X18173Y1766D01*
1529 | G04 draw reference designator for part R4*
1530 | G01X16790Y2534D02*
1531 | G01X16790Y2200D01*
1532 | G01X16933Y2534D02*
1533 | G01X16790Y2534D01*
1534 | G01X16933Y2534D02*
1535 | G01X16980Y2518D01*
1536 | G01X16980Y2518D02*
1537 | G01X16996Y2502D01*
1538 | G01X16996Y2502D02*
1539 | G01X17012Y2470D01*
1540 | G01X17012Y2470D02*
1541 | G01X17012Y2438D01*
1542 | G01X17012Y2438D02*
1543 | G01X16996Y2406D01*
1544 | G01X16996Y2406D02*
1545 | G01X16980Y2390D01*
1546 | G01X16980Y2390D02*
1547 | G01X16933Y2375D01*
1548 | G01X16790Y2375D02*
1549 | G01X16933Y2375D01*
1550 | G01X16901Y2375D02*
1551 | G01X17012Y2200D01*
1552 | G01X17299Y2534D02*
1553 | G01X17140Y2311D01*
1554 | G01X17378Y2311D02*
1555 | G01X17140Y2311D01*
1556 | G01X17299Y2534D02*
1557 | G01X17299Y2200D01*
1558 | G04 draw value for part R4*
1559 | G01X16675Y1999D02*
1560 | G01X16675Y1983D01*
1561 | G01X16691Y2031D02*
1562 | G01X16675Y1999D01*
1563 | G01X16707Y2047D02*
1564 | G01X16691Y2031D01*
1565 | G01X16739Y2063D02*
1566 | G01X16707Y2047D01*
1567 | G01X16803Y2063D02*
1568 | G01X16739Y2063D01*
1569 | G01X16803Y2063D02*
1570 | G01X16835Y2047D01*
1571 | G01X16835Y2047D02*
1572 | G01X16850Y2031D01*
1573 | G01X16850Y2031D02*
1574 | G01X16866Y1999D01*
1575 | G01X16866Y1999D02*
1576 | G01X16866Y1967D01*
1577 | G01X16866Y1967D02*
1578 | G01X16850Y1935D01*
1579 | G01X16850Y1935D02*
1580 | G01X16819Y1888D01*
1581 | G01X16819Y1888D02*
1582 | G01X16660Y1729D01*
1583 | G01X16882Y1729D02*
1584 | G01X16660Y1729D01*
1585 | G01X17169Y2063D02*
1586 | G01X17010Y1840D01*
1587 | G01X17248Y1840D02*
1588 | G01X17010Y1840D01*
1589 | G01X17169Y2063D02*
1590 | G01X17169Y1729D01*
1591 | G01X17375Y2063D02*
1592 | G01X17375Y1729D01*
1593 | G01X17519Y2063D02*
1594 | G01X17375Y2063D01*
1595 | G01X17519Y2063D02*
1596 | G01X17566Y2047D01*
1597 | G01X17566Y2047D02*
1598 | G01X17582Y2031D01*
1599 | G01X17582Y2031D02*
1600 | G01X17598Y1999D01*
1601 | G01X17598Y1999D02*
1602 | G01X17598Y1967D01*
1603 | G01X17598Y1967D02*
1604 | G01X17582Y1935D01*
1605 | G01X17582Y1935D02*
1606 | G01X17566Y1919D01*
1607 | G01X17566Y1919D02*
1608 | G01X17519Y1904D01*
1609 | G01X17375Y1904D02*
1610 | G01X17519Y1904D01*
1611 | G01X17487Y1904D02*
1612 | G01X17598Y1729D01*
1613 | G04 Draw part J2*
1614 | G04 draw part outline for part J2*
1615 | G01X19780Y8360D02*
1616 | G01X19780Y3360D01*
1617 | G01X19780Y3360D02*
1618 | G01X18780Y3360D01*
1619 | G01X18780Y3360D02*
1620 | G01X18780Y8360D01*
1621 | G01X18780Y8360D02*
1622 | G01X19780Y8360D01*
1623 | G04 draw reference designator for part J2*
1624 | G01X19089Y8794D02*
1625 | G01X19089Y8539D01*
1626 | G01X19089Y8539D02*
1627 | G01X19073Y8491D01*
1628 | G01X19073Y8491D02*
1629 | G01X19057Y8475D01*
1630 | G01X19057Y8475D02*
1631 | G01X19025Y8460D01*
1632 | G01X18993Y8460D02*
1633 | G01X19025Y8460D01*
1634 | G01X18961Y8475D02*
1635 | G01X18993Y8460D01*
1636 | G01X18945Y8491D02*
1637 | G01X18961Y8475D01*
1638 | G01X18930Y8539D02*
1639 | G01X18945Y8491D01*
1640 | G01X18930Y8571D02*
1641 | G01X18930Y8539D01*
1642 | G01X19232Y8730D02*
1643 | G01X19232Y8714D01*
1644 | G01X19248Y8762D02*
1645 | G01X19232Y8730D01*
1646 | G01X19264Y8778D02*
1647 | G01X19248Y8762D01*
1648 | G01X19295Y8794D02*
1649 | G01X19264Y8778D01*
1650 | G01X19359Y8794D02*
1651 | G01X19295Y8794D01*
1652 | G01X19359Y8794D02*
1653 | G01X19391Y8778D01*
1654 | G01X19391Y8778D02*
1655 | G01X19407Y8762D01*
1656 | G01X19407Y8762D02*
1657 | G01X19423Y8730D01*
1658 | G01X19423Y8730D02*
1659 | G01X19423Y8698D01*
1660 | G01X19423Y8698D02*
1661 | G01X19407Y8666D01*
1662 | G01X19407Y8666D02*
1663 | G01X19375Y8619D01*
1664 | G01X19375Y8619D02*
1665 | G01X19216Y8460D01*
1666 | G01X19439Y8460D02*
1667 | G01X19216Y8460D01*
1668 | G04 Draw part C7*
1669 | G04 draw part outline for part C7*
1670 | G01X16566Y8605D02*
1671 | G01X16566Y10102D01*
1672 | G01X16566Y10102D02*
1673 | G01X17353Y10102D01*
1674 | G01X17353Y10102D02*
1675 | G01X17353Y8605D01*
1676 | G01X17353Y8605D02*
1677 | G01X16566Y8605D01*
1678 | G04 draw reference designator for part C7*
1679 | G01X16623Y9252D02*
1680 | G01X16655Y9268D01*
1681 | G01X16591Y9220D02*
1682 | G01X16623Y9252D01*
1683 | G01X16575Y9189D02*
1684 | G01X16591Y9220D01*
1685 | G01X16575Y9125D02*
1686 | G01X16575Y9189D01*
1687 | G01X16575Y9125D02*
1688 | G01X16591Y9093D01*
1689 | G01X16591Y9093D02*
1690 | G01X16623Y9061D01*
1691 | G01X16623Y9061D02*
1692 | G01X16655Y9045D01*
1693 | G01X16655Y9045D02*
1694 | G01X16703Y9030D01*
1695 | G01X16703Y9030D02*
1696 | G01X16782Y9030D01*
1697 | G01X16782Y9030D02*
1698 | G01X16830Y9045D01*
1699 | G01X16830Y9045D02*
1700 | G01X16862Y9061D01*
1701 | G01X16862Y9061D02*
1702 | G01X16894Y9093D01*
1703 | G01X16894Y9093D02*
1704 | G01X16910Y9125D01*
1705 | G01X16910Y9189D02*
1706 | G01X16910Y9125D01*
1707 | G01X16894Y9220D02*
1708 | G01X16910Y9189D01*
1709 | G01X16862Y9252D02*
1710 | G01X16894Y9220D01*
1711 | G01X16830Y9268D02*
1712 | G01X16862Y9252D01*
1713 | G01X16575Y9618D02*
1714 | G01X16910Y9459D01*
1715 | G01X16575Y9618D02*
1716 | G01X16575Y9395D01*
1717 | G04 draw value for part C7*
1718 | G01X17073Y8611D02*
1719 | G01X17089Y8580D01*
1720 | G01X17025Y8659D02*
1721 | G01X17073Y8611D01*
1722 | G01X17025Y8659D02*
1723 | G01X17360Y8659D01*
1724 | G01X17025Y8882D02*
1725 | G01X17041Y8834D01*
1726 | G01X17041Y8834D02*
1727 | G01X17089Y8802D01*
1728 | G01X17089Y8802D02*
1729 | G01X17169Y8786D01*
1730 | G01X17169Y8786D02*
1731 | G01X17216Y8786D01*
1732 | G01X17216Y8786D02*
1733 | G01X17296Y8802D01*
1734 | G01X17296Y8802D02*
1735 | G01X17344Y8834D01*
1736 | G01X17344Y8834D02*
1737 | G01X17360Y8882D01*
1738 | G01X17360Y8914D02*
1739 | G01X17360Y8882D01*
1740 | G01X17344Y8961D02*
1741 | G01X17360Y8914D01*
1742 | G01X17296Y8993D02*
1743 | G01X17344Y8961D01*
1744 | G01X17216Y9009D02*
1745 | G01X17296Y8993D01*
1746 | G01X17169Y9009D02*
1747 | G01X17216Y9009D01*
1748 | G01X17089Y8993D02*
1749 | G01X17169Y9009D01*
1750 | G01X17041Y8961D02*
1751 | G01X17089Y8993D01*
1752 | G01X17025Y8914D02*
1753 | G01X17041Y8961D01*
1754 | G01X17025Y8882D02*
1755 | G01X17025Y8914D01*
1756 | G01X17025Y9232D02*
1757 | G01X17041Y9184D01*
1758 | G01X17041Y9184D02*
1759 | G01X17089Y9152D01*
1760 | G01X17089Y9152D02*
1761 | G01X17169Y9136D01*
1762 | G01X17169Y9136D02*
1763 | G01X17216Y9136D01*
1764 | G01X17216Y9136D02*
1765 | G01X17296Y9152D01*
1766 | G01X17296Y9152D02*
1767 | G01X17344Y9184D01*
1768 | G01X17344Y9184D02*
1769 | G01X17360Y9232D01*
1770 | G01X17360Y9264D02*
1771 | G01X17360Y9232D01*
1772 | G01X17344Y9311D02*
1773 | G01X17360Y9264D01*
1774 | G01X17296Y9343D02*
1775 | G01X17344Y9311D01*
1776 | G01X17216Y9359D02*
1777 | G01X17296Y9343D01*
1778 | G01X17169Y9359D02*
1779 | G01X17216Y9359D01*
1780 | G01X17089Y9343D02*
1781 | G01X17169Y9359D01*
1782 | G01X17041Y9311D02*
1783 | G01X17089Y9343D01*
1784 | G01X17025Y9264D02*
1785 | G01X17041Y9311D01*
1786 | G01X17025Y9232D02*
1787 | G01X17025Y9264D01*
1788 | G01X17137Y9486D02*
1789 | G01X17360Y9486D01*
1790 | G01X17153Y9534D02*
1791 | G01X17200Y9486D01*
1792 | G01X17137Y9566D02*
1793 | G01X17153Y9534D01*
1794 | G01X17137Y9614D02*
1795 | G01X17137Y9566D01*
1796 | G01X17137Y9614D02*
1797 | G01X17153Y9645D01*
1798 | G01X17153Y9645D02*
1799 | G01X17200Y9661D01*
1800 | G01X17200Y9661D02*
1801 | G01X17360Y9661D01*
1802 | G04 Draw part C8*
1803 | G04 draw part outline for part C8*
1804 | G01X14200Y8240D02*
1805 | G01X14200Y9990D01*
1806 | G01X14200Y9990D02*
1807 | G01X16000Y9990D01*
1808 | G01X16000Y9990D02*
1809 | G01X16000Y8240D01*
1810 | G01X16000Y8240D02*
1811 | G01X15650Y7990D01*
1812 | G01X15650Y7990D02*
1813 | G01X14550Y7990D01*
1814 | G01X14550Y7990D02*
1815 | G01X14200Y8240D01*
1816 | G04 draw reference designator for part C8*
1817 | G01X14972Y9276D02*
1818 | G01X14988Y9244D01*
1819 | G01X14940Y9308D02*
1820 | G01X14972Y9276D01*
1821 | G01X14909Y9324D02*
1822 | G01X14940Y9308D01*
1823 | G01X14845Y9324D02*
1824 | G01X14909Y9324D01*
1825 | G01X14845Y9324D02*
1826 | G01X14813Y9308D01*
1827 | G01X14813Y9308D02*
1828 | G01X14781Y9276D01*
1829 | G01X14781Y9276D02*
1830 | G01X14765Y9244D01*
1831 | G01X14765Y9244D02*
1832 | G01X14750Y9196D01*
1833 | G01X14750Y9196D02*
1834 | G01X14750Y9117D01*
1835 | G01X14750Y9117D02*
1836 | G01X14765Y9069D01*
1837 | G01X14765Y9069D02*
1838 | G01X14781Y9037D01*
1839 | G01X14781Y9037D02*
1840 | G01X14813Y9005D01*
1841 | G01X14813Y9005D02*
1842 | G01X14845Y8990D01*
1843 | G01X14909Y8990D02*
1844 | G01X14845Y8990D01*
1845 | G01X14940Y9005D02*
1846 | G01X14909Y8990D01*
1847 | G01X14972Y9037D02*
1848 | G01X14940Y9005D01*
1849 | G01X14988Y9069D02*
1850 | G01X14972Y9037D01*
1851 | G01X15195Y9324D02*
1852 | G01X15147Y9308D01*
1853 | G01X15147Y9308D02*
1854 | G01X15131Y9276D01*
1855 | G01X15131Y9276D02*
1856 | G01X15131Y9244D01*
1857 | G01X15131Y9244D02*
1858 | G01X15147Y9212D01*
1859 | G01X15147Y9212D02*
1860 | G01X15179Y9196D01*
1861 | G01X15179Y9196D02*
1862 | G01X15243Y9180D01*
1863 | G01X15243Y9180D02*
1864 | G01X15290Y9165D01*
1865 | G01X15290Y9165D02*
1866 | G01X15322Y9133D01*
1867 | G01X15322Y9133D02*
1868 | G01X15338Y9101D01*
1869 | G01X15338Y9101D02*
1870 | G01X15338Y9053D01*
1871 | G01X15338Y9053D02*
1872 | G01X15322Y9021D01*
1873 | G01X15322Y9021D02*
1874 | G01X15306Y9005D01*
1875 | G01X15306Y9005D02*
1876 | G01X15259Y8990D01*
1877 | G01X15195Y8990D02*
1878 | G01X15259Y8990D01*
1879 | G01X15147Y9005D02*
1880 | G01X15195Y8990D01*
1881 | G01X15131Y9021D02*
1882 | G01X15147Y9005D01*
1883 | G01X15115Y9053D02*
1884 | G01X15131Y9021D01*
1885 | G01X15115Y9101D02*
1886 | G01X15115Y9053D01*
1887 | G01X15131Y9133D02*
1888 | G01X15115Y9101D01*
1889 | G01X15163Y9165D02*
1890 | G01X15131Y9133D01*
1891 | G01X15211Y9180D02*
1892 | G01X15163Y9165D01*
1893 | G01X15275Y9196D02*
1894 | G01X15211Y9180D01*
1895 | G01X15306Y9212D02*
1896 | G01X15275Y9196D01*
1897 | G01X15322Y9244D02*
1898 | G01X15306Y9212D01*
1899 | G01X15322Y9276D02*
1900 | G01X15322Y9244D01*
1901 | G01X15306Y9308D02*
1902 | G01X15322Y9276D01*
1903 | G01X15259Y9324D02*
1904 | G01X15306Y9308D01*
1905 | G01X15195Y9324D02*
1906 | G01X15259Y9324D01*
1907 | G04 draw value for part C8*
1908 | G01X14568Y8775D02*
1909 | G01X14537Y8759D01*
1910 | G01X14616Y8823D02*
1911 | G01X14568Y8775D01*
1912 | G01X14616Y8823D02*
1913 | G01X14616Y8489D01*
1914 | G01X14839Y8823D02*
1915 | G01X14791Y8807D01*
1916 | G01X14791Y8807D02*
1917 | G01X14759Y8759D01*
1918 | G01X14759Y8759D02*
1919 | G01X14743Y8679D01*
1920 | G01X14743Y8679D02*
1921 | G01X14743Y8632D01*
1922 | G01X14743Y8632D02*
1923 | G01X14759Y8552D01*
1924 | G01X14759Y8552D02*
1925 | G01X14791Y8504D01*
1926 | G01X14791Y8504D02*
1927 | G01X14839Y8489D01*
1928 | G01X14871Y8489D02*
1929 | G01X14839Y8489D01*
1930 | G01X14918Y8504D02*
1931 | G01X14871Y8489D01*
1932 | G01X14950Y8552D02*
1933 | G01X14918Y8504D01*
1934 | G01X14966Y8632D02*
1935 | G01X14950Y8552D01*
1936 | G01X14966Y8679D02*
1937 | G01X14966Y8632D01*
1938 | G01X14950Y8759D02*
1939 | G01X14966Y8679D01*
1940 | G01X14918Y8807D02*
1941 | G01X14950Y8759D01*
1942 | G01X14871Y8823D02*
1943 | G01X14918Y8807D01*
1944 | G01X14839Y8823D02*
1945 | G01X14871Y8823D01*
1946 | G01X15189Y8823D02*
1947 | G01X15141Y8807D01*
1948 | G01X15141Y8807D02*
1949 | G01X15109Y8759D01*
1950 | G01X15109Y8759D02*
1951 | G01X15093Y8679D01*
1952 | G01X15093Y8679D02*
1953 | G01X15093Y8632D01*
1954 | G01X15093Y8632D02*
1955 | G01X15109Y8552D01*
1956 | G01X15109Y8552D02*
1957 | G01X15141Y8504D01*
1958 | G01X15141Y8504D02*
1959 | G01X15189Y8489D01*
1960 | G01X15221Y8489D02*
1961 | G01X15189Y8489D01*
1962 | G01X15268Y8504D02*
1963 | G01X15221Y8489D01*
1964 | G01X15300Y8552D02*
1965 | G01X15268Y8504D01*
1966 | G01X15316Y8632D02*
1967 | G01X15300Y8552D01*
1968 | G01X15316Y8679D02*
1969 | G01X15316Y8632D01*
1970 | G01X15300Y8759D02*
1971 | G01X15316Y8679D01*
1972 | G01X15268Y8807D02*
1973 | G01X15300Y8759D01*
1974 | G01X15221Y8823D02*
1975 | G01X15268Y8807D01*
1976 | G01X15189Y8823D02*
1977 | G01X15221Y8823D01*
1978 | G01X15443Y8711D02*
1979 | G01X15443Y8552D01*
1980 | G01X15443Y8552D02*
1981 | G01X15459Y8504D01*
1982 | G01X15459Y8504D02*
1983 | G01X15491Y8489D01*
1984 | G01X15539Y8489D02*
1985 | G01X15491Y8489D01*
1986 | G01X15571Y8504D02*
1987 | G01X15539Y8489D01*
1988 | G01X15618Y8552D02*
1989 | G01X15571Y8504D01*
1990 | G01X15618Y8711D02*
1991 | G01X15618Y8489D01*
1992 | G04 Draw part J3*
1993 | G04 draw part outline for part J3*
1994 | G01X16840Y7200D02*
1995 | G01X16840Y4200D01*
1996 | G01X16840Y4200D02*
1997 | G01X15840Y4200D01*
1998 | G01X15840Y4200D02*
1999 | G01X15840Y7200D01*
2000 | G01X15840Y7200D02*
2001 | G01X16840Y7200D01*
2002 | G04 draw reference designator for part J3*
2003 | G01X16239Y6354D02*
2004 | G01X16239Y6099D01*
2005 | G01X16239Y6099D02*
2006 | G01X16223Y6051D01*
2007 | G01X16223Y6051D02*
2008 | G01X16207Y6035D01*
2009 | G01X16207Y6035D02*
2010 | G01X16175Y6020D01*
2011 | G01X16143Y6020D02*
2012 | G01X16175Y6020D01*
2013 | G01X16111Y6035D02*
2014 | G01X16143Y6020D01*
2015 | G01X16095Y6051D02*
2016 | G01X16111Y6035D01*
2017 | G01X16080Y6099D02*
2018 | G01X16095Y6051D01*
2019 | G01X16080Y6131D02*
2020 | G01X16080Y6099D01*
2021 | G01X16573Y6354D02*
2022 | G01X16398Y6354D01*
2023 | G01X16573Y6354D02*
2024 | G01X16477Y6226D01*
2025 | G01X16525Y6226D02*
2026 | G01X16477Y6226D01*
2027 | G01X16525Y6226D02*
2028 | G01X16557Y6210D01*
2029 | G01X16557Y6210D02*
2030 | G01X16573Y6195D01*
2031 | G01X16573Y6195D02*
2032 | G01X16589Y6147D01*
2033 | G01X16589Y6147D02*
2034 | G01X16589Y6115D01*
2035 | G01X16589Y6115D02*
2036 | G01X16573Y6067D01*
2037 | G01X16573Y6067D02*
2038 | G01X16541Y6035D01*
2039 | G01X16541Y6035D02*
2040 | G01X16493Y6020D01*
2041 | G01X16445Y6020D02*
2042 | G01X16493Y6020D01*
2043 | G01X16398Y6035D02*
2044 | G01X16445Y6020D01*
2045 | G01X16382Y6051D02*
2046 | G01X16398Y6035D01*
2047 | G01X16366Y6083D02*
2048 | G01X16382Y6051D01*
2049 | G04 Draw part J4*
2050 | G04 draw part outline for part J4*
2051 | G01X7420Y7200D02*
2052 | G01X7420Y4200D01*
2053 | G01X7420Y4200D02*
2054 | G01X6420Y4200D01*
2055 | G01X6420Y4200D02*
2056 | G01X6420Y7200D01*
2057 | G01X6420Y7200D02*
2058 | G01X7420Y7200D01*
2059 | G04 draw reference designator for part J4*
2060 | G01X6779Y6334D02*
2061 | G01X6779Y6079D01*
2062 | G01X6779Y6079D02*
2063 | G01X6763Y6031D01*
2064 | G01X6763Y6031D02*
2065 | G01X6747Y6015D01*
2066 | G01X6747Y6015D02*
2067 | G01X6715Y6000D01*
2068 | G01X6683Y6000D02*
2069 | G01X6715Y6000D01*
2070 | G01X6651Y6015D02*
2071 | G01X6683Y6000D01*
2072 | G01X6635Y6031D02*
2073 | G01X6651Y6015D01*
2074 | G01X6620Y6079D02*
2075 | G01X6635Y6031D01*
2076 | G01X6620Y6111D02*
2077 | G01X6620Y6079D01*
2078 | G01X7065Y6334D02*
2079 | G01X6906Y6111D01*
2080 | G01X7145Y6111D02*
2081 | G01X6906Y6111D01*
2082 | G01X7065Y6334D02*
2083 | G01X7065Y6000D01*
2084 | G04 Draw part U2*
2085 | G04 draw part outline for part U2*
2086 | G54D12*
2087 | G01X9330Y6500D02*
2088 | G01X13930Y6500D01*
2089 | G01X13930Y6500D02*
2090 | G01X13930Y8900D01*
2091 | G01X13930Y8900D02*
2092 | G01X9330Y8900D01*
2093 | G01X9330Y8900D02*
2094 | G01X9330Y6500D01*
2095 | G01X9630Y6500D02*
2096 | G01X9630Y8900D01*
2097 | G04 draw reference designator for part U2*
2098 | G54D11*
2099 | G01X11130Y8679D02*
2100 | G01X11130Y8372D01*
2101 | G01X11130Y8372D02*
2102 | G01X11150Y8311D01*
2103 | G01X11150Y8311D02*
2104 | G01X11191Y8270D01*
2105 | G01X11191Y8270D02*
2106 | G01X11252Y8250D01*
2107 | G01X11293Y8250D02*
2108 | G01X11252Y8250D01*
2109 | G01X11355Y8270D02*
2110 | G01X11293Y8250D01*
2111 | G01X11395Y8311D02*
2112 | G01X11355Y8270D01*
2113 | G01X11416Y8372D02*
2114 | G01X11395Y8311D01*
2115 | G01X11416Y8679D02*
2116 | G01X11416Y8372D01*
2117 | G01X11600Y8597D02*
2118 | G01X11600Y8577D01*
2119 | G01X11620Y8638D02*
2120 | G01X11600Y8597D01*
2121 | G01X11641Y8659D02*
2122 | G01X11620Y8638D01*
2123 | G01X11682Y8679D02*
2124 | G01X11641Y8659D01*
2125 | G01X11764Y8679D02*
2126 | G01X11682Y8679D01*
2127 | G01X11764Y8679D02*
2128 | G01X11805Y8659D01*
2129 | G01X11805Y8659D02*
2130 | G01X11825Y8638D01*
2131 | G01X11825Y8638D02*
2132 | G01X11845Y8597D01*
2133 | G01X11845Y8597D02*
2134 | G01X11845Y8556D01*
2135 | G01X11845Y8556D02*
2136 | G01X11825Y8515D01*
2137 | G01X11825Y8515D02*
2138 | G01X11784Y8454D01*
2139 | G01X11784Y8454D02*
2140 | G01X11580Y8250D01*
2141 | G01X11866Y8250D02*
2142 | G01X11580Y8250D01*
2143 | G04 draw value for part U2*
2144 | G01X9976Y7862D02*
2145 | G01X9813Y7433D01*
2146 | G01X9976Y7862D02*
2147 | G01X10140Y7433D01*
2148 | G01X10078Y7576D02*
2149 | G01X9874Y7576D01*
2150 | G01X10303Y7862D02*
2151 | G01X10303Y7433D01*
2152 | G01X10303Y7862D02*
2153 | G01X10467Y7433D01*
2154 | G01X10631Y7862D02*
2155 | G01X10467Y7433D01*
2156 | G01X10631Y7862D02*
2157 | G01X10631Y7433D01*
2158 | G01X10835Y7801D02*
2159 | G01X10794Y7780D01*
2160 | G01X10897Y7862D02*
2161 | G01X10835Y7801D01*
2162 | G01X10897Y7862D02*
2163 | G01X10897Y7433D01*
2164 | G01X11306Y7842D02*
2165 | G01X11347Y7801D01*
2166 | G01X11244Y7862D02*
2167 | G01X11306Y7842D01*
2168 | G01X11163Y7862D02*
2169 | G01X11244Y7862D01*
2170 | G01X11163Y7862D02*
2171 | G01X11101Y7842D01*
2172 | G01X11101Y7842D02*
2173 | G01X11060Y7801D01*
2174 | G01X11060Y7801D02*
2175 | G01X11060Y7760D01*
2176 | G01X11060Y7760D02*
2177 | G01X11081Y7719D01*
2178 | G01X11081Y7719D02*
2179 | G01X11101Y7698D01*
2180 | G01X11101Y7698D02*
2181 | G01X11142Y7678D01*
2182 | G01X11142Y7678D02*
2183 | G01X11265Y7637D01*
2184 | G01X11265Y7637D02*
2185 | G01X11306Y7617D01*
2186 | G01X11306Y7617D02*
2187 | G01X11326Y7596D01*
2188 | G01X11326Y7596D02*
2189 | G01X11347Y7555D01*
2190 | G01X11347Y7555D02*
2191 | G01X11347Y7494D01*
2192 | G01X11347Y7494D02*
2193 | G01X11306Y7453D01*
2194 | G01X11306Y7453D02*
2195 | G01X11244Y7433D01*
2196 | G01X11163Y7433D02*
2197 | G01X11244Y7433D01*
2198 | G01X11101Y7453D02*
2199 | G01X11163Y7433D01*
2200 | G01X11060Y7494D02*
2201 | G01X11101Y7453D01*
2202 | G01X11878Y7617D02*
2203 | G01X11510Y7617D01*
2204 | G01X12165Y7862D02*
2205 | G01X12103Y7842D01*
2206 | G01X12103Y7842D02*
2207 | G01X12063Y7780D01*
2208 | G01X12063Y7780D02*
2209 | G01X12042Y7678D01*
2210 | G01X12042Y7678D02*
2211 | G01X12042Y7617D01*
2212 | G01X12042Y7617D02*
2213 | G01X12063Y7514D01*
2214 | G01X12063Y7514D02*
2215 | G01X12103Y7453D01*
2216 | G01X12103Y7453D02*
2217 | G01X12165Y7433D01*
2218 | G01X12206Y7433D02*
2219 | G01X12165Y7433D01*
2220 | G01X12267Y7453D02*
2221 | G01X12206Y7433D01*
2222 | G01X12308Y7514D02*
2223 | G01X12267Y7453D01*
2224 | G01X12328Y7617D02*
2225 | G01X12308Y7514D01*
2226 | G01X12328Y7678D02*
2227 | G01X12328Y7617D01*
2228 | G01X12308Y7780D02*
2229 | G01X12328Y7678D01*
2230 | G01X12267Y7842D02*
2231 | G01X12308Y7780D01*
2232 | G01X12206Y7862D02*
2233 | G01X12267Y7842D01*
2234 | G01X12165Y7862D02*
2235 | G01X12206Y7862D01*
2236 | G01X12533Y7862D02*
2237 | G01X12738Y7862D01*
2238 | G01X12533Y7862D02*
2239 | G01X12513Y7678D01*
2240 | G01X12533Y7698D02*
2241 | G01X12513Y7678D01*
2242 | G01X12594Y7719D02*
2243 | G01X12533Y7698D01*
2244 | G01X12656Y7719D02*
2245 | G01X12594Y7719D01*
2246 | G01X12656Y7719D02*
2247 | G01X12717Y7698D01*
2248 | G01X12717Y7698D02*
2249 | G01X12758Y7658D01*
2250 | G01X12758Y7658D02*
2251 | G01X12778Y7596D01*
2252 | G01X12778Y7596D02*
2253 | G01X12778Y7555D01*
2254 | G01X12778Y7555D02*
2255 | G01X12758Y7494D01*
2256 | G01X12758Y7494D02*
2257 | G01X12717Y7453D01*
2258 | G01X12717Y7453D02*
2259 | G01X12656Y7433D01*
2260 | G01X12594Y7433D02*
2261 | G01X12656Y7433D01*
2262 | G01X12533Y7453D02*
2263 | G01X12594Y7433D01*
2264 | G01X12513Y7473D02*
2265 | G01X12533Y7453D01*
2266 | G01X12492Y7514D02*
2267 | G01X12513Y7473D01*
2268 | G01X13065Y7862D02*
2269 | G01X13003Y7842D01*
2270 | G01X13003Y7842D02*
2271 | G01X12963Y7780D01*
2272 | G01X12963Y7780D02*
2273 | G01X12942Y7678D01*
2274 | G01X12942Y7678D02*
2275 | G01X12942Y7617D01*
2276 | G01X12942Y7617D02*
2277 | G01X12963Y7514D01*
2278 | G01X12963Y7514D02*
2279 | G01X13003Y7453D01*
2280 | G01X13003Y7453D02*
2281 | G01X13065Y7433D01*
2282 | G01X13106Y7433D02*
2283 | G01X13065Y7433D01*
2284 | G01X13167Y7453D02*
2285 | G01X13106Y7433D01*
2286 | G01X13208Y7514D02*
2287 | G01X13167Y7453D01*
2288 | G01X13228Y7617D02*
2289 | G01X13208Y7514D01*
2290 | G01X13228Y7678D02*
2291 | G01X13228Y7617D01*
2292 | G01X13208Y7780D02*
2293 | G01X13228Y7678D01*
2294 | G01X13167Y7842D02*
2295 | G01X13208Y7780D01*
2296 | G01X13106Y7862D02*
2297 | G01X13167Y7842D01*
2298 | G01X13065Y7862D02*
2299 | G01X13106Y7862D01*
2300 | G01X13433Y7862D02*
2301 | G01X13637Y7862D01*
2302 | G01X13433Y7862D02*
2303 | G01X13412Y7678D01*
2304 | G01X13433Y7698D02*
2305 | G01X13412Y7678D01*
2306 | G01X13494Y7719D02*
2307 | G01X13433Y7698D01*
2308 | G01X13556Y7719D02*
2309 | G01X13494Y7719D01*
2310 | G01X13556Y7719D02*
2311 | G01X13617Y7698D01*
2312 | G01X13617Y7698D02*
2313 | G01X13658Y7658D01*
2314 | G01X13658Y7658D02*
2315 | G01X13678Y7596D01*
2316 | G01X13678Y7596D02*
2317 | G01X13678Y7555D01*
2318 | G01X13678Y7555D02*
2319 | G01X13658Y7494D01*
2320 | G01X13658Y7494D02*
2321 | G01X13617Y7453D01*
2322 | G01X13617Y7453D02*
2323 | G01X13556Y7433D01*
2324 | G01X13494Y7433D02*
2325 | G01X13556Y7433D01*
2326 | G01X13433Y7453D02*
2327 | G01X13494Y7433D01*
2328 | G01X13412Y7473D02*
2329 | G01X13433Y7453D01*
2330 | G01X13392Y7514D02*
2331 | G01X13412Y7473D01*
2332 |
2333 | G04 Draw traces*
2334 |
2335 | G04 Draw Text*
2336 | M00*
2337 | M02*
2338 |
--------------------------------------------------------------------------------
/examples/pcb-1-b/bottom.grb:
--------------------------------------------------------------------------------
1 | G04 FreePCB version 1.355*
2 | G04 C:\FcPoly-Ttest\top_copper.grb*
3 | G04 top copper layer *
4 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
5 | %FSLAX24Y24*%
6 | %MOIN*%
7 | %LN top copper *%
8 | G04 Rounded Rectangle Macro, params: W/2, H/2, R *
9 | %AMRNDREC*
10 | 21,1,$1+$1,$2+$2-$3-$3,0,0,0*
11 | 21,1,$1+$1-$3-$3,$2+$2,0,0,0*
12 | 1,1,$3+$3,$1-$3,$2-$3*
13 | 1,1,$3+$3,$3-$1,$2-$3*
14 | 1,1,$3+$3,$1-$3,$3-$2*
15 | 1,1,$3+$3,$3-$1,$3-$2*%
16 | G04 Rectangular Thermal Macro, params: W/2, H/2, T/2 *
17 | %AMRECTHERM*
18 | $4=$3/2*
19 | 21,1,$1-$3,$2-$3,0-$1/2-$4,0-$2/2-$4,0*
20 | 21,1,$1-$3,$2-$3,0-$1/2-$4,$2/2+$4,0*
21 | 21,1,$1-$3,$2-$3,$1/2+$4,0-$2/2-$4,0*
22 | 21,1,$1-$3,$2-$3,$1/2+$4,$2/2+$4,0*%
23 | %ADD10C,0.005000*%
24 | %ADD11C,0.120000*%
25 | %ADD12C,0.001000*%
26 | %ADD13R,0.110000X0.110000*%
27 | %ADD14R,0.130000X0.162000*%
28 | %ADD15R,0.140000X0.084000*%
29 | %ADD16R,0.120000X0.120000*%
30 | %ADD17C,0.075000*%
31 | %ADD18C,0.085000*%
32 | %ADD19C,0.060000*%
33 | %ADD20R,0.050000X0.050000*%
34 | %ADD21R,0.070000X0.102000*%
35 | %ADD22R,0.080000X0.024000*%
36 | %ADD23R,0.060000X0.060000*%
37 | %ADD24C,0.015000*%
38 | %ADD25C,0.025000*%
39 | %ADD26C,0.024000*%
40 | %ADD27C,0.010000*%
41 | G90*
42 | G70D02*
43 |
44 | G04 Step and Repeat for panelization *
45 |
46 | G04 ----------------------- Draw board outline (positive)*
47 | %LPD*%
48 | G54D10*
49 | G01X0Y11800D02*
50 | G01X23250Y11800D01*
51 | G04 end of side 1*
52 | G01X23250Y0D01*
53 | G04 end of side 2*
54 | G01X0Y0D01*
55 | G04 end of side 3*
56 | G01X0Y11800D01*
57 |
58 | G04 ----------------------- Draw copper area (positive)*
59 | G36*
60 | G01X11140Y0D02*
61 | G01X0Y0D01*
62 | G01X0Y11800D01*
63 | G01X11140Y11800D01*
64 | G01X11140Y0D01*
65 | G37*
66 |
67 | G04 ----------------------- Draw copper area (positive)*
68 | G36*
69 | G01X23250Y0D02*
70 | G01X12000Y0D01*
71 | G01X12000Y11800D01*
72 | G01X23250Y11800D01*
73 | G01X23250Y0D01*
74 | G37*
75 |
76 | G04 -------------------- Draw copper area clearances (negative)*
77 | %LPC*%
78 |
79 | G04 Draw clearances for pads*
80 | G54D11*
81 | G01X3960Y7900D03*
82 | G01X3960Y6900D03*
83 | G01X3960Y5900D03*
84 | G54D12*
85 | G54D13*
86 | G01X6280Y9000D03*
87 | G54D12*
88 | G54D14*
89 | G01X8000Y8240D03*
90 | G54D12*
91 | G54D15*
92 | G01X9630Y5200D03*
93 | G54D12*
94 | G54D15*
95 | G01X9630Y4200D03*
96 | G01X9630Y3700D03*
97 | G01X9630Y3200D03*
98 | G01X9630Y2700D03*
99 | G01X9630Y2200D03*
100 | G54D12*
101 | G54D15*
102 | G01X13630Y2200D03*
103 | G01X13630Y2700D03*
104 | G01X13630Y3200D03*
105 | G01X13630Y3700D03*
106 | G01X13630Y4200D03*
107 | G54D12*
108 | G54D15*
109 | G01X13630Y5200D03*
110 | G54D12*
111 | G54D13*
112 | G01X8320Y3950D03*
113 | G01X8320Y6380D03*
114 | G54D12*
115 | G54D13*
116 | G01X14950Y6700D03*
117 | G54D12*
118 | G54D13*
119 | G01X14950Y4200D03*
120 | G54D16*
121 | G01X5440Y5650D03*
122 | G01X5440Y6900D03*
123 | G01X6800Y2200D03*
124 | G01X5550Y2200D03*
125 | G01X17720Y6860D03*
126 | G01X17720Y5610D03*
127 | G01X17740Y2200D03*
128 | G01X16490Y2200D03*
129 | G54D11*
130 | G01X19280Y7860D03*
131 | G01X19280Y6860D03*
132 | G01X19280Y5860D03*
133 | G54D12*
134 | G54D13*
135 | G01X16960Y8980D03*
136 | G54D12*
137 | G54D14*
138 | G01X15100Y8240D03*
139 | G54D12*
140 | G54D11*
141 | G01X16340Y6700D03*
142 | G01X16340Y5700D03*
143 | G54D12*
144 | G54D11*
145 | G01X6920Y6700D03*
146 | G01X6920Y5700D03*
147 | G54D12*
148 | G54D11*
149 | G01X11130Y7000D03*
150 | G54D12*
151 | G54D11*
152 | G01X13130Y7000D03*
153 | G04 Draw clearances for traces*
154 | G54D17*
155 | G01X19280Y5860D02*
156 | G01X19010Y5860D01*
157 | G01X19010Y5860D02*
158 | G01X18450Y5300D01*
159 | G01X18450Y5300D02*
160 | G01X18450Y2910D01*
161 | G01X18450Y2910D02*
162 | G01X17740Y2200D01*
163 | G54D18*
164 | G01X3960Y7900D02*
165 | G01X7990Y7900D01*
166 | G01X7990Y7900D02*
167 | G01X8000Y8240D01*
168 | G01X8320Y6380D02*
169 | G01X9630Y6380D01*
170 | G01X9630Y6380D02*
171 | G01X9630Y5200D01*
172 | G01X8320Y6380D02*
173 | G01X10840Y6380D01*
174 | G01X10840Y6380D02*
175 | G01X11130Y6670D01*
176 | G01X11130Y6670D02*
177 | G01X11130Y7000D01*
178 | G01X8000Y8240D02*
179 | G01X8000Y7900D01*
180 | G01X8000Y7900D02*
181 | G01X6280Y7900D01*
182 | G01X6280Y7900D02*
183 | G01X6280Y9000D01*
184 | G01X6920Y6700D02*
185 | G01X6920Y7900D01*
186 | G01X6920Y7900D02*
187 | G01X8000Y7900D01*
188 | G01X8000Y7900D02*
189 | G01X8000Y8240D01*
190 | G01X8000Y8240D02*
191 | G01X8000Y7310D01*
192 | G01X8000Y7310D02*
193 | G01X8320Y6990D01*
194 | G01X8320Y6990D02*
195 | G01X8320Y6380D01*
196 | G01X13130Y7000D02*
197 | G01X13130Y6310D01*
198 | G01X13130Y6310D02*
199 | G01X13630Y5810D01*
200 | G01X13630Y5810D02*
201 | G01X13630Y5200D01*
202 | G01X15100Y8240D02*
203 | G01X15940Y8240D01*
204 | G01X15940Y8240D02*
205 | G01X16340Y7860D01*
206 | G01X16340Y7860D02*
207 | G01X16340Y6700D01*
208 | G01X15100Y8240D02*
209 | G01X15940Y8240D01*
210 | G01X15940Y8240D02*
211 | G01X16320Y7860D01*
212 | G01X16320Y7860D02*
213 | G01X16960Y7860D01*
214 | G01X16960Y7860D02*
215 | G01X16960Y8980D01*
216 | G01X15100Y8240D02*
217 | G01X14370Y8240D01*
218 | G01X14370Y8240D02*
219 | G01X13130Y7000D01*
220 | G01X15100Y8240D02*
221 | G01X15960Y8240D01*
222 | G01X15960Y8240D02*
223 | G01X16340Y7860D01*
224 | G01X16340Y7860D02*
225 | G01X19280Y7860D01*
226 | G01X14950Y6700D02*
227 | G01X16340Y6700D01*
228 | G54D17*
229 | G01X13630Y2200D02*
230 | G01X16490Y2200D01*
231 | G01X13630Y4200D02*
232 | G01X13070Y4200D01*
233 | G01X13070Y4200D02*
234 | G01X12820Y3950D01*
235 | G01X12820Y3950D02*
236 | G01X12820Y3460D01*
237 | G01X12820Y3460D02*
238 | G01X13080Y3200D01*
239 | G01X13080Y3200D02*
240 | G01X13630Y3200D01*
241 | G01X14950Y4200D02*
242 | G01X13630Y4200D01*
243 | G01X16340Y5700D02*
244 | G01X16640Y5690D01*
245 | G01X16640Y5690D02*
246 | G01X17000Y5330D01*
247 | G01X17000Y5330D02*
248 | G01X17000Y4080D01*
249 | G01X17000Y4080D02*
250 | G01X16620Y3700D01*
251 | G01X16620Y3700D02*
252 | G01X13630Y3700D01*
253 | G54D12*
254 | G54D17*
255 | G01X6920Y5700D02*
256 | G01X6480Y5700D01*
257 | G01X6480Y5700D02*
258 | G01X6120Y5340D01*
259 | G01X6120Y5340D02*
260 | G01X6120Y3910D01*
261 | G01X6120Y3910D02*
262 | G01X6420Y3610D01*
263 | G01X6420Y3610D02*
264 | G01X7450Y3610D01*
265 | G01X7450Y3610D02*
266 | G01X7860Y3200D01*
267 | G01X7860Y3200D02*
268 | G01X9630Y3200D01*
269 | G54D12*
270 | G54D17*
271 | G01X5440Y5650D02*
272 | G01X5440Y3570D01*
273 | G01X5440Y3570D02*
274 | G01X5950Y3060D01*
275 | G01X5950Y3060D02*
276 | G01X7360Y3060D01*
277 | G01X7360Y3060D02*
278 | G01X7720Y2700D01*
279 | G01X7720Y2700D02*
280 | G01X9630Y2700D01*
281 | G01X6800Y2200D02*
282 | G01X9630Y2200D01*
283 | G01X9630Y3700D02*
284 | G01X9630Y4200D01*
285 | G01X9630Y3700D02*
286 | G01X8570Y3700D01*
287 | G01X8570Y3700D02*
288 | G01X8320Y3950D01*
289 | G01X3960Y6900D02*
290 | G01X5440Y6900D01*
291 | G01X3960Y5900D02*
292 | G01X4090Y5900D01*
293 | G01X4090Y5900D02*
294 | G01X4760Y5230D01*
295 | G01X4760Y5230D02*
296 | G01X4760Y2990D01*
297 | G01X4760Y2990D02*
298 | G01X5550Y2200D01*
299 | G01X19280Y6860D02*
300 | G01X17720Y6860D01*
301 | G01X13630Y2700D02*
302 | G01X14885Y2700D01*
303 | G01X14885Y2700D02*
304 | G01X15314Y3120D01*
305 | G01X15314Y3120D02*
306 | G01X16950Y3120D01*
307 | G01X16950Y3120D02*
308 | G01X17720Y3890D01*
309 | G01X17720Y3890D02*
310 | G01X17720Y5610D01*
311 |
312 | G04 Draw clearances for text*
313 |
314 | G04 -------------- Draw Parts, Pads, Traces, Vias and Text (positive)*
315 | %LPD*%
316 | G04 Draw part J1*
317 | G54D19*
318 | G01X3960Y7900D03*
319 | G01X3960Y6900D03*
320 | G01X3960Y5900D03*
321 | G01X3960Y4900D03*
322 | G01X3960Y3900D03*
323 | G04 Draw part C1*
324 | G54D20*
325 | G01X6280Y9000D03*
326 | G01X6280Y9750D03*
327 | G04 Draw part C2*
328 | G54D21*
329 | G01X8000Y8240D03*
330 | G01X8000Y9740D03*
331 | G04 Draw part U1*
332 | G54D22*
333 | G01X9630Y5200D03*
334 | G01X9630Y4700D03*
335 | G01X9630Y4200D03*
336 | G01X9630Y3700D03*
337 | G01X9630Y3200D03*
338 | G01X9630Y2700D03*
339 | G01X9630Y2200D03*
340 | G01X9630Y1700D03*
341 | G01X13630Y1700D03*
342 | G01X13630Y2200D03*
343 | G01X13630Y2700D03*
344 | G01X13630Y3200D03*
345 | G01X13630Y3700D03*
346 | G01X13630Y4200D03*
347 | G01X13630Y4700D03*
348 | G01X13630Y5200D03*
349 | G04 Draw part C3*
350 | G54D20*
351 | G01X8320Y4700D03*
352 | G01X8320Y3950D03*
353 | G04 Draw part C4*
354 | G01X8320Y6380D03*
355 | G01X8320Y5630D03*
356 | G04 Draw part C5*
357 | G01X14950Y6700D03*
358 | G01X14950Y5950D03*
359 | G04 Draw part C6*
360 | G01X14950Y4950D03*
361 | G01X14950Y4200D03*
362 | G04 Draw part R1*
363 | G54D23*
364 | G01X5440Y5650D03*
365 | G01X5440Y6900D03*
366 | G04 Draw part R2*
367 | G01X6800Y2200D03*
368 | G01X5550Y2200D03*
369 | G04 Draw part R3*
370 | G01X17720Y6860D03*
371 | G01X17720Y5610D03*
372 | G04 Draw part R4*
373 | G01X17740Y2200D03*
374 | G01X16490Y2200D03*
375 | G04 Draw part J2*
376 | G54D19*
377 | G01X19280Y7860D03*
378 | G01X19280Y6860D03*
379 | G01X19280Y5860D03*
380 | G01X19280Y4860D03*
381 | G01X19280Y3860D03*
382 | G04 Draw part C7*
383 | G54D20*
384 | G01X16960Y8980D03*
385 | G01X16960Y9730D03*
386 | G04 Draw part C8*
387 | G54D21*
388 | G01X15100Y8240D03*
389 | G01X15100Y9740D03*
390 | G04 Draw part J3*
391 | G54D19*
392 | G01X16340Y6700D03*
393 | G01X16340Y5700D03*
394 | G01X16340Y4700D03*
395 | G04 Draw part J4*
396 | G01X6920Y6700D03*
397 | G01X6920Y5700D03*
398 | G01X6920Y4700D03*
399 | G04 Draw part U2*
400 | G01X10130Y7000D03*
401 | G01X11130Y7000D03*
402 | G01X12130Y7000D03*
403 | G01X13130Y7000D03*
404 |
405 | G04 Draw traces*
406 | G54D24*
407 | G01X19280Y5860D02*
408 | G01X19010Y5860D01*
409 | G01X19010Y5860D02*
410 | G01X18450Y5300D01*
411 | G01X18450Y5300D02*
412 | G01X18450Y2910D01*
413 | G01X18450Y2910D02*
414 | G01X17740Y2200D01*
415 | G54D25*
416 | G01X3960Y7900D02*
417 | G01X7990Y7900D01*
418 | G01X7990Y7900D02*
419 | G01X8000Y8240D01*
420 | G01X8320Y6380D02*
421 | G01X9630Y6380D01*
422 | G01X9630Y6380D02*
423 | G01X9630Y5200D01*
424 | G01X8320Y6380D02*
425 | G04G01X10840Y6380D01*
426 | G04G01X10840Y6380D02*
427 | G04G01X11130Y6670D01*
428 | G04G01X11130Y6670D02*
429 | G04G01X11130Y7000D01*
430 | G01X8000Y8240D02*
431 | G01X8000Y7900D01*
432 | G01X8000Y7900D02*
433 | G01X6280Y7900D01*
434 | G01X6280Y7900D02*
435 | G01X6280Y9000D01*
436 | G01X6920Y6700D02*
437 | G01X6920Y7900D01*
438 | G01X6920Y7900D02*
439 | G01X8000Y7900D01*
440 | G01X8000Y7900D02*
441 | G01X8000Y8240D01*
442 | G01X8000Y8240D02*
443 | G01X8000Y7310D01*
444 | G01X8000Y7310D02*
445 | G01X8320Y6990D01*
446 | G01X8320Y6990D02*
447 | G01X8320Y6380D01*
448 | G01X13130Y7000D02*
449 | G01X13130Y6310D01*
450 | G01X13130Y6310D02*
451 | G01X13630Y5810D01*
452 | G01X13630Y5810D02*
453 | G01X13630Y5200D01*
454 | G01X15100Y8240D02*
455 | G01X15940Y8240D01*
456 | G01X15940Y8240D02*
457 | G01X16340Y7860D01*
458 | G01X16340Y7860D02*
459 | G01X16340Y6700D01*
460 | G01X15100Y8240D02*
461 | G01X15940Y8240D01*
462 | G01X15940Y8240D02*
463 | G01X16320Y7860D01*
464 | G01X16320Y7860D02*
465 | G01X16960Y7860D01*
466 | G01X16960Y7860D02*
467 | G01X16960Y8980D01*
468 | G01X15100Y8240D02*
469 | G01X14370Y8240D01*
470 | G01X14370Y8240D02*
471 | G01X13130Y7000D01*
472 | G01X15100Y8240D02*
473 | G01X15960Y8240D01*
474 | G01X15960Y8240D02*
475 | G01X16340Y7860D01*
476 | G01X16340Y7860D02*
477 | G01X19280Y7860D01*
478 | G01X14950Y6700D02*
479 | G01X16340Y6700D01*
480 | G54D24*
481 | G01X13630Y2200D02*
482 | G01X16490Y2200D01*
483 | G01X13630Y4200D02*
484 | G01X13070Y4200D01*
485 | G01X13070Y4200D02*
486 | G01X12820Y3950D01*
487 | G01X12820Y3950D02*
488 | G01X12820Y3460D01*
489 | G01X12820Y3460D02*
490 | G01X13080Y3200D01*
491 | G01X13080Y3200D02*
492 | G01X13630Y3200D01*
493 | G01X14950Y4200D02*
494 | G01X13630Y4200D01*
495 | G01X16340Y5700D02*
496 | G01X16640Y5690D01*
497 | G01X16640Y5690D02*
498 | G01X17000Y5330D01*
499 | G01X17000Y5330D02*
500 | G01X17000Y4080D01*
501 | G01X17000Y4080D02*
502 | G01X16620Y3700D01*
503 | G01X16620Y3700D02*
504 | G01X13630Y3700D01*
505 | G54D26*
506 | G01X9630Y4700D02*
507 | G01X10430Y4700D01*
508 | G01X10430Y4700D02*
509 | G01X10430Y1920D01*
510 | G01X10430Y1920D02*
511 | G01X10210Y1700D01*
512 | G01X10210Y1700D02*
513 | G01X9630Y1700D01*
514 | G01X3960Y3900D02*
515 | G01X3960Y1160D01*
516 | G01X3960Y1160D02*
517 | G01X8720Y1160D01*
518 | G01X8720Y1160D02*
519 | G01X8720Y1700D01*
520 | G01X8720Y1700D02*
521 | G01X9630Y1700D01*
522 | G01X10130Y7000D02*
523 | G01X10130Y9740D01*
524 | G01X10130Y9740D02*
525 | G01X8000Y9740D01*
526 | G01X6280Y9750D02*
527 | G01X2670Y9750D01*
528 | G01X2670Y9750D02*
529 | G01X2670Y4900D01*
530 | G01X2670Y4900D02*
531 | G01X3960Y4900D01*
532 | G01X8000Y9740D02*
533 | G01X6280Y9750D01*
534 | G01X8320Y5630D02*
535 | G01X8320Y4700D01*
536 | G01X8320Y4700D02*
537 | G01X9630Y4700D01*
538 | G01X6920Y4700D02*
539 | G01X8320Y4700D01*
540 | G54D24*
541 | G01X6920Y5700D02*
542 | G01X6480Y5700D01*
543 | G01X6480Y5700D02*
544 | G01X6120Y5340D01*
545 | G01X6120Y5340D02*
546 | G01X6120Y3910D01*
547 | G01X6120Y3910D02*
548 | G01X6420Y3610D01*
549 | G01X6420Y3610D02*
550 | G01X7450Y3610D01*
551 | G01X7450Y3610D02*
552 | G01X7860Y3200D01*
553 | G01X7860Y3200D02*
554 | G01X9630Y3200D01*
555 | G54D26*
556 | G01X12130Y7000D02*
557 | G01X12130Y4700D01*
558 | G01X12130Y4700D02*
559 | G01X13630Y4700D01*
560 | G01X12130Y7000D02*
561 | G01X12130Y9740D01*
562 | G01X12130Y9740D02*
563 | G01X15100Y9740D01*
564 | G01X16960Y9730D02*
565 | G01X20390Y9722D01*
566 | G01X20390Y9722D02*
567 | G01X20390Y4860D01*
568 | G01X20390Y4860D02*
569 | G01X19280Y4860D01*
570 | G01X15100Y9740D02*
571 | G01X16960Y9730D01*
572 | G01X14950Y4950D02*
573 | G01X14950Y5950D01*
574 | G01X13630Y4700D02*
575 | G01X14150Y4700D01*
576 | G01X14150Y4700D02*
577 | G01X14400Y4950D01*
578 | G01X14400Y4950D02*
579 | G01X14950Y4950D01*
580 | G01X14950Y4950D02*
581 | G01X15420Y4950D01*
582 | G01X15420Y4950D02*
583 | G01X15670Y4700D01*
584 | G01X15670Y4700D02*
585 | G01X16340Y4700D01*
586 | G01X13630Y1700D02*
587 | G01X14560Y1700D01*
588 | G01X14560Y1700D02*
589 | G01X14560Y1170D01*
590 | G01X14560Y1170D02*
591 | G01X19280Y1170D01*
592 | G01X19280Y1170D02*
593 | G01X19280Y3860D01*
594 | G01X12130Y7000D02*
595 | G01X12130Y1700D01*
596 | G01X12130Y1700D02*
597 | G01X13630Y1700D01*
598 | G54D24*
599 | G01X5440Y5650D02*
600 | G01X5440Y3570D01*
601 | G01X5440Y3570D02*
602 | G01X5950Y3060D01*
603 | G01X5950Y3060D02*
604 | G01X7360Y3060D01*
605 | G01X7360Y3060D02*
606 | G01X7720Y2700D01*
607 | G01X7720Y2700D02*
608 | G01X9630Y2700D01*
609 | G01X6800Y2200D02*
610 | G01X9630Y2200D01*
611 | G01X9630Y3700D02*
612 | G01X9630Y4200D01*
613 | G01X9630Y3700D02*
614 | G01X8570Y3700D01*
615 | G01X8570Y3700D02*
616 | G01X8320Y3950D01*
617 | G01X3960Y6900D02*
618 | G01X5440Y6900D01*
619 | G01X3960Y5900D02*
620 | G01X4090Y5900D01*
621 | G01X4090Y5900D02*
622 | G01X4760Y5230D01*
623 | G01X4760Y5230D02*
624 | G01X4760Y2990D01*
625 | G01X4760Y2990D02*
626 | G01X5550Y2200D01*
627 | G01X19280Y6860D02*
628 | G01X17720Y6860D01*
629 | G01X13630Y2700D02*
630 | G01X14885Y2700D01*
631 | G01X14885Y2700D02*
632 | G01X15314Y3120D01*
633 | G01X15314Y3120D02*
634 | G01X16950Y3120D01*
635 | G01X16950Y3120D02*
636 | G01X17720Y3890D01*
637 | G01X17720Y3890D02*
638 | G01X17720Y5610D01*
639 |
640 | G04 Draw Text*
641 |
642 | G04 ----------------------- Draw Pilot Holes (scratch)*
643 | %LPC*%
644 | G04 draw pilot holes for part J1*
645 | G54D27*
646 | G01X3960Y7900D03*
647 | G01X3960Y6900D03*
648 | G01X3960Y5900D03*
649 | G01X3960Y4900D03*
650 | G01X3960Y3900D03*
651 | G04 draw pilot holes for part C1*
652 | G04 draw pilot holes for part C2*
653 | G04 draw pilot holes for part U1*
654 | G04 draw pilot holes for part C3*
655 | G04 draw pilot holes for part C4*
656 | G04 draw pilot holes for part C5*
657 | G04 draw pilot holes for part C6*
658 | G04 draw pilot holes for part R1*
659 | G04 draw pilot holes for part R2*
660 | G04 draw pilot holes for part R3*
661 | G04 draw pilot holes for part R4*
662 | G04 draw pilot holes for part J2*
663 | G01X19280Y7860D03*
664 | G01X19280Y6860D03*
665 | G01X19280Y5860D03*
666 | G01X19280Y4860D03*
667 | G01X19280Y3860D03*
668 | G04 draw pilot holes for part C7*
669 | G04 draw pilot holes for part C8*
670 | G04 draw pilot holes for part J3*
671 | G01X16340Y6700D03*
672 | G01X16340Y5700D03*
673 | G01X16340Y4700D03*
674 | G04 draw pilot holes for part J4*
675 | G01X6920Y6700D03*
676 | G01X6920Y5700D03*
677 | G01X6920Y4700D03*
678 | G04 draw pilot holes for part U2*
679 | G01X10130Y7000D03*
680 | G01X11130Y7000D03*
681 | G01X12130Y7000D03*
682 | G01X13130Y7000D03*
683 |
684 | G04 Draw pilot holes for vias*
685 | M00*
686 | M02*
687 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-B_Mask.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:27:27+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Soldermask,Bot*%
6 | %TF.FilePolarity,Negative*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:27:27*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | %AMOutline5P*
32 | 0 Free polygon, 5 corners , with rotation*
33 | 0 The origin of the aperture is its center*
34 | 0 number of corners: always 5*
35 | 0 $1 to $10 corner X, Y*
36 | 0 $11 Rotation angle, in degrees counterclockwise*
37 | 0 create outline with 5 corners*
38 | 4,1,5,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$1,$2,$11*%
39 | %AMOutline6P*
40 | 0 Free polygon, 6 corners , with rotation*
41 | 0 The origin of the aperture is its center*
42 | 0 number of corners: always 6*
43 | 0 $1 to $12 corner X, Y*
44 | 0 $13 Rotation angle, in degrees counterclockwise*
45 | 0 create outline with 6 corners*
46 | 4,1,6,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$1,$2,$13*%
47 | %AMOutline7P*
48 | 0 Free polygon, 7 corners , with rotation*
49 | 0 The origin of the aperture is its center*
50 | 0 number of corners: always 7*
51 | 0 $1 to $14 corner X, Y*
52 | 0 $15 Rotation angle, in degrees counterclockwise*
53 | 0 create outline with 7 corners*
54 | 4,1,7,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$1,$2,$15*%
55 | %AMOutline8P*
56 | 0 Free polygon, 8 corners , with rotation*
57 | 0 The origin of the aperture is its center*
58 | 0 number of corners: always 8*
59 | 0 $1 to $16 corner X, Y*
60 | 0 $17 Rotation angle, in degrees counterclockwise*
61 | 0 create outline with 8 corners*
62 | 4,1,8,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$1,$2,$17*%
63 | G04 Aperture macros list end*
64 | %ADD10C,4.000000*%
65 | %ADD11C,3.600000*%
66 | %ADD12C,5.700000*%
67 | %ADD13R,1.350000X1.350000*%
68 | %ADD14O,1.350000X1.350000*%
69 | %ADD15C,0.650000*%
70 | %ADD16O,1.600000X1.600000*%
71 | %ADD17Outline5P,-1.930000X0.500000X1.930000X0.500000X1.930000X-0.500000X-1.730000X-0.500000X-1.930000X-0.300000X0.000000*%
72 | %ADD18R,3.860000X1.000000*%
73 | %ADD19RoundRect,0.375000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0.375000X-0.625000X0*%
74 | G04 APERTURE END LIST*
75 | D10*
76 | X150000000Y-119000000D02*
77 | X190000000Y-119000000D01*
78 | X141000000Y-80000000D02*
79 | X190000000Y-80000000D01*
80 | X110000000Y-80000000D02*
81 | X137000000Y-80000000D01*
82 | X110000000Y-119000000D02*
83 | X146000000Y-119000000D01*
84 | D11*
85 | %TO.C,H102*%
86 | X115000000Y-85000000D03*
87 | D12*
88 | X115000000Y-85000000D03*
89 | %TD*%
90 | D13*
91 | %TO.C,J101*%
92 | X152500000Y-96500000D03*
93 | D14*
94 | X154500000Y-96500000D03*
95 | X152500000Y-98500000D03*
96 | X154500000Y-98500000D03*
97 | X152500000Y-100500000D03*
98 | X154500000Y-100500000D03*
99 | X152500000Y-102500000D03*
100 | X154500000Y-102500000D03*
101 | %TD*%
102 | D11*
103 | %TO.C,H104*%
104 | X132000000Y-85000000D03*
105 | D12*
106 | X132000000Y-85000000D03*
107 | %TD*%
108 | D15*
109 | %TO.C,J202*%
110 | X117710000Y-102300000D03*
111 | X117010000Y-101900000D03*
112 | X117010000Y-101100000D03*
113 | X117710000Y-100700000D03*
114 | X117010000Y-100300000D03*
115 | X117710000Y-99900000D03*
116 | X117710000Y-99100000D03*
117 | X117010000Y-98700000D03*
118 | X117710000Y-98300000D03*
119 | X117010000Y-97900000D03*
120 | X117010000Y-97100000D03*
121 | X117710000Y-96700000D03*
122 | D16*
123 | X116560000Y-95230000D03*
124 | X111830000Y-95230000D03*
125 | D15*
126 | X117710000Y-97500000D03*
127 | X117710000Y-101500000D03*
128 | D16*
129 | X116560000Y-103770000D03*
130 | X111830000Y-103770000D03*
131 | %TD*%
132 | D13*
133 | %TO.C,J102*%
134 | X133000000Y-95500000D03*
135 | D14*
136 | X135000000Y-95500000D03*
137 | X133000000Y-97500000D03*
138 | X135000000Y-97500000D03*
139 | X133000000Y-99500000D03*
140 | X135000000Y-99500000D03*
141 | X133000000Y-101500000D03*
142 | X135000000Y-101500000D03*
143 | X133000000Y-103500000D03*
144 | X135000000Y-103500000D03*
145 | %TD*%
146 | D13*
147 | %TO.C,J201*%
148 | X182500000Y-98250000D03*
149 | D14*
150 | X182500000Y-100250000D03*
151 | %TD*%
152 | D11*
153 | %TO.C,H101*%
154 | X115000000Y-114000000D03*
155 | D12*
156 | X115000000Y-114000000D03*
157 | %TD*%
158 | D11*
159 | %TO.C,H103*%
160 | X132000000Y-114000000D03*
161 | D12*
162 | X132000000Y-114000000D03*
163 | %TD*%
164 | D17*
165 | %TO.C,PE1*%
166 | X187750000Y-102360000D03*
167 | D18*
168 | X187750000Y-96640000D03*
169 | %TD*%
170 | D19*
171 | %TO.C,SW103*%
172 | X166075596Y-113500000D03*
173 | X159575596Y-113500000D03*
174 | %TD*%
175 | %TO.C,SW102*%
176 | X166075596Y-108380000D03*
177 | X159575596Y-108380000D03*
178 | %TD*%
179 | %TO.C,SW101*%
180 | X166075596Y-103260000D03*
181 | X159575596Y-103260000D03*
182 | %TD*%
183 | M02*
184 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:27:27+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Paste,Bot*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:27:27*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | %AMOutline5P*
32 | 0 Free polygon, 5 corners , with rotation*
33 | 0 The origin of the aperture is its center*
34 | 0 number of corners: always 5*
35 | 0 $1 to $10 corner X, Y*
36 | 0 $11 Rotation angle, in degrees counterclockwise*
37 | 0 create outline with 5 corners*
38 | 4,1,5,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$1,$2,$11*%
39 | %AMOutline6P*
40 | 0 Free polygon, 6 corners , with rotation*
41 | 0 The origin of the aperture is its center*
42 | 0 number of corners: always 6*
43 | 0 $1 to $12 corner X, Y*
44 | 0 $13 Rotation angle, in degrees counterclockwise*
45 | 0 create outline with 6 corners*
46 | 4,1,6,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$1,$2,$13*%
47 | %AMOutline7P*
48 | 0 Free polygon, 7 corners , with rotation*
49 | 0 The origin of the aperture is its center*
50 | 0 number of corners: always 7*
51 | 0 $1 to $14 corner X, Y*
52 | 0 $15 Rotation angle, in degrees counterclockwise*
53 | 0 create outline with 7 corners*
54 | 4,1,7,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$1,$2,$15*%
55 | %AMOutline8P*
56 | 0 Free polygon, 8 corners , with rotation*
57 | 0 The origin of the aperture is its center*
58 | 0 number of corners: always 8*
59 | 0 $1 to $16 corner X, Y*
60 | 0 $17 Rotation angle, in degrees counterclockwise*
61 | 0 create outline with 8 corners*
62 | 4,1,8,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$1,$2,$17*%
63 | G04 Aperture macros list end*
64 | %ADD10Outline5P,-1.930000X0.500000X1.930000X0.500000X1.930000X-0.500000X-1.730000X-0.500000X-1.930000X-0.300000X0.000000*%
65 | %ADD11R,3.860000X1.000000*%
66 | %ADD12RoundRect,0.375000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0.375000X-0.625000X0*%
67 | G04 APERTURE END LIST*
68 | D10*
69 | %TO.C,PE1*%
70 | X187750000Y-102360000D03*
71 | D11*
72 | X187750000Y-96640000D03*
73 | %TD*%
74 | D12*
75 | %TO.C,SW103*%
76 | X166075596Y-113500000D03*
77 | X159575596Y-113500000D03*
78 | %TD*%
79 | %TO.C,SW102*%
80 | X166075596Y-108380000D03*
81 | X159575596Y-108380000D03*
82 | %TD*%
83 | %TO.C,SW101*%
84 | X166075596Y-103260000D03*
85 | X159575596Y-103260000D03*
86 | %TD*%
87 | M02*
88 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-Edge_Cuts.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:27:27+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Profile,NP*%
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:27:27*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | %TA.AperFunction,Profile*%
14 | %ADD10C,0.100000*%
15 | %TD*%
16 | G04 APERTURE END LIST*
17 | D10*
18 | X110000000Y-119000000D02*
19 | X110000000Y-80000000D01*
20 | X137000000Y-108000000D02*
21 | G75*
22 | G03*
23 | X141000000Y-108000000I2000000J0D01*
24 | G01*
25 | X141000000Y-108000000D02*
26 | X141000000Y-80000000D01*
27 | X150000000Y-119000000D02*
28 | X190000000Y-119000000D01*
29 | X146000000Y-91000000D02*
30 | X146000000Y-119000000D01*
31 | X146000000Y-119000000D02*
32 | X110000000Y-119000000D01*
33 | X141000000Y-80000000D02*
34 | X190000000Y-80000000D01*
35 | X110000000Y-80000000D02*
36 | X137000000Y-80000000D01*
37 | X137000000Y-80000000D02*
38 | X137000000Y-108000000D01*
39 | X190000000Y-80000000D02*
40 | X190000000Y-119000000D01*
41 | X150000000Y-119000000D02*
42 | X150000000Y-91000000D01*
43 | X150000000Y-91000000D02*
44 | G75*
45 | G03*
46 | X146000000Y-91000000I-2000000J0D01*
47 | G01*
48 | M02*
49 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-F_Mask.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:27:27+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Soldermask,Top*%
6 | %TF.FilePolarity,Negative*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:27:27*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10C,4.000000*%
33 | %ADD11RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
34 | %ADD12C,3.600000*%
35 | %ADD13C,5.700000*%
36 | %ADD14R,1.350000X1.350000*%
37 | %ADD15O,1.350000X1.350000*%
38 | %ADD16RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
39 | %ADD17RoundRect,0.100000X-0.100000X0.712500X-0.100000X-0.712500X0.100000X-0.712500X0.100000X0.712500X0*%
40 | %ADD18RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
41 | %ADD19RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
42 | %ADD20RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
43 | %ADD21RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
44 | %ADD22RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
45 | %ADD23RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
46 | %ADD24RoundRect,0.200000X0.275000X-0.200000X0.275000X0.200000X-0.275000X0.200000X-0.275000X-0.200000X0*%
47 | %ADD25R,1.100000X0.300000*%
48 | %ADD26C,0.650000*%
49 | %ADD27O,1.600000X1.600000*%
50 | %ADD28RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
51 | %ADD29RoundRect,0.250000X-0.400000X-0.625000X0.400000X-0.625000X0.400000X0.625000X-0.400000X0.625000X0*%
52 | %ADD30RoundRect,0.200000X-0.200000X-0.275000X0.200000X-0.275000X0.200000X0.275000X-0.200000X0.275000X0*%
53 | %ADD31R,0.850000X2.300000*%
54 | %ADD32RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
55 | %ADD33RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
56 | %ADD34RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
57 | %ADD35RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
58 | %ADD36RoundRect,0.150000X0.825000X0.150000X-0.825000X0.150000X-0.825000X-0.150000X0.825000X-0.150000X0*%
59 | %ADD37RoundRect,0.100000X0.100000X-0.637500X0.100000X0.637500X-0.100000X0.637500X-0.100000X-0.637500X0*%
60 | %ADD38R,5.400000X2.850000*%
61 | %ADD39R,0.900000X0.400000*%
62 | %ADD40RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
63 | %ADD41RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
64 | %ADD42RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
65 | %ADD43RoundRect,0.150000X-0.800000X-0.150000X0.800000X-0.150000X0.800000X0.150000X-0.800000X0.150000X0*%
66 | G04 APERTURE END LIST*
67 | D10*
68 | X141000000Y-80000000D02*
69 | X190000000Y-80000000D01*
70 | X110000000Y-119000000D02*
71 | X146000000Y-119000000D01*
72 | X150000000Y-119000000D02*
73 | X190000000Y-119000000D01*
74 | X110000000Y-80000000D02*
75 | X137000000Y-80000000D01*
76 | D11*
77 | %TO.C,R105*%
78 | X158225000Y-107500000D03*
79 | X156575000Y-107500000D03*
80 | %TD*%
81 | D12*
82 | %TO.C,H102*%
83 | X115000000Y-85000000D03*
84 | D13*
85 | X115000000Y-85000000D03*
86 | %TD*%
87 | D14*
88 | %TO.C,J101*%
89 | X152500000Y-96500000D03*
90 | D15*
91 | X154500000Y-96500000D03*
92 | X152500000Y-98500000D03*
93 | X154500000Y-98500000D03*
94 | X152500000Y-100500000D03*
95 | X154500000Y-100500000D03*
96 | X152500000Y-102500000D03*
97 | X154500000Y-102500000D03*
98 | %TD*%
99 | D16*
100 | %TO.C,C105*%
101 | X173675000Y-105400000D03*
102 | X171600000Y-105400000D03*
103 | %TD*%
104 | D17*
105 | %TO.C,U101*%
106 | X124475000Y-98137500D03*
107 | X123825000Y-98137500D03*
108 | X123175000Y-98137500D03*
109 | X122525000Y-98137500D03*
110 | X122525000Y-102362500D03*
111 | X123175000Y-102362500D03*
112 | X123825000Y-102362500D03*
113 | X124475000Y-102362500D03*
114 | %TD*%
115 | D18*
116 | %TO.C,C115*%
117 | X162737500Y-100500000D03*
118 | X164462500Y-100500000D03*
119 | %TD*%
120 | D19*
121 | %TO.C,R110*%
122 | X168600000Y-92750000D03*
123 | X168600000Y-94400000D03*
124 | %TD*%
125 | D12*
126 | %TO.C,H104*%
127 | X132000000Y-85000000D03*
128 | D13*
129 | X132000000Y-85000000D03*
130 | %TD*%
131 | D20*
132 | %TO.C,C104*%
133 | X182500000Y-92962500D03*
134 | X182500000Y-95037500D03*
135 | %TD*%
136 | D21*
137 | %TO.C,R111*%
138 | X172710000Y-113035000D03*
139 | X174535000Y-113035000D03*
140 | %TD*%
141 | D22*
142 | %TO.C,C108*%
143 | X161462500Y-86500000D03*
144 | X163537500Y-86500000D03*
145 | %TD*%
146 | %TO.C,C110*%
147 | X168962500Y-113500000D03*
148 | X171037500Y-113500000D03*
149 | %TD*%
150 | D23*
151 | %TO.C,C107*%
152 | X176400000Y-102737500D03*
153 | X176400000Y-100662500D03*
154 | %TD*%
155 | D24*
156 | %TO.C,R119*%
157 | X169425000Y-86135000D03*
158 | X169425000Y-84485000D03*
159 | %TD*%
160 | D22*
161 | %TO.C,C109*%
162 | X159462500Y-84500000D03*
163 | X161537500Y-84500000D03*
164 | %TD*%
165 | D25*
166 | %TO.C,J202*%
167 | X119020000Y-96750000D03*
168 | X119020000Y-97250000D03*
169 | X119020000Y-97750000D03*
170 | X119020000Y-98250000D03*
171 | X119020000Y-98750000D03*
172 | X119020000Y-99250000D03*
173 | X119020000Y-99750000D03*
174 | X119020000Y-100250000D03*
175 | X119020000Y-100750000D03*
176 | X119020000Y-101250000D03*
177 | X119020000Y-101750000D03*
178 | X119020000Y-102250000D03*
179 | D26*
180 | X117710000Y-102300000D03*
181 | X117010000Y-101900000D03*
182 | X117010000Y-101100000D03*
183 | X117710000Y-100700000D03*
184 | X117010000Y-100300000D03*
185 | X117710000Y-99900000D03*
186 | X117710000Y-99100000D03*
187 | X117010000Y-98700000D03*
188 | X117710000Y-98300000D03*
189 | X117010000Y-97900000D03*
190 | X117010000Y-97100000D03*
191 | X117710000Y-96700000D03*
192 | D27*
193 | X116560000Y-95230000D03*
194 | X111830000Y-95230000D03*
195 | D26*
196 | X117710000Y-97500000D03*
197 | X117710000Y-101500000D03*
198 | D27*
199 | X116560000Y-103770000D03*
200 | X111830000Y-103770000D03*
201 | %TD*%
202 | D28*
203 | %TO.C,R113*%
204 | X157300000Y-92412500D03*
205 | X157300000Y-90587500D03*
206 | %TD*%
207 | D29*
208 | %TO.C,R106*%
209 | X175450000Y-105300000D03*
210 | X178550000Y-105300000D03*
211 | %TD*%
212 | D30*
213 | %TO.C,R118*%
214 | X169400000Y-87600000D03*
215 | X171050000Y-87600000D03*
216 | %TD*%
217 | D20*
218 | %TO.C,C106*%
219 | X176500000Y-85462500D03*
220 | X176500000Y-87537500D03*
221 | %TD*%
222 | D31*
223 | %TO.C,L104*%
224 | X178325000Y-87900000D03*
225 | X180275000Y-87900000D03*
226 | %TD*%
227 | D32*
228 | %TO.C,R104*%
229 | X152300000Y-87887500D03*
230 | X152300000Y-89712500D03*
231 | %TD*%
232 | D14*
233 | %TO.C,J102*%
234 | X133000000Y-95500000D03*
235 | D15*
236 | X135000000Y-95500000D03*
237 | X133000000Y-97500000D03*
238 | X135000000Y-97500000D03*
239 | X133000000Y-99500000D03*
240 | X135000000Y-99500000D03*
241 | X133000000Y-101500000D03*
242 | X135000000Y-101500000D03*
243 | X133000000Y-103500000D03*
244 | X135000000Y-103500000D03*
245 | %TD*%
246 | D30*
247 | %TO.C,R103*%
248 | X178975000Y-90900000D03*
249 | X180625000Y-90900000D03*
250 | %TD*%
251 | D24*
252 | %TO.C,R109*%
253 | X171900000Y-90725000D03*
254 | X171900000Y-89075000D03*
255 | %TD*%
256 | D33*
257 | %TO.C,U103*%
258 | X160500000Y-89095000D03*
259 | X160500000Y-90365000D03*
260 | X160500000Y-91635000D03*
261 | X160500000Y-92905000D03*
262 | X165450000Y-92905000D03*
263 | X165450000Y-91635000D03*
264 | X165450000Y-90365000D03*
265 | X165450000Y-89095000D03*
266 | %TD*%
267 | D24*
268 | %TO.C,R101*%
269 | X120750000Y-97825000D03*
270 | X120750000Y-96175000D03*
271 | %TD*%
272 | D34*
273 | %TO.C,C118*%
274 | X173800000Y-86937500D03*
275 | X173800000Y-88662500D03*
276 | %TD*%
277 | D22*
278 | %TO.C,C114*%
279 | X162462500Y-102500000D03*
280 | X164537500Y-102500000D03*
281 | %TD*%
282 | D23*
283 | %TO.C,C116*%
284 | X168400000Y-100300000D03*
285 | X168400000Y-98225000D03*
286 | %TD*%
287 | D35*
288 | %TO.C,L102*%
289 | X121087500Y-94000000D03*
290 | X122912500Y-94000000D03*
291 | %TD*%
292 | D21*
293 | %TO.C,R115*%
294 | X158000000Y-86500000D03*
295 | X159825000Y-86500000D03*
296 | %TD*%
297 | D36*
298 | %TO.C,U106*%
299 | X176110000Y-111340000D03*
300 | X176110000Y-110070000D03*
301 | X176110000Y-108800000D03*
302 | X176110000Y-107530000D03*
303 | X171160000Y-107530000D03*
304 | X171160000Y-108800000D03*
305 | X171160000Y-110070000D03*
306 | X171160000Y-111340000D03*
307 | %TD*%
308 | D24*
309 | %TO.C,R108*%
310 | X168200000Y-91325000D03*
311 | X168200000Y-89675000D03*
312 | %TD*%
313 | D23*
314 | %TO.C,C101*%
315 | X184500000Y-95000000D03*
316 | X184500000Y-92925000D03*
317 | %TD*%
318 | D37*
319 | %TO.C,U1*%
320 | X170350000Y-98500000D03*
321 | X171000000Y-98500000D03*
322 | X171650000Y-98500000D03*
323 | X172300000Y-98500000D03*
324 | X172950000Y-98500000D03*
325 | X173600000Y-98500000D03*
326 | X174250000Y-98500000D03*
327 | X174900000Y-98500000D03*
328 | X175550000Y-98500000D03*
329 | X176200000Y-98500000D03*
330 | X176850000Y-98500000D03*
331 | X177500000Y-98500000D03*
332 | X178150000Y-98500000D03*
333 | X178800000Y-98500000D03*
334 | X178800000Y-92775000D03*
335 | X178150000Y-92775000D03*
336 | X177500000Y-92775000D03*
337 | X176850000Y-92775000D03*
338 | X176200000Y-92775000D03*
339 | X175550000Y-92775000D03*
340 | X174900000Y-92775000D03*
341 | X174250000Y-92775000D03*
342 | X173600000Y-92775000D03*
343 | X172950000Y-92775000D03*
344 | X172300000Y-92775000D03*
345 | X171650000Y-92775000D03*
346 | X171000000Y-92775000D03*
347 | X170350000Y-92775000D03*
348 | D38*
349 | X174575000Y-95637500D03*
350 | %TD*%
351 | D22*
352 | %TO.C,C111*%
353 | X160212500Y-94750000D03*
354 | X162287500Y-94750000D03*
355 | %TD*%
356 | D39*
357 | %TO.C,FL101*%
358 | X127850000Y-101050000D03*
359 | X127850000Y-100250000D03*
360 | X126150000Y-100250000D03*
361 | X126150000Y-101050000D03*
362 | %TD*%
363 | D32*
364 | %TO.C,R117*%
365 | X154000000Y-105425000D03*
366 | X154000000Y-107250000D03*
367 | %TD*%
368 | D24*
369 | %TO.C,R107*%
370 | X170400000Y-90725000D03*
371 | X170400000Y-89075000D03*
372 | %TD*%
373 | D28*
374 | %TO.C,R114*%
375 | X155300000Y-92412500D03*
376 | X155300000Y-90587500D03*
377 | %TD*%
378 | D31*
379 | %TO.C,L103*%
380 | X178225000Y-101900000D03*
381 | X180175000Y-101900000D03*
382 | %TD*%
383 | D14*
384 | %TO.C,J201*%
385 | X182500000Y-98250000D03*
386 | D15*
387 | X182500000Y-100250000D03*
388 | %TD*%
389 | D40*
390 | %TO.C,L101*%
391 | X129412500Y-103500000D03*
392 | X127587500Y-103500000D03*
393 | %TD*%
394 | D32*
395 | %TO.C,R116*%
396 | X152480000Y-104987500D03*
397 | X152480000Y-106812500D03*
398 | %TD*%
399 | D12*
400 | %TO.C,H101*%
401 | X115000000Y-114000000D03*
402 | D13*
403 | X115000000Y-114000000D03*
404 | %TD*%
405 | D18*
406 | %TO.C,C112*%
407 | X166637500Y-111500000D03*
408 | X168362500Y-111500000D03*
409 | %TD*%
410 | D12*
411 | %TO.C,H103*%
412 | X132000000Y-114000000D03*
413 | D13*
414 | X132000000Y-114000000D03*
415 | %TD*%
416 | D41*
417 | %TO.C,C117*%
418 | X166500000Y-99962500D03*
419 | X166500000Y-98237500D03*
420 | %TD*%
421 | D22*
422 | %TO.C,C103*%
423 | X155262500Y-88600000D03*
424 | X157337500Y-88600000D03*
425 | %TD*%
426 | D23*
427 | %TO.C,C102*%
428 | X182200000Y-87937500D03*
429 | X182200000Y-85862500D03*
430 | %TD*%
431 | D30*
432 | %TO.C,R102*%
433 | X114925000Y-92000000D03*
434 | X116575000Y-92000000D03*
435 | %TD*%
436 | D42*
437 | %TO.C,C113*%
438 | X167112500Y-87500000D03*
439 | X165387500Y-87500000D03*
440 | %TD*%
441 | D43*
442 | %TO.C,U102*%
443 | X160500000Y-104960000D03*
444 | X160500000Y-106230000D03*
445 | X160500000Y-107500000D03*
446 | X160500000Y-108770000D03*
447 | X167500000Y-108770000D03*
448 | X167500000Y-107500000D03*
449 | X167500000Y-106230000D03*
450 | X167500000Y-104960000D03*
451 | %TD*%
452 | D32*
453 | %TO.C,R112*%
454 | X178335000Y-109822500D03*
455 | X178335000Y-111647500D03*
456 | %TD*%
457 | M02*
458 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-F_Paste.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:27:27+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Paste,Top*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:27:27*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
33 | %ADD11RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
34 | %ADD12RoundRect,0.100000X-0.100000X0.712500X-0.100000X-0.712500X0.100000X-0.712500X0.100000X0.712500X0*%
35 | %ADD13RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
36 | %ADD14RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
37 | %ADD15RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
38 | %ADD16RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
39 | %ADD17RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
40 | %ADD18RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
41 | %ADD19RoundRect,0.200000X0.275000X-0.200000X0.275000X0.200000X-0.275000X0.200000X-0.275000X-0.200000X0*%
42 | %ADD20R,1.100000X0.300000*%
43 | %ADD21RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
44 | %ADD22RoundRect,0.250000X-0.400000X-0.625000X0.400000X-0.625000X0.400000X0.625000X-0.400000X0.625000X0*%
45 | %ADD23RoundRect,0.200000X-0.200000X-0.275000X0.200000X-0.275000X0.200000X0.275000X-0.200000X0.275000X0*%
46 | %ADD24R,0.850000X2.300000*%
47 | %ADD25RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
48 | %ADD26RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
49 | %ADD27RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
50 | %ADD28RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
51 | %ADD29RoundRect,0.150000X0.825000X0.150000X-0.825000X0.150000X-0.825000X-0.150000X0.825000X-0.150000X0*%
52 | %ADD30RoundRect,0.250001X1.924999X-0.899999X1.924999X0.899999X-1.924999X0.899999X-1.924999X-0.899999X0*%
53 | %ADD31RoundRect,0.100000X0.100000X-0.637500X0.100000X0.637500X-0.100000X0.637500X-0.100000X-0.637500X0*%
54 | %ADD32R,0.900000X0.400000*%
55 | %ADD33RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
56 | %ADD34RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
57 | %ADD35RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
58 | %ADD36RoundRect,0.150000X-0.800000X-0.150000X0.800000X-0.150000X0.800000X0.150000X-0.800000X0.150000X0*%
59 | G04 APERTURE END LIST*
60 | D10*
61 | %TO.C,R105*%
62 | X158225000Y-107500000D03*
63 | X156575000Y-107500000D03*
64 | %TD*%
65 | D11*
66 | %TO.C,C105*%
67 | X173675000Y-105400000D03*
68 | X171600000Y-105400000D03*
69 | %TD*%
70 | D12*
71 | %TO.C,U101*%
72 | X124475000Y-98137500D03*
73 | X123825000Y-98137500D03*
74 | X123175000Y-98137500D03*
75 | X122525000Y-98137500D03*
76 | X122525000Y-102362500D03*
77 | X123175000Y-102362500D03*
78 | X123825000Y-102362500D03*
79 | X124475000Y-102362500D03*
80 | %TD*%
81 | D13*
82 | %TO.C,C115*%
83 | X162737500Y-100500000D03*
84 | X164462500Y-100500000D03*
85 | %TD*%
86 | D14*
87 | %TO.C,R110*%
88 | X168600000Y-92750000D03*
89 | X168600000Y-94400000D03*
90 | %TD*%
91 | D15*
92 | %TO.C,C104*%
93 | X182500000Y-92962500D03*
94 | X182500000Y-95037500D03*
95 | %TD*%
96 | D16*
97 | %TO.C,R111*%
98 | X172710000Y-113035000D03*
99 | X174535000Y-113035000D03*
100 | %TD*%
101 | D17*
102 | %TO.C,C108*%
103 | X161462500Y-86500000D03*
104 | X163537500Y-86500000D03*
105 | %TD*%
106 | %TO.C,C110*%
107 | X168962500Y-113500000D03*
108 | X171037500Y-113500000D03*
109 | %TD*%
110 | D18*
111 | %TO.C,C107*%
112 | X176400000Y-102737500D03*
113 | X176400000Y-100662500D03*
114 | %TD*%
115 | D19*
116 | %TO.C,R119*%
117 | X169425000Y-86135000D03*
118 | X169425000Y-84485000D03*
119 | %TD*%
120 | D17*
121 | %TO.C,C109*%
122 | X159462500Y-84500000D03*
123 | X161537500Y-84500000D03*
124 | %TD*%
125 | D20*
126 | %TO.C,J202*%
127 | X119020000Y-96750000D03*
128 | X119020000Y-97250000D03*
129 | X119020000Y-97750000D03*
130 | X119020000Y-98250000D03*
131 | X119020000Y-98750000D03*
132 | X119020000Y-99250000D03*
133 | X119020000Y-99750000D03*
134 | X119020000Y-100250000D03*
135 | X119020000Y-100750000D03*
136 | X119020000Y-101250000D03*
137 | X119020000Y-101750000D03*
138 | X119020000Y-102250000D03*
139 | %TD*%
140 | D21*
141 | %TO.C,R113*%
142 | X157300000Y-92412500D03*
143 | X157300000Y-90587500D03*
144 | %TD*%
145 | D22*
146 | %TO.C,R106*%
147 | X175450000Y-105300000D03*
148 | X178550000Y-105300000D03*
149 | %TD*%
150 | D23*
151 | %TO.C,R118*%
152 | X169400000Y-87600000D03*
153 | X171050000Y-87600000D03*
154 | %TD*%
155 | D15*
156 | %TO.C,C106*%
157 | X176500000Y-85462500D03*
158 | X176500000Y-87537500D03*
159 | %TD*%
160 | D24*
161 | %TO.C,L104*%
162 | X178325000Y-87900000D03*
163 | X180275000Y-87900000D03*
164 | %TD*%
165 | D25*
166 | %TO.C,R104*%
167 | X152300000Y-87887500D03*
168 | X152300000Y-89712500D03*
169 | %TD*%
170 | D23*
171 | %TO.C,R103*%
172 | X178975000Y-90900000D03*
173 | X180625000Y-90900000D03*
174 | %TD*%
175 | D19*
176 | %TO.C,R109*%
177 | X171900000Y-90725000D03*
178 | X171900000Y-89075000D03*
179 | %TD*%
180 | D26*
181 | %TO.C,U103*%
182 | X160500000Y-89095000D03*
183 | X160500000Y-90365000D03*
184 | X160500000Y-91635000D03*
185 | X160500000Y-92905000D03*
186 | X165450000Y-92905000D03*
187 | X165450000Y-91635000D03*
188 | X165450000Y-90365000D03*
189 | X165450000Y-89095000D03*
190 | %TD*%
191 | D19*
192 | %TO.C,R101*%
193 | X120750000Y-97825000D03*
194 | X120750000Y-96175000D03*
195 | %TD*%
196 | D27*
197 | %TO.C,C118*%
198 | X173800000Y-86937500D03*
199 | X173800000Y-88662500D03*
200 | %TD*%
201 | D17*
202 | %TO.C,C114*%
203 | X162462500Y-102500000D03*
204 | X164537500Y-102500000D03*
205 | %TD*%
206 | D18*
207 | %TO.C,C116*%
208 | X168400000Y-100300000D03*
209 | X168400000Y-98225000D03*
210 | %TD*%
211 | D28*
212 | %TO.C,L102*%
213 | X121087500Y-94000000D03*
214 | X122912500Y-94000000D03*
215 | %TD*%
216 | D16*
217 | %TO.C,R115*%
218 | X158000000Y-86500000D03*
219 | X159825000Y-86500000D03*
220 | %TD*%
221 | D29*
222 | %TO.C,U106*%
223 | X176110000Y-111340000D03*
224 | X176110000Y-110070000D03*
225 | X176110000Y-108800000D03*
226 | X176110000Y-107530000D03*
227 | X171160000Y-107530000D03*
228 | X171160000Y-108800000D03*
229 | X171160000Y-110070000D03*
230 | X171160000Y-111340000D03*
231 | %TD*%
232 | D19*
233 | %TO.C,R108*%
234 | X168200000Y-91325000D03*
235 | X168200000Y-89675000D03*
236 | %TD*%
237 | D18*
238 | %TO.C,C101*%
239 | X184500000Y-95000000D03*
240 | X184500000Y-92925000D03*
241 | %TD*%
242 | D30*
243 | %TO.C,U1*%
244 | X174575000Y-95637500D03*
245 | D31*
246 | X170350000Y-98500000D03*
247 | X171000000Y-98500000D03*
248 | X171650000Y-98500000D03*
249 | X172300000Y-98500000D03*
250 | X172950000Y-98500000D03*
251 | X173600000Y-98500000D03*
252 | X174250000Y-98500000D03*
253 | X174900000Y-98500000D03*
254 | X175550000Y-98500000D03*
255 | X176200000Y-98500000D03*
256 | X176850000Y-98500000D03*
257 | X177500000Y-98500000D03*
258 | X178150000Y-98500000D03*
259 | X178800000Y-98500000D03*
260 | X178800000Y-92775000D03*
261 | X178150000Y-92775000D03*
262 | X177500000Y-92775000D03*
263 | X176850000Y-92775000D03*
264 | X176200000Y-92775000D03*
265 | X175550000Y-92775000D03*
266 | X174900000Y-92775000D03*
267 | X174250000Y-92775000D03*
268 | X173600000Y-92775000D03*
269 | X172950000Y-92775000D03*
270 | X172300000Y-92775000D03*
271 | X171650000Y-92775000D03*
272 | X171000000Y-92775000D03*
273 | X170350000Y-92775000D03*
274 | %TD*%
275 | D17*
276 | %TO.C,C111*%
277 | X160212500Y-94750000D03*
278 | X162287500Y-94750000D03*
279 | %TD*%
280 | D32*
281 | %TO.C,FL101*%
282 | X127850000Y-101050000D03*
283 | X127850000Y-100250000D03*
284 | X126150000Y-100250000D03*
285 | X126150000Y-101050000D03*
286 | %TD*%
287 | D25*
288 | %TO.C,R117*%
289 | X154000000Y-105425000D03*
290 | X154000000Y-107250000D03*
291 | %TD*%
292 | D19*
293 | %TO.C,R107*%
294 | X170400000Y-90725000D03*
295 | X170400000Y-89075000D03*
296 | %TD*%
297 | D21*
298 | %TO.C,R114*%
299 | X155300000Y-92412500D03*
300 | X155300000Y-90587500D03*
301 | %TD*%
302 | D24*
303 | %TO.C,L103*%
304 | X178225000Y-101900000D03*
305 | X180175000Y-101900000D03*
306 | %TD*%
307 | D33*
308 | %TO.C,L101*%
309 | X129412500Y-103500000D03*
310 | X127587500Y-103500000D03*
311 | %TD*%
312 | D25*
313 | %TO.C,R116*%
314 | X152480000Y-104987500D03*
315 | X152480000Y-106812500D03*
316 | %TD*%
317 | D13*
318 | %TO.C,C112*%
319 | X166637500Y-111500000D03*
320 | X168362500Y-111500000D03*
321 | %TD*%
322 | D34*
323 | %TO.C,C117*%
324 | X166500000Y-99962500D03*
325 | X166500000Y-98237500D03*
326 | %TD*%
327 | D17*
328 | %TO.C,C103*%
329 | X155262500Y-88600000D03*
330 | X157337500Y-88600000D03*
331 | %TD*%
332 | D18*
333 | %TO.C,C102*%
334 | X182200000Y-87937500D03*
335 | X182200000Y-85862500D03*
336 | %TD*%
337 | D23*
338 | %TO.C,R102*%
339 | X114925000Y-92000000D03*
340 | X116575000Y-92000000D03*
341 | %TD*%
342 | D35*
343 | %TO.C,C113*%
344 | X167112500Y-87500000D03*
345 | X165387500Y-87500000D03*
346 | %TD*%
347 | D36*
348 | %TO.C,U102*%
349 | X160500000Y-104960000D03*
350 | X160500000Y-106230000D03*
351 | X160500000Y-107500000D03*
352 | X160500000Y-108770000D03*
353 | X167500000Y-108770000D03*
354 | X167500000Y-107500000D03*
355 | X167500000Y-106230000D03*
356 | X167500000Y-104960000D03*
357 | %TD*%
358 | D25*
359 | %TO.C,R112*%
360 | X178335000Y-109822500D03*
361 | X178335000Y-111647500D03*
362 | %TD*%
363 | M02*
364 |
--------------------------------------------------------------------------------
/examples/pcb-2-a/tec-controller-job.gbrjob:
--------------------------------------------------------------------------------
1 | {
2 | "Header": {
3 | "GenerationSoftware": {
4 | "Vendor": "KiCad",
5 | "Application": "Pcbnew",
6 | "Version": "7.0.6-7.0.6~ubuntu22.04.1"
7 | },
8 | "CreationDate": "2023-09-01T17:27:27+01:00"
9 | },
10 | "GeneralSpecs": {
11 | "ProjectId": {
12 | "Name": "tec-controller",
13 | "GUID": "7465632d-636f-46e7-9472-6f6c6c65722e",
14 | "Revision": "rev?"
15 | },
16 | "Size": {
17 | "X": 80.1,
18 | "Y": 39.1
19 | },
20 | "LayerNumber": 2,
21 | "BoardThickness": 1.6,
22 | "Finish": "None"
23 | },
24 | "DesignRules": [
25 | {
26 | "Layers": "Outer",
27 | "PadToPad": 0.15,
28 | "PadToTrack": 0.15,
29 | "TrackToTrack": 0.15,
30 | "MinLineWidth": 0.2,
31 | "TrackToRegion": 0.508,
32 | "RegionToRegion": 0.508
33 | }
34 | ],
35 | "FilesAttributes": [
36 | {
37 | "Path": "tec-controller-F_Cu.gbr",
38 | "FileFunction": "Copper,L1,Top",
39 | "FilePolarity": "Positive"
40 | },
41 | {
42 | "Path": "tec-controller-B_Cu.gbr",
43 | "FileFunction": "Copper,L2,Bot",
44 | "FilePolarity": "Positive"
45 | },
46 | {
47 | "Path": "tec-controller-F_Paste.gbr",
48 | "FileFunction": "SolderPaste,Top",
49 | "FilePolarity": "Positive"
50 | },
51 | {
52 | "Path": "tec-controller-B_Paste.gbr",
53 | "FileFunction": "SolderPaste,Bot",
54 | "FilePolarity": "Positive"
55 | },
56 | {
57 | "Path": "tec-controller-F_Silkscreen.gbr",
58 | "FileFunction": "Legend,Top",
59 | "FilePolarity": "Positive"
60 | },
61 | {
62 | "Path": "tec-controller-B_Silkscreen.gbr",
63 | "FileFunction": "Legend,Bot",
64 | "FilePolarity": "Positive"
65 | },
66 | {
67 | "Path": "tec-controller-F_Mask.gbr",
68 | "FileFunction": "SolderMask,Top",
69 | "FilePolarity": "Negative"
70 | },
71 | {
72 | "Path": "tec-controller-B_Mask.gbr",
73 | "FileFunction": "SolderMask,Bot",
74 | "FilePolarity": "Negative"
75 | },
76 | {
77 | "Path": "tec-controller-Edge_Cuts.gbr",
78 | "FileFunction": "Profile",
79 | "FilePolarity": "Positive"
80 | }
81 | ],
82 | "MaterialStackup": [
83 | {
84 | "Type": "Legend",
85 | "Name": "Top Silk Screen"
86 | },
87 | {
88 | "Type": "SolderPaste",
89 | "Name": "Top Solder Paste"
90 | },
91 | {
92 | "Type": "SolderMask",
93 | "Thickness": 0.01,
94 | "Name": "Top Solder Mask"
95 | },
96 | {
97 | "Type": "Copper",
98 | "Thickness": 0.035,
99 | "Name": "F.Cu"
100 | },
101 | {
102 | "Type": "Dielectric",
103 | "Thickness": 1.51,
104 | "Material": "FR4",
105 | "Name": "F.Cu/B.Cu",
106 | "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
107 | },
108 | {
109 | "Type": "Copper",
110 | "Thickness": 0.035,
111 | "Name": "B.Cu"
112 | },
113 | {
114 | "Type": "SolderMask",
115 | "Thickness": 0.01,
116 | "Name": "Bottom Solder Mask"
117 | },
118 | {
119 | "Type": "SolderPaste",
120 | "Name": "Bottom Solder Paste"
121 | },
122 | {
123 | "Type": "Legend",
124 | "Name": "Bottom Silk Screen"
125 | }
126 | ]
127 | }
128 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-B_Mask.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:28:15+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Soldermask,Bot*%
6 | %TF.FilePolarity,Negative*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:28:15*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | %AMOutline5P*
32 | 0 Free polygon, 5 corners , with rotation*
33 | 0 The origin of the aperture is its center*
34 | 0 number of corners: always 5*
35 | 0 $1 to $10 corner X, Y*
36 | 0 $11 Rotation angle, in degrees counterclockwise*
37 | 0 create outline with 5 corners*
38 | 4,1,5,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$1,$2,$11*%
39 | %AMOutline6P*
40 | 0 Free polygon, 6 corners , with rotation*
41 | 0 The origin of the aperture is its center*
42 | 0 number of corners: always 6*
43 | 0 $1 to $12 corner X, Y*
44 | 0 $13 Rotation angle, in degrees counterclockwise*
45 | 0 create outline with 6 corners*
46 | 4,1,6,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$1,$2,$13*%
47 | %AMOutline7P*
48 | 0 Free polygon, 7 corners , with rotation*
49 | 0 The origin of the aperture is its center*
50 | 0 number of corners: always 7*
51 | 0 $1 to $14 corner X, Y*
52 | 0 $15 Rotation angle, in degrees counterclockwise*
53 | 0 create outline with 7 corners*
54 | 4,1,7,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$1,$2,$15*%
55 | %AMOutline8P*
56 | 0 Free polygon, 8 corners , with rotation*
57 | 0 The origin of the aperture is its center*
58 | 0 number of corners: always 8*
59 | 0 $1 to $16 corner X, Y*
60 | 0 $17 Rotation angle, in degrees counterclockwise*
61 | 0 create outline with 8 corners*
62 | 4,1,8,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$1,$2,$17*%
63 | G04 Aperture macros list end*
64 | %ADD10C,4.000000*%
65 | %ADD11C,3.600000*%
66 | %ADD12C,5.700000*%
67 | %ADD13R,1.350000X1.350000*%
68 | %ADD14O,1.350000X1.350000*%
69 | %ADD15C,0.650000*%
70 | %ADD16O,1.600000X1.600000*%
71 | %ADD17Outline5P,-1.930000X0.500000X1.930000X0.500000X1.930000X-0.500000X-1.730000X-0.500000X-1.930000X-0.300000X0.000000*%
72 | %ADD18R,3.860000X1.000000*%
73 | %ADD19RoundRect,0.375000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0.375000X-0.625000X0*%
74 | G04 APERTURE END LIST*
75 | D10*
76 | X150000000Y-119000000D02*
77 | X190000000Y-119000000D01*
78 | X141000000Y-80000000D02*
79 | X190000000Y-80000000D01*
80 | X110000000Y-80000000D02*
81 | X137000000Y-80000000D01*
82 | X110000000Y-119000000D02*
83 | X146000000Y-119000000D01*
84 | D11*
85 | %TO.C,H102*%
86 | X115000000Y-85000000D03*
87 | D12*
88 | X115000000Y-85000000D03*
89 | %TD*%
90 | D13*
91 | %TO.C,J101*%
92 | X152500000Y-96500000D03*
93 | D14*
94 | X154500000Y-96500000D03*
95 | X152500000Y-98500000D03*
96 | X154500000Y-98500000D03*
97 | X152500000Y-100500000D03*
98 | X154500000Y-100500000D03*
99 | X152500000Y-102500000D03*
100 | X154500000Y-102500000D03*
101 | %TD*%
102 | D11*
103 | %TO.C,H104*%
104 | X132000000Y-85000000D03*
105 | D12*
106 | X132000000Y-85000000D03*
107 | %TD*%
108 | D15*
109 | %TO.C,J202*%
110 | X117710000Y-102300000D03*
111 | X117010000Y-101900000D03*
112 | X117010000Y-101100000D03*
113 | X117710000Y-100700000D03*
114 | X117010000Y-100300000D03*
115 | X117710000Y-99900000D03*
116 | X117710000Y-99100000D03*
117 | X117010000Y-98700000D03*
118 | X117710000Y-98300000D03*
119 | X117010000Y-97900000D03*
120 | X117010000Y-97100000D03*
121 | X117710000Y-96700000D03*
122 | D16*
123 | X116560000Y-95230000D03*
124 | X111830000Y-95230000D03*
125 | D15*
126 | X117710000Y-97500000D03*
127 | X117710000Y-101500000D03*
128 | D16*
129 | X116560000Y-103770000D03*
130 | X111830000Y-103770000D03*
131 | %TD*%
132 | D13*
133 | %TO.C,J102*%
134 | X133000000Y-95500000D03*
135 | D14*
136 | X135000000Y-95500000D03*
137 | X133000000Y-97500000D03*
138 | X135000000Y-97500000D03*
139 | X133000000Y-99500000D03*
140 | X135000000Y-99500000D03*
141 | X133000000Y-101500000D03*
142 | X135000000Y-101500000D03*
143 | X133000000Y-103500000D03*
144 | X135000000Y-103500000D03*
145 | %TD*%
146 | D13*
147 | %TO.C,J201*%
148 | X182500000Y-98250000D03*
149 | D14*
150 | X182500000Y-100250000D03*
151 | %TD*%
152 | D11*
153 | %TO.C,H101*%
154 | X115000000Y-114000000D03*
155 | D12*
156 | X115000000Y-114000000D03*
157 | %TD*%
158 | D11*
159 | %TO.C,H103*%
160 | X132000000Y-114000000D03*
161 | D12*
162 | X132000000Y-114000000D03*
163 | %TD*%
164 | D17*
165 | %TO.C,PE1*%
166 | X187750000Y-102360000D03*
167 | D18*
168 | X187750000Y-96640000D03*
169 | %TD*%
170 | D19*
171 | %TO.C,SW103*%
172 | X166075596Y-113500000D03*
173 | X159575596Y-113500000D03*
174 | %TD*%
175 | %TO.C,SW102*%
176 | X166075596Y-108380000D03*
177 | X159575596Y-108380000D03*
178 | %TD*%
179 | %TO.C,SW101*%
180 | X166075596Y-103260000D03*
181 | X159575596Y-103260000D03*
182 | %TD*%
183 | M02*
184 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:28:15+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Paste,Bot*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:28:15*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | %AMOutline5P*
32 | 0 Free polygon, 5 corners , with rotation*
33 | 0 The origin of the aperture is its center*
34 | 0 number of corners: always 5*
35 | 0 $1 to $10 corner X, Y*
36 | 0 $11 Rotation angle, in degrees counterclockwise*
37 | 0 create outline with 5 corners*
38 | 4,1,5,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$1,$2,$11*%
39 | %AMOutline6P*
40 | 0 Free polygon, 6 corners , with rotation*
41 | 0 The origin of the aperture is its center*
42 | 0 number of corners: always 6*
43 | 0 $1 to $12 corner X, Y*
44 | 0 $13 Rotation angle, in degrees counterclockwise*
45 | 0 create outline with 6 corners*
46 | 4,1,6,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$1,$2,$13*%
47 | %AMOutline7P*
48 | 0 Free polygon, 7 corners , with rotation*
49 | 0 The origin of the aperture is its center*
50 | 0 number of corners: always 7*
51 | 0 $1 to $14 corner X, Y*
52 | 0 $15 Rotation angle, in degrees counterclockwise*
53 | 0 create outline with 7 corners*
54 | 4,1,7,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$1,$2,$15*%
55 | %AMOutline8P*
56 | 0 Free polygon, 8 corners , with rotation*
57 | 0 The origin of the aperture is its center*
58 | 0 number of corners: always 8*
59 | 0 $1 to $16 corner X, Y*
60 | 0 $17 Rotation angle, in degrees counterclockwise*
61 | 0 create outline with 8 corners*
62 | 4,1,8,$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$1,$2,$17*%
63 | G04 Aperture macros list end*
64 | %ADD10Outline5P,-1.930000X0.500000X1.930000X0.500000X1.930000X-0.500000X-1.730000X-0.500000X-1.930000X-0.300000X0.000000*%
65 | %ADD11R,3.860000X1.000000*%
66 | %ADD12RoundRect,0.375000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0.375000X-0.625000X0*%
67 | G04 APERTURE END LIST*
68 | D10*
69 | %TO.C,PE1*%
70 | X187750000Y-102360000D03*
71 | D11*
72 | X187750000Y-96640000D03*
73 | %TD*%
74 | D12*
75 | %TO.C,SW103*%
76 | X166075596Y-113500000D03*
77 | X159575596Y-113500000D03*
78 | %TD*%
79 | %TO.C,SW102*%
80 | X166075596Y-108380000D03*
81 | X159575596Y-108380000D03*
82 | %TD*%
83 | %TO.C,SW101*%
84 | X166075596Y-103260000D03*
85 | X159575596Y-103260000D03*
86 | %TD*%
87 | M02*
88 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-Edge_Cuts.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:28:15+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Profile,NP*%
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:28:15*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | %TA.AperFunction,Profile*%
14 | %ADD10C,0.100000*%
15 | %TD*%
16 | G04 APERTURE END LIST*
17 | D10*
18 | X110000000Y-119000000D02*
19 | X110000000Y-80000000D01*
20 | X137000000Y-108000000D02*
21 | G75*
22 | G03*
23 | X141000000Y-108000000I2000000J0D01*
24 | G01*
25 | X141000000Y-108000000D02*
26 | X141000000Y-80000000D01*
27 | X150000000Y-119000000D02*
28 | X190000000Y-119000000D01*
29 | X146000000Y-91000000D02*
30 | X146000000Y-119000000D01*
31 | X146000000Y-119000000D02*
32 | X110000000Y-119000000D01*
33 | X141000000Y-80000000D02*
34 | X190000000Y-80000000D01*
35 | X110000000Y-80000000D02*
36 | X137000000Y-80000000D01*
37 | X137000000Y-80000000D02*
38 | X137000000Y-108000000D01*
39 | X190000000Y-80000000D02*
40 | X190000000Y-119000000D01*
41 | X150000000Y-119000000D02*
42 | X150000000Y-91000000D01*
43 | X150000000Y-91000000D02*
44 | G75*
45 | G03*
46 | X146000000Y-91000000I-2000000J0D01*
47 | G01*
48 | M02*
49 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-F_Mask.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:28:15+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Soldermask,Top*%
6 | %TF.FilePolarity,Negative*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:28:15*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10C,4.000000*%
33 | %ADD11RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
34 | %ADD12C,3.600000*%
35 | %ADD13C,5.700000*%
36 | %ADD14R,1.350000X1.350000*%
37 | %ADD15O,1.350000X1.350000*%
38 | %ADD16RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
39 | %ADD17RoundRect,0.100000X-0.100000X0.712500X-0.100000X-0.712500X0.100000X-0.712500X0.100000X0.712500X0*%
40 | %ADD18RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
41 | %ADD19RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
42 | %ADD20RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
43 | %ADD21RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
44 | %ADD22RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
45 | %ADD23RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
46 | %ADD24RoundRect,0.200000X0.275000X-0.200000X0.275000X0.200000X-0.275000X0.200000X-0.275000X-0.200000X0*%
47 | %ADD25R,1.100000X0.300000*%
48 | %ADD26C,0.650000*%
49 | %ADD27O,1.600000X1.600000*%
50 | %ADD28RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
51 | %ADD29RoundRect,0.250000X-0.400000X-0.625000X0.400000X-0.625000X0.400000X0.625000X-0.400000X0.625000X0*%
52 | %ADD30RoundRect,0.200000X-0.200000X-0.275000X0.200000X-0.275000X0.200000X0.275000X-0.200000X0.275000X0*%
53 | %ADD31R,0.850000X2.300000*%
54 | %ADD32RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
55 | %ADD33RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
56 | %ADD34RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
57 | %ADD35RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
58 | %ADD36RoundRect,0.150000X0.825000X0.150000X-0.825000X0.150000X-0.825000X-0.150000X0.825000X-0.150000X0*%
59 | %ADD37RoundRect,0.100000X0.100000X-0.637500X0.100000X0.637500X-0.100000X0.637500X-0.100000X-0.637500X0*%
60 | %ADD38R,5.400000X2.850000*%
61 | %ADD39R,0.900000X0.400000*%
62 | %ADD40RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
63 | %ADD41RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
64 | %ADD42RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
65 | %ADD43RoundRect,0.150000X-0.800000X-0.150000X0.800000X-0.150000X0.800000X0.150000X-0.800000X0.150000X0*%
66 | G04 APERTURE END LIST*
67 | D10*
68 | X141000000Y-80000000D02*
69 | X190000000Y-80000000D01*
70 | X110000000Y-119000000D02*
71 | X146000000Y-119000000D01*
72 | X150000000Y-119000000D02*
73 | X190000000Y-119000000D01*
74 | X110000000Y-80000000D02*
75 | X137000000Y-80000000D01*
76 | D11*
77 | %TO.C,R105*%
78 | X158225000Y-107500000D03*
79 | X156575000Y-107500000D03*
80 | %TD*%
81 | D12*
82 | %TO.C,H102*%
83 | X115000000Y-85000000D03*
84 | D13*
85 | X115000000Y-85000000D03*
86 | %TD*%
87 | D14*
88 | %TO.C,J101*%
89 | X152500000Y-96500000D03*
90 | D15*
91 | X154500000Y-96500000D03*
92 | X152500000Y-98500000D03*
93 | X154500000Y-98500000D03*
94 | X152500000Y-100500000D03*
95 | X154500000Y-100500000D03*
96 | X152500000Y-102500000D03*
97 | X154500000Y-102500000D03*
98 | %TD*%
99 | D16*
100 | %TO.C,C105*%
101 | X173675000Y-105400000D03*
102 | X171600000Y-105400000D03*
103 | %TD*%
104 | D17*
105 | %TO.C,U101*%
106 | X124475000Y-98137500D03*
107 | X123825000Y-98137500D03*
108 | X123175000Y-98137500D03*
109 | X122525000Y-98137500D03*
110 | X122525000Y-102362500D03*
111 | X123175000Y-102362500D03*
112 | X123825000Y-102362500D03*
113 | X124475000Y-102362500D03*
114 | %TD*%
115 | D18*
116 | %TO.C,C115*%
117 | X162737500Y-100500000D03*
118 | X164462500Y-100500000D03*
119 | %TD*%
120 | D19*
121 | %TO.C,R110*%
122 | X168600000Y-92750000D03*
123 | X168600000Y-94400000D03*
124 | %TD*%
125 | D12*
126 | %TO.C,H104*%
127 | X132000000Y-85000000D03*
128 | D13*
129 | X132000000Y-85000000D03*
130 | %TD*%
131 | D20*
132 | %TO.C,C104*%
133 | X182500000Y-92962500D03*
134 | X182500000Y-95037500D03*
135 | %TD*%
136 | D21*
137 | %TO.C,R111*%
138 | X172710000Y-113035000D03*
139 | X174535000Y-113035000D03*
140 | %TD*%
141 | D22*
142 | %TO.C,C108*%
143 | X161462500Y-86500000D03*
144 | X163537500Y-86500000D03*
145 | %TD*%
146 | %TO.C,C110*%
147 | X168962500Y-113500000D03*
148 | X171037500Y-113500000D03*
149 | %TD*%
150 | D23*
151 | %TO.C,C107*%
152 | X176400000Y-102737500D03*
153 | X176400000Y-100662500D03*
154 | %TD*%
155 | D24*
156 | %TO.C,R119*%
157 | X169425000Y-86135000D03*
158 | X169425000Y-84485000D03*
159 | %TD*%
160 | D22*
161 | %TO.C,C109*%
162 | X159462500Y-84500000D03*
163 | X161537500Y-84500000D03*
164 | %TD*%
165 | D25*
166 | %TO.C,J202*%
167 | X119020000Y-96750000D03*
168 | X119020000Y-97250000D03*
169 | X119020000Y-97750000D03*
170 | X119020000Y-98250000D03*
171 | X119020000Y-98750000D03*
172 | X119020000Y-99250000D03*
173 | X119020000Y-99750000D03*
174 | X119020000Y-100250000D03*
175 | X119020000Y-100750000D03*
176 | X119020000Y-101250000D03*
177 | X119020000Y-101750000D03*
178 | X119020000Y-102250000D03*
179 | D26*
180 | X117710000Y-102300000D03*
181 | X117010000Y-101900000D03*
182 | X117010000Y-101100000D03*
183 | X117710000Y-100700000D03*
184 | X117010000Y-100300000D03*
185 | X117710000Y-99900000D03*
186 | X117710000Y-99100000D03*
187 | X117010000Y-98700000D03*
188 | X117710000Y-98300000D03*
189 | X117010000Y-97900000D03*
190 | X117010000Y-97100000D03*
191 | X117710000Y-96700000D03*
192 | D27*
193 | X116560000Y-95230000D03*
194 | X111830000Y-95230000D03*
195 | D26*
196 | X117710000Y-97500000D03*
197 | X117710000Y-101500000D03*
198 | D27*
199 | X116560000Y-103770000D03*
200 | X111830000Y-103770000D03*
201 | %TD*%
202 | D28*
203 | %TO.C,R113*%
204 | X157300000Y-92412500D03*
205 | X157300000Y-90587500D03*
206 | %TD*%
207 | D29*
208 | %TO.C,R106*%
209 | X175450000Y-105300000D03*
210 | X178550000Y-105300000D03*
211 | %TD*%
212 | D30*
213 | %TO.C,R118*%
214 | X169400000Y-87600000D03*
215 | X171050000Y-87600000D03*
216 | %TD*%
217 | D20*
218 | %TO.C,C106*%
219 | X176500000Y-85462500D03*
220 | X176500000Y-87537500D03*
221 | %TD*%
222 | D31*
223 | %TO.C,L104*%
224 | X178325000Y-87900000D03*
225 | X180275000Y-87900000D03*
226 | %TD*%
227 | D32*
228 | %TO.C,R104*%
229 | X152300000Y-87887500D03*
230 | X152300000Y-89712500D03*
231 | %TD*%
232 | D14*
233 | %TO.C,J102*%
234 | X133000000Y-95500000D03*
235 | D15*
236 | X135000000Y-95500000D03*
237 | X133000000Y-97500000D03*
238 | X135000000Y-97500000D03*
239 | X133000000Y-99500000D03*
240 | X135000000Y-99500000D03*
241 | X133000000Y-101500000D03*
242 | X135000000Y-101500000D03*
243 | X133000000Y-103500000D03*
244 | X135000000Y-103500000D03*
245 | %TD*%
246 | D30*
247 | %TO.C,R103*%
248 | X178975000Y-90900000D03*
249 | X180625000Y-90900000D03*
250 | %TD*%
251 | D24*
252 | %TO.C,R109*%
253 | X171900000Y-90725000D03*
254 | X171900000Y-89075000D03*
255 | %TD*%
256 | D33*
257 | %TO.C,U103*%
258 | X160500000Y-89095000D03*
259 | X160500000Y-90365000D03*
260 | X160500000Y-91635000D03*
261 | X160500000Y-92905000D03*
262 | X165450000Y-92905000D03*
263 | X165450000Y-91635000D03*
264 | X165450000Y-90365000D03*
265 | X165450000Y-89095000D03*
266 | %TD*%
267 | D24*
268 | %TO.C,R101*%
269 | X120750000Y-97825000D03*
270 | X120750000Y-96175000D03*
271 | %TD*%
272 | D34*
273 | %TO.C,C118*%
274 | X173800000Y-86937500D03*
275 | X173800000Y-88662500D03*
276 | %TD*%
277 | D22*
278 | %TO.C,C114*%
279 | X162462500Y-102500000D03*
280 | X164537500Y-102500000D03*
281 | %TD*%
282 | D23*
283 | %TO.C,C116*%
284 | X168400000Y-100300000D03*
285 | X168400000Y-98225000D03*
286 | %TD*%
287 | D35*
288 | %TO.C,L102*%
289 | X121087500Y-94000000D03*
290 | X122912500Y-94000000D03*
291 | %TD*%
292 | D21*
293 | %TO.C,R115*%
294 | X158000000Y-86500000D03*
295 | X159825000Y-86500000D03*
296 | %TD*%
297 | D36*
298 | %TO.C,U106*%
299 | X176110000Y-111340000D03*
300 | X176110000Y-110070000D03*
301 | X176110000Y-108800000D03*
302 | X176110000Y-107530000D03*
303 | X171160000Y-107530000D03*
304 | X171160000Y-108800000D03*
305 | X171160000Y-110070000D03*
306 | X171160000Y-111340000D03*
307 | %TD*%
308 | D24*
309 | %TO.C,R108*%
310 | X168200000Y-91325000D03*
311 | X168200000Y-89675000D03*
312 | %TD*%
313 | D23*
314 | %TO.C,C101*%
315 | X184500000Y-95000000D03*
316 | X184500000Y-92925000D03*
317 | %TD*%
318 | D37*
319 | %TO.C,U1*%
320 | X170350000Y-98500000D03*
321 | X171000000Y-98500000D03*
322 | X171650000Y-98500000D03*
323 | X172300000Y-98500000D03*
324 | X172950000Y-98500000D03*
325 | X173600000Y-98500000D03*
326 | X174250000Y-98500000D03*
327 | X174900000Y-98500000D03*
328 | X175550000Y-98500000D03*
329 | X176200000Y-98500000D03*
330 | X176850000Y-98500000D03*
331 | X177500000Y-98500000D03*
332 | X178150000Y-98500000D03*
333 | X178800000Y-98500000D03*
334 | X178800000Y-92775000D03*
335 | X178150000Y-92775000D03*
336 | X177500000Y-92775000D03*
337 | X176850000Y-92775000D03*
338 | X176200000Y-92775000D03*
339 | X175550000Y-92775000D03*
340 | X174900000Y-92775000D03*
341 | X174250000Y-92775000D03*
342 | X173600000Y-92775000D03*
343 | X172950000Y-92775000D03*
344 | X172300000Y-92775000D03*
345 | X171650000Y-92775000D03*
346 | X171000000Y-92775000D03*
347 | X170350000Y-92775000D03*
348 | D38*
349 | X174575000Y-95637500D03*
350 | %TD*%
351 | D22*
352 | %TO.C,C111*%
353 | X160212500Y-94750000D03*
354 | X162287500Y-94750000D03*
355 | %TD*%
356 | D39*
357 | %TO.C,FL101*%
358 | X127850000Y-101050000D03*
359 | X127850000Y-100250000D03*
360 | X126150000Y-100250000D03*
361 | X126150000Y-101050000D03*
362 | %TD*%
363 | D32*
364 | %TO.C,R117*%
365 | X154000000Y-105425000D03*
366 | X154000000Y-107250000D03*
367 | %TD*%
368 | D24*
369 | %TO.C,R107*%
370 | X170400000Y-90725000D03*
371 | X170400000Y-89075000D03*
372 | %TD*%
373 | D28*
374 | %TO.C,R114*%
375 | X155300000Y-92412500D03*
376 | X155300000Y-90587500D03*
377 | %TD*%
378 | D31*
379 | %TO.C,L103*%
380 | X178225000Y-101900000D03*
381 | X180175000Y-101900000D03*
382 | %TD*%
383 | D14*
384 | %TO.C,J201*%
385 | X182500000Y-98250000D03*
386 | D15*
387 | X182500000Y-100250000D03*
388 | %TD*%
389 | D40*
390 | %TO.C,L101*%
391 | X129412500Y-103500000D03*
392 | X127587500Y-103500000D03*
393 | %TD*%
394 | D32*
395 | %TO.C,R116*%
396 | X152480000Y-104987500D03*
397 | X152480000Y-106812500D03*
398 | %TD*%
399 | D12*
400 | %TO.C,H101*%
401 | X115000000Y-114000000D03*
402 | D13*
403 | X115000000Y-114000000D03*
404 | %TD*%
405 | D18*
406 | %TO.C,C112*%
407 | X166637500Y-111500000D03*
408 | X168362500Y-111500000D03*
409 | %TD*%
410 | D12*
411 | %TO.C,H103*%
412 | X132000000Y-114000000D03*
413 | D13*
414 | X132000000Y-114000000D03*
415 | %TD*%
416 | D41*
417 | %TO.C,C117*%
418 | X166500000Y-99962500D03*
419 | X166500000Y-98237500D03*
420 | %TD*%
421 | D22*
422 | %TO.C,C103*%
423 | X155262500Y-88600000D03*
424 | X157337500Y-88600000D03*
425 | %TD*%
426 | D23*
427 | %TO.C,C102*%
428 | X182200000Y-87937500D03*
429 | X182200000Y-85862500D03*
430 | %TD*%
431 | D30*
432 | %TO.C,R102*%
433 | X114925000Y-92000000D03*
434 | X116575000Y-92000000D03*
435 | %TD*%
436 | D42*
437 | %TO.C,C113*%
438 | X167112500Y-87500000D03*
439 | X165387500Y-87500000D03*
440 | %TD*%
441 | D43*
442 | %TO.C,U102*%
443 | X160500000Y-104960000D03*
444 | X160500000Y-106230000D03*
445 | X160500000Y-107500000D03*
446 | X160500000Y-108770000D03*
447 | X167500000Y-108770000D03*
448 | X167500000Y-107500000D03*
449 | X167500000Y-106230000D03*
450 | X167500000Y-104960000D03*
451 | %TD*%
452 | D32*
453 | %TO.C,R112*%
454 | X178335000Y-109822500D03*
455 | X178335000Y-111647500D03*
456 | %TD*%
457 | M02*
458 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-F_Paste.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,7.0.6-7.0.6~ubuntu22.04.1*%
2 | %TF.CreationDate,2023-09-01T17:28:15+01:00*%
3 | %TF.ProjectId,tec-controller,7465632d-636f-46e7-9472-6f6c6c65722e,rev?*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,Paste,Top*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW 7.0.6-7.0.6~ubuntu22.04.1) date 2023-09-01 17:28:15*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.200000X0.200000X0.275000X-0.200000X0.275000X-0.200000X-0.275000X0.200000X-0.275000X0*%
33 | %ADD11RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
34 | %ADD12RoundRect,0.100000X-0.100000X0.712500X-0.100000X-0.712500X0.100000X-0.712500X0.100000X0.712500X0*%
35 | %ADD13RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
36 | %ADD14RoundRect,0.200000X-0.275000X0.200000X-0.275000X-0.200000X0.275000X-0.200000X0.275000X0.200000X0*%
37 | %ADD15RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
38 | %ADD16RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
39 | %ADD17RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
40 | %ADD18RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
41 | %ADD19RoundRect,0.200000X0.275000X-0.200000X0.275000X0.200000X-0.275000X0.200000X-0.275000X-0.200000X0*%
42 | %ADD20R,1.100000X0.300000*%
43 | %ADD21RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
44 | %ADD22RoundRect,0.250000X-0.400000X-0.625000X0.400000X-0.625000X0.400000X0.625000X-0.400000X0.625000X0*%
45 | %ADD23RoundRect,0.200000X-0.200000X-0.275000X0.200000X-0.275000X0.200000X0.275000X-0.200000X0.275000X0*%
46 | %ADD24R,0.850000X2.300000*%
47 | %ADD25RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
48 | %ADD26RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
49 | %ADD27RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
50 | %ADD28RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
51 | %ADD29RoundRect,0.150000X0.825000X0.150000X-0.825000X0.150000X-0.825000X-0.150000X0.825000X-0.150000X0*%
52 | %ADD30RoundRect,0.250001X1.924999X-0.899999X1.924999X0.899999X-1.924999X0.899999X-1.924999X-0.899999X0*%
53 | %ADD31RoundRect,0.100000X0.100000X-0.637500X0.100000X0.637500X-0.100000X0.637500X-0.100000X-0.637500X0*%
54 | %ADD32R,0.900000X0.400000*%
55 | %ADD33RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
56 | %ADD34RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
57 | %ADD35RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
58 | %ADD36RoundRect,0.150000X-0.800000X-0.150000X0.800000X-0.150000X0.800000X0.150000X-0.800000X0.150000X0*%
59 | G04 APERTURE END LIST*
60 | D10*
61 | %TO.C,R105*%
62 | X158225000Y-107500000D03*
63 | X156575000Y-107500000D03*
64 | %TD*%
65 | D11*
66 | %TO.C,C105*%
67 | X173675000Y-105400000D03*
68 | X171600000Y-105400000D03*
69 | %TD*%
70 | D12*
71 | %TO.C,U101*%
72 | X124475000Y-98137500D03*
73 | X123825000Y-98137500D03*
74 | X123175000Y-98137500D03*
75 | X122525000Y-98137500D03*
76 | X122525000Y-102362500D03*
77 | X123175000Y-102362500D03*
78 | X123825000Y-102362500D03*
79 | X124475000Y-102362500D03*
80 | %TD*%
81 | D13*
82 | %TO.C,C115*%
83 | X162737500Y-100500000D03*
84 | X164462500Y-100500000D03*
85 | %TD*%
86 | D14*
87 | %TO.C,R110*%
88 | X168600000Y-92750000D03*
89 | X168600000Y-94400000D03*
90 | %TD*%
91 | D15*
92 | %TO.C,C104*%
93 | X182500000Y-92962500D03*
94 | X182500000Y-95037500D03*
95 | %TD*%
96 | D16*
97 | %TO.C,R111*%
98 | X172710000Y-113035000D03*
99 | X174535000Y-113035000D03*
100 | %TD*%
101 | D17*
102 | %TO.C,C108*%
103 | X161462500Y-86500000D03*
104 | X163537500Y-86500000D03*
105 | %TD*%
106 | %TO.C,C110*%
107 | X168962500Y-113500000D03*
108 | X171037500Y-113500000D03*
109 | %TD*%
110 | D18*
111 | %TO.C,C107*%
112 | X176400000Y-102737500D03*
113 | X176400000Y-100662500D03*
114 | %TD*%
115 | D19*
116 | %TO.C,R119*%
117 | X169425000Y-86135000D03*
118 | X169425000Y-84485000D03*
119 | %TD*%
120 | D17*
121 | %TO.C,C109*%
122 | X159462500Y-84500000D03*
123 | X161537500Y-84500000D03*
124 | %TD*%
125 | D20*
126 | %TO.C,J202*%
127 | X119020000Y-96750000D03*
128 | X119020000Y-97250000D03*
129 | X119020000Y-97750000D03*
130 | X119020000Y-98250000D03*
131 | X119020000Y-98750000D03*
132 | X119020000Y-99250000D03*
133 | X119020000Y-99750000D03*
134 | X119020000Y-100250000D03*
135 | X119020000Y-100750000D03*
136 | X119020000Y-101250000D03*
137 | X119020000Y-101750000D03*
138 | X119020000Y-102250000D03*
139 | %TD*%
140 | D21*
141 | %TO.C,R113*%
142 | X157300000Y-92412500D03*
143 | X157300000Y-90587500D03*
144 | %TD*%
145 | D22*
146 | %TO.C,R106*%
147 | X175450000Y-105300000D03*
148 | X178550000Y-105300000D03*
149 | %TD*%
150 | D23*
151 | %TO.C,R118*%
152 | X169400000Y-87600000D03*
153 | X171050000Y-87600000D03*
154 | %TD*%
155 | D15*
156 | %TO.C,C106*%
157 | X176500000Y-85462500D03*
158 | X176500000Y-87537500D03*
159 | %TD*%
160 | D24*
161 | %TO.C,L104*%
162 | X178325000Y-87900000D03*
163 | X180275000Y-87900000D03*
164 | %TD*%
165 | D25*
166 | %TO.C,R104*%
167 | X152300000Y-87887500D03*
168 | X152300000Y-89712500D03*
169 | %TD*%
170 | D23*
171 | %TO.C,R103*%
172 | X178975000Y-90900000D03*
173 | X180625000Y-90900000D03*
174 | %TD*%
175 | D19*
176 | %TO.C,R109*%
177 | X171900000Y-90725000D03*
178 | X171900000Y-89075000D03*
179 | %TD*%
180 | D26*
181 | %TO.C,U103*%
182 | X160500000Y-89095000D03*
183 | X160500000Y-90365000D03*
184 | X160500000Y-91635000D03*
185 | X160500000Y-92905000D03*
186 | X165450000Y-92905000D03*
187 | X165450000Y-91635000D03*
188 | X165450000Y-90365000D03*
189 | X165450000Y-89095000D03*
190 | %TD*%
191 | D19*
192 | %TO.C,R101*%
193 | X120750000Y-97825000D03*
194 | X120750000Y-96175000D03*
195 | %TD*%
196 | D27*
197 | %TO.C,C118*%
198 | X173800000Y-86937500D03*
199 | X173800000Y-88662500D03*
200 | %TD*%
201 | D17*
202 | %TO.C,C114*%
203 | X162462500Y-102500000D03*
204 | X164537500Y-102500000D03*
205 | %TD*%
206 | D18*
207 | %TO.C,C116*%
208 | X168400000Y-100300000D03*
209 | X168400000Y-98225000D03*
210 | %TD*%
211 | D28*
212 | %TO.C,L102*%
213 | X121087500Y-94000000D03*
214 | X122912500Y-94000000D03*
215 | %TD*%
216 | D16*
217 | %TO.C,R115*%
218 | X158000000Y-86500000D03*
219 | X159825000Y-86500000D03*
220 | %TD*%
221 | D29*
222 | %TO.C,U106*%
223 | X176110000Y-111340000D03*
224 | X176110000Y-110070000D03*
225 | X176110000Y-108800000D03*
226 | X176110000Y-107530000D03*
227 | X171160000Y-107530000D03*
228 | X171160000Y-108800000D03*
229 | X171160000Y-110070000D03*
230 | X171160000Y-111340000D03*
231 | %TD*%
232 | D19*
233 | %TO.C,R108*%
234 | X168200000Y-91325000D03*
235 | X168200000Y-89675000D03*
236 | %TD*%
237 | D18*
238 | %TO.C,C101*%
239 | X184500000Y-95000000D03*
240 | X184500000Y-92925000D03*
241 | %TD*%
242 | D30*
243 | %TO.C,U1*%
244 | X174575000Y-95637500D03*
245 | D31*
246 | X170350000Y-98500000D03*
247 | X171000000Y-98500000D03*
248 | X171650000Y-98500000D03*
249 | X172300000Y-98500000D03*
250 | X172950000Y-98500000D03*
251 | X173600000Y-98500000D03*
252 | X174250000Y-98500000D03*
253 | X174900000Y-98500000D03*
254 | X175550000Y-98500000D03*
255 | X176200000Y-98500000D03*
256 | X176850000Y-98500000D03*
257 | X177500000Y-98500000D03*
258 | X178150000Y-98500000D03*
259 | X178800000Y-98500000D03*
260 | X178800000Y-92775000D03*
261 | X178150000Y-92775000D03*
262 | X177500000Y-92775000D03*
263 | X176850000Y-92775000D03*
264 | X176200000Y-92775000D03*
265 | X175550000Y-92775000D03*
266 | X174900000Y-92775000D03*
267 | X174250000Y-92775000D03*
268 | X173600000Y-92775000D03*
269 | X172950000Y-92775000D03*
270 | X172300000Y-92775000D03*
271 | X171650000Y-92775000D03*
272 | X171000000Y-92775000D03*
273 | X170350000Y-92775000D03*
274 | %TD*%
275 | D17*
276 | %TO.C,C111*%
277 | X160212500Y-94750000D03*
278 | X162287500Y-94750000D03*
279 | %TD*%
280 | D32*
281 | %TO.C,FL101*%
282 | X127850000Y-101050000D03*
283 | X127850000Y-100250000D03*
284 | X126150000Y-100250000D03*
285 | X126150000Y-101050000D03*
286 | %TD*%
287 | D25*
288 | %TO.C,R117*%
289 | X154000000Y-105425000D03*
290 | X154000000Y-107250000D03*
291 | %TD*%
292 | D19*
293 | %TO.C,R107*%
294 | X170400000Y-90725000D03*
295 | X170400000Y-89075000D03*
296 | %TD*%
297 | D21*
298 | %TO.C,R114*%
299 | X155300000Y-92412500D03*
300 | X155300000Y-90587500D03*
301 | %TD*%
302 | D24*
303 | %TO.C,L103*%
304 | X178225000Y-101900000D03*
305 | X180175000Y-101900000D03*
306 | %TD*%
307 | D33*
308 | %TO.C,L101*%
309 | X129412500Y-103500000D03*
310 | X127587500Y-103500000D03*
311 | %TD*%
312 | D25*
313 | %TO.C,R116*%
314 | X152480000Y-104987500D03*
315 | X152480000Y-106812500D03*
316 | %TD*%
317 | D13*
318 | %TO.C,C112*%
319 | X166637500Y-111500000D03*
320 | X168362500Y-111500000D03*
321 | %TD*%
322 | D34*
323 | %TO.C,C117*%
324 | X166500000Y-99962500D03*
325 | X166500000Y-98237500D03*
326 | %TD*%
327 | D17*
328 | %TO.C,C103*%
329 | X155262500Y-88600000D03*
330 | X157337500Y-88600000D03*
331 | %TD*%
332 | D18*
333 | %TO.C,C102*%
334 | X182200000Y-87937500D03*
335 | X182200000Y-85862500D03*
336 | %TD*%
337 | D23*
338 | %TO.C,R102*%
339 | X114925000Y-92000000D03*
340 | X116575000Y-92000000D03*
341 | %TD*%
342 | D35*
343 | %TO.C,C113*%
344 | X167112500Y-87500000D03*
345 | X165387500Y-87500000D03*
346 | %TD*%
347 | D36*
348 | %TO.C,U102*%
349 | X160500000Y-104960000D03*
350 | X160500000Y-106230000D03*
351 | X160500000Y-107500000D03*
352 | X160500000Y-108770000D03*
353 | X167500000Y-108770000D03*
354 | X167500000Y-107500000D03*
355 | X167500000Y-106230000D03*
356 | X167500000Y-104960000D03*
357 | %TD*%
358 | D25*
359 | %TO.C,R112*%
360 | X178335000Y-109822500D03*
361 | X178335000Y-111647500D03*
362 | %TD*%
363 | M02*
364 |
--------------------------------------------------------------------------------
/examples/pcb-2-b/tec-controller-job.gbrjob:
--------------------------------------------------------------------------------
1 | {
2 | "Header": {
3 | "GenerationSoftware": {
4 | "Vendor": "KiCad",
5 | "Application": "Pcbnew",
6 | "Version": "7.0.6-7.0.6~ubuntu22.04.1"
7 | },
8 | "CreationDate": "2023-09-01T17:28:15+01:00"
9 | },
10 | "GeneralSpecs": {
11 | "ProjectId": {
12 | "Name": "tec-controller",
13 | "GUID": "7465632d-636f-46e7-9472-6f6c6c65722e",
14 | "Revision": "rev?"
15 | },
16 | "Size": {
17 | "X": 80.1,
18 | "Y": 39.1
19 | },
20 | "LayerNumber": 2,
21 | "BoardThickness": 1.6,
22 | "Finish": "None"
23 | },
24 | "DesignRules": [
25 | {
26 | "Layers": "Outer",
27 | "PadToPad": 0.15,
28 | "PadToTrack": 0.15,
29 | "TrackToTrack": 0.15,
30 | "MinLineWidth": 0.2,
31 | "TrackToRegion": 0.508,
32 | "RegionToRegion": 0.508
33 | }
34 | ],
35 | "FilesAttributes": [
36 | {
37 | "Path": "tec-controller-F_Cu.gbr",
38 | "FileFunction": "Copper,L1,Top",
39 | "FilePolarity": "Positive"
40 | },
41 | {
42 | "Path": "tec-controller-B_Cu.gbr",
43 | "FileFunction": "Copper,L2,Bot",
44 | "FilePolarity": "Positive"
45 | },
46 | {
47 | "Path": "tec-controller-F_Paste.gbr",
48 | "FileFunction": "SolderPaste,Top",
49 | "FilePolarity": "Positive"
50 | },
51 | {
52 | "Path": "tec-controller-B_Paste.gbr",
53 | "FileFunction": "SolderPaste,Bot",
54 | "FilePolarity": "Positive"
55 | },
56 | {
57 | "Path": "tec-controller-F_Silkscreen.gbr",
58 | "FileFunction": "Legend,Top",
59 | "FilePolarity": "Positive"
60 | },
61 | {
62 | "Path": "tec-controller-B_Silkscreen.gbr",
63 | "FileFunction": "Legend,Bot",
64 | "FilePolarity": "Positive"
65 | },
66 | {
67 | "Path": "tec-controller-F_Mask.gbr",
68 | "FileFunction": "SolderMask,Top",
69 | "FilePolarity": "Negative"
70 | },
71 | {
72 | "Path": "tec-controller-B_Mask.gbr",
73 | "FileFunction": "SolderMask,Bot",
74 | "FilePolarity": "Negative"
75 | },
76 | {
77 | "Path": "tec-controller-Edge_Cuts.gbr",
78 | "FileFunction": "Profile",
79 | "FilePolarity": "Positive"
80 | }
81 | ],
82 | "MaterialStackup": [
83 | {
84 | "Type": "Legend",
85 | "Name": "Top Silk Screen"
86 | },
87 | {
88 | "Type": "SolderPaste",
89 | "Name": "Top Solder Paste"
90 | },
91 | {
92 | "Type": "SolderMask",
93 | "Thickness": 0.01,
94 | "Name": "Top Solder Mask"
95 | },
96 | {
97 | "Type": "Copper",
98 | "Thickness": 0.035,
99 | "Name": "F.Cu"
100 | },
101 | {
102 | "Type": "Dielectric",
103 | "Thickness": 1.51,
104 | "Material": "FR4",
105 | "Name": "F.Cu/B.Cu",
106 | "Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
107 | },
108 | {
109 | "Type": "Copper",
110 | "Thickness": 0.035,
111 | "Name": "B.Cu"
112 | },
113 | {
114 | "Type": "SolderMask",
115 | "Thickness": 0.01,
116 | "Name": "Bottom Solder Mask"
117 | },
118 | {
119 | "Type": "SolderPaste",
120 | "Name": "Bottom Solder Paste"
121 | },
122 | {
123 | "Type": "Legend",
124 | "Name": "Bottom Silk Screen"
125 | }
126 | ]
127 | }
128 |
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.poetry]
2 | name = "diffgerber"
3 | version = "0.1.0"
4 | description = "a gerber diff program"
5 | authors = ["Andy Whyte "]
6 | readme = "README.md"
7 |
8 | [tool.poetry.dependencies]
9 | python = ">=3.10,<3.13"
10 | pygerber = ">=2.0.1"
11 | pillow = "^10.0.0"
12 |
13 | [build-system]
14 | requires = ["poetry-core"]
15 | build-backend = "poetry.core.masonry.api"
16 |
17 | [tools.setuptools.packages.find]
18 | where = ["src"]
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Pillow==10.0.1
2 | pygerber==2.0.0
3 | setuptools==70.0.0
4 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from setuptools import setup, find_packages
4 |
5 | # based on: https://stackoverflow.com/questions/714063/importing-modules-from-parent-folder/50194143#50194143
6 | if __name__ == "__main__"
7 | setup(name='diffgerber', version='0.1.1', packages=find_packages())
8 |
--------------------------------------------------------------------------------
/src/color_generator.py:
--------------------------------------------------------------------------------
1 | from pygerber.parser.pillow.parser import ColorSet
2 | import random
3 | import secrets
4 | from datetime import datetime
5 | random.seed(datetime.now().timestamp())
6 |
7 | class color_generator():
8 | # LARGE_PRIME= [ 39847, 69857, 40277]
9 | LARGE_PRIME= [227, 163, 197]
10 | LIST_OF_COLORS = []
11 | #LIST_OF_COLORS.append(DEFAULT_COLOR_SET_ORANGE)
12 | #LIST_OF_COLORS.append(DEFAULT_COLOR_SET_GREEN)
13 | counter = 0
14 | BRIGHT_RED = None
15 | WHITE = None
16 |
17 | def __init__(self):
18 | base = 173 + randint
19 | for i in range(base,base+50): # range numbers need to be away from 1, but are not important
20 | self.LIST_OF_COLORS.append(ColorSet(
21 | (( (i+23)*self.LARGE_PRIME[0])%150, ((i+253)*self.LARGE_PRIME[1])%255, ((i+3)*self.LARGE_PRIME[2])%255 , 160),
22 | (100,100,100, 50),
23 | ( 50, 50, 50, 50),
24 | ))
25 | self.BRIGHT_RED = ColorSet(
26 | (230, 66, 75, 100),
27 | (100, 100, 100, 255),
28 | ( 50, 50, 50, 255),
29 | )
30 | self.WHITE = ColorSet(
31 | (255, 255, 255, 0),
32 | ( 0, 0, 0, 0),
33 | ( 0, 0, 0, 0),
34 | )
35 | self.counter = 0
36 |
37 | def getWhite(self):
38 | return self.WHITE
39 |
40 | def getBrightRed(self):
41 | return self.BRIGHT_RED
42 |
43 | def getNextColorSet(self):
44 | self.counter= (self.counter+1) % len(self.LIST_OF_COLORS)
45 | #print(self.LIST_OF_COLORS[self.counter].dark)
46 | rgb = '#%02x%02x%02x%02x' % self.LIST_OF_COLORS[self.counter].dark
47 | #print("rgb:" +str(rgb))
48 | return self.LIST_OF_COLORS[self.counter], rgb[:-2]
--------------------------------------------------------------------------------
/src/diffgerber-cli.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import loader
3 | import os
4 | import difflib as dl
5 | import argparse
6 |
7 | file_loader = loader.gerbLoader(transparency = 220)
8 |
9 | def load_images(directory):
10 | global imageDict
11 | """Load image files from the selected directory."""
12 | images = []
13 | filenames = []
14 | layer_colors = []
15 | xs = []
16 | ys = []
17 | for i, filename in enumerate(os.listdir(os.fsencode(directory))):
18 | if filename.decode().endswith((".jpg", ".png")):
19 | filepath = os.path.join(directory, filename.decode())
20 | image = Image.open(filepath)
21 | images.append(image)
22 | filenames.append(filename.decode())
23 | elif filename.decode().endswith((".gbr", ".grb")):
24 | filepath = os.path.join(directory, filename.decode())
25 | image, rgb, x, y = file_loader.loadImage(filepath)
26 | imageDict[filepath] = (image, rgb, x, y)
27 | xs.append(x)
28 | ys.append(y)
29 | images.append(image)
30 | filenames.append(filename.decode())
31 | layer_colors.append(rgb)
32 | return images, filenames, layer_colors, xs, ys
33 |
34 | def diff_gerbers(directories, out_file, dpi, quiet_mode=False, display_image=False):
35 | filenames1 = os.listdir(directories[0])#os.listdir(os.fsencode(directories[0]))
36 | filenames2 = os.listdir(directories[1])#os.listdir(os.fsencode(directories[1]))
37 | merge_image_list = []
38 | highlight_image_list = []
39 |
40 | file_loader.dpi = dpi
41 |
42 | files_to_diff = []
43 | for i, name in enumerate(filenames1):
44 | print(name)
45 | if any(name == fname for fname in filenames2) and \
46 | name.endswith((".gbr", ".grb")) :
47 | files_to_diff.append(i)
48 | if not files_to_diff:
49 | print("Error: no gerber files detected!\n")
50 | exit()
51 | for index in files_to_diff:
52 | sim = 0.0
53 | file_path1 = os.path.join(directories[0], filenames1[index])
54 | file_path2 = os.path.join(directories[1], filenames1[index])
55 | with open(file_path1, "r") as file1:
56 | with open(file_path2, "r") as file2:
57 | similarity = dl.SequenceMatcher(None, file1.read(), file2.read())
58 | if similarity.ratio() == 1.0:
59 | print(f"text diff: {name} is identical")
60 | elif similarity.ratio() >= .2:
61 | print("text diff: "+str(name)+" is %.2f%% similar"%(similarity.ratio() * 100.0) )
62 | active_layer_image_old, lw, lx, ly = file_loader.loadImage(file_path1)
63 | active_layer_image_new, rw, lx, ly = file_loader.loadImage(file_path2)
64 | highlight, sim = file_loader.get_difference_outlines(active_layer_image_old, active_layer_image_new)
65 | print (f"file: {filenames1[index]} has {sim}% diff")
66 | highlight_image_list.append(highlight)
67 | merge_image_list.append(active_layer_image_new)
68 | if len(merge_image_list) >= 2:
69 | for i, img in enumerate(merge_image_list):
70 | if i == 0:
71 | pass
72 | else:
73 | merge_image_list[0].paste(merge_image_list[i], (0, 0), merge_image_list[i])
74 | for i, img in enumerate(highlight_image_list):
75 | merge_image_list[0].paste(highlight_image_list[i], (0, 0), highlight_image_list[i])
76 | elif len(merge_image_list) == 1:
77 | for i, img in enumerate(highlight_image_list):
78 | merge_image_list[0].paste(highlight_image_list[i], (0, 0), highlight_image_list[i])
79 | else:
80 | print("no differences to show")
81 | exit()
82 |
83 | #crop the image
84 | out_image = merge_image_list[0].crop(merge_image_list[0].getbbox())
85 |
86 | #show and save ... maybe just save?
87 | out_image.save(out_file,"PNG")
88 | if display_image:
89 | out_image.show()
90 |
91 | def main():
92 | parser = argparse.ArgumentParser(
93 | prog='diffgerber-cli',
94 | description='Command line gerber directory diff tool, recognises layers by filename and diffs if they can be paired',
95 | epilog='\nexample usage: (creates a low-res thumbnail image)\n \n> python diffgerber-cli.py ../examples/pcb-1-a ../examples/pcb-1-b/ 100 out.png --quiet\n')
96 | parser.add_argument("input_directory1", help="Path to input directory 1")
97 | parser.add_argument("input_directory2", help="Path to input directory 2")
98 | parser.add_argument("dpi", type=int, default=300, help="DPI (dots per inch) value")
99 | parser.add_argument("output_filename", help="Output filename (png file)")
100 | parser.add_argument("--quiet", "-q", default=False, action="store_true", help="Run in quiet mode")
101 | parser.add_argument("--display", "-D", default=False, action="store_true", help="Display the image when the script finishes with default image viewer")
102 |
103 |
104 | args = parser.parse_args()
105 |
106 | diff_gerbers(
107 | [args.input_directory1,
108 | args.input_directory2],
109 | args.output_filename,
110 | args.dpi,
111 | args.quiet,
112 | args.display,
113 | )
114 |
115 | if __name__ == "__main__":
116 | main()
--------------------------------------------------------------------------------
/src/diffgerber.py:
--------------------------------------------------------------------------------
1 | import os
2 | import tkinter as tk
3 | from tkinter import ttk
4 | from tkinter import filedialog
5 | from tkinter import PhotoImage
6 | from tkinter import messagebox
7 | from PIL import Image, ImageTk
8 | #, ImageChops, ImageDraw, ImageFilter, ImageOps
9 | import difflib as dl
10 | #import color_generator as cg
11 | import loader
12 | #from pygerber.typs cg
13 | #from pygerber.types import ColorSet
14 | #from pygerber.parser.pillow.parser import ColorSet
15 |
16 | imageDict = {}
17 | directories = ["", ""] # {left_frame: "", right_frame: ""}
18 | left_file_list = []
19 | right_file_list = []
20 | photo_list = []
21 | left_to_right_dict = {}
22 | active_left_index = None
23 | active_layer_image_left = None
24 | active_layer_image_right = None
25 | file_loader = loader.gerbLoader()
26 | active_offset_x = 0.0
27 | active_offset_y = 0.0
28 | percent_diff_pixels = 0
29 |
30 |
31 | point_table = ([0] + ([255] * 255))
32 | # diff code using only pillow
33 | # from: https://stackoverflow.com/questions/30277447/compare-two-images-and-highlight-differences-along-on-the-second-image
34 | # erode dilate using pillow:
35 | # from: https://stackoverflow.com/questions/44195007/equivalents-to-opencvs-erode-and-dilate-in-pil
36 | #def new_gray(size, color):
37 | # img = Image.new('L',size)
38 | # dr = ImageDraw.Draw(img)
39 | # dr.rectangle((0,0) + size, fill=color)
40 | # return img
41 | #
42 | #def new_color(size, color):
43 | # img = Image.new(mode="RGBA", size=size, color=color)
44 | # #dr = ImageDraw.Draw(img)
45 | # #dr.rectangle((0,0) + size, fill=color)
46 | # return img
47 |
48 | def update_file_pairs():
49 | global left_file_list, right_file_list, left_to_right_dict
50 | #print("updating file list" + str(left_file_list))
51 | for left_itr, left, in enumerate(left_file_list):
52 | for right_itr, right in enumerate(right_file_list):
53 | if dl.SequenceMatcher(None, left, right).ratio() == 1.0:
54 | left_to_right_dict.update({left_itr: right_itr})
55 | tellUser("matched files named:" +left, label_msg=False)
56 | get_layer_similarity(left_itr)
57 | #print()
58 | if len(left_file_list) == 0:
59 | tellUser("no files in left list", label_msg=False)
60 | if len(right_file_list) == 0:
61 | tellUser("no files in right list", label_msg=False)
62 |
63 | def get_layer_similarity(left_index):
64 | global left_file_list, right_file_list, left_to_right_dict, directories, active_layer_image_left, active_layer_image_right, active_offset_x, active_offset_y
65 | left_file_path = os.path.join(directories[0], left_file_list[left_index])
66 | print(left_file_path)
67 | with open(left_file_path, "r") as left_file:
68 | right_file_path = os.path.join(directories[1], right_file_list[left_to_right_dict[left_index]])
69 | print(right_file_path)
70 | with open(right_file_path, "r") as right_file:
71 | similarity = dl.SequenceMatcher(None, left_file.read(), right_file.read())
72 | if similarity.ratio() == 1.0:
73 | tellUser("text difference: "+str(left_file_list[left_index])+" is identical")
74 | elif similarity.ratio() >= .2:
75 | tellUser("text difference: "+str(left_file_list[left_index])+" is %.2f%% similar"%(similarity.ratio() * 100.0) )
76 | c = file_loader.color.getWhite() # the files are already loaded, so they are in the dictionary in a suitable color
77 | active_layer_image_left, lw, lx, ly = file_loader.loadImage(left_file_path, color=c )
78 | active_layer_image_right, rw, lx, ly = file_loader.loadImage(right_file_path, color=c )
79 | active_offset_x = lx
80 | active_offset_y = ly
81 | else:
82 | tellUser("files: "+str(left_file_list[left_index])+" have same name but differ greatly")
83 |
84 | def load_images(directory):
85 | global imageDict
86 | """Load image files from the selected directory."""
87 | images = []
88 | filenames = []
89 | layer_colors = []
90 | xs = []
91 | ys = []
92 | for i, filename in enumerate(os.listdir(os.fsencode(directory))):
93 | if filename.decode().endswith((".jpg", ".png")):
94 | filepath = os.path.join(directory, filename.decode())
95 | image = Image.open(filepath)
96 | images.append(image)
97 | filenames.append(filename.decode())
98 | elif filename.decode().endswith((".gbr", ".grb")):
99 | filepath = os.path.join(directory, filename.decode())
100 | image, rgb, x, y = file_loader.loadImage(filepath)
101 | imageDict[filepath] = (image, rgb, x, y)
102 | xs.append(x)
103 | ys.append(y)
104 | images.append(image)
105 | filenames.append(filename.decode())
106 | layer_colors.append(rgb)
107 | return images, filenames, layer_colors, xs, ys
108 |
109 | def show_image(full_filename):
110 | '''
111 | Shows the image in the imageDict, from the full_filename key
112 | note if full_filename is not in dict this is an error for now.. could catch but shouldn't happen!
113 | '''
114 | global imageDict, middle_frame, canvas
115 | #if not True:
116 | # hide_image(filename)
117 | # return
118 | """Display the selected image on the canvas."""
119 | #img_width, img_height = image.size
120 | x = 0.0
121 | y = 0.0
122 | dirname = os.path.dirname(full_filename)
123 | if dirname == directories[1]: #RHS selected
124 | x_offset = float(x_offset_var.get())
125 | y_offset = float(y_offset_var.get())
126 | x += x_offset
127 | y += y_offset
128 |
129 | photo = None
130 | if imageDict:
131 | image, rgb, offset_x_from_dict, offset_y_from_dict = imageDict.get(full_filename)
132 | photo = ImageTk.PhotoImage(image)
133 | #print("loaded from imageDict")
134 | #print(imageDict)
135 | if photo is None:
136 | image, rgb, x_off, y_off = file_loader.loadImage(full_filename)
137 | photo = ImageTk.PhotoImage(image)
138 | imageDict.update({full_filename: (image, rgb, x_off, y_off)})
139 | x += x_off
140 | y += y_off
141 | print ("got an empty entry in the dictionary: - this shouldn't happen!")
142 | print (full_filename)
143 | exit()
144 | x += float(offset_x_from_dict)
145 | y += float(offset_y_from_dict)
146 | #print(full_filename)
147 | #print(photo)
148 | canvas.create_image(x, y, anchor="nw", image=photo)
149 | #canvas.image = photo # Store a reference to prevent garbage collection
150 | photo_list.append(photo)
151 |
152 | def layer_selected(full_filename, index):
153 | global active_left_index, imageDict
154 | #TODO: this is a hacky way of finding the left-to-right lookup - is there a better way?
155 | image, rgb, x, y = imageDict[full_filename]
156 | # extract directory from full_filename -
157 | dirname = os.path.dirname(full_filename)
158 | active_left_index = None
159 | #print("layer selected")
160 | #print(directories)
161 | #print(dirname)
162 | #print("---")
163 | if dirname == directories[0]: #LHS selected
164 | if index in left_to_right_dict:
165 | get_layer_similarity(index)
166 | active_left_index = index
167 | elif dirname == directories[1]: #RHS selected
168 | print ("lhs value (from rhs lookup)")
169 | keyFromValue = list(left_to_right_dict.keys())[list(left_to_right_dict.values()).index(index)]
170 | print(keyFromValue)
171 | active_left_index = keyFromValue
172 | if active_left_index:
173 | #there is an active pair for this layer...
174 | print("active layer selected")
175 | show_image(full_filename)
176 | #set the matched layer to selected bg = "grey"
177 | #print(full_filename)
178 |
179 | def hide_image(full_filename):
180 | print("remove the image from the photos")
181 |
182 | def directory_select_btn(frame, directory_entry):
183 | """Handle the event when a directory is selected."""
184 | selected_directory = filedialog.askdirectory()
185 | if selected_directory:
186 | tellUser("Please wait... loading gerbers")
187 | tellUser("directory "+ str(selected_directory), label_msg=False)
188 | directory_selected(frame, directory_entry, selected_directory)
189 |
190 | def directory_selected(frame, directory_entry, selected_directory):
191 | global left_file_list, right_file_list, directories, frame_images, frame_checkboxes, frame_selected_layer_vars, canvas
192 | directory_entry.delete(0, tk.END)
193 | directory_entry.insert(tk.END, selected_directory)
194 | images, filenames, layer_colors, x_offs, y_offs = load_images(selected_directory)
195 |
196 | tellUser("loaded: "+selected_directory)
197 | frame_images.update({frame: images})
198 |
199 | # Clear the checkboxes
200 | for checkbox in frame_checkboxes[frame]:
201 | checkbox.destroy()
202 | frame_checkboxes[frame].clear()
203 |
204 | # Create checkboxes
205 | for i, image in enumerate(images):
206 | frame_selected_layer_vars[frame].append(tk.StringVar())
207 | checkbox = tk.Checkbutton(
208 | frame,
209 | #text=f"Image {i+1}",
210 | text = filenames[i],
211 | variable=frame_selected_layer_vars[frame][i],
212 | onvalue=i,
213 | #font = 12,
214 | #width = 10,
215 | #height = 1,
216 | #image=checkbutton_image,
217 | offvalue=-1,
218 | selectcolor= layer_colors[i],
219 | #command=lambda i=i: layer_selected(frame_images[frame][i], os.path.join(selected_directory, filenames[i]), i) if frame_selected_layer_vars[frame][i].get() == i else None
220 | #command=lambda i=i: layer_selected( frame_images[frame][i], os.path.join(selected_directory, filenames[i]), i)
221 | command=lambda i=i: layer_selected( os.path.join(selected_directory, filenames[i]), i)
222 | #command=lambda checked, img=images[i], flnm=filenames[i]: show_image(checked, img, flnm)
223 | )
224 | checkbox.pack(anchor="w")
225 | frame_checkboxes[frame].append(checkbox)
226 | tellUser("Loaded file: " + filenames[i], label_msg=False, record_msg=True)
227 |
228 | #record the directory
229 | if frame is left_frame:
230 | directories[0] = selected_directory
231 | left_file_list = filenames
232 | elif frame is right_frame:
233 | directories[1] = selected_directory
234 | right_file_list = filenames
235 | #print(str(left_file_list))
236 | #print(str(right_file_list))
237 | update_file_pairs()
238 | #selected_images_var.set(-1)
239 | # TODO: make this the check for differences and display them
240 | if images:
241 | show_image(os.path.join(selected_directory, filenames[0]))
242 | # set the scroll bars to a specific point
243 | canvas.update_idletasks()
244 | canvas.xview_moveto(0.6) # Horizontal scrollbar to the middle
245 | canvas.yview_moveto(0.7) # Vertical scrollbar to the middle
246 | canvas.update_idletasks()
247 | print(x_offs)
248 |
249 | #def toolbar_button_clicked():
250 | # """Handle the event when the toolbar button is clicked."""
251 | # print("Toolbar button clicked!")
252 | def button1_clear_clicked(clear_dirs=True):
253 | global imageDict, left_directory , right_directory
254 | global left_file_list , right_file_list, left_to_right_dict, canvas, photo_list
255 | #print("Button 1 clicked")
256 | # Clear the checkboxes
257 | for frame in frame_checkboxes:
258 | for checkbox in frame_checkboxes[frame]:
259 | checkbox.destroy()
260 | frame_checkboxes[frame].clear()
261 | canvas.delete("all")
262 |
263 | imageDict = {}
264 | directories = ["", ""]
265 | right_file_list = []
266 | left_to_right_dict = {}
267 | photo_list = []
268 | if clear_dirs:
269 | left_directory_entry.delete(0,tk.END)
270 | right_directory_entry.delete(0,tk.END)
271 |
272 | def button2_reload_clicked():
273 | #print("Reload Button clicked - reload dirs")
274 | global left_frame, right_frame, left_directory_entry, right_directory_entry
275 | button1_clear_clicked(clear_dirs=False)
276 | if len(left_directory_entry.get()) >1:
277 | directory_selected(left_frame, left_directory_entry, left_directory_entry.get())
278 | if len(right_directory_entry.get()) >1:
279 | directory_selected(right_frame, right_directory_entry, right_directory_entry.get())
280 |
281 | def button3_export_clicked():
282 | #print("Button 3 clicked - export an image \n\n *** NOT IMPLEMENTED ***\n\n")
283 | global canvas
284 | tellUser("export is experimental - consider using screen capture!")
285 | items = canvas.find_all()
286 | proceed_anyway = False
287 | if len(items) == 0:
288 | proceed_anyway = messagebox.askyesno("No data to export!", "The file will be blank - Are you sure you want to proceed?")
289 | if len(items) != 0 or proceed_anyway == True:
290 | f = filedialog.asksaveasfile(parent=window, title="Save postscript", mode='w', defaultextension=".ps")
291 | if f is None:
292 | return
293 | #print (f.name)
294 | canvas.postscript(file=f.name, colormode='color')
295 |
296 | def button4_zoomin_clicked():
297 | global canvas
298 | print("Button 4 clicked zoom +\n\n *** NOT IMPLEMENTED ***\n\n")
299 | tellUser("zoom not implemented")
300 | canvas.scale("all", 0, 0, 1.1, 1.1) # Increase scale factor
301 |
302 | def button5_zoomout_clicked():
303 | global canvas
304 | print("Button 5 clicked zoom -\n\n *** NOT IMPLEMENTED ***\n\n")
305 | tellUser("zoom not implemented")
306 | canvas.scale("all", 0, 0, 0.9, 0.9) # Decrease scale factor
307 |
308 | def button6_diff_clicked():
309 | global imageDict, active_layer_image_left, active_layer_image_right, active_offset_x, active_offset_y
310 | global percent_diff_pixels
311 | if active_left_index is None:
312 | tellUser("Active layer unpaired - nothing to highlight")
313 | return
314 | tellUser("checking for differences... hang on!", label_msg=True, record_msg=False)
315 | diff_image, percent_diff_pixels = file_loader.get_difference_outlines(active_layer_image_left, active_layer_image_right, opacity=0.55)
316 | tellUser("pixel difference : %.2f%% pixels are similar at %d dpi"%(percent_diff_pixels, file_loader.dpi), label_msg=False, record_msg=True)
317 | photo = ImageTk.PhotoImage(diff_image)
318 | rgb = '#%02x%02x%02x%02x' % (247, 126, 185, 220)
319 | print(active_offset_x)
320 | imageDict["diff_"+str(active_left_index)] = (diff_image, rgb, active_offset_x, active_offset_y)
321 | tellUser("displaying differences", label_msg=True, record_msg=False)
322 | show_image("diff_"+str(active_left_index))
323 |
324 | def import_option_selected(event):
325 | global file_loader
326 | selected_option = import_option.get()
327 | file_loader.option = selected_option
328 | tellUser("Set to " + selected_option)
329 |
330 | def tellUser(text_to_output, label_msg=True, record_msg=True):
331 | global window
332 | # Insert The text.
333 | if record_msg:
334 | text_area["state"] = tk.NORMAL
335 | text_area.insert(tk.END, '\n'+ text_to_output)
336 | text_area.configure(height=200)
337 | text_area.see("end")
338 | text_area["state"] = tk.DISABLED
339 | if label_msg:
340 | layer_similarity_label['text'] = text_to_output
341 | window.update_idletasks()
342 |
343 | def move_set_of_gerbers(event=None):
344 | global x_offset, y_offset, canvas, window, photo_list
345 | x_offset = 0.0
346 | y_offset = 0.0
347 | if mode_button_var.get():
348 | x_offset = float(x_offset_var.get())
349 | y_offset = float(y_offset_var.get())
350 |
351 | #x_current, y_current, _, _ = canvas.coords(canvas_elements)
352 | x_current, y_current = 0,0
353 |
354 | if event:
355 | if event.keysym == 'Left':
356 | x_offset -= 10
357 | elif event.keysym == 'Right':
358 | x_offset += 10
359 | elif event.keysym == 'Up':
360 | y_offset -= 10
361 | elif event.keysym == 'Down':
362 | y_offset += 10
363 |
364 | x_move = x_offset - x_current
365 | y_move = y_offset - y_current
366 |
367 | x_offset_var.set("{:.2f}".format(x_offset))
368 | y_offset_var.set("{:.2f}".format(y_offset))
369 |
370 | canvas.delete("all")
371 | photo_list = []
372 | for image in left_file_list:
373 | show_image(os.path.join(directories[0],image))
374 | for image in right_file_list:
375 | show_image(os.path.join(directories[1], image))
376 | canvas.update_idletasks()
377 | #window.update()
378 |
379 | def toggle_move_mode():
380 | global x_offset_entry, y_offset_entry, mode_button_var, move_msg_label, x_offset_label, y_offset_label, update_button
381 | if mode_button_var.get():
382 | x_offset_entry.config(state=tk.NORMAL)
383 | y_offset_entry.config(state=tk.NORMAL)
384 | update_button["state"] = tk.NORMAL
385 | move_msg_label.configure(state=tk.NORMAL)
386 | x_offset_label.configure(state=tk.NORMAL)
387 | y_offset_label.configure(state=tk.NORMAL)
388 | #canvas.itemconfig(canvas_elements, state=tk.NORMAL)
389 | else:
390 | x_offset_entry.config(state=tk.DISABLED)
391 | y_offset_entry.config(state=tk.DISABLED)
392 | update_button["state"] = tk.DISABLED
393 | move_msg_label.configure(state=tk.DISABLED)
394 | x_offset_label.configure(state=tk.DISABLED)
395 | y_offset_label.configure(state=tk.DISABLED)
396 | #canvas.itemconfig(canvas_elements, state=tk.HIDDEN)
397 |
398 | move_msg_label = None
399 | y_offset_label = None
400 | x_offset_label = None
401 | update_button = None
402 | def add_move_layers_gui(target_frame):
403 | '''
404 | function to add a set of gui elements for controlling position of one side
405 | Parameters:
406 | -----------
407 | target_frame Frame
408 |
409 | '''
410 | global x_offset_entry, y_offset_entry, mode_button_var, move_msg_label, x_offset_label, y_offset_label, update_button
411 |
412 | # Create an "Update" button to move the rectangle to the specified coordinates
413 | update_button = tk.Button(target_frame, text="Update", command=move_set_of_gerbers)
414 | update_button.configure(state='disable')
415 | update_button.pack(side=tk.BOTTOM)
416 |
417 | x_offset_var.set("0.00")
418 | y_offset_var.set("0.00")
419 |
420 | y_offset_entry = tk.Entry(target_frame, textvariable=y_offset_var, state=tk.DISABLED)
421 | y_offset_entry.pack(side=tk.BOTTOM)
422 |
423 | y_offset_label = tk.Label(target_frame, text="Y Offset:")
424 | y_offset_label.configure(state='disable')
425 | y_offset_label.pack(side=tk.BOTTOM)
426 |
427 | x_offset_entry = tk.Entry(target_frame, textvariable=x_offset_var, state=tk.DISABLED)
428 | x_offset_entry.pack(side=tk.BOTTOM)
429 |
430 | x_offset_label = tk.Label(target_frame, text="X Offset:")
431 | x_offset_label.configure(state='disable')
432 | x_offset_label.pack(side=tk.BOTTOM)
433 |
434 | move_msg_label = tk.Label(target_frame, text="Use arrow keys to move: ←↑→↓")
435 | move_msg_label.configure(state='disable')
436 | move_msg_label.pack(side=tk.BOTTOM)
437 |
438 | # Create a mode button
439 | mode_button = tk.Checkbutton(target_frame, text="Set Position:", variable=mode_button_var, command=toggle_move_mode)
440 | mode_button.pack(side=tk.BOTTOM)
441 |
442 | # Bind arrow keys to move the rectangle and update offsets
443 | window.bind('', move_set_of_gerbers)
444 | window.bind('', move_set_of_gerbers)
445 | window.bind('', move_set_of_gerbers)
446 | window.bind('', move_set_of_gerbers)
447 |
448 |
449 |
450 | #from: https://stackoverflow.com/questions/17355902/tkinter-binding-mousewheel-to-scrollbar
451 | # doesn't work...
452 | #def OnMouseWheel(self,event):
453 | # hscrollbar.yview("scroll",event.delta,"units")
454 | # return "break"
455 |
456 | # Create the main window
457 | window = tk.Tk()
458 | window.title("Gerber Difference Viewer")
459 |
460 | #globals for the move layers
461 | x_offset_var = tk.StringVar()
462 | y_offset_var = tk.StringVar()
463 | mode_button_var = tk.BooleanVar()
464 |
465 | # Load the icon image
466 | icon = PhotoImage(file="icon.png")
467 |
468 | # Set the application icon
469 | window.iconphoto(True, icon)
470 |
471 | # Calculate the window size based on screen size
472 | screen_width = window.winfo_screenwidth()
473 | screen_height = window.winfo_screenheight()
474 | window_width = int(screen_width * 2 / 3)
475 | window_height = int(screen_height * 2 / 3)
476 | window.geometry(f"{window_width}x{window_height}")
477 |
478 | # Create a main frame
479 | main_frame = tk.Frame(window)
480 | main_frame.pack(fill=tk.BOTH, expand=True)
481 | # Create the toolbar frame
482 | toolbar_frame = tk.Frame(main_frame, height=100)
483 | toolbar_frame.pack(side="top", fill="x")
484 |
485 | # Create the buttons in the toolbar
486 | button1 = tk.Button(toolbar_frame, text="Clear", command=button1_clear_clicked)
487 | button1.pack(side=tk.LEFT, padx=5, pady=5)
488 |
489 | button2 = tk.Button(toolbar_frame, text="Reload", command=button2_reload_clicked)
490 | button2.pack(side="left", padx=5, pady=5)
491 |
492 | button3 = tk.Button(toolbar_frame, text="Export Image", command=button3_export_clicked)
493 | button3.pack(side="left", padx=5, pady=5)
494 |
495 | button4 = tk.Button(toolbar_frame, text="🔎zoom🔍☐+", command=button4_zoomin_clicked)
496 | button4.pack(side="left", padx=5, pady=5)
497 |
498 | button5 = tk.Button(toolbar_frame, text="Zoom-", command=button5_zoomout_clicked)
499 | button5.pack(side="left", padx=5, pady=5)
500 |
501 | button6 = tk.Button(toolbar_frame, text="Hightlight Differences", command=button6_diff_clicked)
502 | button6.pack(side="left", padx=5, pady=5)
503 |
504 | # toolbar for choosing the importer code
505 | # List of options for the drop-down menu
506 | #backend_label = tk.Label(toolbar_frame, text="backend:")
507 | #backend_label.pack(side=tk.LEFT, padx = 5, pady = 10)
508 |
509 | import_options = ["Import using pygerber", "Import using pcb-tools", "Import using gerbv"]
510 | # Variable to store the selected import option
511 | import_option = tk.StringVar()
512 | import_option.set(import_options[0])
513 | # Create the drop-down menu
514 | option_dropdown = ttk.Combobox(toolbar_frame, textvariable=import_option, values=import_options, state="readonly")
515 | #option_dropdown.pack(side=tk.LEFT, padx=1, pady=5)
516 |
517 | # Bind the event when the selection is changed
518 | option_dropdown.bind("<>", import_option_selected)
519 | selected_option = import_option.get()
520 | file_loader.option = selected_option
521 |
522 | layer_similarity_label = tk.Label(toolbar_frame, text="Select directories to compare gerber files in")#text="Selected Layers are not paired")
523 | layer_similarity_label.pack(side=tk.RIGHT, padx = 30, pady = 10)
524 |
525 | toolbar_frame = tk.Frame(main_frame)
526 | toolbar_frame.pack(side="top", fill="x")
527 |
528 |
529 | text_frame = tk.Frame(window, height = 150)
530 | text_area = tk.Text(text_frame, pady=5, padx=5, bg = "white", state=tk.NORMAL)
531 | # TODO: scrollbar didn't work - not needed, but maybe return to this
532 | #text_scrollbar = tk.Scrollbar(text_frame, orient=tk.VERTICAL, command=text_area.yview)
533 | #text_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
534 | text_frame.pack_propagate(0)
535 | text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
536 | text_frame.pack(side=tk.BOTTOM, fill=tk.BOTH)
537 | text_area.insert(tk.END, "Ready to compare gerber files")
538 | text_area.see("end")
539 | text_area["state"] = tk.DISABLED
540 |
541 | # Create the three vertical columns
542 | left_frame = tk.Frame(main_frame, width=75)
543 | left_frame.pack(side="left", padx=10, fill=tk.Y, expand=False)
544 | middle_frame = tk.Frame(main_frame)
545 | middle_frame.pack(side="left", fill=tk.BOTH, expand=True)
546 | right_frame = tk.Frame(main_frame, width=150)
547 | right_frame.pack(side="right", padx=10, fill=tk.Y, expand=False)
548 |
549 | # Left column: Directory selector
550 | left_directory_label = tk.Label(left_frame, text="Gerber directory 1:")
551 | left_directory_label.pack(anchor=tk.NW)
552 | left_directory_entry = tk.Entry(left_frame)
553 | left_directory_entry.pack(anchor=tk.NW)
554 | left_directory_button = tk.Button(left_frame, text="Browse", command=lambda: directory_select_btn(left_frame, left_directory_entry))
555 | left_directory_button.pack(anchor=tk.NW)
556 |
557 | # Right column: Directory selector
558 | right_directory_label = tk.Label(right_frame, text="Gerber directory 2:")
559 | right_directory_label.pack(anchor=tk.NW)
560 | right_directory_entry = tk.Entry(right_frame)
561 | right_directory_entry.pack(anchor=tk.NW)
562 | right_directory_button = tk.Button(right_frame, text="Browse", command=lambda: directory_select_btn(right_frame, right_directory_entry))
563 | right_directory_button.pack(anchor=tk.NW)
564 |
565 |
566 | add_move_layers_gui(right_frame)
567 |
568 | # Middle column: Canvas to display the images with scrollbars
569 | # Create a canvas with scrollbars
570 | #canvas = tk.Canvas(middle_frame, width=400, height=400)
571 | canvas = tk.Canvas(middle_frame, width=1400, height=1400, bg="black")
572 | canvas.pack(fill=tk.BOTH, expand=True)
573 |
574 | # Create a background rectangle with a solid color (e.g., white)
575 | #background_color = "#ffffff" # White color
576 | #canvas.create_rectangle(0, 0, 800, 600, fill=background_color, outline=background_color)
577 |
578 | #image1 = Image.open("icon.png")
579 | #photo1 = ImageTk.PhotoImage(image1)
580 | #canvas.create_image(100, 100, image=photo1, anchor=tk.NW)
581 |
582 | # Create vertical and horizontal scrollbars for the image frame
583 | vscrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL, command=canvas.yview)
584 | hscrollbar = tk.Scrollbar(canvas, orient=tk.HORIZONTAL, command=canvas.xview)
585 |
586 | vscrollbar.pack(side=tk.RIGHT, fill=tk.Y)
587 | hscrollbar.pack(side=tk.BOTTOM, fill=tk.X)
588 |
589 | # Configure the canvas to use the scrollbars
590 | canvas.configure(yscrollcommand=vscrollbar.set)
591 | canvas.configure(xscrollcommand=hscrollbar.set)
592 |
593 | # workscanvas.configure( xscrollcommand=hscrollbar.set, yscrollcommand=vscrollbar.set)
594 | #canvas.bind("", canvas)
595 | canvas.bind("", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
596 | #canvas.bind("", OnMouseWheel)
597 |
598 | # Right column: List of checkboxes
599 | #selected_images_var = tk.StringVar()
600 | #selected_images_var = tk.StringVar() # ListVar()#
601 | #selected_images_var.set(0)
602 | frame_selected_layer_vars = {left_frame: [], right_frame: []}
603 | frame_checkboxes = {left_frame: [], right_frame: []}
604 | frame_images = {left_frame: [], right_frame: []}
605 |
606 | ## Create a custom image for the checkbutton
607 | #checkbutton_image = tk.PhotoImage(file="checkbutton_image.png").subsample(3) # Adjust the subsample factor to resize the image
608 |
609 | # Run the GUI
610 | if __name__ == "__main__":
611 | window.mainloop()
612 |
--------------------------------------------------------------------------------
/src/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ajw287/diffgerber/b0b51b5cf0ea3406331e8d3f6701865b7d7fb413/src/icon.png
--------------------------------------------------------------------------------
/src/loader/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Loader is an abstraction layer, do whatever it takes just return an image from the directory you are given.
3 | At this time I'm experimenting with pygerber 1.0 and pcb-tools, neither meet requirements - may need a gerbv backend too.
4 | """
5 | from .gerbLoader import gerbLoader
6 | from .dirSelectDialog import dirSelectDialog
7 | #TODO: Delete these commented lines
8 | #from loader.gerbLoader import loadImage
9 | #import gerbLoader.loadImage
10 | #print("start init load")
11 | #print(dir(gerbLoader))
12 | #print("end init load")
13 | #gerbLoader.loadImage("./example/1/top.grb")
--------------------------------------------------------------------------------
/src/loader/dirSelectDialog.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import ttk
3 | from tkinter import filedialog
4 | import os
5 |
6 |
7 | non_gerber_but_related = ['*-PTH.drl', '*.drl', '*.txt', '*.xln', '*.exc', '*.drd', '*.tap', '*.fab.gbr', '*.plated-drill.cnc', 'drl', '*-NPTH.drl', '*-User?Eco1.*', '*-Eco1?User.*', 'vcut', '*.gm1', '*-Edge?Cuts.*', '*.gko', '*.gm3', '*.dim', '*.gml', '*.fab', '*.out.gbr', '*.boardout.ger', 'ko',]
8 |
9 |
10 | class dirSelectDialog():
11 | """
12 | dirSelectDialog a dialog that lets you select a
13 | gerber file or a directory and opens the directory
14 | that contains the file (or the directory) - sounds simple... not at all!
15 | """
16 | gerber_filetypes = (
17 | '*.gtp', '*-F*Paste.*', '*.crc', '*.tsp', '*.stp', '*.toppaste.gbr', '*.tcream.ger',
18 | '*.gto', '*-F*SilkS.*', '*.plc', '*.tsk', '*.sst', '*.topsilk.gbr', '*.topsilkscreen.ger', 'to',
19 | '*.gts', '*-F*Mask.*', '*.stc', '*.tsm', '*.smt', '*.topmask.gbr', '*.topsoldermask.ger', 'ts',
20 | '*.gtl', '*-L1.*', '*.g1', '*-F*Cu*', '*.cmp', '*.top', '*.top.gbr', '*.toplayer.ger', 'tl',
21 | '*.g1', '*.g2', '*-L2.*', '*-In1*Cu*', '*-Inner1*Cu*', '*.ly1', '*.ly2', '*.in1', '*.internalplane1.ger', '*.gbl', '*-B*Cu*', '*.sol', '*.bot', '*.bottom.gbr', '*.bottomlayer.ger', 'l2', 'bl',
22 | '*.g2', '*.g3', '*-L3.*', '*-In2*Cu*', '*-Inner2*Cu*', '*.ly2', '*.ly3', '*.in2', '*.internalplane2.ger', '*.gbl', '*-B*Cu*', '*.sol', '*.bot', '*.bottom.gbr', '*.bottomlayer.ger', 'l3', 'bl',
23 | '*.g3', '*.g4', '*-L4.*', '*-In3*Cu*', '*-Inner3*Cu*', '*.ly3', '*.ly4', '*.in3', '*.internalplane3.ger', '*.gbl', '*-B*Cu*', '*.sol', '*.bot', '*.bottom.gbr', '*.bottomlayer.ger', 'l4', 'bl',
24 | '*.g4', '*.g5', '*-L5.*', '*-In4*Cu*', '*-Inner4*Cu*', '*.ly4', '*.ly5', '*.in4', '*.internalplane4.ger', '*.gbl', '*-B*Cu*', '*.sol', '*.bot', '*.bottom.gbr', '*.bottomlayer.ger', 'l5', 'bl',
25 | '*.g5', '*.g6', '*-L6.*', '*.gbl', '*-B*Cu*', '*.sol', '*.bot', '*.bottom.gbr', '*.bottomlayer.ger', 'bl',
26 | '*.gbs', '*-B*Mask.*', '*.sts', '*.bsm', '*.smb', '*.bottommask.gbr', '*.bottomsoldermask.ger', 'bs',
27 | '*.gbo', '*-B*SilkS.*', '*.pls', '*.bsk', '*.ssb', '*.bottomsilk.gbr', '*.bottomsilkscreen.ger',
28 | '*.gbp', '*-B*Paste.*', '*.crs', '*.bsp', '*.spb', '*.bottompaste.gbr', '*.bcream.ger',
29 | )
30 |
31 | def __init__(self, parent = None):
32 | if parent is None:
33 | self.root = tk.Tk()
34 | else:
35 | self.root = parent
36 | self.selected_directory = None
37 | self.nav_path = os.getcwd()
38 | self.file_filter = {"PNG images": (".png"), "GerberX2 files": (".gbr", ".grb"), "All known gerbers":self.gerber_filetypes, "All files": ("*.*")} # Example file filters
39 | self.filter_var = tk.StringVar()
40 | self.dialog = None
41 | self.dialogFlag = False
42 |
43 | def browse(self):
44 | #filetypes = [("PNG files", "*.png"), ("GerberX2 files", (".gbr", ".grb")), ("All known gerbers", self.gerber_filetypes), ("Python files", "*.py"), ("All files", "*.*")]
45 | self.dialog = tk.Toplevel(self.root)
46 | self.dialogFlag = True
47 | self.dialog.title("Select example Gerber file or directory to compare")
48 | self.dialog.geometry('600x350')
49 |
50 | #SOLUTION from: https://stackoverflow.com/questions/26957845/ttk-treeview-cant-change-row-height
51 | style = ttk.Style(self.dialog)
52 | style.configure('gerberFileDialog.Treeview', rowheight=25)
53 | treeview = ttk.Treeview(self.dialog, columns=("name", "type"), show="headings", style='gerberFileDialog.Treeview')
54 | treeview.heading("name", text="Filename")
55 | treeview.heading("type", text="Type")
56 |
57 | def select_item():
58 | selected_item = treeview.focus()
59 | if selected_item:
60 | item_type = treeview.item(selected_item, "values")[1]
61 | if item_type == "file":
62 | self.selected_directory = os.path.dirname(treeview.item(selected_item, "text"))
63 | else:
64 | self.selected_directory = treeview.item(selected_item, "text")
65 | else:
66 | self.selected_directory = self.nav_path
67 | print(self.selected_directory)
68 | self.dialogFlag = False
69 | self.dialog.destroy()
70 |
71 | def populate_treeview(path):
72 | treeview.delete(*treeview.get_children())
73 |
74 | # Insert parent directory button
75 | treeview.insert("", tk.END, values=("..", "directory above"), text=os.path.dirname(path))
76 | self.nav_path = path #os.path.dirname(path)
77 | for item in os.scandir(path):
78 | if item.is_file() and item.name.lower().endswith(self.file_filter[self.filter_var.get()]):
79 | treeview.insert("", tk.END, values=(item.name, "file"), text=item.path)
80 | elif item.is_dir():
81 | treeview.insert("", tk.END, values=(item.name, "directory"), text=item.path)
82 |
83 | def browse_parent_directory():
84 | selected_item = treeview.focus()
85 | if selected_item:
86 | path = os.path.dirname(treeview.item(selected_item, "text"))
87 | populate_treeview(path)
88 |
89 | def browse_sub_directory(event):
90 | selected_item = treeview.focus()
91 | if selected_item:
92 | item_type = treeview.item(selected_item, "values")[1]
93 | if item_type == "directory" or item_type == "directory above":
94 | path = treeview.item(selected_item, "text")
95 | populate_treeview(path)
96 |
97 | treeview.pack(fill=tk.BOTH, expand=True)
98 |
99 | # Create file filter drop-down box
100 |
101 | self.filter_var.set("GerberX2 files") # Set default filter
102 | filter_dropdown = ttk.Combobox(self.dialog, values=list(self.file_filter.keys()), textvariable=self.filter_var)
103 | filter_dropdown.pack()
104 |
105 | select_button = ttk.Button(self.dialog, text="Select", command=select_item)
106 | select_button.pack(pady=5)
107 | populate_treeview(os.getcwd())
108 | treeview.bind("", browse_sub_directory)
109 |
110 | self.dialog.mainloop()
111 |
112 | def get_filetypes(self, selected_filetype):
113 | if selected_filetype == "PNG files":
114 | return [(".png",)]
115 | elif selected_filetype == "Python files":
116 | return [(".py",)]
117 | else:
118 | return [("*.*",)]
119 |
120 | def subwindow_closed ():
121 | print("dailog closed and directory has been got...")
122 |
123 | def checkDialog(root, dialog):
124 | if dialog.dialogFlag: #isinstance(dialog.dialog, object):
125 | print("dialog exists")
126 | print(dialog.dialog)
127 | else:
128 | print("dialog doesn't exist.. time to do a thing with the dir: ")
129 | print(dialog.selected_directory)
130 | print(dialog)
131 | root.after(2000, checkDialog, root, dialog)
132 |
133 | if __name__ == "__main__":
134 | root = tk.Tk()
135 | dialog = dirSelectDialog(root)
136 | browse_button = ttk.Button(root, text="Browse", command=dialog.browse)
137 | browse_button.pack()
138 | checkDialog(root, dialog)
139 | root.mainloop()
140 |
141 |
142 |
--------------------------------------------------------------------------------
/src/loader/gerbLoader.py:
--------------------------------------------------------------------------------
1 | from PIL import Image, ImageFile, ImageChops, ImageFilter, ImageOps # ImageDraw
2 | from . import simple_color_generator
3 | #from pygerber.backend.rasterized_2d import Rasterized2DBackend
4 | ImageFile.LOAD_TRUNCATED_IMAGES = True
5 |
6 |
7 | from pygerber.gerberx3.api import ColorScheme
8 | from pygerber.gerberx3.api._layers import (
9 | Rasterized2DLayer,
10 | Rasterized2DLayerParams,
11 | Rasterized2DBackend,
12 | )
13 | #from pygerber.backend.rasterized_2d import Rasterized2DResult
14 | from pygerber.common.rgba import RGBA
15 |
16 | class gerbLoader():
17 | """
18 | gerbLoader is an abstraction layer
19 | this implementation relys on pygerber 2.0
20 | 'the only way to import gerbers' ;-)
21 | """
22 |
23 | def __init__(self, transparency=160):
24 | self.option = "Import using pygerber"
25 | self.color = simple_color_generator.simple_color_generator(transparency=transparency)
26 | #print ("initialised gerbLoader")
27 | self.imageDict = {}
28 | self.dpi = 400
29 | pass
30 |
31 | def loadImage(self, file_path, color=None):
32 | if file_path not in self.imageDict :
33 | if color == None:
34 | color = self.color.getNextColor()
35 | c, rgb = color
36 | cunning_scheme = ColorScheme( # simple transparent of fill color scheme
37 | background_color=RGBA.from_rgba(0, 0, 0, 0),
38 | clear_color=RGBA.from_rgba(0, 0, 0, 0),
39 | solid_color=RGBA.from_rgba(*c[0]),
40 | clear_region_color=RGBA.from_rgba(0, 0, 0, 0),
41 | solid_region_color=RGBA.from_rgba(*c[0]),
42 | )
43 |
44 | out = Rasterized2DLayer(
45 | options=Rasterized2DLayerParams(
46 | dpi=self.dpi,
47 | source_path=file_path,
48 | colors=cunning_scheme,
49 | ),
50 | )
51 | #out.render().save("./tmp.png")
52 | #layerImage = Image.open('./tmp.png')
53 | #print(file_path)
54 | render_result = out.render()
55 | layerImage = render_result._result_handle.result
56 | coords = render_result._properties.target_coordinate_origin
57 | #coords = render_result._properties.gerber_coordinate_origin
58 | #print("gerber offset")
59 | #print(coords)
60 | verticalFlip = layerImage.transpose(Image.FLIP_TOP_BOTTOM)
61 | #layerImage = out_handle.get_result_handle().result
62 | #layerImage.convert("RGBA")
63 | offset_x = coords.x.value # convert coords to offsets
64 | offset_y = coords.y.value
65 | #if offset_x < 0 :
66 | # offset_x =0
67 | #if offset_y < 0:
68 | # offset_y = 0
69 | width, height = verticalFlip.size
70 | vFlipCrop = verticalFlip.crop((offset_x, offset_y, width, height))
71 | self.imageDict [file_path] = (vFlipCrop, rgb, offset_x, offset_y)
72 | return vFlipCrop, rgb, offset_x, offset_y
73 | else:
74 | return self.imageDict[file_path]
75 |
76 |
77 | def get_difference_outlines(self, a, b, opacity=0.85):
78 | """ Function to find differences in images
79 | Parameters
80 | ----------
81 | a: Image
82 | The first Image to difference
83 | b: Image
84 | The second image to difference (must be same dimensions)
85 | opacity: float
86 | Number from zero to one that represents the opacity of the diff layer. 0 is transparent, 1 is opaque
87 |
88 | Returns
89 | -------
90 | redmask : Image
91 | A semi transparent image with the differences of a & b highlighted with a thick red highlight outline
92 | percent_diff_pixels: Float
93 | The percentage of pixels that are different between Image a & Image b.
94 | """
95 | #convert the images to black and white - first
96 | a_gray = ImageOps.grayscale(a)
97 | b_gray = ImageOps.grayscale(b)
98 | #b_gray.show()
99 | #input()
100 |
101 | # threshold the images - since they are different colors - (anything above '1' becomes white)
102 | a_mask = a_gray.point(lambda x: 255 if x > 1 else 0, '1')
103 | b_mask = b_gray.point(lambda x: 255 if x > 1 else 0, '1')
104 | #b_mask.show()
105 | #input()
106 |
107 | # invert both images
108 | a_inv = ImageOps.invert(a_mask)
109 | b_inv = ImageOps.invert(b_mask)
110 | #b_inv.show()
111 | #input()
112 |
113 | a_bw = a_inv.convert("1")
114 | b_bw = b_inv.convert("1")
115 | #b_bw.show()
116 | #input()
117 | diff = ImageChops.difference(a_bw, b_bw)
118 |
119 | # telluser what the total different pixels are...
120 | tot_different_pixels = 0
121 | tot_pixels = diff.size[0] * diff.size[1]
122 | for pixel in diff.getdata():
123 | if pixel != 0:
124 | tot_different_pixels += 1
125 | percent_diff_pixels = (1- (tot_different_pixels/tot_pixels) ) * 100
126 | diff = diff.convert('L')
127 |
128 | new = diff.copy()
129 | shrink = new.filter(ImageFilter.MaxFilter(17))
130 | grow = shrink.filter(ImageFilter.MinFilter(3))
131 | inverted = ImageOps.invert(new)
132 | outline = ImageChops.difference(grow, inverted)
133 | outline = ImageOps.invert(outline)
134 | highlight_color = (247, 126, 185, 220)
135 | redmask = self.new_color(diff.size, color=(247, 126, 185, 0)) # same color but transparent -
136 | redmask.paste(highlight_color, (0,0), mask=outline)
137 | return redmask, percent_diff_pixels
138 |
139 | # diff code using only pillow
140 | # from: https://stackoverflow.com/questions/30277447/compare-two-images-and-highlight-differences-along-on-the-second-image
141 | # erode dilate using pillow:
142 | # from: https://stackoverflow.com/questions/44195007/equivalents-to-opencvs-erode-and-dilate-in-pil
143 | def new_color(self, size, color):
144 | ''' Function returns a new image of the defined size and color
145 | Parameters
146 | ----------
147 | size: a tuple of (x,y)
148 | color: a tuple of Floats of the form (red, green, blue)
149 |
150 | Returns
151 | -------
152 | img: an Image of the specified size and color
153 | '''
154 | img = Image.new(mode="RGBA", size=size, color=color)
155 | #dr = ImageDraw.Draw(img)
156 | #dr.rectangle((0,0) + size, fill=color)
157 | return img
158 |
--------------------------------------------------------------------------------
/src/loader/simple_color_generator.py:
--------------------------------------------------------------------------------
1 | # color generator is based on earlier code that used pygerber
2 | # I've simplified it to use just a tuple as this is all that;s needed.
3 |
4 | class simple_color_generator():
5 | # LARGE_PRIME= [ 39847, 69857, 40277]
6 | LARGE_PRIME= [227, 163, 197]
7 | LIST_OF_COLORS = []
8 | #LIST_OF_COLORS.append(DEFAULT_COLOR_SET_ORANGE)
9 | #LIST_OF_COLORS.append(DEFAULT_COLOR_SET_GREEN)
10 | counter = 0
11 | BRIGHT_RED = None
12 | WHITE = None
13 |
14 | def __init__(self, transparency=160):
15 | for i in range(173,285): # range numbers need to be away from 1, but are not important
16 | self.LIST_OF_COLORS.append((
17 | (( (i+23)*self.LARGE_PRIME[0])%150, ((i+253)*self.LARGE_PRIME[1])%255, ((i+3)*self.LARGE_PRIME[2])%255 , transparency),
18 | (100,100,100, 50),
19 | ( 50, 50, 50, 50),
20 | ))
21 | self.BRIGHT_RED = (
22 | (230, 66, 75, 100),
23 | (100, 100, 100, 255),
24 | ( 50, 50, 50, 255),
25 | )
26 | self.WHITE = (
27 | (255, 255, 255, 0),
28 | ( 0, 0, 0, 0),
29 | ( 0, 0, 0, 0),
30 | )
31 | self.counter = 0
32 |
33 | def getWhite(self):
34 | rgbstr = '#%02x%02x%02x%02x' % self.WHITE[0]
35 | return self.WHITE, rgbstr
36 |
37 | def getBrightRed(self):
38 | rgbstr = '#%02x%02x%02x%02x' % self.BRIGHT_RED[0]
39 | return self.BRIGHT_RED, rgbstr
40 |
41 | def getNextColor(self):
42 | self.counter= (self.counter+1) % len(self.LIST_OF_COLORS)
43 | rgb = '#%02x%02x%02x%02x' % self.LIST_OF_COLORS[self.counter][0]
44 | return self.LIST_OF_COLORS[self.counter], rgb[:-2]
--------------------------------------------------------------------------------