├── .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 | diffgerber logo 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 | ![Picture of the Gerber Difftool](docs/images/GerberDifferenceViewer.png?raw=true "a diffgerber screenshot") 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] --------------------------------------------------------------------------------