diff --git a/ControlFrame.pde b/ControlFrame.pde
new file mode 100644
index 0000000..a2eba2f
--- /dev/null
+++ b/ControlFrame.pde
@@ -0,0 +1,46 @@
+// the ControlFrame class extends PApplet, so we
+// are creating a new processing applet inside a
+// new frame with a controlP5 object loaded
+public class ControlFrame extends PApplet {
+ public int w, h;
+ int abc = 100;
+ public ControlP5 cp5;
+ protected Object parent;
+
+ private ControlFrame() {
+ }
+
+ public ControlFrame(Object theParent, int theWidth, int theHeight) {
+ this.parent = theParent;
+ this.w = theWidth;
+ this.h = theHeight;
+ }
+
+ public ControlP5 cp5() {
+ if (this.cp5 == null) {
+ this.cp5 = this.setupControlP5();
+ }
+ return this.cp5;
+ }
+
+ public void setup() {
+ size(w, h);
+ frameRate(5);
+ }
+
+ public ControlP5 setupControlP5() {
+ println("About to create new ControlP5");
+ ControlP5 cp5 = new ControlP5(this);
+ println("Created: " + cp5);
+ while (cp5 == null) {
+ println("Was null: " + cp5);
+ }
+ println("Finally created: " + cp5);
+ return cp5;
+ }
+
+ public void draw() {
+ background(abc);
+ }
+
+}
\ No newline at end of file
diff --git a/DisplayMachine.pde b/DisplayMachine.pde
index 56090c6..6e7019c 100644
--- a/DisplayMachine.pde
+++ b/DisplayMachine.pde
@@ -1,31 +1,31 @@
/**
- 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/
- */
+ Polargraph controller
+ Copyright Sandy Noble 2015.
+
+ 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/
+ https://github.com/euphy/polargraphcontroller
+*/
class DisplayMachine extends Machine
{
diff --git a/Machine.pde b/Machine.pde
index 1a0f008..6e7b5bd 100644
--- a/Machine.pde
+++ b/Machine.pde
@@ -1,6 +1,6 @@
/**
Polargraph controller
- Copyright Sandy Noble 2012.
+ Copyright Sandy Noble 2015.
This file is part of Polargraph Controller.
@@ -24,7 +24,7 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
- http://code.google.com/p/polargraph/
+ https://github.com/euphy/polargraphcontroller
*/
/**
*
diff --git a/Misc.pde b/Misc.pde
index c415e60..57d03e0 100644
--- a/Misc.pde
+++ b/Misc.pde
@@ -1,6 +1,6 @@
/**
Polargraph controller
- Copyright Sandy Noble 2012.
+ Copyright Sandy Noble 2015.
This file is part of Polargraph Controller.
@@ -24,7 +24,7 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
- http://code.google.com/p/polargraph/
+ https://github.com/euphy/polargraphcontroller
*/
class Scaler
@@ -52,202 +52,202 @@ 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= 0 && getSerialPortNumber() < ports.length)
- r.setValue(getSerialPortNumber());
-
- r.add("setup", -2);
- r.add("No serial connection", -1);
+void button_mode_serialPortDialog() {
+ if (controlFrames.containsKey(CHANGE_SERIAL_PORT_WINDOW_NAME)) {
+ println("NOT OPENING ANOTHER ONE!");
+ }
+ else {
+ final SerialPortWindow serialPortWindow = new SerialPortWindow();
+ controlFrames.put(CHANGE_SERIAL_PORT_WINDOW_NAME, serialPortWindow);
+ }
+}
+
+class SerialPortWindow extends ControlFrame {
+
+ @Override
+ public ControlP5 cp5() {
+ return super.cp5();
+ }
+ public SerialPortWindow() {
+ super(parentPapplet, 150, 350);
+
+ int xPos = 100;
+ int yPos = 100;
+
+ final Frame f = new Frame(CHANGE_SERIAL_PORT_WINDOW_NAME);
+ f.add(this);
+ this.init();
+ f.setTitle(CHANGE_SERIAL_PORT_WINDOW_NAME);
+ f.setSize(super.w, super.h);
+ f.setLocation(xPos, yPos);
+ f.setResizable(false);
+ f.setVisible(true);
+
+ f.addWindowListener( new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent we) {
+
+ f.dispose();
+ }
+ });
+
+ RadioButton r = cp5().addRadioButton("radio_serialPort")
+ .setPosition(10, 10)
+ .setSize(15,15)
+ .setSpacingRow(5)
+ .plugTo(parentPapplet, "radio_serialPort");
- for (int i = 0; i < ports.length; i++)
- {
- r.add(ports[i], i);
- }
-
- int portNo = getSerialPortNumber();
- if (portNo > -1 && portNo < ports.length)
- r.activate(ports[portNo]);
- else
- r.activate("No serial connection");
-
- r.removeItem("setup");
+ String[] ports = Serial.list();
+
+ for (int i = 0; i < ports.length; i++) {
+ println("Adding " + ports[i]);
+ r.addItem(ports[i], i);
+ }
+
+ int portNo = getSerialPortNumber();
+ if (portNo >= 0 && portNo < ports.length)
+ r.activate(ports[portNo]);
+ else
+ r.activate("No serial connection");
+
+ }
+
+
}
void radio_serialPort(int newSerialPort)
{
+ println("In radio_serialPort");
if (newSerialPort == -2)
{
}
else if (newSerialPort == -1)
{
- println("Disconnecting serial port.");
- useSerialPortConnection = false;
- if (myPort != null)
- {
- myPort.stop();
- myPort = null;
- }
- drawbotReady = false;
- drawbotConnected = false;
- serialPortNumber = newSerialPort;
+ println("Disconnecting serial port.");
+ useSerialPortConnection = false;
+ if (myPort != null)
+ {
+ myPort.stop();
+ myPort = null;
+ }
+ drawbotReady = false;
+ drawbotConnected = false;
+ serialPortNumber = newSerialPort;
}
else if (newSerialPort != getSerialPortNumber())
{
- println("About to connect to serial port in slot " + newSerialPort);
- // Print a list of the serial ports, for debugging purposes:
- if (newSerialPort < Serial.list().length)
- {
- try
- {
- drawbotReady = false;
- drawbotConnected = false;
- if (myPort != null)
- {
- myPort.stop();
- myPort = null;
- }
- if (getSerialPortNumber() >= 0)
- println("closing " + Serial.list()[getSerialPortNumber()]);
-
- serialPortNumber = newSerialPort;
- String portName = Serial.list()[serialPortNumber];
+ println("About to connect to serial port in slot " + newSerialPort);
+ // Print a list of the serial ports, for debugging purposes:
+ if (newSerialPort < Serial.list().length)
+ {
+ try
+ {
+ drawbotReady = false;
+ drawbotConnected = false;
+ if (myPort != null)
+ {
+ myPort.stop();
+ myPort = null;
+ }
+ if (getSerialPortNumber() >= 0)
+ println("closing " + Serial.list()[getSerialPortNumber()]);
+
+ serialPortNumber = newSerialPort;
+ String portName = Serial.list()[serialPortNumber];
- myPort = new Serial(this, portName, getBaudRate());
- //read bytes into a buffer until you get a linefeed (ASCII 10):
- myPort.bufferUntil('\n');
- useSerialPortConnection = true;
- println("Successfully connected to port " + portName);
- }
- catch (Exception e)
- {
- println("Attempting to connect to serial port in slot " + getSerialPortNumber()
- + " caused an exception: " + e.getMessage());
- }
- }
- else
- {
- println("No serial ports found.");
- useSerialPortConnection = false;
- }
+ myPort = new Serial(this, portName, getBaudRate());
+ //read bytes into a buffer until you get a linefeed (ASCII 10):
+ myPort.bufferUntil('\n');
+ useSerialPortConnection = true;
+ println("Successfully connected to port " + portName);
+ }
+ catch (Exception e)
+ {
+ println("Attempting to connect to serial port in slot " + getSerialPortNumber()
+ + " caused an exception: " + e.getMessage());
+ }
+ }
+ else
+ {
+ println("No serial ports found.");
+ useSerialPortConnection = false;
+ }
}
else
{
- println("no serial port change.");
+ println("no serial port change.");
}
}
+/*
+ControlFrame newControlFrame(String name, int xPos, int yPos, int width, int height) {
+ final Frame f = new Frame(name);
+ final ControlFrame p = new ControlFrame(this, width, height);
+ f.add(p);
+ p.init();
+ f.setTitle(name);
+ f.setSize(p.w, p.h);
+ f.setLocation(xPos, yPos);
+ f.setResizable(false);
+ f.setVisible(true);
+
+ f.addWindowListener( new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent we) {
+ p.dispose();
+ f.dispose();
+ if (controlFrames.containsKey(f.getName())) {
+ controlFrames.remove(f.getName());
+ }
+
+ }
+ });
+
+ return p;
+}
+
+*/
/*------------------------------------------------------------------------
Details about the "machine store" subwindow
------------------------------------------------------------------------*/
-
-ControlWindow dialogWindow = null;
-
-void button_mode_machineStoreDialog()
-{
- this.dialogWindow = cp5.addControlWindow("chooseStoreFilenameWindow",100,100,450,150);
- dialogWindow.hideCoordinates();
-
- dialogWindow.setBackground(getBackgroundColour());
-
- Textfield filenameField = cp5.addTextfield("storeFilename",20,20,150,20);
- filenameField.setText(getStoreFilename());
- filenameField.setLabel("Filename to store to");
- filenameField.setWindow(dialogWindow);
-
- Button submitButton = cp5.addButton("submitStoreFilenameWindow",0,180,20,60,20);
- submitButton.setLabel("Submit");
- submitButton.setWindow(dialogWindow);
-
- Toggle overwriteToggle = cp5.addToggle("toggleAppendToFile",true,180,50,20,20);
- overwriteToggle.setCaptionLabel("Overwrite existing file");
- overwriteToggle.setWindow(dialogWindow);
-
- filenameField.setFocus(true);
-
-}
-
-void storeFilename(String filename)
-{
- println("Filename event: "+ filename);
- if (filename != null && filename.length() <= 12)
- {
- setStoreFilename(filename);
- sendMachineStoreMode();
- }
-}
-
-void toggleAppendToFile(boolean theFlag)
-{
- setOverwriteExistingStoreFile(theFlag);
-}
-
-void submitStoreFilenameWindow(int theValue)
-{
- Textfield tf = (Textfield) cp5.controller("storeFilename");
- tf.submit();
-}
-
-void button_mode_machineExecDialog()
-{
- this.dialogWindow = cp5.addControlWindow("chooseExecFilenameWindow",100,100,450,150);
- dialogWindow.hideCoordinates();
-
- dialogWindow.setBackground(getBackgroundColour());
-
- Textfield filenameField = cp5.addTextfield("execFilename",20,20,150,20);
- filenameField.setText(getStoreFilename());
- filenameField.setLabel("Filename to execute from");
- filenameField.setWindow(dialogWindow);
-
- Button submitButton = cp5.addButton("submitExecFilenameWindow",0,180,20,60,20);
- submitButton.setLabel("Submit");
- submitButton.setWindow(dialogWindow);
-
- filenameField.setFocus(true);
-
-}
-
-void execFilename(String filename)
-{
- println("Filename event: "+ filename);
- if (filename != null && filename.length() <= 12)
- {
- setStoreFilename(filename);
- sendMachineExecMode();
- }
-}
-void submitExecFilenameWindow(int theValue)
-{
- Textfield tf = (Textfield) cp5.controller("execFilename");
- tf.submit();
-}
-
-void button_mode_sendMachineLiveMode()
-{
- sendMachineLiveMode();
-}
-
-
-
-
-
-/*------------------------------------------------------------------------
- Details about the "drawing" subwindow
-------------------------------------------------------------------------*/
-void button_mode_drawPixelsDialog()
-{
- this.dialogWindow = cp5.addControlWindow("drawPixelsWindow",100,100,450,150);
- dialogWindow.hideCoordinates();
-
- dialogWindow.setBackground(getBackgroundColour());
-
- Radio rPos = cp5.addRadio("radio_startPosition",10,10);
- rPos.add("Top-right", DRAW_DIR_NE);
- rPos.add("Bottom-right", DRAW_DIR_SE);
- rPos.add("Bottom-left", DRAW_DIR_SW);
- rPos.add("Top-left", DRAW_DIR_NW);
- rPos.setWindow(dialogWindow);
-
- Radio rSkip = cp5.addRadio("radio_pixelSkipStyle",10,100);
- rSkip.add("Lift pen over masked pixels", 1);
- rSkip.add("Draw masked pixels as blanks", 2);
- rSkip.setWindow(dialogWindow);
-
-// Radio rDir = cp5.addRadio("radio_rowStartDirection",100,10);
-// rDir.add("Upwards", 0);
-// rDir.add("Downwards", 1);
-// rDir.setWindow(dialogWindow);
-
- Radio rStyle = cp5.addRadio("radio_pixelStyle",100,10);
- rStyle.add("Variable frequency square wave", PIXEL_STYLE_SQ_FREQ);
- rStyle.add("Variable size square wave", PIXEL_STYLE_SQ_SIZE);
- rStyle.add("Solid square wave", PIXEL_STYLE_SQ_SOLID);
- rStyle.add("Scribble", PIXEL_STYLE_SCRIBBLE);
- if (currentHardware >= HARDWARE_VER_MEGA)
- {
- rStyle.add("Spiral", PIXEL_STYLE_CIRCLE);
- rStyle.add("Sawtooth", PIXEL_STYLE_SAW);
- }
- rStyle.setWindow(dialogWindow);
-
- Button submitButton = cp5.addButton("submitDrawWindow",0,280,10,120,20);
- submitButton.setLabel("Generate commands");
- submitButton.setWindow(dialogWindow);
-
-
-}
-
+//
+//ControlWindow dialogWindow = null;
+//
+//void button_mode_machineStoreDialog()
+//{
+// this.dialogWindow = cp5.addControlWindow("chooseStoreFilenameWindow",100,100,450,150);
+// dialogWindow.hideCoordinates();
+//
+// dialogWindow.setBackground(getBackgroundColour());
+//
+// Textfield filenameField = cp5.addTextfield("storeFilename",20,20,150,20);
+// filenameField.setText(getStoreFilename());
+// filenameField.setLabel("Filename to store to");
+// filenameField.setWindow(dialogWindow);
+//
+// Button submitButton = cp5.addButton("submitStoreFilenameWindow",0,180,20,60,20);
+// submitButton.setLabel("Submit");
+// submitButton.setWindow(dialogWindow);
+//
+// Toggle overwriteToggle = cp5.addToggle("toggleAppendToFile",true,180,50,20,20);
+// overwriteToggle.setCaptionLabel("Overwrite existing file");
+// overwriteToggle.setWindow(dialogWindow);
+//
+// filenameField.setFocus(true);
+//
+//}
+//
+//void storeFilename(String filename)
+//{
+// println("Filename event: "+ filename);
+// if (filename != null && filename.length() <= 12)
+// {
+// setStoreFilename(filename);
+// sendMachineStoreMode();
+// }
+//}
+//
+//void toggleAppendToFile(boolean theFlag)
+//{
+// setOverwriteExistingStoreFile(theFlag);
+//}
+//
+//void submitStoreFilenameWindow(int theValue)
+//{
+// Textfield tf = (Textfield) cp5.controller("storeFilename");
+// tf.submit();
+//}
+//
+//void button_mode_machineExecDialog()
+//{
+// this.dialogWindow = cp5.addControlWindow("chooseExecFilenameWindow",100,100,450,150);
+// dialogWindow.hideCoordinates();
+//
+// dialogWindow.setBackground(getBackgroundColour());
+//
+// Textfield filenameField = cp5.addTextfield("execFilename",20,20,150,20);
+// filenameField.setText(getStoreFilename());
+// filenameField.setLabel("Filename to execute from");
+// filenameField.setWindow(dialogWindow);
+//
+// Button submitButton = cp5.addButton("submitExecFilenameWindow",0,180,20,60,20);
+// submitButton.setLabel("Submit");
+// submitButton.setWindow(dialogWindow);
+//
+// filenameField.setFocus(true);
+//
+//}
+//
+//void execFilename(String filename)
+//{
+// println("Filename event: "+ filename);
+// if (filename != null && filename.length() <= 12)
+// {
+// setStoreFilename(filename);
+// sendMachineExecMode();
+// }
+//}
+//void submitExecFilenameWindow(int theValue)
+//{
+// Textfield tf = (Textfield) cp5.controller("execFilename");
+// tf.submit();
+//}
+//
+//void button_mode_sendMachineLiveMode()
+//{
+// sendMachineLiveMode();
+//}
+//
+//
+//
+//
+//
+///*------------------------------------------------------------------------
+// Details about the "drawing" subwindow
+//------------------------------------------------------------------------*/
+//void button_mode_drawPixelsDialog()
+//{
+// this.dialogWindow = cp5.addControlWindow("drawPixelsWindow",100,100,450,150);
+// dialogWindow.hideCoordinates();
+//
+// dialogWindow.setBackground(getBackgroundColour());
+//
+// Radio rPos = cp5.addRadio("radio_startPosition",10,10);
+// rPos.add("Top-right", DRAW_DIR_NE);
+// rPos.add("Bottom-right", DRAW_DIR_SE);
+// rPos.add("Bottom-left", DRAW_DIR_SW);
+// rPos.add("Top-left", DRAW_DIR_NW);
+// rPos.setWindow(dialogWindow);
+//
+// Radio rSkip = cp5.addRadio("radio_pixelSkipStyle",10,100);
+// rSkip.add("Lift pen over masked pixels", 1);
+// rSkip.add("Draw masked pixels as blanks", 2);
+// rSkip.setWindow(dialogWindow);
+//
+//// Radio rDir = cp5.addRadio("radio_rowStartDirection",100,10);
+//// rDir.add("Upwards", 0);
+//// rDir.add("Downwards", 1);
+//// rDir.setWindow(dialogWindow);
+//
+// Radio rStyle = cp5.addRadio("radio_pixelStyle",100,10);
+// rStyle.add("Variable frequency square wave", PIXEL_STYLE_SQ_FREQ);
+// rStyle.add("Variable size square wave", PIXEL_STYLE_SQ_SIZE);
+// rStyle.add("Solid square wave", PIXEL_STYLE_SQ_SOLID);
+// rStyle.add("Scribble", PIXEL_STYLE_SCRIBBLE);
+// if (currentHardware >= HARDWARE_VER_MEGA)
+// {
+// rStyle.add("Spiral", PIXEL_STYLE_CIRCLE);
+// rStyle.add("Sawtooth", PIXEL_STYLE_SAW);
+// }
+// rStyle.setWindow(dialogWindow);
+//
+// Button submitButton = cp5.addButton("submitDrawWindow",0,280,10,120,20);
+// submitButton.setLabel("Generate commands");
+// submitButton.setWindow(dialogWindow);
+//
+//
+//}
+//
public Integer renderStartPosition = DRAW_DIR_NE; // default top right hand corner for start
public Integer renderStartDirection = DRAW_DIR_SE; // default start drawing in SE direction (DOWN)
public Integer renderStyle = PIXEL_STYLE_SQ_FREQ; // default pixel style square wave
-void radio_startPosition(int pos)
-{
- this.renderStartPosition = pos;
- radio_rowStartDirection(1);
-}
-void radio_rowStartDirection(int dir)
-{
- if (renderStartPosition == DRAW_DIR_NE || renderStartPosition == DRAW_DIR_SW)
- renderStartDirection = (dir == 0) ? DRAW_DIR_NW : DRAW_DIR_SE;
- else if (renderStartPosition == DRAW_DIR_SE || renderStartPosition == DRAW_DIR_NW)
- renderStartDirection = (dir == 0) ? DRAW_DIR_NE : DRAW_DIR_SW;
-}
-void radio_pixelStyle(int style)
-{
- renderStyle = style;
-}
-void radio_pixelSkipStyle(int style)
-{
- if (style == 1)
- liftPenOnMaskedPixels = true;
- else if (style == 2)
- liftPenOnMaskedPixels = false;
-}
-void submitDrawWindow(int theValue)
-{
- println("draw.");
- println("Style: " + renderStyle);
- println("Start pos: " + renderStartPosition);
- println("Start dir: " + renderStartDirection);
-
- switch (renderStyle)
- {
- case PIXEL_STYLE_SQ_FREQ: button_mode_renderSquarePixel(); break;
- case PIXEL_STYLE_SQ_SIZE: button_mode_renderScaledSquarePixels(); break;
- case PIXEL_STYLE_SQ_SOLID: button_mode_renderSolidSquarePixels(); break;
- case PIXEL_STYLE_SCRIBBLE: button_mode_renderScribblePixels(); break;
- case PIXEL_STYLE_CIRCLE: button_mode_renderCirclePixel(); break;
- case PIXEL_STYLE_SAW: button_mode_renderSawPixel(); break;
- }
-
-
-}
-
-/*------------------------------------------------------------------------
- Details about the "writing" subwindow
-------------------------------------------------------------------------*/
+//void radio_startPosition(int pos)
+//{
+// this.renderStartPosition = pos;
+// radio_rowStartDirection(1);
+//}
+//void radio_rowStartDirection(int dir)
+//{
+// if (renderStartPosition == DRAW_DIR_NE || renderStartPosition == DRAW_DIR_SW)
+// renderStartDirection = (dir == 0) ? DRAW_DIR_NW : DRAW_DIR_SE;
+// else if (renderStartPosition == DRAW_DIR_SE || renderStartPosition == DRAW_DIR_NW)
+// renderStartDirection = (dir == 0) ? DRAW_DIR_NE : DRAW_DIR_SW;
+//}
+//void radio_pixelStyle(int style)
+//{
+// renderStyle = style;
+//}
+//void radio_pixelSkipStyle(int style)
+//{
+// if (style == 1)
+// liftPenOnMaskedPixels = true;
+// else if (style == 2)
+// liftPenOnMaskedPixels = false;
+//}
+//void submitDrawWindow(int theValue)
+//{
+// println("draw.");
+// println("Style: " + renderStyle);
+// println("Start pos: " + renderStartPosition);
+// println("Start dir: " + renderStartDirection);
+//
+// switch (renderStyle)
+// {
+// case PIXEL_STYLE_SQ_FREQ: button_mode_renderSquarePixel(); break;
+// case PIXEL_STYLE_SQ_SIZE: button_mode_renderScaledSquarePixels(); break;
+// case PIXEL_STYLE_SQ_SOLID: button_mode_renderSolidSquarePixels(); break;
+// case PIXEL_STYLE_SCRIBBLE: button_mode_renderScribblePixels(); break;
+// case PIXEL_STYLE_CIRCLE: button_mode_renderCirclePixel(); break;
+// case PIXEL_STYLE_SAW: button_mode_renderSawPixel(); break;
+// }
+//
+//
+//}
+//
+///*------------------------------------------------------------------------
+// Details about the "writing" subwindow
+//------------------------------------------------------------------------*/
String textToWrite = "";
String spriteFilePrefix = "sprite/let";
String spriteFileSuffix = ".txt";
-
-void button_mode_drawWritingDialog()
-{
- this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200);
- dialogWindow.hideCoordinates();
-
- dialogWindow.setBackground(getBackgroundColour());
-
- Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20);
- spriteFileField.setText(getSpriteFilePrefix());
- spriteFileField.setLabel("File prefix");
- spriteFileField.setWindow(dialogWindow);
-
- Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20);
- writingField.setText(getTextToWrite());
- writingField.setLabel("Text to write");
- writingField.setWindow(dialogWindow);
-
- Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20);
- importTextButton.setLabel("Load text from file");
- importTextButton.setWindow(dialogWindow);
-
- Radio rPos = cp5.addRadio("radio_drawWritingDirection",20,140);
+//
+//void button_mode_drawWritingDialog()
+//{
+// this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200);
+// dialogWindow.hideCoordinates();
+//
+// dialogWindow.setBackground(getBackgroundColour());
+//
+// Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20);
+// spriteFileField.setText(getSpriteFilePrefix());
+// spriteFileField.setLabel("File prefix");
+// spriteFileField.setWindow(dialogWindow);
+//
+// Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20);
+// writingField.setText(getTextToWrite());
+// writingField.setLabel("Text to write");
+// writingField.setWindow(dialogWindow);
+//
+// Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20);
+// importTextButton.setLabel("Load text from file");
+// importTextButton.setWindow(dialogWindow);
+//
+// Radio rPos = cp5.addRadio("radio_drawWritingDirection",20,140);
+//// rPos.add("North-east", DRAW_DIR_NE);
+// rPos.add("South-east", DRAW_DIR_SE);
+//// rPos.add("South-west", DRAW_DIR_SW);
+//// rPos.add("North-west", DRAW_DIR_NW);
+// rPos.setWindow(dialogWindow);
+//
+//
+//
+// Button submitButton = cp5.addButton("submitWritingWindow",0,300,100,120,20);
+// submitButton.setLabel("Generate commands");
+// submitButton.setWindow(dialogWindow);
+//}
+//
+//void spriteFilePrefixField(String value)
+//{
+// spriteFilePrefix = value;
+//}
+//void textToWriteField(String value)
+//{
+// textToWrite = value;
+//}
+//
+//String getTextToWrite()
+//{
+// return textToWrite;
+//}
+//String getSpriteFilePrefix()
+//{
+// return spriteFilePrefix;
+//}
+//String getSpriteFileSuffix()
+//{
+// return spriteFileSuffix;
+//}
+//
+//void importTextButton()
+//{
+// textToWrite = importTextToWriteFromFile();
+// Textfield tf = (Textfield) cp5.controller("textToWriteField");
+// tf.setText(getTextToWrite());
+// tf.submit();
+//}
+//
+//
+//void submitWritingWindow(int theValue)
+//{
+// println("Write.");
+//
+// Textfield tf = (Textfield) cp5.controller("spriteFilePrefixField");
+// tf.submit();
+// tf.setText(getSpriteFilePrefix());
+// tf = (Textfield) cp5.controller("textToWriteField");
+// tf.submit();
+// tf.setText(getTextToWrite());
+//
+// println("Start dir: " + renderStartDirection);
+// println("Sprite file prefix: " + spriteFilePrefix);
+// println("Text: " + textToWrite);
+//
+// for (int i=0; i.
-
- 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/
- */
-Set getPanelNames()
-{
+ Polargraph controller
+ Copyright Sandy Noble 2015.
+
+ 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/
+ https://github.com/euphy/polargraphcontroller
+*/
+Set getPanelNames() {
if (this.panelNames == null)
this.panelNames = buildPanelNames();
return this.panelNames;
}
-List getTabNames()
-{
+List getTabNames() {
if (this.tabNames == null)
this.tabNames = buildTabNames();
return this.tabNames;
}
-Set getControlNames()
-{
+Set getControlNames() {
if (this.controlNames == null)
this.controlNames = buildControlNames();
return this.controlNames;
}
-Map> getControlsForPanels()
-{
+Map> getControlsForPanels() {
if (this.controlsForPanels == null)
this.controlsForPanels = buildControlsForPanels();
return this.controlsForPanels;
}
-Map getAllControls()
-{
+Map getAllControls() {
if (this.allControls == null)
this.allControls = buildAllControls();
return this.allControls;
}
-Map getControlLabels()
-{
+Map getControlLabels() {
if (this.controlLabels == null)
this.controlLabels = buildControlLabels();
return this.controlLabels;
}
-Map> getPanelsForTabs()
-{
+Map> getPanelsForTabs() {
if (this.panelsForTabs == null)
this.panelsForTabs = buildPanelsForTabs();
return this.panelsForTabs;
}
-Map getPanels()
-{
+Map getPanels() {
if (this.panels == null)
this.panels = buildPanels();
return this.panels;
}
-Set getControlsToLockIfBoxNotSpecified()
-{
+Set getControlsToLockIfBoxNotSpecified() {
if (this.controlsToLockIfBoxNotSpecified == null)
{
this.controlsToLockIfBoxNotSpecified = buildControlsToLockIfBoxNotSpecified();
@@ -84,8 +75,7 @@ Set getControlsToLockIfBoxNotSpecified()
return this.controlsToLockIfBoxNotSpecified;
}
-Set getControlsToLockIfImageNotLoaded()
-{
+Set getControlsToLockIfImageNotLoaded() {
if (this.controlsToLockIfImageNotLoaded == null)
{
this.controlsToLockIfImageNotLoaded = buildControlsToLockIfImageNotLoaded();
@@ -93,9 +83,7 @@ Set getControlsToLockIfImageNotLoaded()
return this.controlsToLockIfImageNotLoaded;
}
-
-void hideAllControls()
-{
+void hideAllControls() {
for (String key : allControls.keySet())
{
Controller c = allControls.get(key);
@@ -103,8 +91,7 @@ void hideAllControls()
}
}
-Map buildPanels()
-{
+Map buildPanels() {
Map panels = new HashMap();
float panelHeight = frame.getHeight() - getMainPanelPosition().y - (DEFAULT_CONTROL_SIZE.y*3);
@@ -121,7 +108,7 @@ Map buildPanels()
panels.put(PANEL_NAME_INPUT, inputPanel);
Panel rovingPanel = new Panel(PANEL_NAME_ROVING, panelOutline);
- rovingPanel.setOutlineColour(color(200,200,200));
+ rovingPanel.setOutlineColour(color(100,200,200));
// get controls
rovingPanel.setResizable(true);
rovingPanel.setControls(getControlsForPanels().get(PANEL_NAME_ROVING));
@@ -131,7 +118,7 @@ Map buildPanels()
panels.put(PANEL_NAME_ROVING, rovingPanel);
Panel tracePanel = new Panel(PANEL_NAME_TRACE, panelOutline);
- tracePanel.setOutlineColour(color(200,200,200));
+ tracePanel.setOutlineColour(color(200,255,200));
// get controls
tracePanel.setResizable(true);
tracePanel.setControls(getControlsForPanels().get(PANEL_NAME_TRACE));
@@ -141,7 +128,7 @@ Map buildPanels()
panels.put(PANEL_NAME_TRACE, tracePanel);
Panel detailsPanel = new Panel(PANEL_NAME_DETAILS, panelOutline);
- detailsPanel.setOutlineColour(color(200, 200, 200));
+ detailsPanel.setOutlineColour(color(200, 200, 255));
// get controls
detailsPanel.setResizable(true);
detailsPanel.setControls(getControlsForPanels().get(PANEL_NAME_DETAILS));
@@ -151,7 +138,7 @@ Map buildPanels()
panels.put(PANEL_NAME_DETAILS, detailsPanel);
Panel queuePanel = new Panel(PANEL_NAME_QUEUE, panelOutline);
- queuePanel.setOutlineColour(color(200, 200, 200));
+ queuePanel.setOutlineColour(color(200, 200, 50));
// get controls
queuePanel.setResizable(true);
queuePanel.setControls(getControlsForPanels().get(PANEL_NAME_QUEUE));
@@ -165,7 +152,7 @@ Map buildPanels()
new PVector((DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x)*2, (DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y)*2));
Panel generalPanel = new Panel(PANEL_NAME_GENERAL, panelOutline);
generalPanel.setResizable(false);
- generalPanel.setOutlineColour(color(200, 200, 200));
+ generalPanel.setOutlineColour(color(200, 50, 200));
// get controls
generalPanel.setControls(getControlsForPanels().get(PANEL_NAME_GENERAL));
// get control positions
@@ -241,9 +228,9 @@ Map buildAllControls()
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
t.setLabel(getControlLabels().get(controlName));
t.hide();
- controlP5.Label l = t.captionLabel();
- l.style().marginTop = -17; //move upwards (relative to button size)
- l.style().marginLeft = 4; //move to the right
+ controlP5.Label l = t.getCaptionLabel();
+ l.getStyle().marginTop = -17; //move upwards (relative to button size)
+ l.getStyle().marginLeft = 4; //move to the right
map.put(controlName, t);
// println("Added toggle " + controlName);
}
@@ -252,9 +239,9 @@ Map buildAllControls()
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
t.setLabel(getControlLabels().get(controlName));
t.hide();
- controlP5.Label l = t.captionLabel();
- l.style().marginTop = -17; //move upwards (relative to button size)
- l.style().marginLeft = 4; //move to the right
+ controlP5.Label l = t.getCaptionLabel();
+ l.getStyle().marginTop = -17; //move upwards (relative to button size)
+ l.getStyle().marginLeft = 4; //move to the right
map.put(controlName, t);
// println("Added minitoggle " + controlName);
}
@@ -264,9 +251,9 @@ Map buildAllControls()
n.setLabel(getControlLabels().get(controlName));
n.hide();
n.setDecimalPrecision(0);
- controlP5.Label l = n.captionLabel();
- l.style().marginTop = -17; //move upwards (relative to button size)
- l.style().marginLeft = 40; //move to the right
+ controlP5.Label l = n.getCaptionLabel();
+ l.getStyle().marginTop = -17; //move upwards (relative to button size)
+ l.getStyle().marginLeft = 40; //move to the right
// change the control direction to left/right
n.setDirection(Controller.VERTICAL);
map.put(controlName, n);
@@ -500,6 +487,12 @@ Map initialiseNumberboxValues(Map map)
n.setMax(PATH_LENGTH_HIGHPASS_CUTOFF_MAX);
n.setMultiplier(0.5);
}
+ else if (MODE_ADJUST_PREVIEW_CORD_OFFSET.equals(key))
+ {
+ n.setDecimalPrecision(0);
+ n.setValue(0);
+ n.setMultiplier(0.5);
+ }
}
}
return map;
@@ -555,9 +548,6 @@ Map initialiseToggleValues(Map map)
return map;
}
-
-
-
String getControlLabel(String butName)
{
if (controlLabels.containsKey(butName))
@@ -574,10 +564,10 @@ Map buildControlPositionsForPanel(Panel panel)
int row = 0;
for (Controller controller : panel.getControls())
{
- if (controller.name().startsWith("minitoggle_"))
+ if (controller.getName().startsWith("minitoggle_"))
{
PVector p = new PVector(col*(DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x), row*(DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y));
- map.put(controller.name(), p);
+ map.put(controller.getName(), p);
row++;
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
{
@@ -588,7 +578,7 @@ Map buildControlPositionsForPanel(Panel panel)
else
{
PVector p = new PVector(col*(DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x), row*(DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y));
- map.put(controller.name(), p);
+ map.put(controller.getName(), p);
row++;
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
{
@@ -597,9 +587,9 @@ Map buildControlPositionsForPanel(Panel panel)
}
}
}
-
return map;
}
+
Map buildControlSizesForPanel(Panel panel)
{
//println("Building control sizes for panel " + panel.getName());
@@ -609,16 +599,16 @@ Map buildControlSizesForPanel(Panel panel)
int row = 0;
for (Controller controller : panel.getControls())
{
- if (controller.name().startsWith("minitoggle_"))
+ if (controller.getName().startsWith("minitoggle_"))
{
PVector s = new PVector(DEFAULT_CONTROL_SIZE.y, DEFAULT_CONTROL_SIZE.y);
- map.put(controller.name(), s);
+ map.put(controller.getName(), s);
}
else
{
PVector s = new PVector(DEFAULT_CONTROL_SIZE.x, DEFAULT_CONTROL_SIZE.y);
- map.put(controller.name(), s);
- //println("Added size of " + controller.name() + " to panel. " + s);
+ map.put(controller.getName(), s);
+ //println("Added size of " + controller.getName() + " to panel. " + s);
}
}
@@ -688,6 +678,8 @@ List getControlNamesForInputPanel()
controlNames.add(MODE_CHANGE_MIN_VECTOR_LINE_LENGTH);
//controlNames.add(MODE_VECTOR_PATH_LENGTH_HIGHPASS_CUTOFF);
controlNames.add(MODE_RENDER_VECTORS);
+
+ controlNames.add(MODE_ADJUST_PREVIEW_CORD_OFFSET);
controlNames.add(MODE_SHOW_IMAGE);
controlNames.add(MODE_SHOW_VECTOR);
@@ -784,7 +776,7 @@ List getControlNamesForDetailPanel()
controlNames.add(MODE_SEND_BUTTON_ACTIVATE);
controlNames.add(MODE_SEND_BUTTON_DEACTIVATE);
-
+
controlNames.add(MODE_CHANGE_SERIAL_PORT);
return controlNames;
@@ -960,6 +952,8 @@ Map buildControlLabels()
result.put(MODE_SEND_BUTTON_ACTIVATE, "Activate button");
result.put(MODE_SEND_BUTTON_DEACTIVATE, "Deactivate button");
+ result.put(MODE_ADJUST_PREVIEW_CORD_OFFSET, "Cord offset");
+
return result;
}
@@ -1103,6 +1097,7 @@ Set buildControlNames()
result.add(MODE_SEND_BUTTON_ACTIVATE);
result.add(MODE_SEND_BUTTON_DEACTIVATE);
+ result.add(MODE_ADJUST_PREVIEW_CORD_OFFSET);
return result;
}
diff --git a/drawing.pde b/drawing.pde
index 4952b13..7ba69fa 100644
--- a/drawing.pde
+++ b/drawing.pde
@@ -1,31 +1,31 @@
/**
- 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/
- */
+ Polargraph controller
+ Copyright Sandy Noble 2015.
+
+ 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/
+ https://github.com/euphy/polargraphcontroller
+*/
static final String CMD_CHANGELENGTH = "C01,";
static final String CMD_CHANGEPENWIDTH = "C02,";
static final String CMD_CHANGEMOTORSPEED = "C03,";
diff --git a/polargraphcontroller.pde b/polargraphcontroller.pde
index 7688662..1b430fa 100644
--- a/polargraphcontroller.pde
+++ b/polargraphcontroller.pde
@@ -1,6 +1,6 @@
/**
Polargraph controller
- Copyright Sandy Noble 2014.
+ Copyright Sandy Noble 2015.
This file is part of Polargraph Controller.
@@ -24,8 +24,7 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
- http://code.google.com/p/polargraph/
-
+ https://github.com/euphy/polargraphcontroller
*/
//import processing.video.*;
import diewald_CV_kit.libraryinfo.*;
@@ -49,10 +48,14 @@ import processing.serial.*;
import controlP5.*;
import java.awt.event.KeyEvent;
import java.awt.event.*;
+import java.awt.Frame;
+import java.awt.BorderLayout;
-int majorVersionNo = 1;
-int minorVersionNo = 10;
-int buildNo = 2;
+import java.lang.reflect.Method;
+
+int majorVersionNo = 2;
+int minorVersionNo = 0;
+int buildNo = 0;
String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo;
ControlP5 cp5;
@@ -329,6 +332,8 @@ static final String MODE_ROTATE_WEBCAM_INPUT = "toggle_mode_rotateWebcam";
static final String MODE_SEND_BUTTON_ACTIVATE = "button_mode_sendButtonActivate";
static final String MODE_SEND_BUTTON_DEACTIVATE = "button_mode_sendButtonDeactivate";
+static final String MODE_ADJUST_PREVIEW_CORD_OFFSET = "numberbox_mode_previewCordOffsetValue";
+
PVector statusTextPosition = new PVector(300.0, 12.0);
@@ -395,6 +400,8 @@ public color guideColour = color(255);
public color backgroundColour = color(100);
public color densityPreviewColour = color(0);
+public Integer previewCordOffset = 0;
+
public boolean showingSummaryOverlay = true;
public boolean showingDialogBox = false;
@@ -433,7 +440,7 @@ public static final String PANEL_NAME_TRACE = "panel_trace";
public static final String PANEL_NAME_GENERAL = "panel_general";
public final PVector DEFAULT_CONTROL_SIZE = new PVector(100.0, 20.0);
-public final PVector CONTROL_SPACING = new PVector(2.0, 2.0);
+public final PVector CONTROL_SPACING = new PVector(4.0, 4.0);
public PVector mainPanelPosition = new PVector(10.0, 85.0);
public final Integer PANEL_MIN_HEIGHT = 400;
@@ -451,11 +458,13 @@ public Set controlsToLockIfImageNotLoaded = null;
public Map> panelsForTabs = null;
public Map panels = null;
+public Map controlFrames = new HashMap();
+
// machine moving
PVector machineDragOffset = new PVector (0.0, 0.0);
PVector lastMachineDragPosition = new PVector (0.0, 0.0);
-public final float MIN_SCALING = 0.1;
-public final float MAX_SCALING = 15.0;
+public final float MIN_SCALING = 0.01;
+public final float MAX_SCALING = 30.0;
RShape vectorShape = null;
String vectorFilename = null;
@@ -489,8 +498,6 @@ static int pathLengthHighPassCutoff = 0;
static final Integer PATH_LENGTH_HIGHPASS_CUTOFF_MAX = 10000;
static final Integer PATH_LENGTH_HIGHPASS_CUTOFF_MIN = 0;
-//Capture liveCamera;
-//JMyron liveCamera;
BlobDetector blob_detector;
int liveSimplification = 5;
int blurValue = 1;
@@ -505,20 +512,16 @@ String shapeSavePath = "../../savedcaptures/";
String shapeSavePrefix = "shape-";
String shapeSaveExtension = ".svg";
-//boolean displayGamepadOverlay = false;
-//PImage yButtonImage = null;
-//PImage xButtonImage = null;
-//PImage aButtonImage = null;
-//PImage bButtonImage = null;
-//
-//PImage dpadXImage = null;
-//PImage dpadYImage = null;
+String filePath = null;
+
+static PApplet parentPapplet = null;
void setup()
{
println("Running polargraph controller");
frame.setResizable(true);
initLogging();
+ parentPapplet = this;
initImages();
@@ -535,6 +538,7 @@ void setup()
}
loadFromPropertiesFile();
+ size(windowWidth, windowHeight, JAVA2D );
this.cp5 = new ControlP5(this);
initTabs();
@@ -580,7 +584,6 @@ void setup()
currentMode = MODE_BEGIN;
preLoadCommandQueue();
- size(windowWidth, windowHeight, JAVA2D );
changeTab(TAB_NAME_INPUT, TAB_NAME_INPUT);
addEventListeners();
@@ -1224,34 +1227,32 @@ void controlEvent(ControlEvent controlEvent)
{
if (controlEvent.isTab())
{
- if (controlEvent.tab().name() == getCurrentTab())
+ if (controlEvent.tab().getName() == getCurrentTab())
{
// already here.
println("Already here.");
}
else
{
- changeTab(currentTab, controlEvent.tab().name());
+ changeTab(currentTab, controlEvent.tab().getName());
}
}
else if(controlEvent.isGroup())
{
- print("got an event from "+controlEvent.group().name()+"\t");
+ print("got an event from "+controlEvent.group().getName()+"\t");
// checkbox uses arrayValue to store the state of
// individual checkbox-items. usage:
- for (int i=0; i allCommands = new ArrayList(realtimeCommandQueue);
allCommands.addAll(commandQueue);
String[] list = (String[]) allCommands.toArray(new String[0]);
- saveStrings(savePath, list);
+ saveStrings(filePath, list);
println("Completed queue export, " + list.length + " commands exported.");
}
}
}
+
+void fileSelected(File selection) {
+ if (selection == null) {
+ println("Window was closed or the user hit cancel.");
+ filePath = null;
+ } else {
+ println("User selected " + selection.getAbsolutePath());
+ filePath = selection.getAbsolutePath();
+ }
+}
+
+
void importQueueFromFile()
{
commandQueue.clear();
- String loadPath = selectInput();
- if (loadPath == null)
+ selectInput("Select file to import queue from", "fileSelected");
+ if (filePath == null)
{
// nothing selected
println("No input file was selected.");
}
else
{
- println("Input file: " + loadPath);
- String commands[] = loadStrings(loadPath);
+ println("Input file: " + filePath);
+ String commands[] = loadStrings(filePath);
// List list = Arrays
commandQueue.addAll(Arrays.asList(commands));
println("Completed queue import, " + commandQueue.size() + " commands found.");
@@ -1874,17 +1890,17 @@ void importQueueFromFile()
String importTextToWriteFromFile()
{
- String loadPath = selectInput();
+ selectInput("Select the text file to load the text from:", "fileSelected");
String result = "";
- if (loadPath == null)
+ if (filePath == null)
{
// nothing selected
println("No input file was selected.");
}
else
{
- println("Input file: " + loadPath);
- List rows = java.util.Arrays.asList(loadStrings(loadPath));
+ println("Input file: " + filePath);
+ List rows = java.util.Arrays.asList(loadStrings(filePath));
StringBuilder sb = new StringBuilder(200);
for (String row : rows)
{
@@ -3063,10 +3079,12 @@ float getPixelScalingOverGridSize()
{
return pixelScalingOverGridSize;
}
+
void setPixelScalingOverGridSize(float scaling)
{
pixelScalingOverGridSize = scaling;
}
+
int getDensityPreviewStyle()
{
return densityPreviewStyle;
@@ -3076,14 +3094,17 @@ Integer getBaudRate()
{
return baudRate;
}
+
boolean isUseWindowedConsole()
{
return this.useWindowedConsole;
}
+
void setUseWindowedConsole(boolean use)
{
this.useWindowedConsole = use;
}
+
void initLogging()
{
try
@@ -3094,21 +3115,22 @@ void initLogging()
// logger.addHandler(fileHandler);
// logger.setLevel(Level.INFO);
// logger.info("Hello");
- if (isUseWindowedConsole())
- {
- console = new Console();
- }
- else
- {
- console.close();
- console = null;
- }
+// if (isUseWindowedConsole())
+// {
+// console = new Console();
+// }
+// else
+// {
+// console.close();
+// console = null;
+// }
}
catch(Exception e)
{
println("Exception setting up logger: " + e.getMessage());
}
}
+
void initImages()
{
// try
diff --git a/tabSetup.pde b/tabSetup.pde
index 67f6ac6..3d62dec 100644
--- a/tabSetup.pde
+++ b/tabSetup.pde
@@ -1,6 +1,6 @@
/**
Polargraph controller
- Copyright Sandy Noble 2012.
+ Copyright Sandy Noble 2015.
This file is part of Polargraph Controller.
@@ -24,7 +24,7 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
- http://code.google.com/p/polargraph/
+ https://github.com/euphy/polargraphcontroller
*/
Set getPanelsForTab(String tabName)
@@ -83,25 +83,25 @@ List buildTabNames()
void initTabs()
{
- cp5.tab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT);
- cp5.tab(TAB_NAME_INPUT).activateEvent(true);
- cp5.tab(TAB_NAME_INPUT).setId(1);
+ cp5.getTab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT);
+ cp5.getTab(TAB_NAME_INPUT).activateEvent(true);
+ cp5.getTab(TAB_NAME_INPUT).setId(1);
- cp5.tab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS);
- cp5.tab(TAB_NAME_DETAILS).activateEvent(true);
- cp5.tab(TAB_NAME_DETAILS).setId(2);
+ cp5.getTab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS);
+ cp5.getTab(TAB_NAME_DETAILS).activateEvent(true);
+ cp5.getTab(TAB_NAME_DETAILS).setId(2);
- cp5.tab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING);
- cp5.tab(TAB_NAME_ROVING).activateEvent(true);
- cp5.tab(TAB_NAME_ROVING).setId(3);
+ cp5.getTab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING);
+ cp5.getTab(TAB_NAME_ROVING).activateEvent(true);
+ cp5.getTab(TAB_NAME_ROVING).setId(3);
- cp5.tab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE);
- cp5.tab(TAB_NAME_TRACE).activateEvent(true);
- cp5.tab(TAB_NAME_TRACE).setId(4);
+ cp5.getTab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE);
+ cp5.getTab(TAB_NAME_TRACE).activateEvent(true);
+ cp5.getTab(TAB_NAME_TRACE).setId(4);
- cp5.tab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE);
- cp5.tab(TAB_NAME_QUEUE).activateEvent(true);
- cp5.tab(TAB_NAME_QUEUE).setId(5);
+ cp5.getTab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE);
+ cp5.getTab(TAB_NAME_QUEUE).activateEvent(true);
+ cp5.getTab(TAB_NAME_QUEUE).setId(5);
}
public Set buildPanelNames()