From 836dd3345e28ac9d0545fe2a2ec352f4cf387087 Mon Sep 17 00:00:00 2001 From: Windell Oskay Date: Mon, 15 Dec 2014 16:10:37 -0800 Subject: [PATCH] Add StippleGen and TSP art tools --- other/EggBot-processing/EggBot2.pde | 120 ++ other/StippleGen2/README.txt | 71 + other/StippleGen2/StippleGen2.pde | 1411 +++++++++++++++++ other/StippleGen2/data/grace.jpg | Bin 0 -> 256971 bytes other/StippleGen2/data/header.txt | 48 + other/TSP-stipple/stipple/README.txt | 112 ++ other/TSP-stipple/stipple/stipple.py | 306 ++++ other/TSP-stipple/stipple/torus.pts | 1200 ++++++++++++++ other/TSP-stipple/tsp_art_tools/README.txt | 78 + other/TSP-stipple/tsp_art_tools/STIPPLING.txt | 20 + .../tsp_art_tools/build-concorde-osx-0_2.sh | 129 ++ other/TSP-stipple/tsp_art_tools/cmyk.jsx | 99 ++ other/TSP-stipple/tsp_art_tools/tspart.py | 295 ++++ other/TSP-stipple/tsp_art_tools/tspbitcity.py | 585 +++++++ .../TSP-stipple/tsp_art_tools/tspsolution.py | 121 ++ 15 files changed, 4595 insertions(+) create mode 100644 other/EggBot-processing/EggBot2.pde create mode 100644 other/StippleGen2/README.txt create mode 100644 other/StippleGen2/StippleGen2.pde create mode 100644 other/StippleGen2/data/grace.jpg create mode 100644 other/StippleGen2/data/header.txt create mode 100644 other/TSP-stipple/stipple/README.txt create mode 100755 other/TSP-stipple/stipple/stipple.py create mode 100644 other/TSP-stipple/stipple/torus.pts create mode 100644 other/TSP-stipple/tsp_art_tools/README.txt create mode 100644 other/TSP-stipple/tsp_art_tools/STIPPLING.txt create mode 100755 other/TSP-stipple/tsp_art_tools/build-concorde-osx-0_2.sh create mode 100644 other/TSP-stipple/tsp_art_tools/cmyk.jsx create mode 100755 other/TSP-stipple/tsp_art_tools/tspart.py create mode 100755 other/TSP-stipple/tsp_art_tools/tspbitcity.py create mode 100755 other/TSP-stipple/tsp_art_tools/tspsolution.py diff --git a/other/EggBot-processing/EggBot2.pde b/other/EggBot-processing/EggBot2.pde new file mode 100644 index 00000000..d526cbf8 --- /dev/null +++ b/other/EggBot-processing/EggBot2.pde @@ -0,0 +1,120 @@ +/** + * EggBot Simple Write. + * + * Example code for talking to the EggBot from Processing. + */ + + +import processing.serial.*; + +Serial myPort; // Create object from Serial class +int val; // Data received from the serial port +boolean PenDown; + + +void liftPen() +{ + myPort.write("SP,0\r"); + PenDown = false; +} + +void lowerPen() +{ + myPort.write("SP,1\r"); + PenDown = true; +} + + + + + void Up() +{ + myPort.write("SM,100,10,0\r"); + //"SM,,," +} + + void Down() +{ + myPort.write("SM,100,-10,0\r"); + //"SM,,," +} + + + void Left() +{ + myPort.write("SM,100,0,10\r"); + //"SM,,," +} + + void Right() +{ + myPort.write("SM,100,0,-10\r"); + //"SM,,," +} + + +void setup() +{ + size(800, 250); + // I know that the first port in the serial list on my mac + // is always my FTDI adaptor, so I open Serial.list()[0]. + // On Windows machines, this generally opens COM1. + // Open whatever port is the one you're using. + String portName = Serial.list()[1]; + myPort = new Serial(this, portName, 38400); + + liftPen(); + background(255); +} + +//String str1 = "SP,1\r"; + + +void draw() { + +// myPort.write("SM,25,0,50\r"); + //"SM,,," + + // delay(500); + // myPort.write("SM,25,0,0\r"); + + +} + + + +void keyPressed() +{ + // if the key is between 'A'(65) and 'z'(122) + if( key == ' ') + { + + if (PenDown) + liftPen(); + else + lowerPen(); + } + + if( key == 'u') + { + Up(); + } + + if( key == 'd') + { + Down(); + } + + + if( key == 'l') + { + Left(); + } + + if( key == 'r') + { + Right(); + } + +} + diff --git a/other/StippleGen2/README.txt b/other/StippleGen2/README.txt new file mode 100644 index 00000000..bbbea37c --- /dev/null +++ b/other/StippleGen2/README.txt @@ -0,0 +1,71 @@ + + StippleGen_2 + + SVG Stipple Generator, v. 2.02 + Copyright (C) 2012 by Windell H. Oskay, www.evilmadscientist.com + + Full Documentation: http://wiki.evilmadscience.com/StippleGen + Blog post about the release: http://www.evilmadscientist.com/go/stipple2 + + + An implementation of Weighted Voronoi Stippling: + http://mrl.nyu.edu/~ajsecord/stipples.html + + + ******************************************************************************* + + Change Log: + + v 2.02 + * Force files to end in .svg + * Fix bug that gave wrong size to stipple files saved white stipples on black background + + v 2.01: + * Improved handling of Save process, to prevent accidental "not saving" by users. + + v 2.0: + * Add tone reversal option (white on black / black on white) + * Reduce vertical extent of GUI, to reduce likelihood of cropping on small screens + * Speling corections + * Fixed a bug that caused unintended cropping of long, wide images + * Reorganized GUI controls + * Fail less disgracefully when a bad image type is selected. + + ******************************************************************************* + + Program is based on the Toxic Libs Library ( http://toxiclibs.org/ ) + & example code: + http://forum.processing.org/topic/toxiclib-voronoi-example-sketch + + + Additional inspiration: + Stipple Cam from Jim Bumgardner + http://joyofprocessing.com/blog/2011/11/stipple-cam/ + + and + + MeshLibDemo.pde - Demo of Lee Byron's Mesh library, by + Marius Watz - http://workshop.evolutionzone.com/ + + + Requires ControlP5 library and Toxic Libs library: + http://www.sojamo.de/libraries/controlP5/ + http://hg.postspectacular.com/toxiclibs/downloads + + + + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * http://creativecommons.org/licenses/LGPL/2.1/ + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA \ No newline at end of file diff --git a/other/StippleGen2/StippleGen2.pde b/other/StippleGen2/StippleGen2.pde new file mode 100644 index 00000000..bc97cb15 --- /dev/null +++ b/other/StippleGen2/StippleGen2.pde @@ -0,0 +1,1411 @@ +/** + + StippleGen_2_31 + + SVG Stipple Generator, v. 2.31 + Copyright (C) 2013 by Windell H. Oskay, www.evilmadscientist.com + + Full Documentation: http://wiki.evilmadscience.com/StippleGen + Blog post about the release: http://www.evilmadscientist.com/go/stipple2 + + + An implementation of Weighted Voronoi Stippling: + http://mrl.nyu.edu/~ajsecord/stipples.html + + ******************************************************************************* + + Change Log: + + + v 2.3 + * Forked from 2.1.1 + * Fixed saving bug + + v 2.20 + * [Cancelled development branch.] + + v 2.1.1 + * Faster now, with number of stipples calculated at a time. + + v 2.1.0 + * Now compiling in Processing 2.0b6 + * selectInput() and selectOutput() calls modified for Processing 2. + + v 2.02 + * Force files to end in .svg + * Fix bug that gave wrong size to stipple files saved white stipples on black background + + v 2.01: + * Improved handling of Save process, to prevent accidental "not saving" by users. + + v 2.0: + * Add tone reversal option (white on black / black on white) + * Reduce vertical extent of GUI, to reduce likelihood of cropping on small screens + * Speling corections + * Fixed a bug that caused unintended cropping of long, wide images + * Reorganized GUI controls + * Fail less disgracefully when a bad image type is selected. + + ******************************************************************************* + + + + Program is based on the Toxic Libs Library ( http://toxiclibs.org/ ) + & example code: + http://forum.processing.org/topic/toxiclib-voronoi-example-sketch + + + Additional inspiration: + Stipple Cam from Jim Bumgardner + http://joyofprocessing.com/blog/2011/11/stipple-cam/ + + and + + MeshLibDemo.pde - Demo of Lee Byron's Mesh library, by + Marius Watz - http://workshop.evolutionzone.com/ + + + Requires ControlP5 library and Toxic Libs library: + http://www.sojamo.de/libraries/controlP5/ + http://hg.postspectacular.com/toxiclibs/downloads + + + */ + + +/* + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * http://creativecommons.org/licenses/LGPL/2.1/ + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +// You need the controlP5 library from http://www.sojamo.de/libraries/controlP5/ +import controlP5.*; + +//You need the Toxic Libs library: http://hg.postspectacular.com/toxiclibs/downloads + +import toxi.geom.*; +import toxi.geom.mesh2d.*; +import toxi.util.datatypes.*; +import toxi.processing.*; + +// helper class for rendering +ToxiclibsSupport gfx; + +import javax.swing.UIManager; +import javax.swing.JFileChooser; + + + + +// Feel free to play with these three default settings: +int maxParticles = 2000; // Max value is normally 10000. Press 'x' key to allow 50000 stipples. (SLOW) +float MinDotSize = 1.75; //2; +float DotSizeFactor = 4; //5; +float cutoff = 0; // White cutoff value + + +int cellBuffer = 100; //Scale each cell to fit in a cellBuffer-sized square window for computing the centroid. + + +// Display window and GUI area sizes: +int mainwidth; +int mainheight; +int borderWidth; +int ctrlheight; +int TextColumnStart; + + + +float lowBorderX; +float hiBorderX; +float lowBorderY; +float hiBorderY; + + + +float MaxDotSize; +boolean ReInitiallizeArray; +boolean pausemode; +boolean fileLoaded; +int SaveNow; +String savePath; +String[] FileOutput; + + + + +String StatusDisplay = "Initializing, please wait. :)"; +float millisLastFrame = 0; +float frameTime = 0; + +String ErrorDisplay = ""; +float ErrorTime; +Boolean ErrorDisp = false; + + +int Generation; +int particleRouteLength; +int RouteStep; + +boolean showBG; +boolean showPath; +boolean showCells; +boolean invertImg; +boolean TempShowCells; +boolean FileModeTSP; + +int vorPointsAdded; +boolean VoronoiCalculated; + +// Toxic libs library setup: +Voronoi voronoi; +Polygon2D RegionList[]; + +PolygonClipper2D clip; // polygon clipper + +int cellsTotal, cellsCalculated, cellsCalculatedLast; + + +// ControlP5 GUI library variables setup +Textlabel ProgName; +Button OrderOnOff, ImgOnOff, CellOnOff, InvertOnOff, PauseButton; +ControlP5 cp5; + + +PImage img, imgload, imgblur; + +Vec2D[] particles; +int[] particleRoute; + + + +void LoadImageAndScale() { + + int tempx = 0; + int tempy = 0; + + img = createImage(mainwidth, mainheight, RGB); + imgblur = createImage(mainwidth, mainheight, RGB); + + img.loadPixels(); + + if (invertImg) + for (int i = 0; i < img.pixels.length; i++) { + img.pixels[i] = color(0); + } + else + for (int i = 0; i < img.pixels.length; i++) { + img.pixels[i] = color(255); + } + + img.updatePixels(); + + if ( fileLoaded == false) { + // Load a demo image, at least until we have a "real" image to work with. + + imgload = loadImage("grace.jpg"); // Load demo image + // Image source: http://commons.wikimedia.org/wiki/File:Kelly,_Grace_(Rear_Window).jpg + } + + if ((imgload.width > mainwidth) || (imgload.height > mainheight)) { + + if (((float) imgload.width / (float)imgload.height) > ((float) mainwidth / (float) mainheight)) + { + imgload.resize(mainwidth, 0); + } + else + { + imgload.resize(0, mainheight); + } + } + + if (imgload.height < (mainheight - 2) ) { + tempy = (int) (( mainheight - imgload.height ) / 2) ; + } + if (imgload.width < (mainwidth - 2)) { + tempx = (int) (( mainwidth - imgload.width ) / 2) ; + } + + img.copy(imgload, 0, 0, imgload.width, imgload.height, tempx, tempy, imgload.width, imgload.height); + // For background image! + + + /* + // Optional gamma correction for background image. + img.loadPixels(); + + float tempFloat; + float GammaValue = 1.0; // Normally in the range 0.25 - 4.0 + + for (int i = 0; i < img.pixels.length; i++) { + tempFloat = brightness(img.pixels[i])/255; + img.pixels[i] = color(floor(255 * pow(tempFloat,GammaValue))); + } + img.updatePixels(); + */ + + + imgblur.copy(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height); + // This is a duplicate of the background image, that we will apply a blur to, + // to reduce "high frequency" noise artifacts. + + imgblur.filter(BLUR, 1); // Low-level blur filter to elminate pixel-to-pixel noise artifacts. + imgblur.loadPixels(); +} + + +void MainArraysetup() { + // Main particle array initialization (to be called whenever necessary): + + LoadImageAndScale(); + + // image(img, 0, 0); // SHOW BG IMG + + particles = new Vec2D[maxParticles]; + + + // Fill array by "rejection sampling" + int i = 0; + while (i < maxParticles) + { + + float fx = lowBorderX + random(hiBorderX - lowBorderX); + float fy = lowBorderY + random(hiBorderY - lowBorderY); + + float p = brightness(imgblur.pixels[ floor(fy)*imgblur.width + floor(fx) ])/255; + // OK to use simple floor_ rounding here, because this is a one-time operation, + // creating the initial distribution that will be iterated. + + if (invertImg) + { + p = 1 - p; + } + + if (random(1) >= p ) { + Vec2D p1 = new Vec2D(fx, fy); + particles[i] = p1; + i++; + } + } + + particleRouteLength = 0; + Generation = 0; + millisLastFrame = millis(); + RouteStep = 0; + VoronoiCalculated = false; + cellsCalculated = 0; + vorPointsAdded = 0; + voronoi = new Voronoi(); // Erase mesh + TempShowCells = true; + FileModeTSP = false; +} + +void setup() +{ + + borderWidth = 6; + + mainwidth = 800; + mainheight = 600; + ctrlheight = 110; + +// size(mainwidth, mainheight + ctrlheight, JAVA2D); + + size(mainwidth, mainheight + ctrlheight, JAVA2D); + + + gfx = new ToxiclibsSupport(this); + + + lowBorderX = borderWidth; //mainwidth*0.01; + hiBorderX = mainwidth - borderWidth; //mainwidth*0.98; + lowBorderY = borderWidth; // mainheight*0.01; + hiBorderY = mainheight - borderWidth; //mainheight*0.98; + + int innerWidth = mainwidth - 2 * borderWidth; + int innerHeight = mainheight - 2 * borderWidth; + + clip=new SutherlandHodgemanClipper(new Rect(lowBorderX, lowBorderY, innerWidth, innerHeight)); + + MainArraysetup(); // Main particle array setup + + frameRate(24); + + smooth(); + noStroke(); + fill(153); // Background fill color, for control section + + textFont(createFont("SansSerif", 10)); + + + cp5 = new ControlP5(this); + + int leftcolumwidth = 225; + + int GUItop = mainheight + 15; + int GUI2ndRow = 4; // Spacing for firt row after group heading + int GuiRowSpacing = 14; // Spacing for subsequent rows + int GUIFudge = mainheight + 19; // I wish that we didn't need ONE MORE of these stupid spacings. + + + ControlGroup l3 = cp5.addGroup("Primary controls (Changing will restart)", 10, GUItop, 225); + + cp5.addSlider("Stipples", 10, 10000, maxParticles, 10, GUI2ndRow, 150, 10).setGroup(l3); + + InvertOnOff = cp5.addButton("INVERT_IMG", 10, 10, GUI2ndRow + GuiRowSpacing, 190, 10).setGroup(l3); + InvertOnOff.setCaptionLabel("Black stipples, White Background"); + + + Button LoadButton = cp5.addButton("LOAD_FILE", 10, 10, GUIFudge + 3*GuiRowSpacing, 175, 10); + LoadButton.setCaptionLabel("LOAD IMAGE FILE (.PNG, .JPG, or .GIF)"); + + cp5.addButton("QUIT", 10, 205, GUIFudge + 3*GuiRowSpacing, 30, 10); + + cp5.addButton("SAVE_STIPPLES", 10, 25, GUIFudge + 4*GuiRowSpacing, 160, 10); + cp5.controller("SAVE_STIPPLES").setCaptionLabel("Save Stipple File (.SVG format)"); + + cp5.addButton("SAVE_PATH", 10, 25, GUIFudge + 5*GuiRowSpacing, 160, 10); + cp5.controller("SAVE_PATH").setCaptionLabel("Save \"TSP\" Path (.SVG format)"); + + + ControlGroup l5 = cp5.addGroup("Display Options - Updated on next generation", leftcolumwidth+50, GUItop, 225); + + cp5.addSlider("Min_Dot_Size", .5, 8, 2, 10, 4, 140, 10).setGroup(l5); + cp5.controller("Min_Dot_Size").setValue(MinDotSize); + cp5.controller("Min_Dot_Size").setCaptionLabel("Min. Dot Size"); + + cp5.addSlider("Dot_Size_Range", 0, 20, 5, 10, 18, 140, 10).setGroup(l5); + cp5.controller("Dot_Size_Range").setValue(DotSizeFactor); + cp5.controller("Dot_Size_Range").setCaptionLabel("Dot Size Range"); + + cp5.addSlider("White_Cutoff", 0, 1, 0, 10, 32, 140, 10).setGroup(l5); + cp5.controller("White_Cutoff").setValue(cutoff); + cp5.controller("White_Cutoff").setCaptionLabel("White Cutoff"); + + + ImgOnOff = cp5.addButton("IMG_ON_OFF", 10, 10, 46, 90, 10); + ImgOnOff.setGroup(l5); + ImgOnOff.setCaptionLabel("Image BG >> Hide"); + + CellOnOff = cp5.addButton("CELLS_ON_OFF", 10, 110, 46, 90, 10); + CellOnOff.setGroup(l5); + CellOnOff.setCaptionLabel("Cells >> Hide"); + + PauseButton = cp5.addButton("Pause", 10, 10, 60, 190, 10); + PauseButton.setGroup(l5); + PauseButton.setCaptionLabel("Pause (to calculate TSP path)"); + + OrderOnOff = cp5.addButton("ORDER_ON_OFF", 10, 10, 74, 190, 10); + OrderOnOff.setGroup(l5); + OrderOnOff.setCaptionLabel("Plotting path >> shown while paused"); + + + + + + TextColumnStart = 2 * leftcolumwidth + 100; + + MaxDotSize = MinDotSize * (1 + DotSizeFactor); + + ReInitiallizeArray = false; + pausemode = false; + showBG = false; + invertImg = false; + showPath = true; + showCells = false; + fileLoaded = false; + SaveNow = 0; +} + + +//void setup() { +// selectInput("Select a file to process:", "fileSelected"); +//} + + +void fileSelected(File selection) { + if (selection == null) { + println("Window was closed or the user hit cancel."); + } + else { + //println("User selected " + selection.getAbsolutePath()); + + String loadPath = selection.getAbsolutePath(); + + // If a file was selected, print path to file + println("Loaded file: " + loadPath); + + + String[] p = splitTokens(loadPath, "."); + boolean fileOK = false; + + if ( p[p.length - 1].equals("GIF")) + fileOK = true; + if ( p[p.length - 1].equals("gif")) + fileOK = true; + if ( p[p.length - 1].equals("JPG")) + fileOK = true; + if ( p[p.length - 1].equals("jpg")) + fileOK = true; + if ( p[p.length - 1].equals("TGA")) + fileOK = true; + if ( p[p.length - 1].equals("tga")) + fileOK = true; + if ( p[p.length - 1].equals("PNG")) + fileOK = true; + if ( p[p.length - 1].equals("png")) + fileOK = true; + + println("File OK: " + fileOK); + + if (fileOK) { + imgload = loadImage(loadPath); + fileLoaded = true; + // MainArraysetup(); + ReInitiallizeArray = true; + } + else { + // Can't load file + ErrorDisplay = "ERROR: BAD FILE TYPE"; + ErrorTime = millis(); + ErrorDisp = true; + } + } +} + + + +void LOAD_FILE(float theValue) { + println(":::LOAD JPG, GIF or PNG FILE:::"); + + selectInput("Select a file to process:", "fileSelected"); // Opens file chooser +} //End Load File + + + +void SAVE_PATH(float theValue) { + FileModeTSP = true; + SAVE_SVG(0); +} + + + +void SAVE_STIPPLES(float theValue) { + FileModeTSP = false; + SAVE_SVG(0); +} + + + + +void SavefileSelected(File selection) { + if (selection == null) { + // If a file was not selected + println("No output file was selected..."); + ErrorDisplay = "ERROR: NO FILE NAME CHOSEN."; + ErrorTime = millis(); + ErrorDisp = true; + } + else { + + savePath = selection.getAbsolutePath(); + String[] p = splitTokens(savePath, "."); + boolean fileOK = false; + + if ( p[p.length - 1].equals("SVG")) + fileOK = true; + if ( p[p.length - 1].equals("svg")) + fileOK = true; + + if (fileOK == false) + savePath = savePath + ".svg"; + + + // If a file was selected, print path to folder + println("Save file: " + savePath); + SaveNow = 1; + showPath = true; + + ErrorDisplay = "SAVING FILE..."; + ErrorTime = millis(); + ErrorDisp = true; + } +} + + + + +void SAVE_SVG(float theValue) { + + if (pausemode != true) { + Pause(0.0); + ErrorDisplay = "Error: PAUSE before saving."; + ErrorTime = millis(); + ErrorDisp = true; + } + else { + + selectOutput("Output .svg file name:", "SavefileSelected"); + + + } +} + + + + +void QUIT(float theValue) { + exit(); +} + + +void ORDER_ON_OFF(float theValue) { + if (showPath) { + showPath = false; + OrderOnOff.setCaptionLabel("Plotting path >> Hide"); + } + else { + showPath = true; + OrderOnOff.setCaptionLabel("Plotting path >> Shown while paused"); + } +} + +void CELLS_ON_OFF(float theValue) { + if (showCells) { + showCells = false; + CellOnOff.setCaptionLabel("Cells >> Hide"); + } + else { + showCells = true; + CellOnOff.setCaptionLabel("Cells >> Show"); + } +} + + + +void IMG_ON_OFF(float theValue) { + if (showBG) { + showBG = false; + ImgOnOff.setCaptionLabel("Image BG >> Hide"); + } + else { + showBG = true; + ImgOnOff.setCaptionLabel("Image BG >> Show"); + } +} + + +void INVERT_IMG(float theValue) { + if (invertImg) { + invertImg = false; + InvertOnOff.setCaptionLabel("Black stipples, White Background"); + cp5.controller("White_Cutoff").setCaptionLabel("White Cutoff"); + } + else { + invertImg = true; + InvertOnOff.setCaptionLabel("White stipples, Black Background"); + cp5.controller("White_Cutoff").setCaptionLabel("Black Cutoff"); + } + + ReInitiallizeArray = true; + pausemode = false; +} + + + + +void Pause(float theValue) { + // Main particle array setup (to be repeated if necessary): + + if (pausemode) + { + pausemode = false; + println("Resuming."); + PauseButton.setCaptionLabel("Pause (to calculate TSP path)"); + } + else + { + pausemode = true; + println("Paused. Press PAUSE again to resume."); + PauseButton.setCaptionLabel("Paused (calculating TSP path)"); + } + RouteStep = 0; +} + + +boolean overRect(int x, int y, int width, int height) +{ + if (mouseX >= x && mouseX <= x+width && + mouseY >= y && mouseY <= y+height) { + return true; + } + else { + return false; + } +} + +void Stipples(int inValue) { + + if (maxParticles != (int) inValue) { + println("Update: Stipple Count -> " + inValue); + ReInitiallizeArray = true; + pausemode = false; + } +} + + + + + +void Min_Dot_Size(float inValue) { + if (MinDotSize != inValue) { + println("Update: Min_Dot_Size -> "+inValue); + MinDotSize = inValue; + MaxDotSize = MinDotSize* (1 + DotSizeFactor); + } +} + + +void Dot_Size_Range(float inValue) { + if (DotSizeFactor != inValue) { + println("Update: Dot Size Range -> "+inValue); + DotSizeFactor = inValue; + MaxDotSize = MinDotSize* (1 + DotSizeFactor); + } +} + + +void White_Cutoff(float inValue) { + if (cutoff != inValue) { + println("Update: White_Cutoff -> "+inValue); + cutoff = inValue; + RouteStep = 0; // Reset TSP path + } +} + + +void DoBackgrounds() { + if (showBG) + image(img, 0, 0); // Show original (cropped and scaled, but not blurred!) image in background + else { + + if (invertImg) + fill(0); + else + fill(255); + + rect(0, 0, mainwidth, mainheight); + } +} + +void OptimizePlotPath() +{ + int temp; + // Calculate and show "optimized" plotting path, beneath points. + + StatusDisplay = "Optimizing plotting path"; + /* + if (RouteStep % 100 == 0) { + println("RouteStep:" + RouteStep); + println("fps = " + frameRate ); + } + */ + + Vec2D p1; + + + if (RouteStep == 0) + { + + float cutoffScaled = 1 - cutoff; + // Begin process of optimizing plotting route, by flagging particles that will be shown. + + particleRouteLength = 0; + + boolean particleRouteTemp[] = new boolean[maxParticles]; + + for (int i = 0; i < maxParticles; ++i) { + + particleRouteTemp[i] = false; + + int px = (int) particles[i].x; + int py = (int) particles[i].y; + + if ((px >= imgblur.width) || (py >= imgblur.height) || (px < 0) || (py < 0)) + continue; + + float v = (brightness(imgblur.pixels[ py*imgblur.width + px ]))/255; + + if (invertImg) + v = 1 - v; + + + if (v < cutoffScaled) { + particleRouteTemp[i] = true; + particleRouteLength++; + } + } + + particleRoute = new int[particleRouteLength]; + int tempCounter = 0; + for (int i = 0; i < maxParticles; ++i) { + + if (particleRouteTemp[i]) + { + particleRoute[tempCounter] = i; + tempCounter++; + } + } + // These are the ONLY points to be drawn in the tour. + } + + if (RouteStep < (particleRouteLength - 2)) + { + + // Nearest neighbor ("Simple, Greedy") algorithm path optimization: + + int StopPoint = RouteStep + 1000; // 1000 steps per frame displayed; you can edit this number! + + if (StopPoint > (particleRouteLength - 1)) + StopPoint = particleRouteLength - 1; + + for (int i = RouteStep; i < StopPoint; ++i) { + + p1 = particles[particleRoute[RouteStep]]; + int ClosestParticle = 0; + float distMin = Float.MAX_VALUE; + + for (int j = RouteStep + 1; j < (particleRouteLength - 1); ++j) { + Vec2D p2 = particles[particleRoute[j]]; + + float dx = p1.x - p2.x; + float dy = p1.y - p2.y; + float distance = (float) (dx*dx+dy*dy); // Only looking for closest; do not need sqrt factor! + + if (distance < distMin) { + ClosestParticle = j; + distMin = distance; + } + } + + temp = particleRoute[RouteStep + 1]; + // p1 = particles[particleRoute[RouteStep + 1]]; + particleRoute[RouteStep + 1] = particleRoute[ClosestParticle]; + particleRoute[ClosestParticle] = temp; + + if (RouteStep < (particleRouteLength - 1)) + RouteStep++; + else + { + println("Now optimizing plot path" ); + } + } + } + else + { // Initial routing is complete + // 2-opt heuristic optimization: + // Identify a pair of edges that would become shorter by reversing part of the tour. + + for (int i = 0; i < 90000; ++i) { // 1000 tests per frame; you can edit this number. + + int indexA = floor(random(particleRouteLength - 1)); + int indexB = floor(random(particleRouteLength - 1)); + + if (Math.abs(indexA - indexB) < 2) + continue; + + if (indexB < indexA) + { // swap A, B. + temp = indexB; + indexB = indexA; + indexA = temp; + } + + Vec2D a0 = particles[particleRoute[indexA]]; + Vec2D a1 = particles[particleRoute[indexA + 1]]; + Vec2D b0 = particles[particleRoute[indexB]]; + Vec2D b1 = particles[particleRoute[indexB + 1]]; + + // Original distance: + float dx = a0.x - a1.x; + float dy = a0.y - a1.y; + float distance = (float) (dx*dx+dy*dy); // Only a comparison; do not need sqrt factor! + dx = b0.x - b1.x; + dy = b0.y - b1.y; + distance += (float) (dx*dx+dy*dy); // Only a comparison; do not need sqrt factor! + + // Possible shorter distance? + dx = a0.x - b0.x; + dy = a0.y - b0.y; + float distance2 = (float) (dx*dx+dy*dy); // Only a comparison; do not need sqrt factor! + dx = a1.x - b1.x; + dy = a1.y - b1.y; + distance2 += (float) (dx*dx+dy*dy); // Only a comparison; do not need sqrt factor! + + if (distance2 < distance) + { + // Reverse tour between a1 and b0. + + int indexhigh = indexB; + int indexlow = indexA + 1; + + // println("Shorten!" + frameRate ); + + while (indexhigh > indexlow) + { + + temp = particleRoute[indexlow]; + particleRoute[indexlow] = particleRoute[indexhigh]; + particleRoute[indexhigh] = temp; + + indexhigh--; + indexlow++; + } + } + } + } + + frameTime = (millis() - millisLastFrame)/1000; + millisLastFrame = millis(); +} + + + + + + + +void doPhysics() +{ // Iterative relaxation via weighted Lloyd's algorithm. + + int temp; + int CountTemp; + + if (VoronoiCalculated == false) + { // Part I: Calculate voronoi cell diagram of the points. + + StatusDisplay = "Calculating Voronoi diagram "; + + // float millisBaseline = millis(); // Baseline for timing studies + // println("Baseline. Time = " + (millis() - millisBaseline) ); + + + if (vorPointsAdded == 0) + voronoi = new Voronoi(); // Erase mesh + + temp = vorPointsAdded + 500; // This line: VoronoiPointsPerPass (Feel free to edit this number.) + if (temp > maxParticles) + temp = maxParticles; + +// for (int i = vorPointsAdded; i < temp; ++i) { + for (int i = vorPointsAdded; i < temp; i++) { + + + // Optional, for diagnostics::: + // println("particles[i].x, particles[i].y " + particles[i].x + ", " + particles[i].y ); + + voronoi.addPoint(new Vec2D(particles[i].x, particles[i].y )); + vorPointsAdded++; + } + + if (vorPointsAdded >= maxParticles) + { + + // println("Points added. Time = " + (millis() - millisBaseline) ); + + cellsTotal = (voronoi.getRegions().size()); + vorPointsAdded = 0; + cellsCalculated = 0; + cellsCalculatedLast = 0; + + RegionList = new Polygon2D[cellsTotal]; + + int i = 0; + for (Polygon2D poly : voronoi.getRegions()) { + RegionList[i++] = poly; // Build array of polygons + } + VoronoiCalculated = true; + } + } + else + { // Part II: Calculate weighted centroids of cells. + // float millisBaseline = millis(); + // println("fps = " + frameRate ); + + StatusDisplay = "Calculating weighted centroids"; + + temp = cellsCalculated + 500; // This line: CentroidsPerPass (Feel free to edit this number.) + // Higher values give slightly faster computation, but a less responsive GUI. + // Default value: 500 + + // Time/frame @ 100: 2.07 @ 50 frames in + // Time/frame @ 200: 1.575 @ 50 + // Time/frame @ 500: 1.44 @ 50 + + if (temp > cellsTotal) + { + temp = cellsTotal; + } + + for (int i=cellsCalculated; i< temp; i++) { + + float xMax = 0; + float xMin = mainwidth; + float yMax = 0; + float yMin = mainheight; + float xt, yt; + + Polygon2D region = clip.clipPolygon(RegionList[i]); + + + for (Vec2D v : region.vertices) { + + xt = v.x; + yt = v.y; + + if (xt < xMin) + xMin = xt; + if (xt > xMax) + xMax = xt; + if (yt < yMin) + yMin = yt; + if (yt > yMax) + yMax = yt; + } + + + float xDiff = xMax - xMin; + float yDiff = yMax - yMin; + float maxSize = max(xDiff, yDiff); + float minSize = min(xDiff, yDiff); + + float scaleFactor = 1.0; + + // Maximum voronoi cell extent should be between + // cellBuffer/2 and cellBuffer in size. + + while (maxSize > cellBuffer) + { + scaleFactor *= 0.5; + maxSize *= 0.5; + } + + while (maxSize < (cellBuffer/2)) + { + scaleFactor *= 2; + maxSize *= 2; + } + + if ((minSize * scaleFactor) > (cellBuffer/2)) + { // Special correction for objects of near-unity (square-like) aspect ratio, + // which have larger area *and* where it is less essential to find the exact centroid: + scaleFactor *= 0.5; + } + + float StepSize = (1/scaleFactor); + + float xSum = 0; + float ySum = 0; + float dSum = 0; + float PicDensity = 1.0; + + + if (invertImg) + for (float x=xMin; x<=xMax; x += StepSize) { + for (float y=yMin; y<=yMax; y += StepSize) { + + Vec2D p0 = new Vec2D(x, y); + if (region.containsPoint(p0)) { + + // Thanks to polygon clipping, NO vertices will be beyond the sides of imgblur. + PicDensity = 0.001 + (brightness(imgblur.pixels[ round(y)*imgblur.width + round(x) ])); + + xSum += PicDensity * x; + ySum += PicDensity * y; + dSum += PicDensity; + } + } + } + else + for (float x=xMin; x<=xMax; x += StepSize) { + for (float y=yMin; y<=yMax; y += StepSize) { + + Vec2D p0 = new Vec2D(x, y); + if (region.containsPoint(p0)) { + + // Thanks to polygon clipping, NO vertices will be beyond the sides of imgblur. + PicDensity = 255.001 - (brightness(imgblur.pixels[ round(y)*imgblur.width + round(x) ])); + + + xSum += PicDensity * x; + ySum += PicDensity * y; + dSum += PicDensity; + } + } + } + + if (dSum > 0) + { + xSum /= dSum; + ySum /= dSum; + } + + Vec2D centr; + + + float xTemp = (xSum); + float yTemp = (ySum); + + + if ((xTemp <= lowBorderX) || (xTemp >= hiBorderX) || (yTemp <= lowBorderY) || (yTemp >= hiBorderY)) { + // If new centroid is computed to be outside the visible region, use the geometric centroid instead. + // This will help to prevent runaway points due to numerical artifacts. + centr = region.getCentroid(); + xTemp = centr.x; + yTemp = centr.y; + + // Enforce sides, if absolutely necessary: (Failure to do so *will* cause a crash, eventually.) + + if (xTemp <= lowBorderX) + xTemp = lowBorderX + 1; + if (xTemp >= hiBorderX) + xTemp = hiBorderX - 1; + if (yTemp <= lowBorderY) + yTemp = lowBorderY + 1; + if (yTemp >= hiBorderY) + yTemp = hiBorderY - 1; + } + + particles[i].x = xTemp; + particles[i].y = yTemp; + + cellsCalculated++; + } + + + // println("cellsCalculated = " + cellsCalculated ); + // println("cellsTotal = " + cellsTotal ); + + if (cellsCalculated >= cellsTotal) + { + VoronoiCalculated = false; + Generation++; + println("Generation = " + Generation ); + + frameTime = (millis() - millisLastFrame)/1000; + millisLastFrame = millis(); + } + } +} + + +void draw() +{ + + int i = 0; + int temp; + float dotScale = (MaxDotSize - MinDotSize); + float cutoffScaled = 1 - cutoff; + + if (ReInitiallizeArray) { + maxParticles = (int) cp5.controller("Stipples").value(); // Only change this here! + + MainArraysetup(); + ReInitiallizeArray = false; + } + + if (pausemode && (VoronoiCalculated == false)) + OptimizePlotPath(); + else + doPhysics(); + + + if (pausemode) + { + + DoBackgrounds(); + + // Draw paths: + + if ( showPath ) { + + stroke(128, 128, 255); // Stroke color (blue) + strokeWeight (1); + + for ( i = 0; i < (particleRouteLength - 1); ++i) { + + Vec2D p1 = particles[particleRoute[i]]; + Vec2D p2 = particles[particleRoute[i + 1]]; + + line(p1.x, p1.y, p2.x, p2.y); + } + } + + + if (invertImg) + stroke(255); + else + stroke(0); + + for ( i = 0; i < particleRouteLength; ++i) { + // Only show "routed" particles-- those above the white cutoff. + + Vec2D p1 = particles[particleRoute[i]]; + int px = (int) p1.x; + int py = (int) p1.y; + + float v = (brightness(imgblur.pixels[ py*imgblur.width + px ]))/255; + + if (invertImg) + v = 1 - v; + + strokeWeight (MaxDotSize - v * dotScale); + point(px, py); + } + } + else + { // NOT in pause mode. i.e., just displaying stipples. + if (cellsCalculated == 0) { + + DoBackgrounds(); + + if (Generation == 0) + { + TempShowCells = true; + } + + if (showCells || TempShowCells) { // Draw voronoi cells, over background. + strokeWeight(1); + noFill(); + + + if (invertImg && (showBG == false)) // TODO -- if invertImg AND NOT background + stroke(100); + else + stroke(200); + + // stroke(200); + + i = 0; + for (Polygon2D poly : voronoi.getRegions()) { + //RegionList[i++] = poly; + gfx.polygon2D(clip.clipPolygon(poly)); + } + } + + if (showCells) { + // Show "before and after" centroids, when polygons are shown. + + strokeWeight (MinDotSize); // Normal w/ Min & Max dot size + for ( i = 0; i < maxParticles; ++i) { + + int px = (int) particles[i].x; + int py = (int) particles[i].y; + + if ((px >= imgblur.width) || (py >= imgblur.height) || (px < 0) || (py < 0)) + continue; + { + //Uncomment the following four lines, if you wish to display the "before" dots at weighted sizes. + //float v = (brightness(imgblur.pixels[ py*imgblur.width + px ]))/255; + //if (invertImg) + //v = 1 - v; + //strokeWeight (MaxDotSize - v * dotScale); + point(px, py); + } + } + } + } + else { + // Stipple calculation is still underway + + if (TempShowCells) + { + DoBackgrounds(); + TempShowCells = false; + } + + + // stroke(0); // Stroke color + + + if (invertImg) + stroke(255); + else + stroke(0); + + for ( i = cellsCalculatedLast; i < cellsCalculated; ++i) { + + int px = (int) particles[i].x; + int py = (int) particles[i].y; + + if ((px >= imgblur.width) || (py >= imgblur.height) || (px < 0) || (py < 0)) + continue; + { + float v = (brightness(imgblur.pixels[ py*imgblur.width + px ]))/255; + + if (invertImg) + v = 1 - v; + + if (v < cutoffScaled) { + strokeWeight (MaxDotSize - v * dotScale); + point(px, py); + } + } + } + + cellsCalculatedLast = cellsCalculated; + } + } + + noStroke(); + fill(100); // Background fill color + rect(0, mainheight, mainwidth, height); // Control area fill + + // Underlay for hyperlink: + if (overRect(TextColumnStart - 10, mainheight + 35, 205, 20) ) + { + fill(150); + rect(TextColumnStart - 10, mainheight + 35, 205, 20); + } + + fill(255); // Text color + + text("StippleGen 2 (v. 2.1.0)", TextColumnStart, mainheight + 15); + text("by Evil Mad Scientist Laboratories", TextColumnStart, mainheight + 30); + text("www.evilmadscientist.com/go/stipple2", TextColumnStart, mainheight + 50); + + text("Generations completed: " + Generation, TextColumnStart, mainheight + 85); + text("Time/Frame: " + frameTime + " s", TextColumnStart, mainheight + 100); + + + if (ErrorDisp) + { + fill(255, 0, 0); // Text color + text(ErrorDisplay, TextColumnStart, mainheight + 70); + if ((millis() - ErrorTime) > 8000) + ErrorDisp = false; + } + else + text("Status: " + StatusDisplay, TextColumnStart, mainheight + 70); + + + + if (SaveNow > 0) { + + StatusDisplay = "Saving SVG File"; + SaveNow = 0; + + FileOutput = loadStrings("header.txt"); + + String rowTemp; + + float SVGscale = (800.0 / (float) mainheight); + int xOffset = (int) (1600 - (SVGscale * mainwidth / 2)); + int yOffset = (int) (400 - (SVGscale * mainheight / 2)); + + + if (FileModeTSP) + { // Plot the PATH between the points only. + + println("Save TSP File (SVG)"); + + // Path header:: + rowTemp = ""); // End path description + } + else { + println("Save Stipple File (SVG)"); + + for ( i = 0; i < particleRouteLength; ++i) { + + Vec2D p1 = particles[particleRoute[i]]; + + int px = floor(p1.x); + int py = floor(p1.y); + + float v = (brightness(imgblur.pixels[ py*imgblur.width + px ]))/255; + + if (invertImg) + v = 1 - v; + + float dotrad = (MaxDotSize - v * dotScale)/2; + + float xTemp = SVGscale*p1.x + xOffset; + float yTemp = SVGscale*p1.y + yOffset; + + rowTemp = ""; + + // Typ: + + FileOutput = append(FileOutput, rowTemp); + } + } + + + + // SVG footer: + FileOutput = append(FileOutput, ""); + saveStrings(savePath, FileOutput); + FileModeTSP = false; // reset for next time + + if (FileModeTSP) + ErrorDisplay = "TSP Path .SVG file Saved"; + else + ErrorDisplay = "Stipple .SVG file saved "; + + ErrorTime = millis(); + ErrorDisp = true; + } +} + + + +void mousePressed() { + + // rect(TextColumnStart, mainheight, 200, 75); + + if (overRect(TextColumnStart - 15, mainheight + 35, 205, 20) ) + link("http://www.evilmadscientist.com/go/stipple2"); +} + + + + +void keyPressed() { + if (key == 'x') + { // If this program doesn't run slowly enough for you, + // simply press the 'x' key on your keyboard. :) + cp5.controller("Stipples").setMax(50000.0); + } +} + diff --git a/other/StippleGen2/data/grace.jpg b/other/StippleGen2/data/grace.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40839029c6a8db7863b0a5f930e151d477c507d3 GIT binary patch literal 256971 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 z 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 SM08K-ZUblSks>zxxBLH8%FAc~ literal 0 HcmV?d00001 diff --git a/other/StippleGen2/data/header.txt b/other/StippleGen2/data/header.txt new file mode 100644 index 00000000..c7131f03 --- /dev/null +++ b/other/StippleGen2/data/header.txt @@ -0,0 +1,48 @@ + + + + + + + + + + image/svg+xml + + + + + + + diff --git a/other/TSP-stipple/stipple/README.txt b/other/TSP-stipple/stipple/README.txt new file mode 100644 index 00000000..6551d0b4 --- /dev/null +++ b/other/TSP-stipple/stipple/README.txt @@ -0,0 +1,112 @@ +5 February 2011 + +stipple.py is an *unsupported* Python program to convert "point" files +produced by Adrian Secord's *unsupported* weighted Vornoi stippler to +SVG files suitable for plotting with an Eggbot. + +To generated a stippled SVG file, you will need to perform the +following steps: + +0. Obtain a copy of Adrian Secord's weighted Vornoi stippler from + + http://mrl.nyu.edu/~ajsecord/stipples.html + +1. Find an image you wish to stipple. Optionally, + + a. If the image's background is not already all white, then consider + editing the image first to remove the background. Otherwise, you + will have the background reproduced with stipples. + + b. Rotate the image 90 degrees clockwise or counter clockwise. This + will be helpful later, when plotting. Why is this useful? The + output from the Vornoi stippler tends to run out the stipples in + horizontal rows, one atop the next. When plotting this on the + Eggbot, that generates lots of back and forth egg rotations. It's + better to have lots of back and forth movements of the pen arm + with less egg rotation. So, if you rotate the image now, stipple + it, and then rotate it back, the resulting Eggbot plot will have + the stipples in vertical columns stacked horizontally. That means + less egg rotation and thus better plotting precision. + +2. Run the weighted Vornoi stippler. + + a. Open the image file with the stippler's File > Open menu item. + + b. After you open an image file, it may take a while before any stippled + image appears. It sometimes helps to nudge things along by selecting + "Relax Points" or "Jitter" under the "Points" menu item. + + c. You can control the number of stipples with the "Set num..." item + under the "Points" menu. + + d. The program may run for quite some time while seeming to not be doing + anything. It's actually trying to refine the picture it has drawn. + You can go ahead and tell it to save its work while it is working on + its refinements. + + e. When you have a stippling you like, use the "Save Points" item under + the "File" menu. This will write a file containing (x,y) coordinates + of each point and their radii. The stipple.py script will read this + file. + + f. If you start seeing blue stipples, that means that you're allowing + more stipples than needed. You can decrease the number of allowed + stipples. + + g. On OS X, when you exit the stippler it tends to exit with an error. + You can ignore the error. + +3. Run stipple.py on the file produced in Step 2e above. From a terminal + window, enter the command + + python stipple.py IN-FILENAME OUT-FILENAME + + where "IN-FILENAME" is the name of the file you wrote in Step 2e and + "OUT-FILENAME" is the name of the SVG file you wish to produce. You + can omit specifying "OUT-FILENAME" in which case the output file will + be the input file name with its file extension replaced with ".svg". + + For example, to process the supplied torus.pts input file file, enter + the command + + python stipple.py torus.pts + + and the output file + + torus.svg + + will be produced. In fact, if you use the extension ".pts" for your + "point" files from the Vornoi stippler, then you can omit the ".pts" + as well, + + python stipple.py torus + + On Windows systems, running Python is not as straightforward as on + Macs and Linux systems. See + + http://wiki.evilmadscience.com/Generating_TSP_art_from_a_stippled_image#Notes_for_Windows_users + + assistance. + +4. Open the SVG file in Inkscape + + a. If you rotated the image in Step 1b, then rotate it 90 degrees in + the opposite direction. I.e., if you rotated the image 90 degrees + counter clockwise, now rotate it 90 degrees clockwise. To do this, + in Inkscape use Edit > Select All and then Object > Rotate 90 CW. + + b. If plotting on a non-spherical object such as an egg, consider + stretching the drawing horizontally. Again, select all the stipples + with Edit > Select All. Then use Object > Transform. In the + Transform "subwindow" on the right, select the "Scale" tab. Then, + + i. Uncheck the "Scale proportionally" checkbox, + ii. Uncheck the "Apply to each object separately" checkbox, + iii. Set the units to percentages ("%"), + iv. Enter 150% for the width, + v. Enter 100% for the height, and + vi. Click the "Apply" button. + +5. You're now ready to plot with the Eggbot Control extension. + +-- finit -- diff --git a/other/TSP-stipple/stipple/stipple.py b/other/TSP-stipple/stipple/stipple.py new file mode 100755 index 00000000..6e4022b3 --- /dev/null +++ b/other/TSP-stipple/stipple/stipple.py @@ -0,0 +1,306 @@ +# Generate Eggbot-friendly SVG drawings from "point" output files +# produced by Adrian Secord's weighted Voronoi stippler. +# +# The data from the file consists of the (x, y) coordinate and radius r +# of each stipple. This data is read and parsed, crudely sorted +# so as to produce left-to-right and then right-to-left pen arm travel +# (instead of left-to-right, return, left-to-right), and then rescaled +# to fill the SVG document while preserving an x:y aspect ratio of 1:1. + +# Written by Daniel C. Newman +# dan dot newman at mtbaldy dot us +# January 2011 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +import os +import sys + +class Stipples: + + # Output SVG document dimensions + + WIDTH = 3200 + HEIGHT = 800 + + # When we draw a circle in SVG, the stroke will be both inside and + # outside of the circle. We therefore reduce the circle's radius + # by OUTER_RADIUS_REDUCE pixels so that the circle drawn by the pen + # lies within the actual stipple. This value of 2 pixels is + # likely too small: adjust as you see fit. + # + # Also, any stipple whose radius is less than OUTER_RADIUS_REDUCE + # will be drawn as a point and not a circle. + + OUTER_RADIUS_REDUCE = float( 2.0 ) + + def __init__( self ): + + # We save the input bitmap file name for purposes of + # error reporting and generating a default output file name + self.infile = '' + + # Our list of (x, y, r) coordinates + self.coordinates = [] + + def load_xyr( self, f ): + + # Load a file in which each line has the format + # + # x-coord y-coord radius + + assert( f ) + + self.coordinates = [] + px, py, pr = [], [], [] + + # Track bounding box information + # We take the radius of the stipples into account + + xmin, xmax = float( 'inf' ), float( '-inf' ) + ymin, ymax = float( 'inf' ), float( '-inf' ) + + for line in f: + + # Ignore comment lines + if line.startswith( '#' ): + continue + + vals = line.strip().split(' ') + if ( len( vals ) < 2 ) or ( len( vals ) > 3 ): + sys.stderr.write( 'Invalid content in file %s\n' % self.infile ) + return False + + x = float( vals[0] ) + y = float( vals[1] ) + r = float( vals[2] ) + if r < 0.0: + r = float( 0.0 ) + if ( x - r ) < xmin: + xmin = x - r + elif ( x + r ) > xmax: + xmax = x + r + if ( y - r ) < ymin: + ymin = y - r + elif ( y + r ) > ymax: + ymax = y + r + + px.append( x ) + py.append( y ) + pr.append( r ) + + # Find the extrema + dmin = xmin if xmin < ymin else ymin + dmax = xmax if xmax > ymax else ymax + + # Width of the bounding box + span = dmax - dmin + + # Scale the box to be BOXSIZE high and wide + width = self.WIDTH if self.WIDTH <= self.HEIGHT else self.HEIGHT + scale = float( width / span ) if span != 0.0 else float( 1.0 ) + + iy = 0.0 + flip = True # back and forth flip/flop + lastx = px[0] - 0.005 + for i in range( 0, len( px ) ): + if lastx > px[i]: + flip = not flip + iy += 2.0 + if flip: + vsort = iy + px[i] - xmin + else: + vsort = iy + xmax - px[i] + lastx = px[i] + self.coordinates.append( [ vsort, + int( round( (px[i] - dmin) * scale ) ), + int( round( (ymax - ( py[i] - dmin) ) * scale ) ), + scale * pr[i] ] ) + + # Sort the coordinates in a fashion to minimize back and + # forth pen motion + self.coordinates.sort() + return True + + def load( self, infile ): + + # Deal with a missing .pts extension + self.infile = infile + if not os.path.exists( self.infile ): + if os.path.exists( self.infile + '.pts' ): + self.infile += '.pts' + + # Open the input file + # This may raise an exception which is fine by us + f = open( self.infile, 'rb' ) + + # Check the first few bytes of the first line of the file + magic_number = f.readline(4).strip() + + # Note: I took this code here from a larger program which + # supported several input formats including some which used + # Unix-style "magic numbers" at the start of the file + if magic_number == '# x-': + + # File may be an (x, y, radius) coordinate file + line = f.readline().strip() + if line != 'coord y-coord radius': + sys.stderr.write( 'Input file %s is not a supported file type\n' % self.infile ) + sys.stderr.write( 'Must be a file of (x, y, r) coordinates\n' ) + f.close() + return False + + ok = self.load_xyr( f ) + + else: + + # Unsupported file type + sys.stderr.write( 'Input file %s is not a supported file type\n' % self.infile ) + sys.stderr.write( 'Must be a PBM file of (x, y, r) coordinates\n' ) + f.close() + return False + + # All done with the input file + f.close() + + # If ok is False, then load_xyr() will have printed an error + # message already + return ok + + def write_svgfile( self, outfile='', f=None, infile='TSPART' ): + + if f is None: + if ( not outfile ) or ( outfile == '' ): + if ( self.infile.endswith( '.pts' ) ): + outfile = self.infile[:-3] + 'svg' + elif ( self.infile.endswith( '.PTS' ) ): + outfile = self.infile[:-3] + 'SVG' + else: + outfile = self.infile + '.svg' + + # Create the output file + # This may generate an exception which is fine by us + f = open( outfile, 'w' ) + + # And now write the contents of the SVG file + try: + f.write( +'\n' + +'\n' % self.HEIGHT ) + f.write( +' \n' + +' \n' + +' \n' + +' \n' + +' image/svg+xml\n' + +' \n' + +' \n' + +' \n' + +' egg-bot\n' + +' eggbot\n' + +' \n' + +' \n' + +' Stippled artwork intended for plotting on eggs with an Eggbot (http://www.egg-bot.com)\n' + +' \n' + +' \n' + +' \n' + +' \n') + + for P in self.coordinates: + # P = [ sort-value, x, y, radius ] + x = P[1] + y = P[2] + # Remove 2 pixels from the radius to account + # for the fact that Inkscape will stroke the + # line with half the width outside the circle + # AND to (somewhat) account for the actual pen + # tip width + r = P[3] - self.OUTER_RADIUS_REDUCE + path = '' + if r < self.OUTER_RADIUS_REDUCE: + # Just draw a point + # path = 'M %f,%f l 0.001,0.001' % ( x, y ) + r = self.OUTER_RADIUS_REDUCE + # Draw concentric circles using SVG arcs + while r >= self.OUTER_RADIUS_REDUCE: + x1 = x - r + x2 = x + r + path += ' L %f,%f A %f,%f 0 1 0 %f,%f A %f,%f 0 1 0 %f,%f' % \ + ( x1, y, r, r, x2, y, r, r, x1, y ) + r -= 2.0 * self.OUTER_RADIUS_REDUCE + + f.write( ' \n' % path[2:] ) + + f.write( ' \n\n' ) + + except: + # Remove the incomplete file + # Note on Windows we must close the file before deleting it + f.close() + if outfile != '': + os.unlink( outfile ) + # Now re-raise the exception + raise + + f.close() + +if __name__ == '__main__': + + def fixup_args( argv ): + if len( argv ) == 0: + # Prompt for input and output file names + infile = '' + outfile = '' + while infile == '': + infile = raw_input( 'Input file name: ' ) + while outfile == '': + outfile = raw_input( 'Output file name: ' ) + return ( infile, outfile ) + elif len( argv ) == 1: + # Assume output file name is derived from the input file name + if argv[0].endswith( '.pts' ): + # Output file name is input file name - 'pts' + 'svg' + return ( argv[0], argv[0][:-3] + 'svg' ) + elif argv[0].endswith( '.PTS' ): + # Output file name is input file name - 'PTS' + 'SVG' + return ( argv[0], argv[0][:-3] + 'SVG' ) + elif os.path.exists( argv[0] + '.pts' ): + return ( argv[0] + '.pts', argv[0] + '.svg' ) + elif argv[0].rfind('.') >= 0: + return ( argv[0], argv[0][:argv[0].rfind('.')] + '.svg' ) + else: + return ( argv[0], argv[0] + '.svg' ) + elif len( argv ) == 2: + return ( argv[0], argv[1] ) + else: + return ( '', '' ) + + (infile, outfile) = fixup_args( sys.argv[1:] ) + + if ( infile == '' ) or ( outfile == '' ): + sys.stderr.write( 'Usage: %s [input-point-file [output-svg-file]]\n' % sys.argv[0] ) + sys.exit( 1 ) + + stipples = Stipples() + if not stipples.load( infile ): + sys.exit( 1 ) + + stipples.write_svgfile( outfile ) diff --git a/other/TSP-stipple/stipple/torus.pts b/other/TSP-stipple/stipple/torus.pts new file mode 100644 index 00000000..32129bf9 --- /dev/null +++ b/other/TSP-stipple/stipple/torus.pts @@ -0,0 +1,1200 @@ +# x-coord y-coord radius +0.327739 0.0530507 0.00861486 +0.343495 0.0536304 0.00827815 +0.311539 0.0540316 0.00869488 +0.296141 0.0547354 0.00807712 +0.358005 0.0555106 0.00815876 +0.281476 0.05751 0.00809484 +0.37242 0.0583109 0.00826275 +0.659307 0.0591399 0.00742546 +0.673131 0.0599212 0.00797071 +0.686621 0.0603082 0.00764989 +0.699955 0.0603381 0.00766756 +0.713983 0.0617193 0.00696662 +0.38776 0.061813 0.00804502 +0.646019 0.062565 0.00817216 +0.631165 0.0630067 0.0084737 +0.266913 0.0635131 0.0086347 +0.725989 0.0665596 0.007634 +0.614064 0.0675242 0.00881807 +0.404081 0.0676845 0.00796096 +0.337859 0.0678146 0.00764546 +0.318954 0.0679159 0.00773244 +0.299384 0.0691745 0.00770356 +0.253481 0.0694126 0.00870929 +0.737898 0.0697561 0.00745755 +0.356201 0.0707373 0.00753508 +0.28194 0.0710544 0.00743858 +0.597661 0.0722612 0.00887208 +0.661076 0.0732853 0.00730875 +0.710539 0.0734406 0.0068931 +0.69568 0.0735173 0.00709289 +0.373883 0.0736632 0.00720591 +0.750401 0.0739837 0.00726724 +0.678351 0.0747149 0.00742278 +0.390539 0.0750418 0.00682287 +0.239034 0.0751938 0.00838231 +0.419486 0.0755016 0.00834972 +0.628335 0.0773832 0.00708672 +0.579434 0.0788776 0.00869099 +0.645631 0.0800613 0.00715769 +0.763305 0.0801791 0.00702239 +0.722292 0.0811289 0.00721943 +0.26852 0.0817464 0.00736301 +0.405038 0.0832142 0.0069846 +0.329007 0.0834148 0.00637125 +0.308707 0.0837697 0.00673863 +0.43487 0.0840366 0.00845395 +0.738454 0.0841856 0.00727409 +0.223674 0.0855382 0.00880452 +0.34819 0.0862501 0.00624791 +0.287527 0.0863665 0.00682958 +0.752506 0.0864014 0.0064652 +0.611859 0.0864178 0.00720177 +0.775272 0.0864713 0.00703457 +0.563903 0.0867872 0.00874168 +0.591331 0.0871763 0.00695404 +0.704504 0.0872193 0.00659172 +0.687668 0.0879297 0.00661372 +0.254063 0.0883517 0.00749455 +0.238831 0.0895381 0.00725957 +0.666208 0.0897661 0.00676928 +0.368465 0.0898836 0.00616292 +0.387775 0.0910444 0.00599298 +0.420267 0.092722 0.00687402 +0.728016 0.0935077 0.00617583 +0.45059 0.0937774 0.00827165 +0.788053 0.0942232 0.00683918 +0.763969 0.0947232 0.00675309 +0.548365 0.0953445 0.00908247 +0.630433 0.0957497 0.00614351 +0.210447 0.0963758 0.00902024 +0.749302 0.0980769 0.00631981 +0.712974 0.0983991 0.00626985 +0.649925 0.0992109 0.00603731 +0.776387 0.0993974 0.00653349 +0.572697 0.101374 0.00692019 +0.316107 0.101407 0.00596001 +0.67867 0.10162 0.00588541 +0.436277 0.101846 0.00675309 +0.295169 0.10246 0.00594463 +0.271701 0.102508 0.00680944 +0.230486 0.102525 0.00719735 +0.336853 0.10259 0.00569987 +0.595808 0.102661 0.00545764 +0.403697 0.103834 0.00590094 +0.695538 0.104211 0.00650479 +0.737276 0.104557 0.00619385 +0.79867 0.104874 0.00677104 +0.531568 0.105484 0.00922704 +0.466465 0.105628 0.00825142 +0.35824 0.106476 0.0056342 +0.788096 0.107046 0.00661342 +0.724277 0.107996 0.00577756 +0.761961 0.108546 0.00632768 +0.19761 0.108782 0.0087271 +0.250551 0.109378 0.00685401 +0.452517 0.110637 0.00667781 +0.381605 0.110727 0.00562076 +0.216387 0.111364 0.00721916 +0.774417 0.112313 0.0061208 +0.747694 0.112363 0.00574266 +0.806707 0.1127 0.00641328 +0.665827 0.112719 0.00601154 +0.552668 0.113242 0.00659443 +0.708452 0.113789 0.00630562 +0.614009 0.113926 0.00545509 +0.423063 0.115266 0.00542912 +0.634003 0.117633 0.00557775 +0.47976 0.117888 0.0082091 +0.514041 0.11849 0.00914231 +0.681372 0.118694 0.00641048 +0.651941 0.119319 0.00567117 +0.785182 0.120038 0.00621342 +0.324307 0.120108 0.00598566 +0.724381 0.12041 0.0061006 +0.304674 0.120752 0.00607772 +0.814569 0.121533 0.00689137 +0.284682 0.121761 0.00619385 +0.755955 0.121905 0.0059006 +0.343774 0.122067 0.00594128 +0.186786 0.122199 0.0087255 +0.799371 0.122311 0.00672917 +0.233428 0.122967 0.00633019 +0.205143 0.123417 0.00691645 +0.530534 0.123955 0.00659112 +0.695432 0.124273 0.00652679 +0.739257 0.124551 0.00689627 +0.587767 0.125679 0.00444243 +0.364229 0.12591 0.00581601 +0.77085 0.126155 0.00647781 +0.265517 0.127288 0.00630341 +0.495032 0.127604 0.00843368 +0.446328 0.12765 0.00509398 +0.466748 0.127903 0.00628191 +0.402117 0.128455 0.00522551 +0.7098 0.128794 0.00630278 +0.789648 0.131704 0.00579647 +0.821889 0.131914 0.00707322 +0.382954 0.132921 0.00569568 +0.665298 0.133023 0.00732507 +0.723553 0.133892 0.0065651 +0.757537 0.134146 0.00579373 +0.80795 0.134396 0.00666737 +0.647598 0.134425 0.0068604 +0.68079 0.134656 0.00702381 +0.62897 0.136233 0.00686967 +0.316488 0.13626 0.0070374 +0.218865 0.136931 0.00594161 +0.176927 0.136942 0.00868183 +0.333172 0.137191 0.00702353 +0.194693 0.13768 0.00713179 +0.505929 0.138254 0.00851751 +0.29948 0.138674 0.0072255 +0.694948 0.138744 0.00664165 +0.348603 0.139249 0.00686533 +0.248682 0.139472 0.00610875 +0.747185 0.139495 0.0062581 +0.426027 0.1397 0.00430824 +0.780474 0.139948 0.00592887 +0.611294 0.140284 0.00702069 +0.482822 0.140325 0.00655782 +0.734715 0.140532 0.0064858 +0.767949 0.141736 0.00581806 +0.707805 0.142116 0.00669716 +0.830844 0.142457 0.00639463 +0.283441 0.143163 0.0074466 +0.362121 0.143435 0.00661162 +0.795497 0.144364 0.00624441 +0.822065 0.147334 0.0061286 +0.718861 0.147479 0.00682491 +0.809421 0.147799 0.00599629 +0.375006 0.148538 0.00659625 +0.593262 0.14888 0.00674247 +0.408686 0.150551 0.00560764 +0.268423 0.150773 0.00741688 +0.760213 0.151522 0.00645535 +0.168601 0.151723 0.00850114 +0.746067 0.152664 0.00680739 +0.388814 0.153051 0.00711782 +0.729192 0.153133 0.00696319 +0.514793 0.153713 0.00780621 +0.776945 0.15407 0.0062147 +0.1853 0.155101 0.0068746 +0.207014 0.155536 0.00560374 +0.232793 0.155864 0.00601783 +0.836296 0.155866 0.0074284 +0.498312 0.156608 0.00633365 +0.790077 0.158042 0.00614546 +0.574023 0.158332 0.00669597 +0.820031 0.160784 0.00613249 +0.737067 0.16108 0.00652892 +0.804721 0.161474 0.00616583 +0.25474 0.162513 0.00743537 +0.431932 0.16322 0.00525135 +0.399692 0.16355 0.00650143 +0.767747 0.164503 0.0065341 +0.754488 0.16489 0.0067028 +0.160879 0.166308 0.00767742 +0.843682 0.169125 0.00694545 +0.74504 0.169551 0.00650969 +0.520613 0.169885 0.00850933 +0.830619 0.170235 0.00642754 +0.412903 0.17129 0.00717713 +0.780366 0.17145 0.00662545 +0.173787 0.172564 0.00676016 +0.555065 0.172926 0.00645504 +0.794754 0.173616 0.00622046 +0.813168 0.175986 0.00639961 +0.242695 0.175999 0.00724063 +0.763453 0.176929 0.00661914 +0.192782 0.177637 0.00520108 +0.218664 0.17853 0.00551171 +0.752747 0.180386 0.00675603 +0.446311 0.181532 0.00492877 +0.532401 0.181585 0.00809066 +0.424997 0.182298 0.00716103 +0.156947 0.182521 0.00822774 +0.846246 0.1829 0.00741204 +0.773685 0.183322 0.00641886 +0.828511 0.184423 0.00636281 +0.802076 0.187398 0.00594931 +0.78736 0.188954 0.00666857 +0.233867 0.191251 0.00683919 +0.760487 0.191932 0.007622 +0.436301 0.194218 0.00693226 +0.539155 0.194698 0.00769787 +0.172763 0.194873 0.00619802 +0.773832 0.195496 0.00671467 +0.850526 0.195894 0.00706393 +0.815287 0.196251 0.0062358 +0.152846 0.198432 0.00824104 +0.833715 0.199204 0.00647474 +0.456021 0.202492 0.00611331 +0.798314 0.203117 0.00661433 +0.765442 0.205512 0.00740371 +0.202775 0.205685 0.00467512 +0.781901 0.205974 0.00725436 +0.225784 0.20609 0.0069729 +0.546988 0.208006 0.00748791 +0.438597 0.208264 0.00811449 +0.853386 0.209125 0.00674276 +0.148859 0.213577 0.007773 +0.817927 0.213741 0.00644949 +0.838462 0.214421 0.00606198 +0.167378 0.217944 0.00594463 +0.768443 0.218039 0.00736112 +0.798366 0.219043 0.00687807 +0.453452 0.219461 0.00754009 +0.782091 0.219722 0.0072321 +0.429797 0.2208 0.0081059 +0.471775 0.220919 0.00553189 +0.55403 0.221583 0.00725354 +0.220489 0.222697 0.0067631 +0.854143 0.224276 0.0075459 +0.147748 0.22964 0.00813775 +0.83318 0.230528 0.00602741 +0.77217 0.231185 0.00787702 +0.812196 0.231368 0.00618484 +0.788555 0.234422 0.00748073 +0.422129 0.23496 0.00810074 +0.465816 0.235003 0.00731828 +0.560566 0.235166 0.00707716 +0.44033 0.23584 0.0059386 +0.215695 0.238285 0.00685604 +0.855254 0.240545 0.00712676 +0.771966 0.244076 0.00806405 +0.161772 0.244741 0.00550701 +0.80106 0.245203 0.0061542 +0.478645 0.246439 0.00790477 +0.145022 0.246693 0.00758798 +0.840415 0.246849 0.00564091 +0.56655 0.249412 0.00710355 +0.414432 0.249632 0.00806084 +0.819957 0.250876 0.00568799 +0.431676 0.25088 0.00641638 +0.784763 0.251791 0.00733702 +0.215626 0.253651 0.00626032 +0.769931 0.25864 0.00828175 +0.454698 0.258681 0.00510647 +0.855177 0.259578 0.0072486 +0.798931 0.262942 0.0061916 +0.420055 0.263028 0.00674395 +0.148185 0.263032 0.00799116 +0.480804 0.263138 0.00756407 +0.572262 0.264173 0.0071343 +0.495454 0.265134 0.0058783 +0.837082 0.266077 0.00542802 +0.407452 0.267007 0.00798219 +0.215907 0.267801 0.0063072 +0.782663 0.269393 0.00736274 +0.435229 0.269606 0.00609897 +0.815897 0.273177 0.0051773 +0.767465 0.27366 0.00817143 +0.473786 0.276182 0.00669686 +0.452487 0.277747 0.00566661 +0.149377 0.27851 0.00788308 +0.853143 0.27889 0.00708756 +0.419334 0.27909 0.00714099 +0.577414 0.279658 0.00730766 +0.402502 0.281779 0.00790779 +0.216625 0.281791 0.00610419 +0.49243 0.282787 0.00750596 +0.797449 0.283583 0.00588405 +0.778315 0.28581 0.00723155 +0.435245 0.286402 0.00630025 +0.507041 0.287147 0.00549217 +0.834683 0.287228 0.00499057 +0.762943 0.288582 0.00809754 +0.46882 0.290411 0.00670221 +0.411099 0.29139 0.00706956 +0.150993 0.293711 0.0075163 +0.451828 0.293959 0.00630057 +0.218621 0.294743 0.00601154 +0.581277 0.295787 0.00756592 +0.423803 0.296186 0.00690723 +0.397623 0.297264 0.00807761 +0.849306 0.298312 0.00686417 +0.790203 0.301599 0.00576998 +0.771613 0.302014 0.0071702 +0.437301 0.302108 0.00676869 +0.81775 0.302423 0.00436924 +0.501325 0.302631 0.0076756 +0.757283 0.303955 0.00800186 +0.411548 0.304363 0.00722578 +0.464792 0.304653 0.00668139 +0.221446 0.307323 0.00604127 +0.51837 0.30794 0.00534153 +0.153144 0.308772 0.00736058 +0.450543 0.309938 0.00657328 +0.588329 0.310384 0.00729785 +0.42288 0.310795 0.00757775 +0.392273 0.312105 0.00747621 +0.403772 0.312628 0.00775504 +0.437549 0.31615 0.00703598 +0.843053 0.316386 0.00700565 +0.765941 0.31839 0.00690233 +0.751347 0.318656 0.00802471 +0.460865 0.319145 0.0068572 +0.783836 0.319764 0.0052876 +0.22431 0.319799 0.00609277 +0.509132 0.320603 0.00765925 +0.412864 0.322123 0.00814109 +0.427152 0.322587 0.00748529 +0.15683 0.323275 0.00702097 +0.639576 0.323374 0.00745728 +0.652504 0.3246 0.00748552 +0.576915 0.325164 0.00576584 +0.597622 0.325203 0.0081551 +0.447097 0.32531 0.00689743 +0.678388 0.325496 0.00755644 +0.612812 0.325602 0.0079787 +0.665273 0.32568 0.00727627 +0.626401 0.325984 0.00813286 +0.388325 0.325994 0.00731773 +0.400728 0.326984 0.00813712 +0.692338 0.327075 0.00752688 +0.707383 0.32805 0.00727929 +0.529494 0.328888 0.0055606 +0.229223 0.331903 0.00625714 +0.749875 0.332553 0.00821346 +0.720609 0.33268 0.00776711 +0.420796 0.332812 0.00763981 +0.434905 0.333216 0.00762773 +0.457965 0.333299 0.00667035 +0.836109 0.334475 0.00677104 +0.735042 0.33452 0.00790351 +0.768385 0.336225 0.00609799 +0.515384 0.336545 0.00741124 +0.329248 0.336643 0.00718932 +0.341918 0.336706 0.00728393 +0.313461 0.336789 0.00726971 +0.354192 0.336902 0.00698602 +0.639692 0.336919 0.00692622 +0.367287 0.337338 0.00683336 +0.160419 0.337347 0.00681528 +0.379428 0.337939 0.00719707 +0.408286 0.338226 0.00817625 +0.446268 0.338292 0.00653791 +0.608695 0.338791 0.00842002 +0.28605 0.338854 0.00693168 +0.392073 0.339351 0.00763864 +0.29946 0.3395 0.00765119 +0.272138 0.340892 0.00711698 +0.656867 0.340943 0.00644702 +0.593149 0.341264 0.00720343 +0.699607 0.341528 0.00569184 +0.623917 0.3418 0.00787323 +0.676444 0.342414 0.0060069 +0.256726 0.342839 0.00714183 +0.423396 0.343709 0.00740107 +0.240989 0.344187 0.00662034 +0.544318 0.345417 0.00553836 +0.228959 0.346651 0.00626763 +0.741527 0.346839 0.00769968 +0.322331 0.346862 0.00602279 +0.438011 0.347163 0.00732725 +0.454048 0.347206 0.0068746 +0.36313 0.348175 0.00628381 +0.398794 0.348985 0.00674837 +0.572853 0.34932 0.00550954 +0.309 0.349955 0.00584366 +0.348755 0.350234 0.00618227 +0.286069 0.350363 0.00633805 +0.523337 0.350426 0.00788132 +0.165191 0.350694 0.0065566 +0.378221 0.350703 0.00664315 +0.411558 0.351268 0.00678132 +0.215631 0.351623 0.00586033 +0.26845 0.351946 0.00617325 +0.334975 0.352047 0.00606986 +0.640343 0.352733 0.00621854 +0.757819 0.353061 0.00612827 +0.829311 0.353217 0.0063828 +0.728872 0.353346 0.0078164 +0.252276 0.353597 0.00625014 +0.608953 0.354207 0.00800982 +0.426197 0.35531 0.00661432 +0.238617 0.355887 0.00601485 +0.204449 0.356548 0.00620027 +0.225587 0.356776 0.00591711 +0.624465 0.357388 0.00662184 +0.389606 0.358056 0.00576238 +0.450733 0.359096 0.00674247 +0.592179 0.359403 0.00692996 +0.438263 0.360358 0.00664555 +0.299201 0.360875 0.00527932 +0.193322 0.361027 0.00639152 +0.361961 0.362011 0.005254 +0.214736 0.362801 0.00559343 +0.65785 0.362825 0.00493039 +0.741714 0.363362 0.00662635 +0.41465 0.363701 0.00578376 +0.531929 0.363731 0.0078164 +0.180924 0.364176 0.00622142 +0.280636 0.364331 0.00459785 +0.16885 0.364357 0.00608983 +0.320519 0.364563 0.00489473 +0.553249 0.364807 0.0060669 +0.262441 0.365558 0.0046602 +0.401322 0.365977 0.00591913 +0.722368 0.366446 0.00813139 +0.378366 0.366875 0.00509984 +0.245657 0.368436 0.00463879 +0.42666 0.368488 0.00559379 +0.343713 0.368657 0.00474736 +0.203052 0.368672 0.00549072 +0.230128 0.369689 0.00487028 +0.445583 0.371614 0.0067031 +0.189252 0.371977 0.00583719 +0.6198 0.372027 0.00633679 +0.571808 0.372274 0.00614546 +0.822172 0.372406 0.0068931 +0.637323 0.372587 0.00592148 +0.604954 0.372628 0.00695547 +0.162599 0.375006 0.00667095 +0.83569 0.375181 0.00739699 +0.216843 0.375669 0.00443974 +0.175781 0.376219 0.00638435 +0.541591 0.377007 0.00727545 +0.431696 0.377549 0.00573954 +0.588707 0.377932 0.00639806 +0.739459 0.378025 0.0056666 +0.709585 0.378381 0.00751047 +0.4139 0.378643 0.00595132 +0.366057 0.379642 0.00417879 +0.390995 0.37985 0.00523351 +0.722618 0.379858 0.00656146 +0.2016 0.381055 0.0043013 +0.149592 0.381726 0.00695461 +0.847641 0.383945 0.00746209 +0.440158 0.384764 0.00590869 +0.187763 0.385135 0.00457224 +0.556063 0.38551 0.00739995 +0.162583 0.385885 0.00596335 +0.653838 0.388364 0.00608754 +0.812443 0.389667 0.00649959 +0.619883 0.389975 0.00715436 +0.671563 0.390075 0.00594697 +0.136831 0.39049 0.00710102 +0.571534 0.391046 0.00708812 +0.636751 0.39108 0.00637281 +0.699389 0.391396 0.0074021 +0.409422 0.391517 0.00544047 +0.603889 0.39158 0.00718434 +0.174985 0.391619 0.00482058 +0.858853 0.391658 0.00710803 +0.711871 0.392007 0.00662905 +0.428796 0.39235 0.00664854 +0.148249 0.393859 0.00628634 +0.833915 0.393885 0.00621726 +0.587954 0.393891 0.00695032 +0.728322 0.395323 0.00502197 +0.687475 0.396722 0.00679012 +0.393246 0.397336 0.00497419 +0.124631 0.397341 0.00658266 +0.375244 0.397852 0.00437835 +0.35264 0.400314 0.00370253 +0.16065 0.400473 0.00483377 +0.869393 0.400959 0.00747568 +0.420085 0.402508 0.006081 +0.132829 0.404806 0.00629551 +0.852702 0.406391 0.00624058 +0.696963 0.406725 0.00719181 +0.800235 0.406864 0.00618162 +0.116457 0.407675 0.00769089 +0.713607 0.408063 0.00558275 +0.406474 0.408267 0.0058827 +0.681603 0.409145 0.00732752 +0.880301 0.409189 0.00704249 +0.146105 0.410385 0.00519687 +0.39304 0.413029 0.00566134 +0.104834 0.413796 0.00691011 +0.378916 0.414397 0.00554232 +0.364975 0.415228 0.00534749 +0.337623 0.416186 0.00522589 +0.835612 0.416198 0.0050291 +0.35127 0.417232 0.00492716 +0.672985 0.417877 0.00719541 +0.323494 0.418314 0.00518422 +0.868789 0.419385 0.00615549 +0.308904 0.419749 0.00496979 +0.129193 0.419971 0.00589622 +0.887747 0.420309 0.00741956 +0.688289 0.421411 0.00642568 +0.111776 0.423761 0.00637718 +0.0955037 0.423828 0.00728393 +0.703566 0.423904 0.00505397 +0.663263 0.424312 0.00705435 +0.792979 0.425281 0.00713987 +0.8184 0.425515 0.00537644 +0.296608 0.426578 0.00635655 +0.281515 0.427249 0.00589925 +0.898498 0.427353 0.00693972 +0.853242 0.429483 0.00550484 +0.266519 0.430506 0.00556811 +0.778758 0.430799 0.00505555 +0.677436 0.432175 0.00635655 +0.652204 0.433134 0.00707125 +0.251021 0.433971 0.0052487 +0.0854215 0.434406 0.00763452 +0.874467 0.435517 0.00585761 +0.100712 0.436398 0.00630878 +0.119742 0.436453 0.00466318 +0.663964 0.436769 0.00644022 +0.806392 0.437456 0.007034 +0.906549 0.438139 0.006992 +0.304888 0.438258 0.0071627 +0.290617 0.438272 0.00600624 +0.889575 0.43956 0.00622813 +0.235798 0.439763 0.00557632 +0.837062 0.441275 0.0061813 +0.642327 0.442438 0.00736247 +0.690796 0.442647 0.00495214 +0.765765 0.444297 0.00490002 +0.3158 0.444499 0.00636781 +0.074792 0.446076 0.00762435 +0.222116 0.447276 0.00624473 +0.654325 0.447516 0.00677516 +0.274523 0.447739 0.00536124 +0.820624 0.447917 0.00758981 +0.91443 0.448505 0.00696662 +0.671279 0.448696 0.00572079 +0.861224 0.448741 0.00574751 +0.0893345 0.448775 0.00635592 +0.206077 0.450425 0.00514878 +0.631803 0.450598 0.00712201 +0.293617 0.450908 0.00587085 +0.898702 0.452153 0.00631571 +0.105517 0.45265 0.00468405 +0.307957 0.452859 0.00636969 +0.32342 0.453057 0.00678044 +0.253068 0.45587 0.00486455 +0.878629 0.456218 0.0062054 +0.333356 0.456888 0.00614222 +0.847717 0.457746 0.00624345 +0.75207 0.457804 0.00511426 +0.641531 0.458446 0.00756513 +0.190977 0.458666 0.00516576 +0.92214 0.45869 0.006679 +0.232509 0.459207 0.00651794 +0.0782196 0.459568 0.00638685 +0.623647 0.459792 0.00738595 +0.0648694 0.460184 0.00764442 +0.83267 0.460713 0.00761547 +0.657768 0.461989 0.00612827 +0.315313 0.463441 0.00660469 +0.342175 0.46382 0.00653349 +0.282994 0.464204 0.00543974 +0.299456 0.464486 0.00590566 +0.678268 0.464547 0.00453114 +0.909856 0.465293 0.0064111 +0.329004 0.466926 0.00689531 +0.892964 0.46741 0.00586576 +0.176421 0.468027 0.00530939 +0.862487 0.46913 0.00682287 +0.265697 0.469358 0.00526838 +0.614425 0.469385 0.00723733 +0.352324 0.469681 0.00643063 +0.73832 0.46972 0.00512126 +0.927954 0.469743 0.00692823 +0.0915915 0.470116 0.00502237 +0.243414 0.470266 0.00638217 +0.629237 0.471911 0.00756197 +0.845233 0.473645 0.00778247 +0.644008 0.474514 0.00646397 +0.0582384 0.474762 0.00814582 +0.879111 0.474858 0.00594295 +0.341071 0.475 0.00700674 +0.0728293 0.475075 0.00634527 +0.321872 0.47515 0.0062209 +0.309131 0.475569 0.00631067 +0.360086 0.476719 0.00662635 +0.294243 0.477888 0.00575927 +0.162575 0.478416 0.00543681 +0.60643 0.479831 0.00680944 +0.661156 0.480139 0.00514723 +0.902473 0.480193 0.00594228 +0.724388 0.480515 0.0053393 +0.369448 0.480515 0.00644949 +0.253767 0.480559 0.00636187 +0.331676 0.480796 0.00705601 +0.934286 0.481179 0.00680388 +0.278321 0.481366 0.00564232 +0.918641 0.481442 0.00661613 +0.617934 0.482706 0.00701076 +0.348733 0.483285 0.00726474 +0.379473 0.485221 0.00524262 +0.854668 0.48602 0.00783776 +0.869561 0.486103 0.00656722 +0.317674 0.486388 0.00647443 +0.0523864 0.487138 0.007854 +0.682609 0.48778 0.00419874 +0.888182 0.488187 0.00634181 +0.630751 0.488889 0.00677604 +0.710086 0.488913 0.00549398 +0.304818 0.489164 0.00627652 +0.359903 0.489692 0.00734694 +0.265089 0.489696 0.00649438 +0.149816 0.490756 0.00596835 +0.338138 0.490774 0.00717977 +0.602648 0.491475 0.00717796 +0.0780968 0.492036 0.00523084 +0.374212 0.492121 0.0064251 +0.290179 0.492412 0.00607838 +0.939456 0.492523 0.00650969 +0.327332 0.492772 0.00681949 +0.386616 0.493355 0.00607379 +0.646072 0.494173 0.00591442 +0.906577 0.495329 0.00635185 +0.925655 0.495971 0.00648856 +0.347524 0.496185 0.00734514 +0.615792 0.496764 0.00721005 +0.367397 0.498241 0.00636419 +0.276235 0.499151 0.0067274 +0.86224 0.499647 0.00758089 +0.315989 0.499681 0.00698211 +0.0624862 0.499962 0.00612177 +0.876539 0.50006 0.00679686 +0.697796 0.500141 0.00565887 +0.0465956 0.500385 0.00776018 +0.357022 0.501424 0.00673887 +0.664636 0.501829 0.00522513 +0.392209 0.501854 0.00640458 +0.890998 0.502443 0.0060462 +0.302265 0.502666 0.00657751 +0.328019 0.503017 0.00666109 +0.600396 0.503135 0.00744152 +0.944366 0.50329 0.00638903 +0.380248 0.503462 0.00709032 +0.138288 0.504589 0.00634684 +0.338211 0.506505 0.00775504 +0.63114 0.507614 0.0068879 +0.369047 0.507638 0.00661138 +0.288152 0.507832 0.00684762 +0.916124 0.507837 0.00613087 +0.399245 0.508626 0.00572183 +0.682892 0.509166 0.006061 +0.348287 0.509725 0.00673887 +0.933312 0.511211 0.00637406 +0.615162 0.511685 0.00733919 +0.89998 0.511918 0.00632359 +0.31318 0.512511 0.0071799 +0.325602 0.51331 0.00726474 +0.868421 0.513575 0.00756144 +0.357992 0.513784 0.00705732 +0.0439339 0.513878 0.00819842 +0.881985 0.514328 0.00696091 +0.649818 0.514979 0.00618452 +0.380017 0.515274 0.00708626 +0.600307 0.515329 0.00766886 +0.948489 0.515341 0.00678132 +0.390804 0.51615 0.00693444 +0.299386 0.516544 0.00683249 +0.0669774 0.518576 0.00540855 +0.402448 0.518778 0.00628159 +0.368953 0.518778 0.00685516 +0.128991 0.51928 0.00672947 +0.670344 0.521012 0.00709401 +0.92271 0.521075 0.00580231 +0.345201 0.521205 0.0076755 +0.333591 0.521448 0.00742633 +0.907798 0.523466 0.00620059 +0.891482 0.525221 0.00707604 +0.321245 0.525311 0.00716653 +0.310479 0.52538 0.00675014 +0.358096 0.525564 0.00720294 +0.634471 0.526134 0.00701814 +0.875166 0.526432 0.00771878 +0.0378349 0.527089 0.00765197 +0.950328 0.527359 0.00661613 +0.617204 0.527774 0.00756513 +0.601183 0.528155 0.0077453 +0.383142 0.528287 0.00676869 +0.406059 0.528581 0.00614416 +0.93556 0.529146 0.00677721 +0.394716 0.529146 0.00617332 +0.371545 0.53018 0.00647413 +0.655356 0.531873 0.00733647 +0.0534723 0.531971 0.00613638 +0.337968 0.532483 0.00717627 +0.120533 0.534203 0.00697747 +0.350583 0.53442 0.00697502 +0.673045 0.534873 0.0078057 +0.918427 0.5351 0.00626255 +0.326181 0.535645 0.00710859 +0.902016 0.537081 0.00688443 +0.875505 0.537867 0.0068801 +0.954342 0.537938 0.00637531 +0.362699 0.53833 0.00661673 +0.888256 0.539536 0.007359 +0.405831 0.540277 0.00726861 +0.391555 0.541349 0.00651641 +0.606377 0.5414 0.00792589 +0.0350191 0.541798 0.00758929 +0.341537 0.542726 0.00708381 +0.641054 0.542981 0.00700622 +0.378609 0.543395 0.00675456 +0.624444 0.545114 0.00757485 +0.941718 0.545861 0.00669716 +0.926417 0.546478 0.00630152 +0.677978 0.54877 0.00738541 +0.657928 0.548958 0.0071932 +0.329308 0.549307 0.00720619 +0.909357 0.549394 0.00667006 +0.353881 0.549408 0.00694688 +0.0469246 0.549624 0.00598367 +0.878895 0.549654 0.00722219 +0.956909 0.550202 0.00637031 +0.367417 0.550553 0.00609767 +0.0658317 0.552254 0.00427578 +0.12004 0.552333 0.00694172 +0.895324 0.552576 0.00747781 +0.406454 0.55285 0.00713123 +0.341611 0.554003 0.00664555 +0.610596 0.554381 0.00736247 +0.103248 0.554451 0.00495053 +0.392452 0.555531 0.00678631 +0.0337968 0.558478 0.00759663 +0.378092 0.55976 0.00628222 +0.87973 0.560198 0.00684762 +0.91723 0.560229 0.00628 +0.953184 0.560834 0.00682957 +0.933637 0.561357 0.00667721 +0.636761 0.562105 0.00718905 +0.323931 0.562165 0.00672296 +0.684042 0.562663 0.00690118 +0.334531 0.56364 0.00665042 +0.362354 0.563896 0.00627461 +0.891121 0.564868 0.00714773 +0.348337 0.565535 0.00676457 +0.616493 0.566245 0.00764078 +0.404325 0.567063 0.00711111 +0.904389 0.567258 0.00717241 +0.662541 0.568367 0.00576825 +0.0494822 0.568373 0.00575893 +0.389948 0.571268 0.00642289 +0.117946 0.571403 0.00743242 +0.878919 0.57247 0.00721998 +0.034415 0.573085 0.00686127 +0.958751 0.573245 0.00659202 +0.944809 0.573805 0.00626414 +0.9204 0.574494 0.00677222 +0.321527 0.575458 0.00773089 +0.33465 0.575832 0.00655022 +0.375206 0.576071 0.00594563 +0.687208 0.577878 0.00682112 +0.892275 0.578153 0.00765435 +0.511349 0.578518 0.00648886 +0.621916 0.579112 0.00742573 +0.499495 0.579282 0.00631572 +0.360724 0.579679 0.00591509 +0.521666 0.580052 0.00664974 +0.532435 0.580654 0.00658991 +0.100786 0.580747 0.00519381 +0.346384 0.580906 0.00606986 +0.933297 0.581405 0.0060774 +0.400513 0.582428 0.00695318 +0.488153 0.582625 0.0062689 +0.907017 0.583052 0.00726533 +0.642967 0.584513 0.00549036 +0.879022 0.584986 0.00767379 +0.0571637 0.585463 0.00526535 +0.0367713 0.585734 0.00696405 +0.541795 0.586557 0.00704531 +0.316855 0.587019 0.0072255 +0.956249 0.5882 0.00697604 +0.385027 0.588635 0.00611201 +0.505197 0.588805 0.00691523 +0.552862 0.58895 0.00646705 +0.479574 0.589525 0.00691098 +0.331383 0.590157 0.00720536 +0.120315 0.590246 0.00784741 +0.894016 0.591484 0.0073695 +0.692845 0.592004 0.00650143 +0.515773 0.592343 0.00708092 +0.493591 0.592718 0.00742633 +0.527646 0.593063 0.00767145 +0.625453 0.593246 0.00710999 +0.922014 0.593376 0.00689714 +0.469159 0.593548 0.00614902 +0.941722 0.59436 0.00628602 +0.367752 0.595321 0.00564796 +0.562834 0.59541 0.00689801 +0.87387 0.595649 0.0073503 +0.349673 0.595656 0.00594998 +0.396703 0.598411 0.00691386 +0.0395735 0.598418 0.00699086 +0.906974 0.598447 0.00661132 +0.316638 0.598627 0.00765665 +0.537659 0.600024 0.00680858 +0.549089 0.600522 0.00745424 +0.503713 0.600954 0.00742015 +0.886212 0.601387 0.00772089 +0.459092 0.602027 0.0068109 +0.573494 0.602065 0.00723568 +0.473318 0.602762 0.00726474 +0.486675 0.60278 0.00792823 +0.954828 0.603508 0.00652343 +0.105117 0.603998 0.00533669 +0.515364 0.604796 0.00707381 +0.335095 0.604854 0.00649683 +0.527349 0.605847 0.00637487 +0.380149 0.60585 0.00571487 +0.632194 0.606418 0.00720729 +0.0595523 0.60648 0.00512902 +0.697144 0.606641 0.0061584 +0.126129 0.607647 0.00794169 +0.87022 0.607705 0.00760475 +0.933117 0.608021 0.00639027 +0.560968 0.608251 0.00694575 +0.310106 0.608787 0.00723678 +0.584371 0.608997 0.00722191 +0.898797 0.610499 0.00722274 +0.497085 0.610637 0.00735867 +0.041158 0.610927 0.00647382 +0.915723 0.611537 0.00666886 +0.449176 0.611972 0.00732643 +0.355676 0.612274 0.00553585 +0.476719 0.612303 0.0070329 +0.462574 0.612945 0.00760585 +0.323341 0.613619 0.00671081 +0.883524 0.614277 0.00752553 +0.550164 0.61445 0.00648119 +0.537934 0.614609 0.00705858 +0.392513 0.614811 0.00678983 +0.595168 0.616224 0.00742331 +0.949809 0.616237 0.00678514 +0.572085 0.616272 0.00719652 +0.509097 0.617029 0.00726669 +0.522961 0.617573 0.0067028 +0.486785 0.618379 0.00742819 +0.864594 0.618731 0.00761834 +0.438365 0.619501 0.00701644 +0.635462 0.620124 0.00712062 +0.700794 0.621335 0.00597068 +0.308051 0.621413 0.00750835 +0.0461429 0.621986 0.00647474 +0.373075 0.622185 0.00547948 +0.607228 0.622235 0.00708391 +0.473006 0.622617 0.00727307 +0.134213 0.622684 0.00792689 +0.559559 0.62366 0.006417 +0.33929 0.623824 0.00570267 +0.114343 0.624081 0.00556811 +0.583351 0.624593 0.00737544 +0.459331 0.624667 0.00719341 +0.497471 0.62491 0.00704002 +0.878089 0.625132 0.00740452 +0.931541 0.625298 0.00639027 +0.89649 0.625404 0.00703627 +0.0672219 0.627009 0.00494127 +0.91387 0.627438 0.00621341 +0.448101 0.628072 0.00716615 +0.856647 0.628431 0.00767145 +0.322767 0.629068 0.0064652 +0.949063 0.629636 0.00609081 +0.529654 0.629776 0.00626731 +0.542414 0.629864 0.00663626 +0.433004 0.629929 0.00741822 +0.388747 0.630573 0.00673479 +0.517279 0.63082 0.00633459 +0.597609 0.631154 0.00728939 +0.61592 0.631442 0.00793166 +0.485417 0.63231 0.00794743 +0.506248 0.633085 0.00642103 +0.421797 0.633231 0.00696576 +0.471343 0.633704 0.00683924 +0.0490809 0.633704 0.00628254 +0.30526 0.633889 0.00751762 +0.570952 0.634851 0.00682316 +0.356145 0.634948 0.00495254 +0.627665 0.63496 0.00767702 +0.870046 0.63498 0.00731365 +0.640883 0.635548 0.00703287 +0.143521 0.635691 0.00797196 +0.703244 0.636494 0.00588946 +0.554303 0.636654 0.00575063 +0.846427 0.637483 0.00756223 +0.887134 0.637924 0.00683103 +0.459639 0.639586 0.00679862 +0.496248 0.640716 0.00765705 +0.444157 0.641336 0.00666737 +0.942921 0.641718 0.00646736 +0.124566 0.642001 0.00545144 +0.9044 0.642046 0.00620573 +0.413917 0.642119 0.00719513 +0.317475 0.642636 0.00618613 +0.375 0.642709 0.00547475 +0.586388 0.642825 0.00633365 +0.859441 0.643713 0.00759322 +0.0560644 0.643806 0.00636468 +0.923988 0.643897 0.0060908 +0.477623 0.644437 0.00713179 +0.527386 0.64473 0.00687633 +0.604521 0.64516 0.00695118 +0.511701 0.64532 0.00721447 +0.429145 0.645566 0.00678748 +0.651867 0.646354 0.0079279 +0.337058 0.646582 0.00533706 +0.153876 0.646729 0.0077363 +0.835358 0.646844 0.00769244 +0.542411 0.647061 0.00600923 +0.302291 0.647343 0.00748977 +0.403804 0.647587 0.00722467 +0.389214 0.648353 0.00703966 +0.635975 0.649195 0.00724558 +0.079368 0.649372 0.00461729 +0.875432 0.649457 0.00693168 +0.620489 0.649941 0.00693914 +0.558845 0.650154 0.00569987 +0.489413 0.651324 0.00714684 +0.705247 0.652 0.00597901 +0.847115 0.652073 0.00743177 +0.665877 0.652324 0.00799664 +0.45963 0.6529 0.00617099 +0.822952 0.653208 0.00722853 +0.0610445 0.654424 0.00589622 +0.165637 0.654516 0.00755407 +0.573525 0.654645 0.00570162 +0.937308 0.65537 0.00622494 +0.502402 0.655944 0.0076105 +0.892499 0.656021 0.005981 +0.680986 0.656447 0.00753956 +0.441188 0.656712 0.00571313 +0.316594 0.657344 0.0061655 +0.138557 0.657661 0.00555988 +0.518766 0.657921 0.00758588 +0.418485 0.658386 0.00644516 +0.474163 0.658884 0.00629172 +0.398664 0.659135 0.00658507 +0.861708 0.659143 0.0066921 +0.53769 0.659765 0.00652801 +0.364226 0.660077 0.00495696 +0.646131 0.660161 0.00645319 +0.912359 0.660351 0.00570546 +0.300234 0.661058 0.00756986 +0.812373 0.661085 0.00838754 +0.590392 0.662355 0.0055749 +0.83156 0.662496 0.00766341 +0.177265 0.662802 0.00769916 +0.384351 0.663732 0.00710747 +0.694538 0.663837 0.00830742 +0.798446 0.663874 0.00798991 +0.0675359 0.664433 0.00574993 +0.661228 0.665505 0.00628761 +0.554349 0.665581 0.00621726 +0.709478 0.665619 0.00801727 +0.608093 0.665754 0.00542362 +0.846362 0.665858 0.00661372 +0.785086 0.666381 0.00777044 +0.488057 0.666658 0.00657206 +0.878042 0.667845 0.00577963 +0.929384 0.668087 0.00620572 +0.334951 0.668229 0.00462246 +0.67758 0.668256 0.00645781 +0.528641 0.668314 0.00671051 +0.737751 0.668658 0.00810639 +0.770653 0.669007 0.00830743 +0.723218 0.669063 0.00840579 +0.156496 0.669431 0.00595633 +0.190314 0.669479 0.00781258 +0.754258 0.669873 0.00833589 +0.627477 0.669888 0.00565465 +0.455978 0.670157 0.00532549 +0.0759509 0.672461 0.00582524 +0.0960277 0.672722 0.00426506 +0.405984 0.672933 0.00509633 +0.313659 0.673237 0.0060846 +0.570174 0.673883 0.00575858 +0.432812 0.673887 0.00468193 +0.203873 0.67485 0.00751047 +0.822697 0.675128 0.00715936 +0.29862 0.675231 0.00748499 +0.898202 0.676177 0.00540524 +0.804965 0.676363 0.00752609 +0.542277 0.676509 0.00730439 +0.861025 0.677531 0.00581122 +0.47304 0.677992 0.00640955 +0.383989 0.678854 0.00678426 +0.646023 0.679132 0.00473728 +0.216801 0.679252 0.00735273 +0.785223 0.679481 0.00723623 +0.17353 0.679756 0.0057527 +0.840821 0.680217 0.00593256 +0.919293 0.680755 0.00618323 +0.742477 0.681243 0.00676839 +0.689469 0.68163 0.00596601 +0.764009 0.681926 0.00707322 +0.668023 0.682129 0.00467937 +0.707616 0.682512 0.00670191 +0.229301 0.682742 0.00720426 +0.365544 0.683143 0.00473308 +0.0826681 0.683484 0.00568204 +0.241919 0.683745 0.00683802 +0.585371 0.684167 0.00544047 +0.55585 0.6856 0.00750915 +0.281825 0.685712 0.0069957 +0.254314 0.686327 0.00698346 +0.267874 0.686349 0.00744286 +0.190896 0.687302 0.00572565 +0.725927 0.688031 0.00637031 +0.294346 0.688815 0.00753824 +0.604086 0.689892 0.00487109 +0.881163 0.690031 0.00503662 +0.455812 0.690249 0.00611071 +0.326208 0.69036 0.00437789 +0.308776 0.690528 0.00629899 +0.814585 0.69219 0.00535864 +0.0924311 0.692398 0.00560445 +0.207572 0.692809 0.0055631 +0.795719 0.692973 0.00554734 +0.775568 0.694382 0.00541039 +0.908357 0.694418 0.00625905 +0.751266 0.694746 0.00527781 +0.380902 0.695563 0.00667334 +0.569987 0.695602 0.00734434 +0.8335 0.696402 0.00452587 +0.224862 0.69789 0.00544632 +0.121198 0.698644 0.00363526 +0.242662 0.698679 0.00574993 +0.102489 0.698721 0.00576722 +0.278134 0.699827 0.00562289 +0.858612 0.700284 0.00440373 +0.260692 0.700911 0.00540634 +0.43873 0.701586 0.00586576 +0.296415 0.703212 0.0078187 +0.622659 0.703602 0.0041921 +0.585823 0.705281 0.00733322 +0.895641 0.706436 0.00603962 +0.110506 0.709482 0.00540008 +0.313086 0.71078 0.00608263 +0.368641 0.711691 0.00461212 +0.382563 0.712724 0.00637499 +0.421372 0.713061 0.00549833 +0.602491 0.714585 0.00724832 +0.122593 0.716427 0.00541995 +0.880851 0.717166 0.00608656 +0.296741 0.717975 0.00751815 +0.134443 0.720867 0.00541297 +0.402811 0.723276 0.00517845 +0.620984 0.72405 0.00689368 +0.864356 0.727468 0.00590195 +0.144963 0.727989 0.00540855 +0.383844 0.729924 0.00716547 +0.643626 0.731525 0.00621406 +0.157282 0.732873 0.00520491 +0.31292 0.73316 0.00593457 +0.29715 0.733434 0.00780519 +0.845804 0.736169 0.00579098 +0.169932 0.738659 0.00532324 +0.632553 0.740122 0.00736355 +0.661181 0.741206 0.00659625 +0.372767 0.741542 0.00450117 +0.184287 0.743229 0.00517653 +0.825269 0.744762 0.00543791 +0.199694 0.747415 0.0051511 +0.68152 0.747594 0.00639588 +0.385729 0.747799 0.0062581 +0.643199 0.750176 0.00646767 +0.298892 0.750271 0.00807391 +0.215739 0.75092 0.00498378 +0.803609 0.751108 0.00547512 +0.231539 0.753245 0.00489026 +0.702446 0.753415 0.00686069 +0.779835 0.754895 0.00576066 +0.7274 0.755018 0.00613282 +0.247696 0.755036 0.00483953 +0.280385 0.755363 0.00506892 +0.263338 0.75563 0.00484693 +0.628775 0.756165 0.00771079 +0.753961 0.75682 0.00623005 +0.314152 0.759351 0.00563808 +0.656982 0.763002 0.00478868 +0.38582 0.7639 0.00739591 +0.300751 0.767476 0.00738164 +0.638089 0.767977 0.00653532 +0.694091 0.769725 0.00635561 +0.623788 0.771683 0.00797994 +0.390669 0.780198 0.00750544 +0.307787 0.781886 0.00802669 +0.650208 0.781946 0.00494208 +0.618161 0.785822 0.00824321 +0.634196 0.786167 0.00658447 +0.672281 0.786607 0.00441817 +0.691094 0.787388 0.00611657 +0.396457 0.796143 0.00776531 +0.310855 0.79693 0.00791307 +0.61003 0.79889 0.00828295 +0.626522 0.801151 0.00708559 +0.64915 0.804156 0.0055606 +0.682669 0.805212 0.00641979 +0.407382 0.810022 0.00719956 +0.600877 0.811804 0.00807022 +0.315607 0.811984 0.00789847 +0.61513 0.814724 0.00739295 +0.396435 0.819548 0.00525097 +0.631041 0.820225 0.00599563 +0.674484 0.821475 0.00651244 +0.59093 0.823504 0.00760841 +0.414235 0.825782 0.00800211 +0.321256 0.827456 0.00785526 +0.603135 0.82776 0.00742144 +0.650245 0.828212 0.00487273 +0.582597 0.833682 0.0077242 +0.6156 0.836025 0.00672089 +0.425848 0.83673 0.00775274 +0.66678 0.839003 0.0061221 +0.593858 0.842896 0.00791357 +0.574222 0.843053 0.00846994 +0.328142 0.84309 0.00781742 +0.632872 0.845422 0.00542435 +0.414405 0.847813 0.00577101 +0.436958 0.848702 0.00842778 +0.564803 0.851457 0.00860446 +0.655199 0.854335 0.00637812 +0.60544 0.855185 0.00646274 +0.552258 0.856951 0.00847535 +0.336797 0.858729 0.00781335 +0.451267 0.858747 0.00898752 +0.584173 0.859619 0.0082572 +0.537755 0.862251 0.00814826 +0.622357 0.866051 0.00519151 +0.432054 0.866056 0.00647259 +0.466006 0.866972 0.0094428 +0.567126 0.868462 0.00822702 +0.525908 0.869683 0.00917143 +0.480766 0.870205 0.00915667 +0.644287 0.87057 0.00650938 +0.497539 0.871376 0.00925245 +0.512456 0.871698 0.00906536 +0.548485 0.872259 0.00804428 +0.347476 0.874757 0.00781946 +0.601649 0.878242 0.00596802 +0.449751 0.879994 0.00678719 +0.581662 0.884144 0.00655114 +0.53839 0.88494 0.0075488 +0.486366 0.886446 0.0077064 +0.630493 0.886814 0.00671229 +0.558542 0.887385 0.0068905 +0.505023 0.890414 0.00790023 +0.360208 0.890452 0.00766808 +0.522925 0.890491 0.00756434 +0.466973 0.892778 0.006712 +0.614502 0.900939 0.00685314 +0.374382 0.904271 0.00711586 +0.57026 0.90604 0.00550448 +0.543097 0.908064 0.00627779 +0.488898 0.910396 0.00572635 +0.597572 0.912984 0.00703513 +0.516879 0.914484 0.00592282 +0.390142 0.916854 0.00691673 +0.579991 0.926348 0.00660348 +0.407224 0.928459 0.00699172 +0.558497 0.934781 0.00688096 +0.425698 0.937562 0.00683074 +0.536654 0.942627 0.00703259 +0.445646 0.943735 0.00677163 +0.467423 0.947346 0.00672 +0.513526 0.948274 0.00706675 +0.490342 0.949407 0.00695805 diff --git a/other/TSP-stipple/tsp_art_tools/README.txt b/other/TSP-stipple/tsp_art_tools/README.txt new file mode 100644 index 00000000..7bd68bd5 --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/README.txt @@ -0,0 +1,78 @@ +5 October 2010 + +This directory contains some tools for generating TSP art for the Eggbot. +These tools have only been tested quite a bit under OS X 10.6. +These tools have had very limited testing on Windows XP SP3. + + 25 Sep 2010 v0.1 Initial version + 27 Sep 2010 v0.1 Added --count and --runs options + 28 Sep 2010 v0.3 Added support for (x,y) and (x,y,radius) files + 1 Oct 2010 v0.4 Decided to close the TSP tour after all; added + --max-segments, and --fill options + 3 Oct 2010 v0.5 Added --line-color, --pre, --mid, & --post options for + color TSP art + 4 Oct 2010 v0.6 Added --layer for specifying layer names + 5 Oct 2010 v0.7 Fix help documentation, change --line-color to --stroke + 7 Oct 2010 v0.8 Added cmyk.jsx for Photoshop + 10 Oct 2010 v0.8.1 Added metadata; XML comment referencing Eggbot + 1 Dec 2011 V0.8.2 Fixed an incorrect error diagnostic which when output + prematurely ended processing; switched to a different + Python library for running linkern in a "subprocess" + so as to support current versions of Python on Windows 7 + (thanks to Peter Vancorenland for diagnosing the issue, + researching a fix, and testing it!) + 7 Mar 2012 V0.8.3 Build the tour file in the user's temporary file directory. + This avoids issues with file permissions on some systems + where it's most convenient to run tspart.py from within + a specific directory that the user may not have write + access to. Note that other temporary files were already + being written (and then removed) from the temp. directory. + For purposes of debugging, the tour file was being + written to the current working directory. That is no + longer done. + + +build-concorde-osx.sh + Shell script to obtain with Curl the QSopt LP Solver library and the + Concorde TSP library and places them in /usr/local/src/concorde. + The script then builds either a 32bit or 64bit version of the Concorde + TSP library and places symlinks in /usr/local/bin/ for the concorde + and linkern executables. (Note: QSopt is not needed for linkern.) + + This script will need modification for Linux. + + While binary executables are available for concorde and linkern for + Windows, they require a minimal cygwin install. See + http://www.tsp.gatech.edu/concorde/downloads/downloads.htm + +cmyk.jsx + Photoshop script for producing CMYK "separations" for Color TSP art. + Tested on Mac OS X 10.6.4 with Photoshop CS5. + +STIPPLING.txt + Fifty words or less explaining how to do quick stippling in gimp. A + useful means of getting a bitmap to feed to tspart.py. + +tspart.py + Python script to accept as input a black and white bitmap file in PBM + format and produce as output a SVG file (TSP art) arrived at by using + the fast, heuristic TSP solver linkern. + + In addition to PBM files, a simple format allowing (x, y) or (x, y, radius) + coordinates is also supported. (E.g., the format output by some stippling + software.) See the comments in tspbitcity.py for further details. + +tspbitcity.py + Python class used by tspart.py. This is the class which reads in a + PBM file and can generate a TSPLIB format file for concorde and linkern. + Also, using a TSP tour, it can generate an SVG file. + + If run as a standalone Python script, tspbitcity.py will generate a + TSPLIB file from a PBM file. + +tspsolution.py + Python class used by tspart.py. This class reads a solution file from + either concorde or linkern and determines the "tour". This "tour" is + then used by tspart.py to generate the output SVG file. + +-- finit -- diff --git a/other/TSP-stipple/tsp_art_tools/STIPPLING.txt b/other/TSP-stipple/tsp_art_tools/STIPPLING.txt new file mode 100644 index 00000000..77e416bd --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/STIPPLING.txt @@ -0,0 +1,20 @@ +How to quickly stipple in Gimp +25 September 2010 + +1. Load your image into Gimp +2. Convert to grayscale: Image > Mode > Grayscale +3. Wash out the image + a. Colors > Levels... + b. Set the "All Channels" under "Output Levels" to 180 - 245 +4. Dither the image + a. Image > Mode > Indexed... + b. Select "Use black and white (1-bit palette) under "Colormap" + c. Select "Floyd-Steinberg (normal) under "Color dithering" + d. Click "Convert" button +5. Save the file as a PBM format file; choose "raw" when asked + +If step 4 produces too many points, then start over (edit undo) until +your back to the grayscale image. Then try scaling the image down to 50%, +25%, or more with Image > Scale Image.... + +-- finit -- diff --git a/other/TSP-stipple/tsp_art_tools/build-concorde-osx-0_2.sh b/other/TSP-stipple/tsp_art_tools/build-concorde-osx-0_2.sh new file mode 100755 index 00000000..9d737735 --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/build-concorde-osx-0_2.sh @@ -0,0 +1,129 @@ +#!/bin/sh +# +# 9/27/2010-A +# Download and build the Concorde TSP Solver for OS X +# Tested on OS X 10.6.4 with gcc 4.2.1 from the Apple Xcode distribution +# +# As this script defaults to using /usr/local/src and /usr/local/bin, you +# will want to run this script as root; e.g., +# +# % sudo build-concorde.sh +# +# **** NOTE ******** +# YOU MUST HAVE gcc, make, curl, and likely some other tools as well +# to run this script. Curl comes with OS X. The others you will have +# if you have installed Apple's Xcode Toolkit. There may be a copy +# on your OS X install DVDs (but you need to hunt around to find the +# package on the DVD). Or, if you have a (free) developer account with +# Apple, you can log in to the "Mac Dev Center" to download the toolkit. +# See http://developer.apple.com/technologies/xcode.html. +# ****************** +# +# Daniel C. Newman, 21 September 2010 +# dan dot newman at mtbaldy dot us +# +# Where to store the source tree +# +SRCDIR=/usr/local/src/concorde +# +# Where to make the binaries visible from +# (Concorde's makefile doesn't have an "install" target) +# +BINDIR=/usr/local/bin +# +# What to build (32 bit and/or 64 bit) +BUILD32=1 +BUILD64=0 +# +# Because we like to watch the commands go by.... +set -x +# +if [ $BUILD32 -eq 0 -a $BUILD64 -eq 0 ]; then + echo "Looks like there's nothing to do; goodbye" + exit 0 +fi +# +if [ $BUILD32 -ne 0 ]; then + # 32bit libraries + mkdir -p $SRCDIR/qsopt32 + cd $SRCDIR/qsopt32 + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac/qsopt.a + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac/qsopt.h + # You don't actually need the qsopt executable + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac/qsopt + chmod a+x qsopt +fi +# +if [ $BUILD64 -ne 0 ]; then + # 64bit libraries + mkdir -p $SRCDIR/qsopt64 + cd $SRCDIR/qsopt64 + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac64/qsopt.a + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac64/qsopt.h + # You don't actually need the qsopt executable + curl -O http://www2.isye.gatech.edu/~wcook/qsopt/beta/codes/mac64/qsopt + chmod a+x qsopt +fi +# +# Now download the Concorde TSP solver package and buld it +# +cd $SRCDIR/.. +curl -O http://www.tsp.gatech.edu/concorde/downloads/codes/src/co031219.tgz +# will unpack to ./concorde +tar xvz < co031219.tgz +cd concorde +# +if [ $BUILD32 -ne 0 ]; then + # + # Build the 32bit version of Concorde + BUILDDIR=osx-build-32 + # + # MUST USE AN ABSOLUTE DIRECTORY PATH FOR LOCATION OF qsopt LIBRARIES !!! + QSOPTDIR=`pwd`/qsopt32 + mkdir $BUILDDIR + cd $BUILDDIR + # Ignore the "checking host system type" warning ... + # You must provide the --host switch but it doesn't have to be correct + CFLAGS="-g -O3 -m32" ../configure --with-qsopt=$QSOPTDIR --host=darwin + make +fi +# +if [ $BUILD64 -ne 0 ]; then + # + # Build the 64bit version of Concorde + BUILDDIR=osx-build-64 + # + # Again, you must use an absolute directory path + cd $SRCDIR + QSOPTDIR=`pwd`/qsopt64 + mkdir $BUILDDIR + cd $BUILDDIR + # Again, ignore the checking host system type warning ... + CFLAGS="-g -O3 -m64" ../configure --with-qsopt=$QSOPTDIR --host=darwin + make +fi +# +# Note: if both 32 and 64bit builds were done, then the last of the +# two built is the one we set up these symbolic links for. That's +# because whichever last set BUILDDIR "wins" +# +if [ -x $SRCDIR/$BUILDDIR/TSP/concorde ] ; then + if [ -L $BINDIR/concorde ] ; then + unlink $BINDIR/concorde + fi + if [ -x $BINDIR/concorde ] ; then + echo "$BINDIR/concorde already exists" + else + ln -s $SRCDIR/$BUILDDIR/TSP/concorde $BINDIR/concorde + fi +fi +if [ -x $SRCDIR/$BUILDDIR/LINKERN/linkern ] ; then + if [ -L $BINDIR/linkern ] ; then + unlink $BINDIR/linkern + fi + if [ -x $BINDIR/linkern ] ; then + echo "$BINDIR/linkern already exists" + else + ln -s $SRCDIR/$BUILDDIR/LINKERN/linkern $BINDIR/linkern + fi +fi diff --git a/other/TSP-stipple/tsp_art_tools/cmyk.jsx b/other/TSP-stipple/tsp_art_tools/cmyk.jsx new file mode 100644 index 00000000..16ed53a4 --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/cmyk.jsx @@ -0,0 +1,99 @@ +// 7 October 2010 + +// Simple Photoshop CS5 script (JavaScript) to output in four separate files, +// the C, M, Y, and K color channels. Each output file is output as a grayscale +// image in Photoshop (.psd) format. The original document is left untouched. +// +// The output files will be named x-black.psd, x-cyan.psd, x-magenta.psd, and +// x-yellow.psd where "x" is the name of the original document (less its +// file extension). + +function zeroAllBut(doc, name) +{ + if (doc == undefined) + { + throw "No document specified" + } + if (name == null) + { + throw "No channel name specified" + } + + // Save the list of active channels + var channels = doc.activeChannels + + // Loop over all the channels, zapping the ones which are not + // the channel we want to preserve + + for (var j = 0; j < channels.length; j++) + { + // Skip the "CMYK channel + // Skip the channel we want to preserve + if (channels[j].name == name || channels[j].name == "CMYK") + { + continue + } + + // Zero out channel #j + // We do this by making channel #j the only channel active and + // then adjusting the output levels to (255, 255) + + for (var i = 0; i < channels.length; i++) + { + channel = channels[i] + if (channel.name == channels[j].name) + { + // Make this the only channel + channel.visible = true + doc.activeChannels = new Array(channel) + } + } + + doc.activeLayer.adjustLevels(0, 255, 1.00, 255, 255) + + // Restore the list of channels + doc.activeChannels = channels + } +} + +// Access the current document +var doc = app.activeDocument + +// Get the file path to the current document less it's type extension +var fname = doc.name.replace(/\..*?$/, '') +var fpath = doc.path + '/' + fname + +// PSD file save options object (for later) +var psdOptions = new PhotoshopSaveOptions() + +// CYAN +var c_doc = doc.duplicate(fname + "-cyan.psd") +c_doc.changeMode(ChangeMode.CMYK) +zeroAllBut(c_doc, "Cyan") +c_doc.changeMode(ChangeMode.GRAYSCALE) +c_doc.saveAs(new File(fpath + "-cyan.psd"), psdOptions) +c_doc.close(SaveOptions.DONOTSAVECHANGES) + +// MAGENTA +var m_doc = doc.duplicate(fname + "-magenta.psd") +m_doc.changeMode(ChangeMode.CMYK) +zeroAllBut(m_doc, "Magenta") +m_doc.changeMode(ChangeMode.GRAYSCALE) +m_doc.saveAs(new File(fpath + "-magenta.psd"), psdOptions) +m_doc.close(SaveOptions.DONOTSAVECHANGES) + +// YELLOW +var y_doc = doc.duplicate(fname + "-yellow.psd") +y_doc.changeMode(ChangeMode.CMYK) +zeroAllBut(y_doc, "Yellow") +y_doc.changeMode(ChangeMode.GRAYSCALE) +y_doc.saveAs(new File(fpath + "-yellow.psd"), psdOptions) +y_doc.close(SaveOptions.DONOTSAVECHANGES) + +// BLACK (K) +var k_doc = doc.duplicate(fname + "-black.psd") +k_doc.changeMode(ChangeMode.CMYK) +zeroAllBut(k_doc, "Black") +k_doc.changeMode(ChangeMode.GRAYSCALE) +k_doc.saveAs(new File(fpath + "-black.psd"), psdOptions) +k_doc.close(SaveOptions.DONOTSAVECHANGES) diff --git a/other/TSP-stipple/tsp_art_tools/tspart.py b/other/TSP-stipple/tsp_art_tools/tspart.py new file mode 100755 index 00000000..819aca7b --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/tspart.py @@ -0,0 +1,295 @@ +# tspart.py +# 3/7/2012 +# +# Interpret the black bits in a black & white bit map as "cities" on a +# rectangular map. Use the coordinates of these cities (bits) as input +# to a TSP solver by converting the coordinates of the cities to a TSPLIB +# file. +# +# Then, generate a fast, approximate solution to the resulting TSP using +# the linkern solver from Concorde TSP. Using the solution from the +# solver -- a "tour" -- generate an SVG plot of the tour. +# +# python tspart.py [input-bitmap-file [output-svg-file]] +# +# If no input file name is supplied, they you will be prompted for the +# name of an input and output file. If no output file name is supplied, +# then it will have a name similar to the input file but with a ".svg" +# extension. +# +# Presently, the input file formats supported are +# +# .PBM -- Portable Bit Map files (Raw or ASCII; P4 or P1) +# +# .PTS -- File of (x, y) or (x, y, radius) coordinates. Must have as the +# first line the literal string +# +# # x-coord y-coord radius +# +# Subsequent lines must then be either +# +# x-coordinate y-coordinate radius +# +# or +# +# x-coordinate y-coordinate +# +# where "x-coordinate", "y-coordinate", and "radius" are the ASCII +# representation of floating point numbers. E.g., +# +# # x-coord y-coord radius +# 0.0210369 0.00199109 0.0022353 +# 0.0255807 0.00200347 0.00216036 +# 0.115518 0.00203477 0.00263275 +# +# The radii are ignored. + + +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us +# 25 September 2010 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys +import getopt +import tempfile +import subprocess +from tspbitcity import * +from tspsolution import * + +# Path to the linkern executable +if sys.platform.lower() == 'win32': + LINKERN = 'C:\linkern.exe' + use_shell = False +else: + LINKERN = '/usr/local/bin/linkern' + use_shell = True + +# linkern switches +LINKERN_OPTS = ' -r %s -o %s %s' + +# Number of linkern runs to take +linkern_runs = 3 + +# Simply report the number of stipples? +stipple_report_only = False + +# Maximum number of line segments per +max_segments = int( 400 ) + +# Fill color for closed paths +fill_color = 'none' + +# Stroke color for lines +line_color = '#000000' + +# Complete svg file (3); just the start (--pre; 1); just the end (--post; 2) +file_contents = 3 + +# Name for this SVG layer +layer_name = None + +# Output our usage and then exit +# When exit_stat is non-zero, write to stderr; otherwise, write to stdout + +def usage( prog, exit_stat=0 ): + str = \ +'Usage: %s [-ch] [-r n] [-s exe] [input-bitmap-file [output-svg-file]]\n' % prog + str += \ +' -c, --count\n' + \ +' Report the number of stipples in the input file and then exit\n' + \ +' -f color, --fill=color\n' + \ +' Fill color (e.g., red, blue, #ff0000); requires --max-segments=0 (default=%s)\n' % fill_color + str += \ +' -h, --help\n' + \ +' This message\n' + \ +' -L name, --layer=name\n' + \ +' Layer name (default=None)\n' + \ +' -m n, --max-segments=n\n' + \ +' Maximum number of line segments per SVG element (default --max-segments=%s)\n' % max_segments + str += \ +' --mid, --pre, --post\n' + \ +' Produce output with only the SVG preamble (--pre), postamble (--post), or neither (--mid)\n' + \ +' -r n, --runs=n\n' + \ +' Number of linkern runs to take (default --runs=%s)\n' % linkern_runs + str += \ +' -s color, --stroke=color\n' + \ +' Stroke (line) color (e.g., black, green, #000000; default=%s)\n' % line_color + str += \ +' -S exe-path, --solver=exe-path\n' + \ +' File path for the linkern executable (default --solver=%s)\n' % LINKERN + + if exit_stat: + sys.stderr.write( str ) + else: + sys.stdout.write( str ) + sys.exit( exit_stat ) +# Determine the names of our input and output files +# Input bitmap file name +# Output SVG file name +infile = '' +outfile = '' + +try: + opts, args = getopt.getopt( sys.argv[1:], 'cf:hl:L:m:r:s:S:', + [ 'count', 'fill=', 'help', 'layer=', 'line-color=', + 'max-segments=', 'mid', 'post', 'pre', 'runs=', + 'stroke=', 'solver=' ] ) +except: + usage( sys.argv[0], 1 ) + +for opt, val in opts: + if opt in ( '-c', '--count' ): + stipple_report_only = True + elif opt in ( '-f', '--fill' ): + fill_color = val + elif opt in ( '-h', '--help' ): + usage( sys.argv[0], 0 ) + elif opt in ( '-s', '--stroke', '--line-color' ): + line_color = val + elif opt in ( '-L', '--layer' ): + layer_name = val.strip( '"\'' ) + elif opt in ( '-m', '--max-segments' ): + if int( val ) >= 0: + max_segments = int( val ) + elif opt in ( '--mid' ): + file_contents = 0 + elif opt in ( '--post' ): + file_contents = 2 + elif opt in ( '--pre' ): + file_contents = 1 + elif opt in ( '-r', '--runs' ): + linkern_runs = val if int( val ) > 0 else '1' + elif opt in ( '-S', '--solver' ): + LINKERN = val + +# Enforce -max-segments=0 when --fill is used +if ( int( max_segments ) != 0 ) and ( fill_color != 'none' ): + sys.stderr.write( 'Use of -f or --fill requires -max-segments=0\n' ) + usage( sys.argv[0], 1 ) + +# Look to our command line arguments for possible input/output file names +if len( args ) == 0: + while infile == '': + try: + infile = raw_input( 'Input file: ' ) + except: + print + sys.exit( 0 ) + while outfile == '': + try: + outfile = raw_input( 'Output file: ' ) + except: + print + sys.exit( 0 ) +elif len( args ) == 1: + infile = args[0] +elif len( args ) == 2: + infile = args[0] + outfile = args[1] +else: + os.stderr.write( 'Usage: %s [input-bitmap-file [output-svg-file]]\n' % sys.argv[0] ) + os.sysexit(1) + + +# Now do some fixups, including defaulting the output file name +if infile.endswith( '.pbm' ) or infile.endswith( '.pts' ): + tmp_prefix = infile[:-3] + solfile = infile[:-3] + 'tour' + if outfile == '': + outfile = infile[:-3] + 'svg' +elif infile.endswith( '.PBM' ) or infile.endswith( '.PTS' ): + tmp_prefix = infile[:-3] + solfile = infile[:-3] + 'TOUR' + if outfile == '': + outfile = infile[:-3] + 'SVG' +else: + tmp_prefix = os.path.split( infile )[1] + solfile = infile + '.tour' + if outfile == '': + outfile = infile + '.svg' + +# Place the solution file into the temporary directory. We don't need to +# worrry (too much) about creating it: we're going to make some other calls +# to open a temporary file and those calls should instantiate the directory. +# And, since we check for errors on those calls, we should catch any problems. + +solfile = os.path.join(tempfile.gettempdir(), os.path.basename(solfile)) + +# Load the bitmap file +print 'Loading bitmap file %s ... ' % infile, +cities = tspBitCity() +if not cities.load( infile ): + sys.exit(1) +print 'done; %d stipples' % len( cities.coordinates ) +if stipple_report_only: + sys.exit( 0 ) + +# Open a temporary file to hold the TSPLIB file +tsp_fd, tspfile = tempfile.mkstemp( suffix='.tsp', prefix=tmp_prefix, text=True ) +if tsp_fd < 0: + sys.stderr.write( 'Unable to open a temporary file\n' ) + sys.exit(1) + +# Convert this file descriptor to a Python file object +tsp_f = os.fdopen(tsp_fd, 'w') + +# Now write the TSPLIB file +print 'Writing TSP solver input file %s ... ' % tspfile, +cities.write_tspfile( tspfile, tsp_f ) +print 'done' + +# Run the solver +print 'Running TSP solver ... ' +cmd = LINKERN + LINKERN_OPTS % ( linkern_runs, solfile, tspfile ) +pipe = subprocess.Popen( cmd, shell=use_shell ) +status = pipe.wait() + +# Remove the temporary TSPLIB file +os.unlink(tspfile) + +# Did the solver succeed? +if status: + # No, something went wrong + sys.stderr.write( 'Solver failed; status = %s\n' % status ) + os.unlink( solfile ) + os.sysexit( 1 ) + +# Solver succeeded +print '\nSolver finished successfully' + +# Load the solution (a tour) +print 'Loading solver results from %s ... ' % solfile, +solution = tspSolution() +if not solution.load( solfile ): + sys.stderr.write( 'Unable to load the solution file\n' ) + os.unlink( solfile ) + os.sysexit( 1 ) +print 'done' + +# Remove the tour file +os.unlink(solfile) + +# Now write the SVG file +print 'Writing SVG file %s ... ' % outfile, +if not cities.write_tspsvg( outfile, solution.tour, max_segments, + line_color, fill_color, file_contents, + layer_name ): + # write_tspsvg() takes care of removing outfile + sys.stderr.write( 'Error writing SVG file\n' ) + os.sysexit( 1 ) +print 'done' diff --git a/other/TSP-stipple/tsp_art_tools/tspbitcity.py b/other/TSP-stipple/tsp_art_tools/tspbitcity.py new file mode 100755 index 00000000..e70f38df --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/tspbitcity.py @@ -0,0 +1,585 @@ +# tspbitcity.py +# 9/26/2010-A + +# Python class which interprets the black bits in a black & white bitmap +# as the coordinates of "cities" on a map. Turn these coordinates into a +# TSPLIB file for use as input to a TSP solver. + +# Point output files from Adrian Secord's Weighted Voronoi Stippler are +# also recognized. The coordinates from those files are floating point +# numbers and are rescaled to the range [0, 800] and converted to integers. +# The reason for this isn't for the TSP solver -- it handles floats just +# fine. Rather, to have (1) have a consistent data type, and (2) the +# resulting SVG file is much smaller when integers are used as the +# coordinates. + +# This file can also be run as a standalone program to produce a TSPLIB +# file from a bitmap: +# +# python tspbitcity.py [input-bitmap-file [output-tsplib-file]] + +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us +# 25 September 2010 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os +import sys + +class tspBitCity: + + # When presented with a collection of floating point (x,y) coordinates, + # we normalize their bounding box to have a height and width of BOXSIZE + BOXSIZE = float( 800 ) + + def __init__( self ): + + # We save the input bitmap file name for purposes of error reporting + # and generating a default output file name + + self.infile = '' + + # Our width and height correspond to the size of the input bitmap + # All coordinates (x, y) will satisfy 0 <= x < width and + # 0 <= y < height + + self.width = 0 + self.height = 0 + + # Our list of "city" (x, y) coordinates + # Each member of the list is a 2-tuple (x, y) which satisfies + # 0 <= x < width and 0 <= y < height + # + # Owing to the nature of our input bitmaps and the way we read them, + # coordinate[i] = (x[i], y[i]) and coordinate[i+1] = (x[i+1], y[i+1]) + # will always satisfy + # + # y[i] >= y[i+1] + # + # and if y[i] == y[i+1], then x[i] < x[i+1]. In other words, the + # cities are sorted such that their y coordinates decrease as you + # advance through the list of coordinates. + + self.coordinates = [] + + # Load a PBM of type P4 + def __load_pbm_p4( self, f ): + + assert ( self.width > 0 ) and ( self.height > 0 ) + assert ( f ) + + self.coordinates = [] + + # PBM file goes from the top of the bitmap (y = h-1) to the + # bottom of the bitmap (y = 0), and from the left of the bitmap + # (x = 0) to the right of the bitmap (x = w) + + # Each line of the file contains w pixels with 8 pixels per byte + # So, each line of the file must be (w + 7) >> 3 bytes long + nbytes = ( self.width + 7 ) >> 3 + + # Each line of the file from here on out corresponds to a + # single row of the bitmap + + for row in range( self.height - 1, -1, -1 ): + + # Read the bitmap row + row_bytes = f.read( nbytes ) + + # Perform a sanity check + if ( row_bytes == '' ) or ( row_bytes == '\n' ): + sys.stderr.write( '1 Premature end-of-data encountered in %s\n' % self.infile ) + return False + + # And start at the first byte of the line read + column_byte_index = 0 + + # Convert the unsigned char byte to an integer + column_byte = int( ord( row_bytes[0] ) ) + + # Now process this row from left to right, x = 0 to x = w - 1 + pixel_mask = int( 0x80 ) + for column in range(0, self.width): + + # See if this bit is lit + if pixel_mask & column_byte: + # Bit is lit, save the coordinate of this pixel + self.coordinates.append( ( column, row ) ) + + # Now move our bitmask bit to the right by one pixel + pixel_mask >>= 1 + + # See if it's time to move to the next byte in the input line + if pixel_mask == 0x00: + column_byte_index += 1 + if column_byte_index < nbytes: + column_byte = ord( row_bytes[column_byte_index] ) + pixel_mask = int( 0x80 ) + elif column < ( self.width - 1 ): + # Something has gone wrong: we didn't read enough bytes? + sys.stderr.write( '2 Premature end-of-file encountered in %s\n' % self.infile ) + return False + + return True + + # Load a PBM of type P1 + def __load_pbm_p1( self, f ): + + assert ( self.width > 0 ) and ( self.height > 0 ) + assert ( f ) + + self.coordinates = [] + + # PBM file goes from the top of the bitmap (y = h-1) to the + # bottom of the bitmap (y = 0), and from the left of the bitmap + # (x = 0) to the right of the bitmap (x = w) + + # Each line of the file contains a string of one or more characters + # from the alphabet { '0', '1', '#', '\n' } where + # + # '0' -- a zero bit in the bitmap + # '1' -- a one bit in the bitmap + # '#' -- introduces a comment line + # '\n' -- a line record terminator + # + # Note the last line of the file may possibly omit the trailing LF. + # That is normal for PBM files of type P1. + # + # Each line from the file may be a portion of one or more rows + # of the bitmap. So, it's up to use to track which row and column + # we are at in the bitmap. + + # Our column index + column = 0 + + # Our row index. Recall that we start at the top row, row h - 1 + row = self.height - 1 + + # Now loop over the remaining lines in the file + # Note that the file line of a P1 PBM file usually does not + # end with a LF record terminator + + for line in f: + + # Ignore semantically empty lines + line = line.strip() + if ( line[0] == '' ) or ( line[0] == '#' ): + continue + + # Too much data in the file? + if row <= -1: + sys.stderr.write( 'Too much data in %s\n' % self.infile ) + return False + + # Loop over each byte in the line + for i in range( 0, len( line )): + + if line[i] == '1': + self.coordinates.append(( column, row )) + elif line[i] != '0': + sys.stderr.write( 'Invalid content in %s\n' % self.infile ) + return False + + # Move to the next column + column += 1 + + # Have we finished this row? + if column >= self.width: + + # Finished a row, move down to the next row + column = 0 + row -= 1 + + # All done + # Perform a sanity check: we should be at the start of row -1 + if ( column == 0 ) and ( row == -1 ): + return True + + # Something bad happened + sys.stderr.write( ' Premature end-of-file encountered in %s\n' % self.infile ) + return False + + # Load a file in which each line has the format + # + # x-coord y-coord radius + + def __load_xyr( self, f ): + + assert( f ) + + self.coordinates = [] + self.width, self.height = int( self.BOXSIZE ), int( self.BOXSIZE ) + px, py = [], [] + + for line in f: + + # Ignore comment lines + if line.startswith( '#' ): + continue + + vals = line.strip().split(' ') + if ( len( vals ) < 2 ) or ( len( vals ) > 3 ): + sys.stderr.write( 'Invalid content in file %s\n' % self.infile ) + return False + + px.append( float( vals[0] ) ) + py.append( float( vals[1] ) ) + + # Find the extrema + fmin = min( min( px ), min( py ) ) + fmax = max( max( px ), max( py ) ) + + # We will translate bounding box containing the points to have + # it's bottom, left corner at (0, 0). Further we will scale the + # box to have height and width of BOXSIZE (e.g., 800). Then + # we convert the floating point values to integers + + # Note we pretend the points all have radius zero.... + + span = float( fmax - fmin ) + scale = float( self.BOXSIZE / span ) if span != 0 else float( 1 ) + # Can't do "for x, y in px, py:" as the lists are too large + # resulting in 'too manu values to unpack' + for i in range( 0, len( px ) ): + self.coordinates.append( ( int( round( (px[i] - fmin) * scale ) ), + int( round( (py[i] - fmin) * scale ) ) ) ) + + return True + + def load( self, infile ): + + # Deal with a missing .pbm extension + self.infile = infile + if not os.path.exists( self.infile ): + if os.path.exists( self.infile + '.pbm' ): + self.infile += '.pbm' + elif os.path.exists( self.infile + '.PBM' ): + self.infile += '.PBM' + elif os.path.exists( self.infile + '.pts' ): + self.infile += '.pts' + else: + # Well, we're going to get an error when we try + # to open that input file.... + pass + + # Open the input file + # This may raise an exception which is fine by us + f = open( self.infile, 'rb' ) + + # Get the magic number + # For PBM files this will always be two bytes followed by a \n + # For other image types, this line could be who knows what. Hence + # our use of a size argument to readline() + magic_number = f.readline(4).strip() + + # PBM files must be P1 or P4 + if magic_number in ['P4', 'P1']: + + # File is a PBM bitmap file + + # Loop until we read the bitmap dimensions + # NOTE: we cannot use "while line in f:" since that is incompatible + # with later using f.read(). If the file is of type P4, then we + # will need to use f.read() to obtain the bitmap + + self.width, self.height = ( 0, 0 ) + while True: + line = f.readline() + if not line.startswith( '#' ): + self.width, self.height = tuple( map( int, line.split() ) ) + break + + # Did we actually read anything (useful)? + if ( self.width == 0 ) or ( self.height == 0 ): + sys.stderr.write( 'Unable to read sensible bitmap dimensions for %s\n' % self.infile ) + f.close() + return False + + # Now read the bitmap + # cities will be a list of 2-tuples, each 2-tuple being the (x, y) + # coordinate of a 1 bit in the bitmap. These (x, y) coordinates + # correspond to row and column numbers with + # + # 0 <= row <= height - 1 + # 0 <= column <= width - 1 + # + # row = 0 corresponds to the bottom of the bitmap + # column = 0 corresponds to the left edge of the bitmap + + ok = self.__load_pbm_p4( f ) if magic_number[1] != '1' \ + else self.__load_pbm_p1( f ) + + elif magic_number == '# x-': + + # File may be an (x, y, radius) coordinate file + line = f.readline().strip() + if line != 'coord y-coord radius': + sys.stderr.write( 'Input file %s is not a supported file type\n' % self.infile ) + sys.stderr.write( 'Must be a PBM file or file of (x, y) coordinates\n' ) + f.close() + return False + + ok = self.__load_xyr( f ) + + else: + + # Unsupported file type + sys.stderr.write( 'Input file %s is not a supported file type\n' % self.infile ) + sys.stderr.write( 'Must be a PBM file or file of (x, y) coordinates\n' ) + f.close() + return False + + + # All done with the input file + f.close() + + # If ok is False, then __load_xxx() will have printed an error + # message already + return ok + + def write_tspfile( self, outfile='', f=None, infile='TSPART' ): + + if not f: + # Deal with funky outfile names + if ( not outfile ) or ( outfile == '' ): + if ( self.infile.endswith( '.pbm' ) ): + outfile = self.infile[:-3] + 'tsp' + elif ( self.infile.endswith( '.PBM' ) ): + outfile = self.infile[:-3] + 'TSP' + else: + outfile = self.infile + '.tsp' + + # Create the output file + # This may generate an exception which is fine by us + f = open( outfile, 'w' ) + + # And now write the contents of the TSPLIB file + try: + # Header + f.write( 'NAME:%s\n' % infile ) + f.write( 'TYPE:TSP\n' ) + f.write( 'DIMENSION:%d\n' % len( self.coordinates ) ) + f.write( 'EDGE_WEIGHT_TYPE:EUC_2D\n' ) + f.write( 'NODE_COORD_TYPE:TWOD_COORDS\n' ) + + # list of coordinates + f.write( 'NODE_COORD_SECTION:\n' ) + city_number = 0 + for city in self.coordinates: + f.write( '%d %d %d\n' % ( city_number, city[0], city[1] ) ) + city_number += 1 + + # And finally an EOF record + f.write( 'EOF:\n' ) + + except: + # Remove the incomplete file + # Note on Windows we must close the file before deleting it + f.close() + if outfile != '': + os.unlink( outfile ) + # Now re-raise the exception + raise + + f.close() + + # max_segments == 0 implies unlimited number of segments per path + def write_tspsvg( self, outfile, tour, max_segments=400, + line_color='#000000', fill_color='none', + file_contents='3', label=None ): + + assert( outfile ) + assert( tour ) + assert( int( max_segments ) >= 0 ) + + + # ms will limit number of points in the path and hence we need + # ms = max_segments + 1 unless max_segments = 0 + # Note that previously we ensured that max_segments >= 0 + ms = int( max_segments ) + if ms != 0: + ms += 1 + + # Default line color to black + if ( not line_color ) or ( line_color == '' ): + line_color = '#000000' + + # Note, we only ask for a fill color when we know we're drawing + # a single, closed path + if fill_color: + fill_color = fill_color.strip( '"\'' ) + if ( not fill_color ) or ( fill_color == '') or ( ms != int( 0 ) ): + fill_color = 'none' + + f = open( outfile, 'w' ) + + tx = ( 3200 - self.width ) / 2 if self.width else 0 + ty = ( 800 + self.height ) / 2 if self.height else 0 + + # Write the SVG preamble? + if ( 1 & int( file_contents ) ): + f.write( +'\n' + +'\n' + +'\n' + +'\n' + +' \n' + +' \n' + +' \n' + +' \n' + +' image/svg+xml\n' + +' \n' + +' \n' + +' \n' + +' Egg-Bot\n' + +' Eggbot\n' + +' TSP\n' + +' TSP art\n' + +' \n' + +' \n' + +' TSP art created with the Eggbot TSP art toolkit (http://egg-bot.com)\n' + +' \n' + +' \n' + +' \n') + + # Now open the SVG group + f.write(' \n' % ( tx, ty ) ) + + max_index = len( self.coordinates ) + last_city = None + path = False + first_path = True + points = 0 + + for city_idx in tour: + + city_index = int( city_idx ) + if ( city_index < 0 ) or ( city_index >= max_index ): + sys.stderr.write( 'TSP tour contains an invalid city index, %s\n' % city_index ) + f.close() + os.unlink( outfile ) + return False + + if not path: + # We need to start a new path whose first point is the + # last city we moved to + path = True + if not last_city: + last_city = self.coordinates[city_index] + f.write( ' \n' ) + + # Close out any open path + if path: + if first_path: + # Make sure it's known that this is a single, closed path + # Note: if we wrote a single path but closed it out because + # ien( tour ) == ms+1, then this final 'Z' will be omitted + # whish should be okay anyway. + f.write( ' Z"/>\n' ) + else: + f.write( '"/>\n' ) + + # Close out the SVG document + f.write( ' \n' ) + + # Write the SVG postamble? + if ( 2 & int( file_contents) ): + f.write( '\n' ) + + return True + +if __name__ == '__main__': + + def fixup_args( argv ): + if len( argv ) == 0: + # Prompt for input and output file names + infile = '' + outfile = '' + while infile == '': + infile = raw_input( 'Input file: ' ) + while outfile == '': + outfile = raw_input( 'Output file: ' ) + return ( infile, outfile ) + elif len( argv ) == 1: + # Assume output file name is derived from the input file name + if argv[0].endswith( '.pbm' ): + # Output file name is input file name - 'pbm' + 'tsp' + return ( argv[0], argv[0][:-3] + 'tsp' ) + elif argv[0].endswith( '.PBM' ): + # Output file name is input file name - 'PBM' + 'TSP' + return ( argv[0], argv[0][:-3] + 'TSP' ) + elif argv[0].endswith( '.pts' ): + return ( argv[0], argv[0][:-3] + 'tsp' ) + elif os.path.exists( argv[0] ): + # Output file name is input file name + '.tsp' + return ( argv[0], argv[0] + '.tsp' ) + elif os.path.exists( argv[0] + '.pbm' ): + return ( argv[0] + '.pbm', argv[0] + '.tsp' ) + elif os.path.exists( argv[0] + '.PBM' ): + return ( argv[0] + '.PBM', argv[0] + '.TSP' ) + elif os.path.exists( argv[0] + '.pts' ): + return ( argv[0] + '.pts', argv[0] + '.tsp' ) + elif len( argv ) == 2: + return ( argv[0], argv[1] ) + else: + return ( '', '' ) + + (infile, outfile) = fixup_args( sys.argv[1:] ) + + if ( infile == '' ) or ( outfile == '' ): + sys.stderr.write( 'Usage: %s [input-bitmap-file [output-tsplib-file]]\n' % sys.argv[0] ) + sys.exit( 1 ) + + citymap = tspBitCity() + if not citymap.load( infile ): + sys.exit( 1 ) + + citymap.write_tspfile( outfile ) diff --git a/other/TSP-stipple/tsp_art_tools/tspsolution.py b/other/TSP-stipple/tsp_art_tools/tspsolution.py new file mode 100755 index 00000000..472204f7 --- /dev/null +++ b/other/TSP-stipple/tsp_art_tools/tspsolution.py @@ -0,0 +1,121 @@ +# tspsolution.py +# 9/26/2010-A + +# Read a TSP tour file generated by either concorde or linkern + +# Written by Daniel C. Newman for the Eggbot Project +# dan dot newman at mtbaldy dot us +# 25 September 2010 + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import sys + +class tspSolution: + + def __init__( self ): + + # Input file name saved for error reporting + self.infile = '' + + # Count declared at the start of the solution file + # We save this for doing a sanity check later + self.count = 0 + + # The tour stored as a simple list + self.tour = [] + + # Solution files from linkern have the format + # + # count count + # index-0 index-1 length-0-1 + # index-1 index-2 length-1-2 + # index-2 index-3 length-2-3 + # ... ... ... + + def __load_linkern( self, f ): + assert f + for line in f: + vals = line.strip().split(' ') + if len( vals ) != 3: + continue + self.tour += vals[0:1] + self.tour + return True + + # Solution files from concorde have the format + # + # count + # index-0 index-1 index-2 index-3 ... index-9 + # index-10 index-11 length-12 index-13 ... index-19 + # index-20 index-21 length-22 index-23 ... index-29 + # ... + # + # The final line will have between 1 and 10 indices + + def __load_concorde( self, f ): + assert f + for line in f: + vals = line.strip().split(' ') + if len( vals ) == 0: + continue + self.tour += vals + return True + + def load( self, infile ): + self.count = 0 + self.tour = [] + self.infile = infile + + f = open( infile, 'r' ) + + line = f.readline().strip() + vals = line.split( ' ' ) + if len( vals ) == 1: + # Looks like a solution from Concorde + self.count = int( vals[0] ) + ok = self.__load_concorde( f ) + elif len( vals ) == 2: + # Looks like a solution from Lin-Kern + self.count = int( vals[0] ) + ok = self.__load_linkern( f ) + else: + f.close() + sys.stderr.write( 'Input file %s has unknown format\n' % self.infile ) + return False + + f.close() + if not ok: + return False + + # Sanity check that we read the correct number of indices from the file + if len( self.tour ) != self.count: + sys.stderr.write( 'Solution file contains wrong number of indices; %d != %d\n' % ( len( self.tour), self.count ) ) + return False + + # Sanity check that none of the indices are < 0 or >= self.size + for t in self.tour: + i = int( t ) + if ( i < 0 ) or ( i > self.count ): + print t, i + sys.stderr.write( 'Invalid tour index found in file %s\n' % self.infile ) + return False + + # Now "close" the tour by making the trip from the ending position + # back to the starting position + if len( self.tour ): + self.tour.append( self.tour[0] ) + + return True