/** Polargraph controller Copyright Sandy Noble 2012. This file is part of Polargraph Controller. Polargraph Controller 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 3 of the License, or (at your option) any later version. Polargraph Controller 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 Polargraph Controller. If not, see . Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/. Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/. This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link. sandy.noble@gmail.com http://www.polargraph.co.uk/ http://code.google.com/p/polargraph/ */ class Scaler { public float scale = 1.0; public float mmPerStep = 1.0; public Scaler(float scale, float mmPerStep) { this.scale = scale; this.mmPerStep = mmPerStep; } public void setScale(float scale) { this.scale = scale; } public float scale(float in) { return in * mmPerStep * scale; } } class PreviewVector extends PVector { public String command; } import java.awt.Toolkit; import java.awt.BorderLayout; import java.awt.GraphicsEnvironment; public class Console extends WindowAdapter implements WindowListener, ActionListener, Runnable { private JFrame frame; private JTextArea textArea; private Thread reader; private Thread reader2; private boolean quit; private final PipedInputStream pin=new PipedInputStream(); private final PipedInputStream pin2=new PipedInputStream(); private PrintStream cOut = System.out; private PrintStream cErr = System.err; Thread errorThrower; // just for testing (Throws an Exception at this Console public Console() { // create all components and add them frame=new JFrame("Java Console"); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2)); int x=(int)(frameSize.width/2); int y=(int)(frameSize.height/2); frame.setBounds(x,y,frameSize.width,frameSize.height); textArea=new JTextArea(); textArea.setEditable(false); JButton button=new JButton("clear"); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER); frame.getContentPane().add(button,BorderLayout.SOUTH); frame.setVisible(true); frame.addWindowListener(this); button.addActionListener(this); try { this.cOut = System.out; PipedOutputStream pout=new PipedOutputStream(this.pin); System.setOut(new PrintStream(pout,true)); } catch (java.io.IOException io) { textArea.append("Couldn't redirect STDOUT to this console\n"+io.getMessage()); } catch (SecurityException se) { textArea.append("Couldn't redirect STDOUT to this console\n"+se.getMessage()); } try { this.cErr = System.err; PipedOutputStream pout2=new PipedOutputStream(this.pin2); System.setErr(new PrintStream(pout2,true)); } catch (java.io.IOException io) { textArea.append("Couldn't redirect STDERR to this console\n"+io.getMessage()); } catch (SecurityException se) { textArea.append("Couldn't redirect STDERR to this console\n"+se.getMessage()); } quit=false; // signals the Threads that they should exit // Starting two seperate threads to read from the PipedInputStreams // reader=new Thread(this); reader.setDaemon(true); reader.start(); // reader2=new Thread(this); reader2.setDaemon(true); reader2.start(); // // testing part // // you may omit this part for your application // // // System.out.println("Hello World 2"); // System.out.println("All fonts available to Graphic2D:\n"); // GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); // String[] fontNames=ge.getAvailableFontFamilyNames(); // for(int n=0;n