This commit is contained in:
Sandy Noble 2015-10-24 15:26:40 +01:00
commit f48d625b49
19 changed files with 1549 additions and 1692 deletions

52
ControlFrame.pde Normal file
View File

@ -0,0 +1,52 @@
// 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 PApplet parent;
private ControlFrame() {
}
public ControlFrame(PApplet 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 PApplet getParent() {
return this.parent;
}
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);
}
}

40
ControlFrameSimple.pde Normal file
View File

@ -0,0 +1,40 @@
// the ControlFrame class extends PApplet, so we
// are creating a new processing applet inside a
// new frame with a controlP5 object loaded
public class ControlFrameSimple extends PApplet {
int w, h;
int bg;
public void setup() {
size(w, h);
frameRate(5);
cp5 = new ControlP5( this );
}
public void draw() {
background( bg );
}
private ControlFrameSimple() {
}
public ControlFrameSimple(Object theParent, int theWidth, int theHeight, int theColor) {
parent = theParent;
w = theWidth;
h = theHeight;
bg = theColor;
}
public ControlP5 cp5() {
return this.cp5;
}
ControlP5 cp5;
Object parent;
}

View File

@ -25,8 +25,8 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
class DisplayMachine extends Machine
{
private Rectangle outline = null;
@ -767,8 +767,6 @@ class DisplayMachine extends Machine
void previewNativePixel(PVector pos, float size, float brightness)
{
float half = size / 2.0;
fill(0,0,0, 255-brightness);
beginShape();
// arcs from the left-hand corner
float distFromPointA = getOutline().getTopLeft().dist(pos);
@ -777,6 +775,10 @@ class DisplayMachine extends Machine
List<PVector> int1 = findIntersections(getOutline().getLeft(), distFromPointA-half, getOutline().getRight(), distFromPointB-half, size);
List<PVector> int2 = findIntersections(getOutline().getLeft(), distFromPointA+half, getOutline().getRight(), distFromPointB-half, size);
if (!int1.isEmpty() && !int2.isEmpty()) {
fill(0,0,0, 255-brightness);
beginShape();
// plot out the vertexes
vertex(int1.get(0).x, int1.get(0).y);
vertex(int2.get(0).x, int2.get(0).y);
@ -785,6 +787,7 @@ class DisplayMachine extends Machine
vertex(int1.get(0).x, int1.get(0).y);
endShape();
}
}
void previewNativeArcPixel(PVector pos, float size, float brightness)
{

138
DrawPixelsWindow.pde Normal file
View File

@ -0,0 +1,138 @@
///*------------------------------------------------------------------------
// Details about the "drawing" subwindow
//------------------------------------------------------------------------*/
public Integer renderStartDirection = DRAW_DIR_SE; // default start drawing in SE direction (DOWN)
public Integer renderStartPosition = DRAW_DIR_NE; // default top right hand corner for start
public Integer renderStyle = PIXEL_STYLE_SQ_FREQ; // default pixel style square wave
ControlFrameSimple addDrawPixelsControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
// set up controls
RadioButton rPos = p.cp5().addRadioButton("radio_startPosition",10,10)
.add("Top-right", DRAW_DIR_NE)
.add("Bottom-right", DRAW_DIR_SE)
.add("Bottom-left", DRAW_DIR_SW)
.add("Top-left", DRAW_DIR_NW)
.plugTo(this, "radio_startPosition");
RadioButton rSkip = p.cp5().addRadioButton("radio_pixelSkipStyle",10,100)
.add("Lift pen over masked pixels", 1)
.add("Draw masked pixels as blanks", 2)
.plugTo(this, "radio_pixelSkipStyle");
RadioButton rStyle = p.cp5().addRadioButton("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.plugTo(this, "radio_pixelStyle");
Button submitButton = p.cp5().addButton("submitDrawWindow",0,280,10,120,20)
.setLabel("Generate commands")
.plugTo(this, "submitDrawWindow");
return p;
}
void radio_startPosition(int pos) {
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;
}
}
class DrawPixelsWindow extends ControlFrame {
public DrawPixelsWindow () {
super(parentPapplet, 450, 150);
int xPos = 100;
int yPos = 100;
String name = DRAW_PIXELS_WINDOW_NAME;
final Frame f = new Frame(DRAW_PIXELS_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();
}
});
}
}

View File

@ -25,7 +25,11 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
/**
*
*
*
*/
class Machine
{

64
MachineExecWindow.pde Normal file
View File

@ -0,0 +1,64 @@
ControlFrameSimple addMachineExecControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
// set up controls
Textfield filenameField = p.cp5().addTextfield("machineExec_execFilename",20,20,150,20)
.setText(getStoreFilename())
.setLabel("Filename to execute from")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
machineExec_execFilename(ev.getController().getStringValue());
Textfield tf = p.cp5().get(Textfield.class, "machineExec_execFilename");
}
});
Button submitButton = p.cp5().addButton("machineExec_submitExecFilenameWindow",0,180,20,60,20)
.setLabel("Submit")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
p.cp5().get(Textfield.class, "machineExec_execFilename").submit();
p.cp5().get(Textfield.class, "machineExec_execFilename").setText(getStoreFilename());
}
});
filenameField.setFocus(true);
return p;
}
void machineExec_execFilename(String filename) {
println("Filename event: "+ filename);
if (filename != null
&& filename.length() <= 12
&& !"".equals(filename.trim())) {
filename = filename.trim();
setStoreFilename(filename);
sendMachineExecMode();
}
}

77
MachineStoreWindow.pde Normal file
View File

@ -0,0 +1,77 @@
/*------------------------------------------------------------------------
Details about the "machine store" subwindow
------------------------------------------------------------------------*/
ControlFrameSimple addMachineStoreControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
// set up controls
Textfield filenameField = p.cp5().addTextfield("machineStore_storeFilename",20,20,150,20)
.setText(getStoreFilename())
.setLabel("Filename to store to")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
machineStore_storeFilename(ev.getController().getStringValue());
Textfield tf = p.cp5().get(Textfield.class, "machineExec_execFilename");
}
});
Button submitButton = p.cp5().addButton("machineStore_submitStoreFilenameWindow",0,180,20,60,20)
.setLabel("Submit")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
p.cp5().get(Textfield.class, "machineStore_storeFilename").submit();
p.cp5().get(Textfield.class, "machineStore_storeFilename").setText(getStoreFilename());
}
});
Toggle overwriteToggle = p.cp5().addToggle("machineStore_toggleAppendToFile",true,180,50,20,20)
.setCaptionLabel("Overwrite existing file")
.plugTo(this, "machineStore_toggleAppendToFile");
filenameField.setFocus(true);
return p;
}
void machineStore_toggleAppendToFile(boolean theFlag) {
setOverwriteExistingStoreFile(theFlag);
}
void machineStore_storeFilename(String filename) {
println("Filename event: "+ filename);
if (filename != null
&& filename.length() <= 12
&& !"".equals(filename.trim())) {
filename = filename.trim();
setStoreFilename(filename);
sendMachineStoreMode();
}
}

393
Misc.pde
View File

