From 4ba1fd964f61956e262a83b6f8c68c4ac7b3e403 Mon Sep 17 00:00:00 2001 From: Shawn Nock Date: Fri, 23 Mar 2018 09:44:01 -0400 Subject: [PATCH] Adds gerbers as massaged for DirtyPCBs order --- MergeDrl.pl | 164 ++++++++++++++ gerber/combined-PTH-NPTH.drl | 209 ++++++++++++++++++ ...Cuts.gm1 => ec-rpi-vid-prop-Edge.Cuts.gko} | 0 ...op-In1.Cu.g2 => ec-rpi-vid-prop-In1.Cu.g1} | 0 ...op-In2.Cu.g3 => ec-rpi-vid-prop-In2.Cu.g2} | 0 ...PTH.drl => ec-rpi-vid-prop.drl.non-plated} | 0 ...id-prop.drl => ec-rpi-vid-prop.drl.plated} | 0 7 files changed, 373 insertions(+) create mode 100644 MergeDrl.pl create mode 100644 gerber/combined-PTH-NPTH.drl rename gerber/{ec-rpi-vid-prop-Edge.Cuts.gm1 => ec-rpi-vid-prop-Edge.Cuts.gko} (100%) rename gerber/{ec-rpi-vid-prop-In1.Cu.g2 => ec-rpi-vid-prop-In1.Cu.g1} (100%) rename gerber/{ec-rpi-vid-prop-In2.Cu.g3 => ec-rpi-vid-prop-In2.Cu.g2} (100%) rename gerber/{ec-rpi-vid-prop-NPTH.drl => ec-rpi-vid-prop.drl.non-plated} (100%) rename gerber/{ec-rpi-vid-prop.drl => ec-rpi-vid-prop.drl.plated} (100%) diff --git a/MergeDrl.pl b/MergeDrl.pl new file mode 100644 index 0000000..3d06812 --- /dev/null +++ b/MergeDrl.pl @@ -0,0 +1,164 @@ +#!/usr/bin/perl -w + +# MergeDrl.pl +# +# CC-BY 2012 9DOF <9dof.gg@gmail.com> +# +# Merges several Excellon format drill files into a single file. +# +# Usage: MergeDrl.pl input_file [...] > output_file +# +# Output's header will be copied from first input file + +use strict; + +use IO::File; + +use Data::Dumper; + +sub parseExcellon($); + +# Get arguments +my @drills; + +# Parse args and dump content +foreach my $fn (@ARGV) { + push @drills, parseExcellon($fn); +# my $f = new IO::File($fn, 'r'); +# print 'Dumping ', $fn, "\n"; +# dumpExcellon($f); +} + +#print Dumper(\@drills); + +# Combine drills +my %mergedDrills = ( + tools => {}, + coords => {}); + +my @comboTools = (); +foreach my $t(@drills) { + while (my($k,$v)=each %{$t->{tools}}){ + push @comboTools, {spec => $v, coords => $t->{coords}->{$k}}; + } +} + +#print "Combo:\n"; +#print Dumper(\@comboTools); + +# Sort spec and allocate new indices +my $currTool; +my $prevTool; +my $currIndex = 1; +my @finalTools = (); + +foreach my $e(sort {$a->{spec} cmp $b->{spec}} @comboTools) { + # Check if same spec as last one + if ($prevTool && $prevTool->{spec} eq $e->{spec}) { + push @{$prevTool->{coords}}, @{$e->{coords}}; + } else { + $e->{tool} = 'T'.$currIndex++; + $prevTool = $e; + push @finalTools, $prevTool; + } +} +# print Dumper(\@finalTools); + +# Output result +local $/ = "\r\n"; +# Header +print "M48$/"; +foreach my $h(@{$drills[0]->{headers}}) { + print "$h$/"; +} +# List of tools +foreach my $t(@finalTools) { + print $t->{tool}.$t->{spec}.$/; +} +# End of header +print "\%$/"; +# Body +print "G90$/"; +print "G05$/"; +print "M72$/"; +# Coords +foreach my $t(@finalTools) { + print $t->{tool}, $/; + foreach my $c(@{$t->{coords}}) { + print "$c$/"; + } +} +# End +print "T0$/"; +print "M30$/"; + +exit 0; + +# Excellon parser +sub parseExcellon($) { + my ($fn) = @_; + my %res = ( + filename => $fn, + tools => {}, + coords => {}, + headers => []); + + my $f = new IO::File($fn, 'r'); + + my $inHeader = 0; + my $inBody = 0; + my $currTool; +# print "Inside parseExcellon(${fn})\n"; + while(<$f>){ + local $/ = "\r\n"; + chomp; +# chop; # input is MSDOS line terminated + if (!$inHeader && !$inBody) { # Search for start of header (^M48) + if (/^M48/) { + # Found start of header + $inHeader = 1; + } else { +# print 's'; + } + } elsif ($inHeader) { # Inside header, collect info until end of header (^%) + if (!/^\%/) { +# print 'h'; + if (/^(T\d+)(.*)/) { + $res{tools}->{$1} = $2; + $res{coords}->{$1} = []; + } else { + push @{$res{headers}}, $_; + } + } else { + $inHeader = 0; + $inBody = 1; + } + } elsif ($inBody) { # Inside body, collect coords until end of body (^M30) + if (!/^M30/) { +# print 'b'; + if (/^(T\d+)/) { + $currTool = $1; + } elsif ($currTool && exists $res{coords}->{$currTool}) { + push @{$res{coords}->{$currTool}}, $_; + } + } else { + $inBody = 0; +# print "\n"; + last; + } + } + } + $f->close; + # Dump info +# print "Info dump\n"; +# print "Headers:\n"; +# print @headers; +# print "Tools:\n"; +# print join(",", @tools), "\n"; +# print "Coords:\n"; +# foreach my $t(@tools) { +# print "Tool: ", $t, "\n"; +# print @{$coords{$t}}; + \%res; + } + diff --git a/gerber/combined-PTH-NPTH.drl b/gerber/combined-PTH-NPTH.drl new file mode 100644 index 0000000..437fef7 --- /dev/null +++ b/gerber/combined-PTH-NPTH.drl @@ -0,0 +1,209 @@ +M48 +;DRILL file {KiCad 4.0.7} date Tue Mar 13 19:37:50 2018 + +;FORMAT={-:-/ absolute / inch / decimal} + +FMAT,2 + +INCH,TZ + +T1C0.012 +T2C0.035 +T3C0.039 +T4C0.047 +T5C0.060 +T6C0.108 +T7C0.128 +% +G90 +G05 +M72 +T1 +X4.1596Y-4.0831 + +X4.2296Y-4.1711 + +X4.3106Y-3.6681 + +X4.3356Y-4.0801 + +X4.5656Y-4.1071 + +X4.6118Y-3.9753 + +X4.6486Y-4.1831 + +X4.8266Y-4.0291 + +X4.8866Y-3.9731 + +X4.9983Y-4.061 + +X5.2156Y-4.3001 + +X5.2256Y-4.4401 + +X5.3256Y-4.3801 + +X5.3256Y-4.4101 + +X5.3856Y-4.3001 + +X5.4356Y-4.5801 + +X5.4868Y-4.5053 + +X5.5368Y-4.5653 + +X5.5468Y-4.6403 + +X5.5618Y-4.5903 + +T2 +X4.3669Y-4.4685 + +X4.4169Y-4.3685 + +X4.4669Y-4.4685 + +X4.5169Y-4.3685 + +X4.5669Y-4.4685 + +X4.6169Y-4.3685 + +X4.6669Y-4.4685 + +X4.7169Y-4.3685 + +T3 +X4.0748Y-4.1323 + +X4.0748Y-4.2323 + +X4.0748Y-4.3323 + +X4.2469Y-3.7295 + +X4.2469Y-3.8295 + +X4.3469Y-3.7295 + +X4.3469Y-3.8295 + +X4.4469Y-3.7295 + +X4.4469Y-3.8295 + +X4.4493Y-4.0301 + +X4.4493Y-4.1301 + +X4.4493Y-4.2301 + +X4.5469Y-3.7295 + +X4.5469Y-3.8295 + +X4.6469Y-3.7295 + +X4.6469Y-3.8295 + +X4.7469Y-3.7295 + +X4.7469Y-3.8295 + +X4.8469Y-3.7295 + +X4.8469Y-3.8295 + +X4.9469Y-3.7295 + +X4.9469Y-3.8295 + +X5.0168Y-4.7103 + +X5.0469Y-3.7295 + +X5.0469Y-3.8295 + +X5.1168Y-4.7103 + +X5.1469Y-3.7295 + +X5.1469Y-3.8295 + +X5.2469Y-3.7295 + +X5.2469Y-3.8295 + +X5.3469Y-3.7295 + +X5.3469Y-3.8295 + +X5.4469Y-3.7295 + +X5.4469Y-3.8295 + +X5.5469Y-3.7295 + +X5.5469Y-3.8295 + +X5.6469Y-3.7295 + +X5.6469Y-3.8295 + +X5.7469Y-3.7295 + +X5.7469Y-3.8295 + +X5.8469Y-3.7295 + +X5.8469Y-3.8295 + +X5.9469Y-3.7295 + +X5.9469Y-3.8295 + +X6.0469Y-3.7295 + +X6.0469Y-3.8295 + +X6.1469Y-3.7295 + +X6.1469Y-3.8295 + +T4 +X6.1024Y-4.2323 + +X6.2992Y-4.0354 + +X6.2992Y-4.4291 + +X6.3976Y-4.0354 + +X6.3976Y-4.4291 + +T5 +X6.1024Y-4.0354 + +X6.1024Y-4.4291 + +X6.2992Y-4.2323 + +T6 +X4.0551Y-3.7795 + +X4.0551Y-4.685 + +X6.3386Y-3.7795 + +X6.3386Y-4.685 + +T7 +X4.3083Y-4.7185 + +X4.7756Y-4.7185 + +T0 +M30 diff --git a/gerber/ec-rpi-vid-prop-Edge.Cuts.gm1 b/gerber/ec-rpi-vid-prop-Edge.Cuts.gko similarity index 100% rename from gerber/ec-rpi-vid-prop-Edge.Cuts.gm1 rename to gerber/ec-rpi-vid-prop-Edge.Cuts.gko diff --git a/gerber/ec-rpi-vid-prop-In1.Cu.g2 b/gerber/ec-rpi-vid-prop-In1.Cu.g1 similarity index 100% rename from gerber/ec-rpi-vid-prop-In1.Cu.g2 rename to gerber/ec-rpi-vid-prop-In1.Cu.g1 diff --git a/gerber/ec-rpi-vid-prop-In2.Cu.g3 b/gerber/ec-rpi-vid-prop-In2.Cu.g2 similarity index 100% rename from gerber/ec-rpi-vid-prop-In2.Cu.g3 rename to gerber/ec-rpi-vid-prop-In2.Cu.g2 diff --git a/gerber/ec-rpi-vid-prop-NPTH.drl b/gerber/ec-rpi-vid-prop.drl.non-plated similarity index 100% rename from gerber/ec-rpi-vid-prop-NPTH.drl rename to gerber/ec-rpi-vid-prop.drl.non-plated diff --git a/gerber/ec-rpi-vid-prop.drl b/gerber/ec-rpi-vid-prop.drl.plated similarity index 100% rename from gerber/ec-rpi-vid-prop.drl rename to gerber/ec-rpi-vid-prop.drl.plated