the script didn't stop on a 70 x 70 pixel file. I left it running hopeing it would stop the file was over a gig...
my previous post shown awk -f prog.awk pic.pbm > art.out --- In [email protected], "raoulduke_esq" <raoulduke_...@...> wrote: > > Pardon me if I am just being obtuse, but I could find no easy way to add an > image or artwork to a layout. I've tried pstoedit but that utility (in > addition to being broken if you are in a directory path that has a space in > it) only works for text. > > Because I am under the gun, I had to gin up something to get a project out > the door. So I came up with a quick and dirty solution. > > Step 1: Generate an ASCII PBM file - I use GIMP. A monochrome (black and > white) image will be represented by a file full of "0" and "1". Call it > something like "art.pbm". > > Step 2: Run the ASCII PBM file "art.pbm" through the following awk script and > put the output into a file, call it "art.out". > > Step 3: Create a module library with a single component, call it something > like "Logo". The library will be called "Logo.mod". > > Step 4: Edit the module library "Logo.mod", look for the $EndMODULE line, and > copy the contents of "art.out" immediately before it. Save the file. > > Step 5: Edit the module library and move things around, add the module name, > etc. > > Step 6: In PCBnew, add the module from the library and place it where you > want. > > I hope this makes sense and helps someone other than me. And I hope that I > have not reinvented the wheel. I'm sorry that I use awk as a script language > of choice, I suppose I could clean it up as a Perl script if there is any > interest. > > raoul > > > ----------Cut Here---------- > # This script will take an ASCII PBM B&W file and convert it to a series > # of "DS" (Draw Segment) statements in PCBNEW syntax. The deltaX and deltaY > # is defined in "step" which is in uints of 1/10 mil. The layer is currently > # set to 21, the component layer silkscreen. Swap bg & fg based on whether > # black or white is the foreground. > # > # State 0 : look for magic number - must be P1 (can be P4 for raw file) > # State 1 : look for height & width > # State 2 : process data > # State 3 : done with data - skip the rest > # > BEGIN { state = 0; step = 40; layer = 21; fg = "1"; bg = "0"; } > {if (NR == 1) { > state = 1; > if ($1 != "P1") { > printf("Must supply an ASCII PBM image file\n"); > exit 1 > } > next; > } > } > /^#/ { next } # Comment line, skip it > {if (state == 1) { > width = $1; > height = $2; > buff = ""; > state = 2; > Y = - ((step * height) / 2); > initX = - ((step * width) / 2); > next; > } > } > {if (state == 2) { > buff = buff $1; > if (length( buff ) >= width) { > scanline = substr( buff, 1, width ); > buff = substr( buff, width + 1 ); > Y += step; > X = initX; > while ( Z1 = index( scanline, fg )) { > scanline = substr( scanline, Z1 ); > Z2 = index( scanline, bg ); > scanline = substr( scanline, Z2 ); > Z1 = step * Z1 + X; > Z2 = step * Z2 + Z1 - 2 * step; > X = Z2; > printf( "DS %d %d %d %d %d %d\n", Z1, Y, Z2, Y, step, layer ); > } > height--; > if (height == 0) > state = 3; > } > } > } > {if (state == 3) { nextfile; }} > ----------Cut Here---------- >