@ -25,7 +25,6 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
class Scaler
@ -53,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
//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
// //
// 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<fontNames.length;n++) System.out.println(fontNames[n]);
// // Testing part: simple an error thrown anywhere in this JVM will be printed on the Console
// // We do it with a seperate Thread becasue we don't wan't to break a Thread used by the Console.
// System.out.println("\nLets throw an error on this console");
// errorThrower=new Thread(this);
// errorThrower.setDaemon(true);
// errorThrower.start();
}
public synchronized void windowClosed(WindowEvent evt)
{
quit=true;
this.notifyAll(); // stop all threads
try {
reader.join(1000);
pin.close();
System.setOut(this.cOut);
}
catch (Exception e){
}
try {
reader2.join(1000);
pin2.close();
System.setErr(this.cErr);
}
catch (Exception e){
}
// System.exit(0);
}
public synchronized void windowClosing(WindowEvent evt)
{
frame.setVisible(false); // default behaviour of JFrame
frame.dispose();
}
public synchronized void actionPerformed(ActionEvent evt)
{
textArea.setText("");
}
public synchronized void run()
{
try
{
while (Thread.currentThread()==reader)
{
try {
this.wait(100);
}
catch(InterruptedException ie) {
}
if (pin.available()!=0)
{
String input=this.readLine(pin);
textArea.append(input);
textArea.setCaretPosition(textArea.getDocument().getLength());
}
if (quit) return;
}
while (Thread.currentThread()==reader2)
{
try {
this.wait(100);
}
catch(InterruptedException ie) {
}
if (pin2.available()!=0)
{
String input=this.readLine(pin2);
textArea.append(input);
textArea.setCaretPosition(textArea.getDocument().getLength());
}
if (quit) return;
}
}
catch (Exception e)
{
textArea.append("\nConsole reports an Internal error.");
textArea.append("The error is: "+e);
}
}
public void close()
{
this.windowClosing(null);
}
public synchronized String readLine(PipedInputStream in) throws IOException
{
String input="";
do
{
int available=in.available();
if (available==0) break;
byte b[]=new byte[available];
in.read(b);
input=input+new String(b,0,b.length);
}
while( !input.endsWith("\n") && !input.endsWith("\r\n") && !quit);
return input;
}
}
// 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<fontNames.length;n++) System.out.println(fontNames[n]);
//// // Testing part: simple an error thrown anywhere in this JVM will be printed on the Console
//// // We do it with a seperate Thread becasue we don't wan't to break a Thread used by the Console.
//// System.out.println("\nLets throw an error on this console");
//// errorThrower=new Thread(this);
//// errorThrower.setDaemon(true);
//// errorThrower.start();
// }
//
// public synchronized void windowClosed(WindowEvent evt)
// {
// quit=true;
// this.notifyAll(); // stop all threads
// try {
// reader.join(1000);
// pin.close();
// System.setOut(this.cOut);
// }
// catch (Exception e){
// }
// try {
// reader2.join(1000);
// pin2.close();
// System.setErr(this.cErr);
// }
// catch (Exception e){
// }
//// System.exit(0);
// }
//
// public synchronized void windowClosing(WindowEvent evt)
// {
// frame.setVisible(false); // default behaviour of JFrame
// frame.dispose();
// }
//
// public synchronized void actionPerformed(ActionEvent evt)
// {
// textArea.setText("");
// }
//
// public synchronized void run()
// {
// try
// {
// while (Thread.currentThread()==reader)
// {
// try {
// this.wait(100);
// }
// catch(InterruptedException ie) {
// }
// if (pin.available()!=0)
// {
// String input=this.readLine(pin);
// textArea.append(input);
// textArea.setCaretPosition(textArea.getDocument().getLength());
//
// }
// if (quit) return;
// }
//
// while (Thread.currentThread()==reader2)
// {
// try {
// this.wait(100);
// }
// catch(InterruptedException ie) {
// }
// if (pin2.available()!=0)
// {
// String input=this.readLine(pin2);
// textArea.append(input);
// textArea.setCaretPosition(textArea.getDocument().getLength());
//
// }
// if (quit) return;
// }
// }
// catch (Exception e)
// {
// textArea.append("\nConsole reports an Internal error.");
// textArea.append("The error is: "+e);
// }
// }
//
// public void close()
// {
// this.windowClosing(null);
// }
//
// public synchronized String readLine(PipedInputStream in) throws IOException
// {
// String input="";
// do
// {
// int available=in.available();
// if (available==0) break;
// byte b[]=new byte[available];
// in.read(b);
// input=input+new String(b,0,b.length);
// }
// while( !input.endsWith("\n") && !input.endsWith("\r\n") && !quit);
// return input;
// }
//}

View File

@ -1,6 +1,6 @@
/**
Polargraph controller
Copyright Sandy Noble 2015.
Copyright Sandy Noble 2012.
This file is part of Polargraph Controller.
@ -24,8 +24,7 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
http://code.google.com/p/polargraph/
*/
class Panel
{
@ -132,13 +131,13 @@ class Panel
{
for (Controller c : this.getControls())
{
//println("Control: " + c.name());
PVector pos = getControlPositions().get(c.name());
// println("Control: " + c.getName());
PVector pos = getControlPositions().get(c.getName());
float x = pos.x+getOutline().getLeft();
float y = pos.y+getOutline().getTop();
c.setPosition(x, y);
PVector cSize = getControlSizes().get(c.name());
PVector cSize = getControlSizes().get(c.getName());
c.setSize((int)cSize.x, (int)cSize.y);
boolean locked = false;
@ -147,32 +146,32 @@ class Panel
// any drawing / extracting controls are disabled if there is no selec
// box specified.
if (getControlsToLockIfBoxNotSpecified().contains(c.name()) && !isBoxSpecified())
if (getControlsToLockIfBoxNotSpecified().contains(c.getName()) && !isBoxSpecified())
{
locked = true;
}
// if there is no vector shape loaded then lock the "draw vector"
// control.
if (c.name().equals(MODE_RENDER_VECTORS) && getVectorShape() == null)
if (c.getName().equals(MODE_RENDER_VECTORS) && getVectorShape() == null)
{
locked = true;
}
// if there's no image loaded, then hide resizing/moving
if (getControlsToLockIfImageNotLoaded().contains(c.name()) && getDisplayMachine().getImage() == null)
if (getControlsToLockIfImageNotLoaded().contains(c.getName()) && getDisplayMachine().getImage() == null)
{
locked = true;
}
if (c.name().equals(MODE_LOAD_VECTOR_FILE))
if (c.getName().equals(MODE_LOAD_VECTOR_FILE))
{
if (getVectorShape() != null)
c.setLabel("Clear vector");
else
c.setLabel("Load vector");
}
else if (c.name().equals(MODE_LOAD_IMAGE))
else if (c.getName().equals(MODE_LOAD_IMAGE))
{
if (getDisplayMachine().getImage() != null)
c.setLabel("Clear image");
@ -232,6 +231,4 @@ class Panel
this.getOutline().setWidth(right);
}
}
}

View File

@ -2,17 +2,14 @@ polargraphcontroller
====================
Polargraph controller
Copyright Sandy Noble 2014.
Copyright Sandy Noble 2015.
- Requires v0.5.4 of the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/
- (http://code.google.com/p/controlp5/downloads/detail?name=controlP5_0.5.4.zip&can=2&q=).
- Requires the excellent ControlP5 GUI library available from https://github.com/sojamo/controlp5.
- Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/.
- Currently only runs on Processing v1.5
- Running on Processing v2.2.1.
This is a desktop application for controlling a polargraph machine, communicating using ASCII command language over a serial link.
Very sorry that this doesn't work with newest versions of the libraries and Processing.
The [latest releases bundle] (https://github.com/euphy/polargraphcontroller/releases/latest) contains
copies of all the libraries that I use, as well as all the source, and compiled versions of the code where sensible.

View File

@ -25,7 +25,6 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
class Rectangle
{
@ -123,4 +122,8 @@ class Rectangle
return false;
}
public String toString() {
return new StringBuffer().append("Rectangle pos: ").append(this.getPosition()).append(", size: ").append(this.getSize()).append(".").toString();
}
}

112
SerialPortWindow.pde Normal file
View File

@ -0,0 +1,112 @@
/*------------------------------------------------------------------------
Class and controllers on the "serial port" subwindow
------------------------------------------------------------------------*/
ControlFrameSimple addSerialPortControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
// set up controls
RadioButton r = p.cp5().addRadioButton("radio_serialPort")
.setPosition(10, 10)
.setSize(15, 15)
.setSpacingRow(5)
.plugTo(this, "radio_serialPort");
r.addItem("No serial connection", -1);
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");
return p;
}
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;
}
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];
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.");
}
}

View File

