Oh wow!   Did you do this specially?   If so I'm really touched - thank 
you.   I'll take a look at this today.   Being a C(++) programmer I was 
thinking about doing this in C, but though I've not written any Perl 
myself I reckon I should be able to edit this if I need to and post it back.

I guess the advantage of doing it in C is that it could be added to the 
postprocess menu of kicad.   Anyone got any thoughts on that?   I can 
write the code if it's thought worthwhile.

Regards,

Robert.

axtz4 wrote:
> --- In [email protected], Robert <birmingham_spi...@...> wrote:
>> Hmmm - that would be a lot of manual editing.   OK, thanks.   At least I 
>> can now solve it with a bit of C code if they insist on this one.
> 
> Give this a try (I hope the Y! formatting doesn't totally destroy it.) May 
> need to be tweaked for your house Gerber style.
> 
> 
> #!/usr/bin/perl
> #
> # Usage: perl shrink_paste.pl [input] [shrinkage] {minimum}
> #
> # Define $scale as the factor from the units of the command line shrinkage
> # value to the units in the Gerber. For a command line unit of mm and a
> # Gerber unit of inches, use 25.4.
> # If specified, the minimum dimension will be respected. If not specified,
> # it defaults to 0.0. Units are assumed to be the same as shrinkage and
> # similarly affected by the scale factor.
> 
> $scale = 25.4;
> $minimum = 0.0;
> 
> $iname = $ARGV[0];
> if ($iname eq "") {
>     print "No input filename\n";
>     exit;
> }
> 
> $oname = $iname;
> $bakname = $iname;
> 
> $base = rindex($oname, ".pho");
> if ($base == -1) {
>     print "Input not a Gerber? (Not .pho)\n";
>     exit;
> }
> 
> $shrinkage = $ARGV[1];
> 
> if ($shrinkage == 0) {
>     print "Quitting, no shrinkage spec'd\n";
>     exit;
> }
> 
> $shrinkage /= $scale;
> 
> $minimum = $ARGV[2];
> if ($minimum < 0.0) {
>     $minimum = 0.0;
> }
> $minimum /= $scale;
> 
> substr($oname, $base) = ".tmp";
> substr($bakname, $base) = ".bak";
> 
> open (IFILE, $iname) or die "$iname: $!";
> open (OFILE, ">", $oname) or die "$oname: $!";
> 
> $working = 0;
> $x = 0.0;
> $y = 0.0;
> 
> while (<IFILE>) {
>     chomp;
>     if (!$working) {
>       printf(OFILE "%s\n", $_);
>       if (/APERTURE LIST/) {
>           $working = 1;
>       }
>     } elsif ($working) {
>       if (/APERTURE END LIST/) {
>           $working = 0;
>           printf(OFILE "%s\n", $_);
>       } else {
>           @field = split(/[,X\*]/);
>           if ($field[0] =~ /C/) {
>               $x = $field[1] - $shrinkage;
>               if ($x < $minimum) {
>                   $x = $minimum;
>               }
>               printf(OFILE "%s,%.6f*%\n",
>                   $field[0], $x);
>           } elsif ($field[0] =~ /[RO]/) {
>               $x = $field[1] - $shrinkage;
>               if ($x < $minimum) {
>                   $x = $minimum;
>               }
>               $y = $field[2] - $shrinkage;
>               if ($y < $minimum) {
>                   $y = $minimum;
>               }
>               printf(OFILE "%s,%.6fX%.6f*%\n",
>                   $field[0], $x, $y);
>           }
>       }
>     }
> }
> 
> close(IFILE);
> close(OFILE);
> 
> rename($iname, $bakname);
> rename($oname, $iname);
> 
> 
> 
> 
> ------------------------------------
> 
> Please read the Kicad FAQ in the group files section before posting your 
> question.
> Please post your bug reports here. They will be picked up by the creator of 
> Kicad.
> Please visit http://www.kicadlib.org for details of how to contribute your 
> symbols/modules to the kicad library.
> For building Kicad from source and other development questions visit the 
> kicad-devel group at http://groups.yahoo.com/group/kicad-develYahoo! Groups 
> Links
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> No virus found in this incoming message.
> Checked by AVG - www.avg.com 
> Version: 8.5.283 / Virus Database: 270.11.39/2038 - Release Date: 04/02/09 
> 19:07:00
> 


Reply via email to