@ -25,7 +25,6 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
void button_mode_begin()
{
@ -723,7 +722,7 @@ void button_mode_sendButtonDeactivate()
void numberbox_mode_previewCordOffsetValue(int value)
{
previewCordOffset = value;
lastCommandQueueHash = 0;
previewQueue(true);
}

View File

@ -25,545 +25,388 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
/*------------------------------------------------------------------------
Details about the "serial port" subwindow
------------------------------------------------------------------------*/
void button_mode_serialPortDialog()
{
ControlWindow serialPortWindow = cp5.addControlWindow("changeSerialPortWindow",100,100,150,350);
serialPortWindow.hideCoordinates();
serialPortWindow.setBackground(getBackgroundColour());
Radio r = cp5.addRadio("radio_serialPort",10,10);
r.setWindow(serialPortWindow);
String[] ports = Serial.list();
if (getSerialPortNumber() >= 0 && getSerialPortNumber() < ports.length)
r.setValue(getSerialPortNumber());
r.add("setup", -2);
r.add("No serial connection", -1);
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");
}
void radio_serialPort(int newSerialPort)
{
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;
}
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];
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.");
}
}
/*------------------------------------------------------------------------
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()
{
void button_mode_sendMachineLiveMode() {
sendMachineLiveMode();
}
String CHANGE_SERIAL_PORT_WINDOW_NAME = "changeSerialPortWindow";
String MACHINE_STORE_WINDOW_NAME = "chooseStoreFilenameWindow";
String MACHINE_EXEC_WINDOW_NAME = "chooseExecFilenameWindow";
String DRAW_PIXELS_WINDOW_NAME = "drawPixelsWindow";
String DRAW_WRITING_WINDOW_NAME = "drawWritingWindow";
/*------------------------------------------------------------------------
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);
void button_mode_serialPortDialog() {
ControlFrameSimple cf = addSerialPortControlFrame("Serial Port", 200, 200, 20, 240, color( 100 ) );
}
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;
void button_mode_machineStoreDialog() {
ControlFrameSimple cf = addMachineStoreControlFrame("Machine Store", 450, 250, 20, 240, color( 100 ) );
}
void button_mode_machineExecDialog() {
ControlFrameSimple cf = addMachineExecControlFrame("Machine Execute", 450, 250, 20, 240, color( 100 ) );
}
/*------------------------------------------------------------------------
Details about the "writing" subwindow
------------------------------------------------------------------------*/
String textToWrite = "";
String spriteFilePrefix = "sprite/let";
String spriteFileSuffix = ".txt";
void button_mode_drawPixelsDialog() {
ControlFrameSimple cf = addDrawPixelsControlFrame("Render pixels", 450, 250, 20, 240, color( 100 ) );
}
void button_mode_drawWritingDialog()
{
this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200);
dialogWindow.hideCoordinates();
void button_mode_drawWritingDialog() {
ControlFrameSimple cf = addSpriteWritingControlFrame("Sprite Writing", 450, 250, 20, 240, color( 100 ) );
}
dialogWindow.setBackground(getBackgroundColour());
void button_mode_RandomSpriteDialog() {
ControlFrameSimple cf = addRandomSpriteControlFrame("Random Sprite", 450, 250, 20, 240, color( 100 ) );
}
Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20);
spriteFileField.setText(getSpriteFilePrefix());
spriteFileField.setLabel("File prefix");
spriteFileField.setWindow(dialogWindow);
void button_mode_drawNorwegianDialog() {
ControlFrameSimple cf = addNorwegianPixelControlFrame("Norwegian Pixel", 450, 250, 20, 240, color( 100 ) );
}
Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20);
writingField.setText(getTextToWrite());
writingField.setLabel("Text to write");
writingField.setWindow(dialogWindow);
///*------------------------------------------------------------------------
// Details about the "writing" subwindow
//------------------------------------------------------------------------*/
Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20);
importTextButton.setLabel("Load text from file");
importTextButton.setWindow(dialogWindow);
String spriteWriting_textToWrite = "";
String spriteWriting_spriteFilePrefix = "sprite/let";
String spriteWriting_spriteFileSuffix = ".txt";
Radio rPos = cp5.addRadio("radio_drawWritingDirection",20,140);
// rPos.add("North-east", DRAW_DIR_NE);
ControlFrameSimple addSpriteWritingControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
cp5s.remove(DRAW_WRITING_WINDOW_NAME);
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
cp5s.put(DRAW_WRITING_WINDOW_NAME, p.cp5());
println(cp5s);
// set up controls
Textfield spriteFileField = p.cp5().addTextfield("spriteWriting_spriteFilePrefixField", 20, 20, 150, 20)
.setText(spriteWriting_getSpriteFilePrefix())
.setLabel("File prefix")
.plugTo(this, "spriteWriting_spriteFilePrefixField");
Textfield writingField = p.cp5().addTextfield("spriteWriting_textToWriteField", 20, 60, 400, 20)
.setText(spriteWriting_getTextToWrite())
.setLabel("Text to write")
.plugTo(this, "spriteWriting_textToWriteField");
Button importTextButton = p.cp5().addButton("spriteWriting_importTextButton", 0, 20, 100, 120, 20)
.setLabel("Load text from file")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
spriteWriting_importTextButton();
}
});
RadioButton rPos = p.cp5().addRadioButton("spriteWriting_radio_drawWritingDirection", 20, 140);
rPos.add("South-east", DRAW_DIR_SE);
// rPos.add("South-west", DRAW_DIR_SW);
// rPos.add("North-west", DRAW_DIR_NW);
rPos.setWindow(dialogWindow);
rPos.activate("South-east");
rPos.plugTo(this, "spriteWriting_radio_drawWritingDirection");
Button submitButton = p.cp5.addButton("spriteWriting_submitWritingWindow", 0, 300, 100, 120, 20)
.setLabel("Generate commands")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
spriteWriting_submitWritingWindow(p.cp5());
}
});
Button submitButton = cp5.addButton("submitWritingWindow",0,300,100,120,20);
submitButton.setLabel("Generate commands");
submitButton.setWindow(dialogWindow);
return p;
}
void spriteFilePrefixField(String value)
{
spriteFilePrefix = value;
void spriteWriting_spriteFilePrefixField(String value) {
spriteWriting_spriteFilePrefix = value;
}
void textToWriteField(String value)
{
textToWrite = value;
void spriteWriting_textToWriteField(String value) {
spriteWriting_textToWrite = value;
}
String spriteWriting_getTextToWrite() {
return spriteWriting_textToWrite;
}
String spriteWriting_getSpriteFilePrefix() {
return spriteWriting_spriteFilePrefix;
}
String spriteWriting_getSpriteFileSuffix() {
return spriteWriting_spriteFileSuffix;
}
String getTextToWrite()
{
return textToWrite;
}
String getSpriteFilePrefix()
{
return spriteFilePrefix;
}
String getSpriteFileSuffix()
{
return spriteFileSuffix;
void spriteWriting_importTextButton() {
println("Text being imported!");
selectInput("Select the text file to load the text from:",
"spriteWriting_importTextToWriteFromFile");
}
void importTextButton()
{
textToWrite = importTextToWriteFromFile();
Textfield tf = (Textfield) cp5.controller("textToWriteField");
tf.setText(getTextToWrite());
public void spriteWriting_importTextToWriteFromFile(File selection) {
if (selection != null) {
String fp = selection.getAbsolutePath();
println("Input file: " + fp);
List<String> rows = java.util.Arrays.asList(loadStrings(fp));
StringBuilder sb = new StringBuilder(200);
for (String row : rows) {
sb.append(row);
}
spriteWriting_textToWriteField(sb.toString());
println("Completed text import, " + spriteWriting_getTextToWrite().length() + " characters found.");
println("Text: " + spriteWriting_getTextToWrite());
println(cp5s);
Textfield tf = cp5s.get(DRAW_WRITING_WINDOW_NAME).get(Textfield.class, "spriteWriting_textToWriteField");
if (spriteWriting_getTextToWrite() != null
&& !"".equals(spriteWriting_getTextToWrite().trim())) {
tf.setText(spriteWriting_getTextToWrite());
tf.submit();
tf.setText(spriteWriting_getTextToWrite());
}
}
}
void submitWritingWindow(int theValue)
void spriteWriting_submitWritingWindow(ControlP5 parent)
{
println("Write.");
Textfield tf = (Textfield) cp5.controller("spriteFilePrefixField");
Textfield tf = parent.get(Textfield.class, "spriteWriting_spriteFilePrefixField");
tf.submit();
tf.setText(getSpriteFilePrefix());
tf = (Textfield) cp5.controller("textToWriteField");
tf.submit();
tf.setText(getTextToWrite());
tf.setText(spriteWriting_getSpriteFilePrefix());
Textfield wf = parent.get(Textfield.class, "spriteWriting_textToWriteField");
wf.submit();
wf.setText(spriteWriting_getTextToWrite());
println("Start dir: " + renderStartDirection);
println("Sprite file prefix: " + spriteFilePrefix);
println("Text: " + textToWrite);
println("Sprite file prefix: " + spriteWriting_spriteFilePrefix);
println("Text: " + spriteWriting_textToWrite);
for (int i=0; i<getTextToWrite().length(); i++)
{
String filename = getSpriteFilePrefix() + (int) getTextToWrite().charAt(i) + getSpriteFileSuffix();
for (int i=0; i<spriteWriting_getTextToWrite ().length(); i++) {
String filename = spriteWriting_getSpriteFilePrefix() + (int) spriteWriting_getTextToWrite().charAt(i) + spriteWriting_getSpriteFileSuffix();
addToCommandQueue(CMD_DRAW_SPRITE + int(gridSize * pixelScalingOverGridSize) + "," + filename+",END");
println(filename);
}
}
/*------------------------------------------------------------------------
Details about the "sprite" subwindow
------------------------------------------------------------------------*/
String spriteFilename;
int minSpriteSize = 100;
int maxSpriteSize = 500;
///*------------------------------------------------------------------------
// Details about the "sprite" subwindow
//------------------------------------------------------------------------*/
String sprite_spriteFilename;
int sprite_minSpriteSize = 100;
int sprite_maxSpriteSize = 500;
void button_mode_drawSpriteDialog()
ControlFrameSimple addRandomSpriteControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
// set up controls
Textfield spriteFilenameField = p.cp5().addTextfield("sprite_spriteFilenameField",20,20,400,20)
.setText("filename.txt")
.setLabel("Sprite filename")
.plugTo(this, "sprite_spriteFilenameField");
Numberbox minSizeField = p.cp5().addNumberbox("sprite_minimumSpriteSize",20,60,100,20)
.setValue(sprite_getMinimumSpriteSize())
.setMin(10)
.setMax(sprite_getMaximumSpriteSize())
.setMultiplier(0.5)
.setLabel("Minimum size")
.plugTo(this, "sprite_minimumSpriteSize");
Numberbox maxSizeField = p.cp5().addNumberbox("sprite_maximumSpriteSize",20,100,100,20)
.setValue(sprite_getMaximumSpriteSize())
.setMin(sprite_getMinimumSpriteSize())
.setMultiplier(0.5)
.setLabel("Maximum size")
.plugTo(this, "sprite_maximumSpriteSize");
Button submitButton = p.cp5().addButton("sprite_submitSpriteWindow",0,300,100,120,20)
.setLabel("Draw sprite")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
spriteWriting_submitWritingWindow(p.cp5());
}
});
spriteFilenameField.setFocus(true);
return p;
}
String sprite_getSpriteFilename()
{
this.dialogWindow = cp5.addControlWindow("drawSpriteWindow",100,100,450,200);
dialogWindow.hideCoordinates();
dialogWindow.setBackground(getBackgroundColour());
delay(200);
Textfield spriteFilenameField = cp5.addTextfield("spriteFilenameField",20,20,400,20);
spriteFilenameField.setText("filename.txt");
spriteFilenameField.setLabel("Sprite filename");
spriteFilenameField.setWindow(dialogWindow);
Numberbox minSizeField = cp5.addNumberbox("minimumSpriteSize",20,60,100,20);
minSizeField.setValue(getMinimumSpriteSize());
minSizeField.setMin(10);
minSizeField.setMax(getMaximumSpriteSize());
minSizeField.setMultiplier(0.5);
minSizeField.setLabel("Minimum size");
minSizeField.setWindow(dialogWindow);
Numberbox maxSizeField = cp5.addNumberbox("maximumSpriteSize",20,100,100,20);
maxSizeField.setValue(getMaximumSpriteSize());
maxSizeField.setMin(getMinimumSpriteSize());
maxSizeField.setMultiplier(0.5);
maxSizeField.setLabel("Maximum size");
maxSizeField.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("submitSpriteWindow",0,300,100,120,20);
submitButton.setLabel("Draw sprite");
submitButton.setWindow(dialogWindow);
return sprite_spriteFilename;
}
void radio_drawWritingDirection(int dir)
int sprite_getMinimumSpriteSize()
{
renderStartDirection = dir;
return sprite_minSpriteSize;
}
int sprite_getMaximumSpriteSize()
{
return sprite_maxSpriteSize;
}
String getSpriteFilename()
{
return spriteFilename;
}
int getMinimumSpriteSize()
{
return minSpriteSize;
}
int getMaximumSpriteSize()
{
return maxSpriteSize;
}
void submitSpriteWindow(int theValue)
void sprite_submitSpriteWindow(Textfield tf)
{
println("Sprite.");
Textfield tf = (Textfield) cp5.controller("spriteFilenameField");
tf.submit();
tf.setText(getSpriteFilename());
tf.setText(sprite_getSpriteFilename());
println("Start dir: " + renderStartDirection);
println("Filename: " + spriteFilename);
println("Filename: " + sprite_getSpriteFilename());
addToCommandQueue(CMD_DRAW_SPRITE + "," + spriteFilename + ","
+ getMinimumSpriteSize() + "," + getMaximumSpriteSize() + "," + renderStartDirection + ",END");
addToCommandQueue(CMD_DRAW_SPRITE + "," + sprite_getSpriteFilename() + ","
+ sprite_getMinimumSpriteSize() + "," + sprite_getMaximumSpriteSize() + "," + DRAW_DIR_NE + ",END");
}
/*------------------------------------------------------------------------
Details about the "norwegian draw" subwindow
------------------------------------------------------------------------*/
String norwegianExecFilename = "filename.pbm";
int norwegianAmplitude = 20;
int norwegianWavelength = 2;
///*------------------------------------------------------------------------
// Details about the "norwegian draw" subwindow
//------------------------------------------------------------------------*/
String norwegian_execFilename = "filename.pbm";
int norwegian_amplitude = 20;
int norwegian_wavelength = 2;
void button_mode_drawNorwegianDialog()
{
this.dialogWindow = cp5.addControlWindow("chooseNorwegianFilenameWindow",100,100,450,150);
dialogWindow.hideCoordinates();
ControlFrameSimple addNorwegianPixelControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
dialogWindow.setBackground(getBackgroundColour());
f.add( p );
p.init();
f.setTitle(theName);
f.setSize( p.w, p.h );
f.setLocation( theX, theY );
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
p.dispose();
f.dispose();
}
}
);
f.setResizable( true );
f.setVisible( true );
// sleep a little bit to allow p to call setup.
// otherwise a nullpointerexception might be caused.
try {
Thread.sleep( 100 );
}
catch(Exception e) {
}
Textfield filenameField = cp5.addTextfield("norwegianExecFilename",20,20,150,20);
filenameField.setText(norwegianExecFilename);
filenameField.setLabel("Filename to execute from");
filenameField.setWindow(dialogWindow);
// set up controls
Textfield filenameField = p.cp5().addTextfield("norwegian_execFilename",20,20,150,20)
.setText(norwegian_execFilename)
.setLabel("Filename to execute from")
.plugTo(this, "norwegian_execFilename");
Numberbox minSizeField = cp5.addNumberbox("norwegianAmplitude",20,60,100,20);
minSizeField.setValue(norwegianAmplitude);
minSizeField.setMin(10);
minSizeField.setMultiplier(0.5);
minSizeField.setLabel("Amplitude");
minSizeField.setWindow(dialogWindow);
Numberbox minSizeField = p.cp5().addNumberbox("norwegian_amplitude",20,60,100,20)
.setValue(norwegian_amplitude)
.setMin(10)
.setMultiplier(0.5)
.setLabel("Amplitude")
.plugTo(this, "norwegian_amplitude");
Numberbox maxSizeField = cp5.addNumberbox("norwegianWavelength",20,100,100,20);
maxSizeField.setValue(norwegianWavelength);
maxSizeField.setMin(1);
maxSizeField.setMultiplier(0.5);
maxSizeField.setLabel("Wavelength");
maxSizeField.setWindow(dialogWindow);
Numberbox maxSizeField = p.cp5().addNumberbox("norwegian_wavelength",20,100,100,20)
.setValue(norwegian_wavelength)
.setMin(1)
.setMultiplier(0.5)
.setLabel("Wavelength")
.plugTo(this, "norwegian_wavelength");
Button outlineButton = cp5.addButton("submitNorwegianExecTraceOutline",0,180,20,80,20);
outlineButton.setLabel("Trace outline");
outlineButton.setWindow(dialogWindow);
Button outlineButton = p.cp5().addButton("norwegian_submitNorwegianExecTraceOutline",0,180,20,80,20)
.setLabel("Trace outline")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
norwegian_submitNorwegianExec(p.cp5().get(Textfield.class, "norwegian_execFilename"), true);
}
});
Button submitButton = cp5.addButton("submitNorwegianExecFilenameWindow",0,180,100,80,20);
submitButton.setLabel("Submit");
submitButton.setWindow(dialogWindow);
Button submitButton = p.cp5().addButton("norwegian_submitNorwegianExecFilenameWindow",0,180,100,80,20)
.setLabel("Submit")
.addListener( new ControlListener() {
public void controlEvent( ControlEvent ev ) {
norwegian_submitNorwegianExec(p.cp5().get(Textfield.class, "norwegian_execFilename"), false);
}
});
filenameField.setFocus(true);
return p;
}
void submitNorwegianExecTraceOutline(int theValue)
void norwegian_submitNorwegianExec(Textfield tf, boolean outline)
{
Textfield tf = (Textfield) cp5.controller("norwegianExecFilename");
tf.submit();
tf.setText(norwegianExecFilename);
tf.setText(norwegian_execFilename);
println("Filename:" + norwegianExecFilename);
println("Filename:" + norwegian_execFilename);
addToCommandQueue(CMD_DRAW_NORWEGIAN_OUTLINE + norwegianExecFilename + ",END");
if (outline) {
addToCommandQueue(CMD_DRAW_NORWEGIAN_OUTLINE + norwegian_execFilename + ",END");
}
else {
println("Filename:" + norwegian_execFilename);
println("Amplitude:" + norwegian_amplitude);
println("Wavelength:" + norwegian_wavelength);
void submitNorwegianExecFilenameWindow(int theValue)
{
Textfield tf = (Textfield) cp5.controller("norwegianExecFilename");
tf.submit();
tf.setText(norwegianExecFilename);
println("Filename:" + norwegianExecFilename);
println("Amplitude:" + norwegianAmplitude);
println("Wavelength:" + norwegianWavelength);
addToCommandQueue(CMD_DRAW_NORWEGIAN + norwegianExecFilename + ","+norwegianAmplitude+","+norwegianWavelength+",END");
addToCommandQueue(CMD_DRAW_NORWEGIAN + norwegian_execFilename + ","+norwegian_amplitude+","+norwegian_wavelength+",END");
}
}

View File

@ -25,60 +25,49 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
Set<String> getPanelNames()
{
Set<String> getPanelNames() {
if (this.panelNames == null)
this.panelNames = buildPanelNames();
return this.panelNames;
}
List<String> getTabNames()
{
List<String> getTabNames() {
if (this.tabNames == null)
this.tabNames = buildTabNames();
return this.tabNames;
}
Set<String> getControlNames()
{
Set<String> getControlNames() {
if (this.controlNames == null)
this.controlNames = buildControlNames();
return this.controlNames;
}
Map<String, List<Controller>> getControlsForPanels()
{
Map<String, List<Controller>> getControlsForPanels() {
if (this.controlsForPanels == null)
this.controlsForPanels = buildControlsForPanels();
return this.controlsForPanels;
}
Map<String, Controller> getAllControls()
{
Map<String, Controller> getAllControls() {
if (this.allControls == null)
this.allControls = buildAllControls();
return this.allControls;
}
Map<String, String> getControlLabels()
{
Map<String, String> getControlLabels() {
if (this.controlLabels == null)
this.controlLabels = buildControlLabels();
return this.controlLabels;
}
Map<String, Set<Panel>> getPanelsForTabs()
{
Map<String, Set<Panel>> getPanelsForTabs() {
if (this.panelsForTabs == null)
this.panelsForTabs = buildPanelsForTabs();
return this.panelsForTabs;
}
Map<String, Panel> getPanels()
{
Map<String, Panel> getPanels() {
if (this.panels == null)
this.panels = buildPanels();
return this.panels;
}
Set<String> getControlsToLockIfBoxNotSpecified()
{
Set<String> getControlsToLockIfBoxNotSpecified() {
if (this.controlsToLockIfBoxNotSpecified == null)
{
this.controlsToLockIfBoxNotSpecified = buildControlsToLockIfBoxNotSpecified();
@ -86,8 +75,7 @@ Set<String> getControlsToLockIfBoxNotSpecified()
return this.controlsToLockIfBoxNotSpecified;
}
Set<String> getControlsToLockIfImageNotLoaded()
{
Set<String> getControlsToLockIfImageNotLoaded() {
if (this.controlsToLockIfImageNotLoaded == null)
{
this.controlsToLockIfImageNotLoaded = buildControlsToLockIfImageNotLoaded();
@ -95,9 +83,7 @@ Set<String> getControlsToLockIfImageNotLoaded()
return this.controlsToLockIfImageNotLoaded;
}
void hideAllControls()
{
void hideAllControls() {
for (String key : allControls.keySet())
{
Controller c = allControls.get(key);
@ -105,8 +91,7 @@ void hideAllControls()
}
}
Map<String, Panel> buildPanels()
{
Map<String, Panel> buildPanels() {
Map<String, Panel> panels = new HashMap<String, Panel>();
float panelHeight = frame.getHeight() - getMainPanelPosition().y - (DEFAULT_CONTROL_SIZE.y*3);
@ -123,7 +108,7 @@ Map<String, Panel> 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));
@ -133,7 +118,7 @@ Map<String, Panel> 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));
@ -143,7 +128,7 @@ Map<String, Panel> 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));
@ -153,7 +138,7 @@ Map<String, Panel> 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));
@ -167,7 +152,7 @@ Map<String, Panel> 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
@ -243,9 +228,9 @@ Map<String, Controller> 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);
}
@ -254,9 +239,9 @@ Map<String, Controller> 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);
}
@ -266,9 +251,9 @@ Map<String, Controller> 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);
@ -504,7 +489,7 @@ Map<String, Controller> initialiseNumberboxValues(Map<String, Controller> map)
}
else if (MODE_ADJUST_PREVIEW_CORD_OFFSET.equals(key))
{
n.setDecimalPrecision(1);
n.setDecimalPrecision(0);
n.setValue(0);
n.setMultiplier(0.5);
}
@ -563,9 +548,6 @@ Map<String, Controller> initialiseToggleValues(Map<String, Controller> map)
return map;
}
String getControlLabel(String butName)
{
if (controlLabels.containsKey(butName))
@ -582,10 +564,10 @@ Map<String, PVector> 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())
{
@ -596,7 +578,7 @@ Map<String, PVector> 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())
{
@ -605,9 +587,9 @@ Map<String, PVector> buildControlPositionsForPanel(Panel panel)
}
}
}
return map;
}
Map<String, PVector> buildControlSizesForPanel(Panel panel)
{
//println("Building control sizes for panel " + panel.getName());
@ -617,16 +599,16 @@ Map<String, PVector> 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);
}
}
@ -970,7 +952,7 @@ Map<String, String> buildControlLabels()
result.put(MODE_SEND_BUTTON_ACTIVATE, "Activate button");
result.put(MODE_SEND_BUTTON_DEACTIVATE, "Deactivate button");
result.put(MODE_ADJUST_PREVIEW_CORD_OFFSET, "Preview cord offset");
result.put(MODE_ADJUST_PREVIEW_CORD_OFFSET, "Cord offset");
return result;
@ -1090,13 +1072,13 @@ Set<String> buildControlNames()
result.add(MODE_SELECT_ROVE_IMAGE_SOURCE);
result.add(MODE_SEND_START_TEXT);
result.add(MODE_SHOW_WRITING_DIALOG);
result.add(MODE_START_SWIRLING);
result.add(MODE_STOP_SWIRLING);
result.add(MODE_START_MARKING);
result.add(MODE_STOP_MARKING);
result.add(MODE_START_SPRITE);
result.add(MODE_START_RANDOM_SPRITES);
result.add(MODE_STOP_RANDOM_SPRITES);
// result.add(MODE_START_SWIRLING);
// result.add(MODE_STOP_SWIRLING);
// result.add(MODE_START_MARKING);
// result.add(MODE_STOP_MARKING);
// result.add(MODE_START_SPRITE);
// result.add(MODE_START_RANDOM_SPRITES);
// result.add(MODE_STOP_RANDOM_SPRITES);
result.add(MODE_DRAW_NORWEGIAN_DIALOG);
result.add(MODE_LIVE_BLUR_VALUE);

View File

@ -25,7 +25,6 @@
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,";
@ -945,7 +944,7 @@ void sendMachineStoreMode()
}
void sendMachineLiveMode()
{
addToRealtimeCommandQueue(CMD_MACHINE_MODE_LIVE+"END");
addToCommandQueue(CMD_MACHINE_MODE_LIVE+"END");
}
void sendMachineExecMode()
{

View File

@ -1,234 +0,0 @@
//ControllIO controllIO;
//ControllDevice joypad;
//
//ControllButton buttonA;
//ControllButton buttonB;
//ControllButton buttonX;
//ControllButton buttonY;
//ControllButton buttonL;
//ControllButton buttonR;
//ControllButton buttonStart;
//
//ControllCoolieHat dpad;
//
//List<String> devices = new ArrayList<String>(
// Arrays.asList("Controller (Xbox 360 Wireless Receiver for Windows)",
// "Controller (XBOX 360 For Windows)"));
//
//String signalFromGamepad = null;
//
//static final String BUTTON_A_RELEASED = "ButtonAReleased";
//static final String BUTTON_B_RELEASED = "ButtonBReleased";
//static final String BUTTON_L_RELEASED = "ButtonLReleased";
//static final String BUTTON_R_RELEASED = "ButtonRReleased";
//static final String BUTTON_START_RELEASED = "ButtonStartReleased";
//
//void gamepad_init()
//{
// controllIO = ControllIO.getInstance(this);
//
// try
// {
// controllIO.printDevices();
// for (int i = 0; i<devices.size(); i++)
// {
// try
// {
// println("trying " + i + ": " + devices.get(i));
// joypad = controllIO.getDevice(devices.get(i));
// break;
// }
// catch (RuntimeException e)
// {
// println("Requested device (" + devices.get(i) + ") not found.");
// joypad = null;
// }
// }
//
// if (joypad != null)
// {
// joypad.printButtons();
//
// buttonA = joypad.getButton("Button 0");
// buttonB = joypad.getButton("Button 1");
// buttonX = joypad.getButton("Button 2");
// buttonY = joypad.getButton("Button 3");
//
// buttonL = joypad.getButton("Button 4");
// buttonR = joypad.getButton("Button 5");
//
// buttonStart = joypad.getButton("Button 7");
//
// buttonA.plug(this, "buttonARelease", ControllIO.ON_RELEASE);
// buttonB.plug(this, "buttonBRelease", ControllIO.ON_RELEASE);
// buttonX.plug(this, "buttonXPress", ControllIO.ON_PRESS);
// buttonX.plug(this, "buttonXRelease", ControllIO.ON_RELEASE);
// buttonY.plug(this, "buttonYRelease", ControllIO.ON_RELEASE);
//
// buttonL.plug(this, "buttonLRelease", ControllIO.ON_RELEASE);
// buttonR.plug(this, "buttonRRelease", ControllIO.ON_RELEASE);
//
// buttonStart.plug(this, "buttonStartRelease", ControllIO.ON_RELEASE);
//
// dpad = joypad.getCoolieHat(10);
// dpad.setMultiplier(4);
// dpad.plug(this, "dpadPress", ControllIO.ON_PRESS);
// }
// }
// catch (RuntimeException e)
// {
// println("Exception occurred while initialising gamepad: " + e.getMessage());
// }
//}
//
//public void buttonARelease()
//{
// signalFromGamepad = BUTTON_A_RELEASED;
//}
//public void buttonBRelease()
//{
// signalFromGamepad = BUTTON_B_RELEASED;
//}
//public void buttonLRelease()
//{
// signalFromGamepad = BUTTON_L_RELEASED;
//}
//public void buttonRRelease()
//{
// signalFromGamepad = BUTTON_R_RELEASED;
//}
//public void buttonStartRelease()
//{
// signalFromGamepad = BUTTON_START_RELEASED;
//}
//
//void buttonXPress()
//{
// drawingLiveVideo = true;
//}
//void buttonXRelease()
//{
// drawingLiveVideo = false;
//}
//void buttonYRelease()
//{
// flipWebcamImage = !flipWebcamImage;
//}
//
//void dpadPress(float x, float y)
//{
// float val = dpad.getValue();
// if (val == 6.0)
// {
// liveSimplification--;
// if (liveSimplification < LIVE_SIMPLIFICATION_MIN)
// liveSimplification = LIVE_SIMPLIFICATION_MIN;
// }
// else if (val == 2.0)
// {
// liveSimplification++;
// if (liveSimplification > LIVE_SIMPLIFICATION_MAX)
// liveSimplification = LIVE_SIMPLIFICATION_MAX;
// }
// if (val == 8.0) // left
// {
// pathLengthHighPassCutoff--;
// if (pathLengthHighPassCutoff < PATH_LENGTH_HIGHPASS_CUTOFF_MIN)
// pathLengthHighPassCutoff = PATH_LENGTH_HIGHPASS_CUTOFF_MIN;
// }
// else if (val == 4.0) // right
// {
// pathLengthHighPassCutoff++;
// if (pathLengthHighPassCutoff > PATH_LENGTH_HIGHPASS_CUTOFF_MAX)
// pathLengthHighPassCutoff = PATH_LENGTH_HIGHPASS_CUTOFF_MAX;
// }
//
// Numberbox n = (Numberbox) getAllControls().get(MODE_LIVE_SIMPLIFICATION_VALUE);
// n.setValue(liveSimplification);
// n.update();
//
// n = (Numberbox) getAllControls().get(MODE_VECTOR_PATH_LENGTH_HIGHPASS_CUTOFF);
// n.setValue(pathLengthHighPassCutoff);
// n.update();
//
//}
//
//void processGamepadInput()
//{
// if (signalFromGamepad != null)
// {
// println("Signal from gamepad: " + signalFromGamepad);
// if (signalFromGamepad == BUTTON_A_RELEASED)
// {
// if (captureShape == null && !confirmedDraw)
// button_mode_liveCaptureFromLive();
// else if (captureShape != null && !confirmedDraw)
// button_mode_liveClearCapture();
// else if (captureShape != null && confirmedDraw)
// {
// button_mode_liveClearCapture();
// button_mode_clearQueue();
// confirmedDraw = false;
// }
// }
// else if (signalFromGamepad == BUTTON_B_RELEASED)
// {
// if (captureShape != null && !confirmedDraw)
// button_mode_liveConfirmDraw();
// }
// else if (signalFromGamepad == BUTTON_L_RELEASED)
// {
// commandQueueRunning = !commandQueueRunning;
// }
// else if (signalFromGamepad == BUTTON_R_RELEASED)
// {
// }
// else if (signalFromGamepad == BUTTON_START_RELEASED)
// {
// preLoadCommandQueue();
// button_mode_setPositionHome();
// }
//
//
// // clear the signal
// signalFromGamepad = null;
// }
//
//}
//void displayGamepadOverlay()
//{
// textSize(40);
// fill(255);
//
// if (captureShape == null)
// {
// image(aButtonImage, width-400, height-180, 128, 128);
// text("SNAP!", width-400, height-200);
//
// textSize(30);
// image(dpadYImage, width-600, height-180, 128, 128);
// text("Simplify", width-600, height-200);
//
// image(dpadXImage, width-600, height-400, 128, 128);
// text("Filter short paths", width-600, height-420);
// }
// else
// {
// if (confirmedDraw)
// {
// image(aButtonImage, width-400, height-180, 128, 128);
// text("CANCEL!", width-385, height-200);
// }
// else
// {
// image(aButtonImage, width-400, height-180, 128, 128);
// text("BACK", width-400, height-200);
// image(bButtonImage, width-190, height-180, 128, 128);
// text("DRAW!", width-180, height-200);
// }
// }
//
//
// textSize(12);
//}

View File

@ -28,6 +28,7 @@
https://github.com/euphy/polargraphcontroller
*/
//import processing.video.*;
import diewald_CV_kit.libraryinfo.*;
import diewald_CV_kit.utility.*;
@ -50,13 +51,20 @@ 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 = 2;
int buildNo = 2;
import java.lang.reflect.Method;
int majorVersionNo = 2;
int minorVersionNo = 0;
int buildNo = 3;
String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo;
ControlP5 cp5;
Map<String, ControlP5> cp5s = new HashMap<String, ControlP5>();
boolean drawbotReady = false;
boolean drawbotConnected = false;
@ -438,7 +446,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;
@ -459,8 +467,8 @@ public Map<String, Panel> panels = null;
// 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;
@ -494,8 +502,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;
@ -510,15 +516,16 @@ String shapeSavePath = "../../savedcaptures/";
String shapeSavePrefix = "shape-";
String shapeSaveExtension = ".svg";
static Float gcodeZAxisDrawingHeight = 1.0; //-0.125000;
String filePath = null;
static PApplet parentPapplet = null;
void setup()
{
println("Running polargraph controller");
frame.setResizable(true);
initLogging();
initImages();
parentPapplet = this;
RG.init(this);
RG.setPolygonizer(RG.ADAPTATIVE);
@ -533,6 +540,10 @@ void setup()
}
loadFromPropertiesFile();
// size(400, 400, JAVA2D );
// surface.setResizable(true);
// surface.setSize(windowWidth, windowHeight);
size(windowWidth, windowHeight, JAVA2D);
this.cp5 = new ControlP5(this);
initTabs();
@ -578,12 +589,11 @@ void setup()
currentMode = MODE_BEGIN;
preLoadCommandQueue();
size(windowWidth, windowHeight, JAVA2D );
changeTab(TAB_NAME_INPUT, TAB_NAME_INPUT);
addEventListeners();
//gamepad_init();
frameRate(8);
}
void addEventListeners()
{
@ -598,6 +608,7 @@ void addEventListeners()
}
}
);
addMouseWheelListener(new java.awt.event.MouseWheelListener()
{
public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt)
@ -625,6 +636,7 @@ void windowResized()
Panel p = getPanels().get(key);
p.setHeight(frame.getHeight() - p.getOutline().getTop() - (DEFAULT_CONTROL_SIZE.y*2));
}
}
void draw()
{
@ -667,6 +679,7 @@ void draw()
{
dispatchCommandQueue();
}
}
String getCurrentTab()
@ -687,6 +700,7 @@ boolean isShowingDialogBox()
}
void drawDialogBox()
{
}
String getVectorFilename()
{
@ -885,6 +899,7 @@ void drawCommandQueuePage()
showCommandQueue(right, (int)mainPanelPosition.y);
drawStatusText((int)statusTextPosition.x, (int)statusTextPosition.y);
}
void drawImageLoadPage()
@ -998,6 +1013,7 @@ void showGroupBox()
}
}
}
}
void loadImageWithFileChooser()
@ -1027,8 +1043,7 @@ void loadImageWithFileChooser()
}
}
}
}
);
});
}
class ImageFileFilter extends javax.swing.filechooser.FileFilter
@ -1062,7 +1077,7 @@ void loadVectorWithFileChooser()
File file = fc.getSelectedFile();
if (file.exists())
{
RShape shape = loadShapeFromFile(file.getPath());
RShape shape = RG.loadShape(file.getPath());
if (shape != null)
{
setVectorFilename(file.getPath());
@ -1075,25 +1090,23 @@ void loadVectorWithFileChooser()
}
}
}
}
);
});
}
class VectorFileFilter extends javax.swing.filechooser.FileFilter
{
public boolean accept(File file) {
String filename = file.getName();
filename.toLowerCase();
if (file.isDirectory() || filename.endsWith(".svg") || filename.endsWith(".gco") || filename.endsWith(".g"))
if (file.isDirectory() || filename.endsWith(".svg"))
return true;
else
return false;
}
public String getDescription() {
return "Vector graphic files (SVG, GCode)";
return "Vector graphic files (SVG)";
}
}
void loadNewPropertiesFilenameWithFileChooser()
{
SwingUtilities.invokeLater(new Runnable()
@ -1124,8 +1137,7 @@ void loadNewPropertiesFilenameWithFileChooser()
}
}
}
}
);
});
}
class PropertiesFileFilter extends javax.swing.filechooser.FileFilter
@ -1171,202 +1183,9 @@ void saveNewPropertiesFileWithFileChooser()
loadFromPropertiesFile();
}
}
}
);
});
}
RShape loadShapeFromFile(String filename) {
RShape sh = null;
if (filename.toLowerCase().endsWith(".svg")) {
sh = RG.loadShape(filename);
}
else if (filename.toLowerCase().endsWith(".gco") || filename.toLowerCase().endsWith(".g")) {
sh = loadShapeFromGCodeFile(filename);
}
return sh;
}
int countLines(String filename) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(filename));
try {
byte[] c = new byte[1024];
int count = 0;
int readChars = 0;
boolean empty = true;
while ((readChars = is.read(c)) != -1) {
empty = false;
for (int i = 0; i < readChars; ++i) {
if (c[i] == '\n') {
++count;
}
}
}
return (count == 0 && !empty) ? 1 : count;
} finally {
is.close();
}
}
RShape loadShapeFromGCodeFile(String filename) {
noLoop();
RShape parent = null;
BufferedReader reader = null;
long totalPoints = 0;
long time = millis();
try {
long countLines = countLines(filename);
println("" + countLines + " lines found.");
reader = createReader(filename);
parent = new RShape();
String line;
boolean drawLine = false;
int gCodeZAxisChanges = 0;
long lineNo = 0;
float lastPercent = 0.0f;
while ((line = reader.readLine ()) != null) {
lineNo++;
if (line.toUpperCase().startsWith("G")) {
if ((millis() - time) > 500) {
println(new StringBuilder().append(lineNo).append(" of ").append(countLines).append(": ").append(line).append(". Points: ").append(totalPoints).toString());
long free = Runtime.getRuntime().freeMemory();
long maximum = Runtime.getRuntime().maxMemory();
println(new StringBuilder().append("Free: ").append(free).append(", max: ").append(maximum).toString());
time = millis();
}
// float percent = (lineNo / countLines) * 100;
// if (percent != lastPercent) {
// println("" + percent + "% of the way through.");
// lastPercent = percent;
// }
Map<String, Float> ins = null;
try {
ins = unpackGCodeInstruction(line);
}
catch (Exception e) {
println("Exception while unpacking a gcode line " + line);
continue;
}
Integer code = Math.round(ins.get("G"));
if (code >= 2) {
continue;
}
Float z = ins.get("Z");
if (z != null) {
gCodeZAxisChanges++;
if (gCodeZAxisChanges == 2) {
println("Assume second z axis change is to drop the pen to start drawing " + z);
gcodeZAxisDrawingHeight = z;
drawLine = true;
}
else if (gCodeZAxisChanges > 2) {
drawLine = isGCodeZAxisForDrawing(z);
}
else {
println("Assume first z axis change is to RAISE the pen " + z);
drawLine = false;
}
}
Float x = ins.get("X");
Float y = ins.get("Y");
if (x != null && y == null) {
// move x axis only, use y of last
RPoint[][] points = parent.getPointsInPaths();
RPoint rp = points[points.length-1][points[points.length-1].length-1];
y = rp.y;
}
else if (x == null && y != null) {
// move y axis only, use x of last
RPoint[][] points = parent.getPointsInPaths();
RPoint rp = points[points.length-1][points[points.length-1].length-1];
x = rp.x;
}
if (x != null && y != null) {
// move both x and y axis
if (drawLine) {
parent.addLineTo(x, y);
}
else {
parent.addMoveTo(x, y);
}
}
// RPoint[][] points = parent.getPointsInPaths();
// totalPoints = 0;
// if (points != null) {
// for (int i = 0; i<points.length; i++) {
// if (points[i] != null) {
// for (int j = 0; j<points[i].length; j++) {
// totalPoints++;
// }
// }
// }
// }
// points = null;
// println("" + totalPoints + " points.");
}
}
}
catch (IOException e) {
println("Execption reading lines from the gcode file " + filename);
e.printStackTrace();
}
finally {
try {
reader.close();
}
catch (IOException e) {
println("Exception closing the gcode file " + filename);
e.printStackTrace();
}
loop();
}
RPoint[][] points = parent.getPointsInPaths();
totalPoints = 0;
if (points != null) {
for (int i = 0; i<points.length; i++) {
if (points[i] != null) {
for (int j = 0; j<points[i].length; j++) {
totalPoints++;
}
}
}
}
println("Total points in shape: " + totalPoints);
loop();
return parent;
}
Boolean isGCodeZAxisForDrawing(float z) {
return gcodeZAxisDrawingHeight.compareTo(z) == 0;
}
Map<String, Float> unpackGCodeInstruction(String line) throws NumberFormatException {
Map<String, Float> instruction = new HashMap<String, Float>(4);
try {
String[] splitted = line.trim().split(" ");
for (int i = 0; i < splitted.length; i++) {
String axis = splitted[i].substring(0, 1);
Float value = Float.parseFloat(splitted[i].substring(1));
if ("X".equalsIgnoreCase(axis) || "Y".equalsIgnoreCase(axis) || "Z".equalsIgnoreCase(axis) || "G".equalsIgnoreCase(axis)) {
instruction.put(axis, value);
}
}
// println("instruction: " + instruction);
}
catch (NumberFormatException e) {
println("Exception while reading the lines from a gcode file: " + line);
throw e;
}
return instruction;
}
void setPictureFrameDimensionsToBox()
@ -1391,6 +1210,7 @@ void setBoxToPictureframeDimensions()
t = (Toggle) getAllControls().get(MODE_SHOW_DENSITY_PREVIEW);
t.setValue(1);
t.update();
}
}
@ -1413,25 +1233,25 @@ 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<controlEvent.group().arrayValue().length; i++)
for (int i=0; i<controlEvent.group().getArrayValue().length; i++)
{
int n = (int)controlEvent.group().arrayValue()[i];
int n = (int)controlEvent.group().getArrayValue()[i];
}
println();
}
@ -1439,7 +1259,6 @@ void controlEvent(ControlEvent controlEvent)
void changeTab(String from, String to)
{
// hide old panels
currentTab = to;
for (Panel panel : getPanelsForTab(currentTab))
@ -1521,8 +1340,12 @@ boolean mouseOverPanel()
boolean result = false;
for (Panel panel : getPanelsForTab(currentTab))
{
if (panel.getOutline().surrounds(getMouseVector()))
if (panel.getOutline().surrounds(getMouseVector())) {
println("Outline: " + panel.getOutline().toString());
println("OVER PANEL!" + panel.getName());
result = true;
break;
}
}
return result;
}
@ -1876,6 +1699,7 @@ void leftButtonMachineClick()
setChromaKey(getMouseVector());
else if (currentMode.equals(MODE_SEND_START_TEXT))
sendStartTextAtPoint();
}
void mouseWheel(int delta)
@ -1911,11 +1735,14 @@ boolean isPreviewable(String command)
This will comb the command queue and attempt to draw a picture of what it contains.
Coordinates here are in pixels.
*/
void previewQueue()
void previewQueue() {
previewQueue(false);
}
void previewQueue(boolean forceRebuild)
{
PVector startPoint = null;
if (commandQueue.hashCode() != lastCommandQueueHash)
if (forceRebuild || (commandQueue.hashCode() != lastCommandQueueHash))
{
println("regenerating preview queue.");
previewCommandList.clear();
@ -1979,6 +1806,7 @@ void previewQueue()
ellipse(p.x, p.y, 5,5);
noFill();
}
}
if (startPoint != null)
@ -1988,6 +1816,7 @@ void previewQueue()
ellipse(startPoint.x, startPoint.y, 15,15);
noFill();
}
}
boolean isHiddenPixel(PVector p)
@ -1998,14 +1827,7 @@ boolean isHiddenPixel(PVector p)
return false;
}
void sizeImageToFitBox()
{
// PVector mmBoxSize = getDisplayMachine().inSteps(getBoxSize());
// PVector mmBoxPos = getDisplayMachine().inSteps(getBoxVector1());
// println("mm box: " + mmBoxSize);
void sizeImageToFitBox() {
PVector boxSize = getDisplayMachine().inSteps(getBoxSize());
PVector boxPos = getDisplayMachine().inSteps(getBoxVector1());
println("image: " + boxSize);
@ -2014,72 +1836,51 @@ void sizeImageToFitBox()
getDisplayMachine().setImageFrame(r);
}
void exportQueueToFile()
{
if (!commandQueue.isEmpty() || !realtimeCommandQueue.isEmpty())
{
String savePath = selectOutput(); // Opens file chooser
if (savePath == null)
{
// If a file was not selected
println("No output file was selected...");
void exportQueueToFile() {
if (!commandQueue.isEmpty() || !realtimeCommandQueue.isEmpty()) {
selectOutput("Enter a filename to save to:", "exportQueueToFile"); // Opens file chooser
}
else
{
}
void exportQueueToFile(File selection) {
if (selection != null) {
filePath = selection.getAbsolutePath();
println("User selected " + filePath);
// If a file was selected, print path to folder
println("Output file: " + savePath);
println("Output file: " + filePath);
List<String> allCommands = new ArrayList<String>(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 {
filePath = selection.getAbsolutePath();
println("User selected " + filePath);
}
void importQueueFromFile()
{
}
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);
// List<String> list = Arrays
} else {
println("Input file: " + filePath);
String commands[] = loadStrings(filePath);
commandQueue.addAll(Arrays.asList(commands));
println("Completed queue import, " + commandQueue.size() + " commands found.");
}
}
String importTextToWriteFromFile()
{
String loadPath = selectInput();
String result = "";
if (loadPath == null)
{
// nothing selected
println("No input file was selected.");
}
else
{
println("Input file: " + loadPath);
List<String> rows = java.util.Arrays.asList(loadStrings(loadPath));
StringBuilder sb = new StringBuilder(200);
for (String row : rows)
{
sb.append(row);
}
result = sb.toString();
println("Completed text import, " + result.length() + " characters found.");
}
return result;
}
@ -2280,12 +2081,12 @@ void drawStatusText(int x, int y)
if (drawbotReady)
{
fill(0, 200, 0);
if (currentHardware >= HARDWARE_VER_POLARPRO)
drawbotStatus = "Polargraph READY! (PRO)";
else if (currentHardware >= HARDWARE_VER_MEGA_POLARSHIELD)
if (currentHardware >= HARDWARE_VER_MEGA_POLARSHIELD)
drawbotStatus = "Polargraph READY! (PolargraphSD)";
else if (currentHardware >= HARDWARE_VER_MEGA)
drawbotStatus = "Polargraph READY! (Mega)";
else if (currentHardware >= HARDWARE_VER_POLARPRO)
drawbotStatus = "Polargraph READY! (PRO)";
else
drawbotStatus = "Polargraph READY! (Uno)";
}
@ -2369,6 +2170,7 @@ void showCommandQueue(int xPos, int yPos)
println("Caught the pesky ConcurrentModificationException: " + cme.getMessage());
}
showmachineMessageLog(rightEdgeOfQueue, 20);
}
void drawCommandQueueStatus(int x, int y, int tSize)
@ -2607,8 +2409,7 @@ void setHardwareVersionFromIncoming(String readyString)
}
if (HARDWARE_VER_MEGA == verInt
|| HARDWARE_VER_MEGA_POLARSHIELD == verInt
|| HARDWARE_VER_POLARPRO == verInt)
|| HARDWARE_VER_MEGA_POLARSHIELD == verInt)
newHardwareVersion = verInt;
else
newHardwareVersion = HARDWARE_VER_UNO;
@ -2795,6 +2596,7 @@ void readMachineName(String sync)
if (splitted.length == 3)
{
String name = splitted[1];
}
}
@ -2861,11 +2663,9 @@ void dispatchCommandQueue()
commandQueue.remove(0);
println("Dispatching command: " + command);
}
if (useChecksum()) {
Checksum crc = new CRC32();
crc.update(lastCommand.getBytes(), 0, lastCommand.length());
lastCommand = lastCommand+":"+crc.getValue();
}
// Checksum crc = new CRC32();
// crc.update(lastCommand.getBytes(), 0, lastCommand.length());
// lastCommand = lastCommand+":"+crc.getValue();
println("Last command:" + lastCommand);
myPort.write(lastCommand);
myPort.write(10); // OH *$%! of COURSE you should terminate it.
@ -2877,10 +2677,6 @@ void dispatchCommandQueue()
}
}
boolean useChecksum() {
return currentHardware == 200;
}
void addToCommandQueue(String command)
{
synchronized (commandQueue)
@ -3021,7 +2817,7 @@ void loadFromPropertiesFile()
RShape shape = null;
try
{
shape =loadShapeFromFile(getVectorFilename());
shape = RG.loadShape(getVectorFilename());
}
catch (Exception e)
{
@ -3042,6 +2838,8 @@ void loadFromPropertiesFile()
getVectorPosition().y = getFloatProperty("controller.vector.position.y", 0.0);
this.minimumVectorLineLength = getIntProperty("controller.vector.minLineLength", 0);
println("Finished loading configuration from properties file.");
}
@ -3114,6 +2912,7 @@ void savePropertiesFile()
props.setProperty("controller.vector.position.y", df.format(getVectorPosition().y));
props.setProperty("controller.vector.minLineLength", new Integer(this.minimumVectorLineLength).toString());
FileOutputStream propertiesOutput = null;
try
@ -3150,9 +2949,7 @@ void savePropertiesFile()
{
propertiesOutput.close();
}
catch (Exception e2) {
println("what now!"+e2.getMessage());
}
catch (Exception e2) {println("what now!"+e2.getMessage());}
}
}
}
@ -3251,10 +3048,12 @@ float getPixelScalingOverGridSize()
{
return pixelScalingOverGridSize;
}
void setPixelScalingOverGridSize(float scaling)
{
pixelScalingOverGridSize = scaling;
}
int getDensityPreviewStyle()
{
return densityPreviewStyle;
@ -3264,14 +3063,17 @@ Integer getBaudRate()
{
return baudRate;
}
boolean isUseWindowedConsole()
{
return this.useWindowedConsole;
}
void setUseWindowedConsole(boolean use)
{
this.useWindowedConsole = use;
}
void initLogging()
{
try
@ -3282,40 +3084,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
// {
// yButtonImage = loadImage("y.png");
// xButtonImage = loadImage("x.png");
// aButtonImage = loadImage("a.png");
// bButtonImage = loadImage("b.png");
// dpadXImage = loadImage("dpadlr.png");
// dpadYImage = loadImage("dpadud.png");
// }
// catch (Exception e)
// {
// yButtonImage = makeColourImage(64,64,color(180,180,0));
// xButtonImage = makeColourImage(64,64,color(0,0,180));
// aButtonImage = makeColourImage(64,64,color(0,180,0));
// bButtonImage = makeColourImage(64,64,color(180,0,0));
// }
}
PImage makeColourImage(int w, int h, int colour)
{
@ -3325,4 +3109,3 @@ PImage makeColourImage(int w, int h, int colour)
}
return img;
}

View File

@ -25,7 +25,6 @@
sandy.noble@gmail.com
http://www.polargraph.co.uk/
https://github.com/euphy/polargraphcontroller
*/
Set<Panel> getPanelsForTab(String tabName)
@ -84,25 +83,25 @@ List<String> 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<String> buildPanelNames()