mirror of
https://github.com/euphy/polargraphcontroller
synced 2025-01-09 19:55:16 +01:00
Merge
This commit is contained in:
commit
f48d625b49
52
ControlFrame.pde
Normal file
52
ControlFrame.pde
Normal 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
40
ControlFrameSimple.pde
Normal 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;
|
||||||
|
}
|
||||||
|
|
@ -25,8 +25,8 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class DisplayMachine extends Machine
|
class DisplayMachine extends Machine
|
||||||
{
|
{
|
||||||
private Rectangle outline = null;
|
private Rectangle outline = null;
|
||||||
@ -767,8 +767,6 @@ class DisplayMachine extends Machine
|
|||||||
void previewNativePixel(PVector pos, float size, float brightness)
|
void previewNativePixel(PVector pos, float size, float brightness)
|
||||||
{
|
{
|
||||||
float half = size / 2.0;
|
float half = size / 2.0;
|
||||||
fill(0,0,0, 255-brightness);
|
|
||||||
beginShape();
|
|
||||||
|
|
||||||
// arcs from the left-hand corner
|
// arcs from the left-hand corner
|
||||||
float distFromPointA = getOutline().getTopLeft().dist(pos);
|
float distFromPointA = getOutline().getTopLeft().dist(pos);
|
||||||
@ -777,13 +775,18 @@ class DisplayMachine extends Machine
|
|||||||
List<PVector> int1 = findIntersections(getOutline().getLeft(), distFromPointA-half, getOutline().getRight(), distFromPointB-half, size);
|
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);
|
List<PVector> int2 = findIntersections(getOutline().getLeft(), distFromPointA+half, getOutline().getRight(), distFromPointB-half, size);
|
||||||
|
|
||||||
// plot out the vertexes
|
if (!int1.isEmpty() && !int2.isEmpty()) {
|
||||||
vertex(int1.get(0).x, int1.get(0).y);
|
fill(0,0,0, 255-brightness);
|
||||||
vertex(int2.get(0).x, int2.get(0).y);
|
beginShape();
|
||||||
vertex(int2.get(1).x, int2.get(1).y);
|
|
||||||
vertex(int1.get(1).x, int1.get(1).y);
|
// plot out the vertexes
|
||||||
vertex(int1.get(0).x, int1.get(0).y);
|
vertex(int1.get(0).x, int1.get(0).y);
|
||||||
endShape();
|
vertex(int2.get(0).x, int2.get(0).y);
|
||||||
|
vertex(int2.get(1).x, int2.get(1).y);
|
||||||
|
vertex(int1.get(1).x, int1.get(1).y);
|
||||||
|
vertex(int1.get(0).x, int1.get(0).y);
|
||||||
|
endShape();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void previewNativeArcPixel(PVector pos, float size, float brightness)
|
void previewNativeArcPixel(PVector pos, float size, float brightness)
|
||||||
|
138
DrawPixelsWindow.pde
Normal file
138
DrawPixelsWindow.pde
Normal 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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -25,7 +25,11 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
class Machine
|
class Machine
|
||||||
{
|
{
|
||||||
|
64
MachineExecWindow.pde
Normal file
64
MachineExecWindow.pde
Normal 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
77
MachineStoreWindow.pde
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
397
Misc.pde
397
Misc.pde
@ -25,7 +25,6 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Scaler
|
class Scaler
|
||||||
@ -53,202 +52,202 @@ class PreviewVector extends PVector
|
|||||||
{
|
{
|
||||||
public String command;
|
public String command;
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
//
|
||||||
import java.awt.Toolkit;
|
//import java.awt.Toolkit;
|
||||||
import java.awt.BorderLayout;
|
//import java.awt.BorderLayout;
|
||||||
import java.awt.GraphicsEnvironment;
|
//import java.awt.GraphicsEnvironment;
|
||||||
|
//
|
||||||
public class Console extends WindowAdapter implements WindowListener, ActionListener, Runnable
|
//public class Console extends WindowAdapter implements WindowListener, ActionListener, Runnable
|
||||||
{
|
//{
|
||||||
private JFrame frame;
|
// private JFrame frame;
|
||||||
private JTextArea textArea;
|
// private JTextArea textArea;
|
||||||
private Thread reader;
|
// private Thread reader;
|
||||||
private Thread reader2;
|
// private Thread reader2;
|
||||||
private boolean quit;
|
// private boolean quit;
|
||||||
|
//
|
||||||
private final PipedInputStream pin=new PipedInputStream();
|
// private final PipedInputStream pin=new PipedInputStream();
|
||||||
private final PipedInputStream pin2=new PipedInputStream();
|
// private final PipedInputStream pin2=new PipedInputStream();
|
||||||
|
//
|
||||||
private PrintStream cOut = System.out;
|
// private PrintStream cOut = System.out;
|
||||||
private PrintStream cErr = System.err;
|
// private PrintStream cErr = System.err;
|
||||||
|
//
|
||||||
Thread errorThrower; // just for testing (Throws an Exception at this Console
|
// Thread errorThrower; // just for testing (Throws an Exception at this Console
|
||||||
|
//
|
||||||
public Console()
|
// public Console()
|
||||||
{
|
// {
|
||||||
// create all components and add them
|
// // create all components and add them
|
||||||
frame=new JFrame("Java Console");
|
// frame=new JFrame("Java Console");
|
||||||
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
|
// Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2));
|
// Dimension frameSize=new Dimension((int)(screenSize.width/2),(int)(screenSize.height/2));
|
||||||
int x=(int)(frameSize.width/2);
|
// int x=(int)(frameSize.width/2);
|
||||||
int y=(int)(frameSize.height/2);
|
// int y=(int)(frameSize.height/2);
|
||||||
frame.setBounds(x,y,frameSize.width,frameSize.height);
|
// frame.setBounds(x,y,frameSize.width,frameSize.height);
|
||||||
|
//
|
||||||
textArea=new JTextArea();
|
// textArea=new JTextArea();
|
||||||
textArea.setEditable(false);
|
// textArea.setEditable(false);
|
||||||
JButton button=new JButton("clear");
|
// JButton button=new JButton("clear");
|
||||||
|
//
|
||||||
frame.getContentPane().setLayout(new BorderLayout());
|
// frame.getContentPane().setLayout(new BorderLayout());
|
||||||
frame.getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER);
|
// frame.getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER);
|
||||||
frame.getContentPane().add(button,BorderLayout.SOUTH);
|
// frame.getContentPane().add(button,BorderLayout.SOUTH);
|
||||||
frame.setVisible(true);
|
// frame.setVisible(true);
|
||||||
|
//
|
||||||
frame.addWindowListener(this);
|
// frame.addWindowListener(this);
|
||||||
button.addActionListener(this);
|
// button.addActionListener(this);
|
||||||
|
//
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
this.cOut = System.out;
|
// this.cOut = System.out;
|
||||||
PipedOutputStream pout=new PipedOutputStream(this.pin);
|
// PipedOutputStream pout=new PipedOutputStream(this.pin);
|
||||||
System.setOut(new PrintStream(pout,true));
|
// System.setOut(new PrintStream(pout,true));
|
||||||
}
|
// }
|
||||||
catch (java.io.IOException io)
|
// catch (java.io.IOException io)
|
||||||
{
|
// {
|
||||||
textArea.append("Couldn't redirect STDOUT to this console\n"+io.getMessage());
|
// textArea.append("Couldn't redirect STDOUT to this console\n"+io.getMessage());
|
||||||
}
|
// }
|
||||||
catch (SecurityException se)
|
// catch (SecurityException se)
|
||||||
{
|
// {
|
||||||
textArea.append("Couldn't redirect STDOUT to this console\n"+se.getMessage());
|
// textArea.append("Couldn't redirect STDOUT to this console\n"+se.getMessage());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
this.cErr = System.err;
|
// this.cErr = System.err;
|
||||||
PipedOutputStream pout2=new PipedOutputStream(this.pin2);
|
// PipedOutputStream pout2=new PipedOutputStream(this.pin2);
|
||||||
System.setErr(new PrintStream(pout2,true));
|
// System.setErr(new PrintStream(pout2,true));
|
||||||
}
|
// }
|
||||||
catch (java.io.IOException io)
|
// catch (java.io.IOException io)
|
||||||
{
|
// {
|
||||||
textArea.append("Couldn't redirect STDERR to this console\n"+io.getMessage());
|
// textArea.append("Couldn't redirect STDERR to this console\n"+io.getMessage());
|
||||||
}
|
// }
|
||||||
catch (SecurityException se)
|
// catch (SecurityException se)
|
||||||
{
|
// {
|
||||||
textArea.append("Couldn't redirect STDERR to this console\n"+se.getMessage());
|
// textArea.append("Couldn't redirect STDERR to this console\n"+se.getMessage());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
quit=false; // signals the Threads that they should exit
|
// quit=false; // signals the Threads that they should exit
|
||||||
|
//
|
||||||
// Starting two seperate threads to read from the PipedInputStreams
|
// // 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");
|
// reader=new Thread(this);
|
||||||
// System.out.println("All fonts available to Graphic2D:\n");
|
// reader.setDaemon(true);
|
||||||
// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
// reader.start();
|
||||||
// String[] fontNames=ge.getAvailableFontFamilyNames();
|
// //
|
||||||
// for(int n=0;n<fontNames.length;n++) System.out.println(fontNames[n]);
|
// reader2=new Thread(this);
|
||||||
// // Testing part: simple an error thrown anywhere in this JVM will be printed on the Console
|
// reader2.setDaemon(true);
|
||||||
// // We do it with a seperate Thread becasue we don't wan't to break a Thread used by the Console.
|
// reader2.start();
|
||||||
// System.out.println("\nLets throw an error on this console");
|
//
|
||||||
// errorThrower=new Thread(this);
|
//// // testing part
|
||||||
// errorThrower.setDaemon(true);
|
//// // you may omit this part for your application
|
||||||
// errorThrower.start();
|
//// //
|
||||||
}
|
//// System.out.println("Hello World 2");
|
||||||
|
//// System.out.println("All fonts available to Graphic2D:\n");
|
||||||
public synchronized void windowClosed(WindowEvent evt)
|
//// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||||
{
|
//// String[] fontNames=ge.getAvailableFontFamilyNames();
|
||||||
quit=true;
|
//// for(int n=0;n<fontNames.length;n++) System.out.println(fontNames[n]);
|
||||||
this.notifyAll(); // stop all threads
|
//// // Testing part: simple an error thrown anywhere in this JVM will be printed on the Console
|
||||||
try {
|
//// // We do it with a seperate Thread becasue we don't wan't to break a Thread used by the Console.
|
||||||
reader.join(1000);
|
//// System.out.println("\nLets throw an error on this console");
|
||||||
pin.close();
|
//// errorThrower=new Thread(this);
|
||||||
System.setOut(this.cOut);
|
//// errorThrower.setDaemon(true);
|
||||||
}
|
//// errorThrower.start();
|
||||||
catch (Exception e){
|
// }
|
||||||
}
|
//
|
||||||
try {
|
// public synchronized void windowClosed(WindowEvent evt)
|
||||||
reader2.join(1000);
|
// {
|
||||||
pin2.close();
|
// quit=true;
|
||||||
System.setErr(this.cErr);
|
// this.notifyAll(); // stop all threads
|
||||||
}
|
// try {
|
||||||
catch (Exception e){
|
// reader.join(1000);
|
||||||
}
|
// pin.close();
|
||||||
// System.exit(0);
|
// System.setOut(this.cOut);
|
||||||
}
|
// }
|
||||||
|
// catch (Exception e){
|
||||||
public synchronized void windowClosing(WindowEvent evt)
|
// }
|
||||||
{
|
// try {
|
||||||
frame.setVisible(false); // default behaviour of JFrame
|
// reader2.join(1000);
|
||||||
frame.dispose();
|
// pin2.close();
|
||||||
}
|
// System.setErr(this.cErr);
|
||||||
|
// }
|
||||||
public synchronized void actionPerformed(ActionEvent evt)
|
// catch (Exception e){
|
||||||
{
|
// }
|
||||||
textArea.setText("");
|
//// System.exit(0);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public synchronized void run()
|
// public synchronized void windowClosing(WindowEvent evt)
|
||||||
{
|
// {
|
||||||
try
|
// frame.setVisible(false); // default behaviour of JFrame
|
||||||
{
|
// frame.dispose();
|
||||||
while (Thread.currentThread()==reader)
|
// }
|
||||||
{
|
//
|
||||||
try {
|
// public synchronized void actionPerformed(ActionEvent evt)
|
||||||
this.wait(100);
|
// {
|
||||||
}
|
// textArea.setText("");
|
||||||
catch(InterruptedException ie) {
|
// }
|
||||||
}
|
//
|
||||||
if (pin.available()!=0)
|
// public synchronized void run()
|
||||||
{
|
// {
|
||||||
String input=this.readLine(pin);
|
// try
|
||||||
textArea.append(input);
|
// {
|
||||||
textArea.setCaretPosition(textArea.getDocument().getLength());
|
// while (Thread.currentThread()==reader)
|
||||||
|
// {
|
||||||
}
|
// try {
|
||||||
if (quit) return;
|
// this.wait(100);
|
||||||
}
|
// }
|
||||||
|
// catch(InterruptedException ie) {
|
||||||
while (Thread.currentThread()==reader2)
|
// }
|
||||||
{
|
// if (pin.available()!=0)
|
||||||
try {
|
// {
|
||||||
this.wait(100);
|
// String input=this.readLine(pin);
|
||||||
}
|
// textArea.append(input);
|
||||||
catch(InterruptedException ie) {
|
// textArea.setCaretPosition(textArea.getDocument().getLength());
|
||||||
}
|
//
|
||||||
if (pin2.available()!=0)
|
// }
|
||||||
{
|
// if (quit) return;
|
||||||
String input=this.readLine(pin2);
|
// }
|
||||||
textArea.append(input);
|
//
|
||||||
textArea.setCaretPosition(textArea.getDocument().getLength());
|
// while (Thread.currentThread()==reader2)
|
||||||
|
// {
|
||||||
}
|
// try {
|
||||||
if (quit) return;
|
// this.wait(100);
|
||||||
}
|
// }
|
||||||
}
|
// catch(InterruptedException ie) {
|
||||||
catch (Exception e)
|
// }
|
||||||
{
|
// if (pin2.available()!=0)
|
||||||
textArea.append("\nConsole reports an Internal error.");
|
// {
|
||||||
textArea.append("The error is: "+e);
|
// String input=this.readLine(pin2);
|
||||||
}
|
// textArea.append(input);
|
||||||
}
|
// textArea.setCaretPosition(textArea.getDocument().getLength());
|
||||||
|
//
|
||||||
public void close()
|
// }
|
||||||
{
|
// if (quit) return;
|
||||||
this.windowClosing(null);
|
// }
|
||||||
}
|
// }
|
||||||
|
// catch (Exception e)
|
||||||
public synchronized String readLine(PipedInputStream in) throws IOException
|
// {
|
||||||
{
|
// textArea.append("\nConsole reports an Internal error.");
|
||||||
String input="";
|
// textArea.append("The error is: "+e);
|
||||||
do
|
// }
|
||||||
{
|
// }
|
||||||
int available=in.available();
|
//
|
||||||
if (available==0) break;
|
// public void close()
|
||||||
byte b[]=new byte[available];
|
// {
|
||||||
in.read(b);
|
// this.windowClosing(null);
|
||||||
input=input+new String(b,0,b.length);
|
// }
|
||||||
}
|
//
|
||||||
while( !input.endsWith("\n") && !input.endsWith("\r\n") && !quit);
|
// public synchronized String readLine(PipedInputStream in) throws IOException
|
||||||
return input;
|
// {
|
||||||
}
|
// 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;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
29
Panel.pde
29
Panel.pde
@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
Polargraph controller
|
Polargraph controller
|
||||||
Copyright Sandy Noble 2015.
|
Copyright Sandy Noble 2012.
|
||||||
|
|
||||||
This file is part of Polargraph Controller.
|
This file is part of Polargraph Controller.
|
||||||
|
|
||||||
@ -24,8 +24,7 @@
|
|||||||
|
|
||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
http://code.google.com/p/polargraph/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
class Panel
|
class Panel
|
||||||
{
|
{
|
||||||
@ -121,9 +120,9 @@ class Panel
|
|||||||
|
|
||||||
public void draw()
|
public void draw()
|
||||||
{
|
{
|
||||||
// stroke(outlineColour);
|
//stroke(outlineColour);
|
||||||
// strokeWeight(2);
|
//strokeWeight(2);
|
||||||
// rect(getOutline().getLeft(), getOutline().getTop(), getOutline().getWidth(), getOutline().getHeight());
|
//rect(getOutline().getLeft(), getOutline().getTop(), getOutline().getWidth(), getOutline().getHeight());
|
||||||
|
|
||||||
drawControls();
|
drawControls();
|
||||||
}
|
}
|
||||||
@ -132,13 +131,13 @@ class Panel
|
|||||||
{
|
{
|
||||||
for (Controller c : this.getControls())
|
for (Controller c : this.getControls())
|
||||||
{
|
{
|
||||||
//println("Control: " + c.name());
|
// println("Control: " + c.getName());
|
||||||
PVector pos = getControlPositions().get(c.name());
|
PVector pos = getControlPositions().get(c.getName());
|
||||||
float x = pos.x+getOutline().getLeft();
|
float x = pos.x+getOutline().getLeft();
|
||||||
float y = pos.y+getOutline().getTop();
|
float y = pos.y+getOutline().getTop();
|
||||||
c.setPosition(x, y);
|
c.setPosition(x, y);
|
||||||
|
|
||||||
PVector cSize = getControlSizes().get(c.name());
|
PVector cSize = getControlSizes().get(c.getName());
|
||||||
c.setSize((int)cSize.x, (int)cSize.y);
|
c.setSize((int)cSize.x, (int)cSize.y);
|
||||||
|
|
||||||
boolean locked = false;
|
boolean locked = false;
|
||||||
@ -147,32 +146,32 @@ class Panel
|
|||||||
|
|
||||||
// any drawing / extracting controls are disabled if there is no selec
|
// any drawing / extracting controls are disabled if there is no selec
|
||||||
// box specified.
|
// box specified.
|
||||||
if (getControlsToLockIfBoxNotSpecified().contains(c.name()) && !isBoxSpecified())
|
if (getControlsToLockIfBoxNotSpecified().contains(c.getName()) && !isBoxSpecified())
|
||||||
{
|
{
|
||||||
locked = true;
|
locked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there is no vector shape loaded then lock the "draw vector"
|
// if there is no vector shape loaded then lock the "draw vector"
|
||||||
// control.
|
// control.
|
||||||
if (c.name().equals(MODE_RENDER_VECTORS) && getVectorShape() == null)
|
if (c.getName().equals(MODE_RENDER_VECTORS) && getVectorShape() == null)
|
||||||
{
|
{
|
||||||
locked = true;
|
locked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there's no image loaded, then hide resizing/moving
|
// 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;
|
locked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c.name().equals(MODE_LOAD_VECTOR_FILE))
|
if (c.getName().equals(MODE_LOAD_VECTOR_FILE))
|
||||||
{
|
{
|
||||||
if (getVectorShape() != null)
|
if (getVectorShape() != null)
|
||||||
c.setLabel("Clear vector");
|
c.setLabel("Clear vector");
|
||||||
else
|
else
|
||||||
c.setLabel("Load vector");
|
c.setLabel("Load vector");
|
||||||
}
|
}
|
||||||
else if (c.name().equals(MODE_LOAD_IMAGE))
|
else if (c.getName().equals(MODE_LOAD_IMAGE))
|
||||||
{
|
{
|
||||||
if (getDisplayMachine().getImage() != null)
|
if (getDisplayMachine().getImage() != null)
|
||||||
c.setLabel("Clear image");
|
c.setLabel("Clear image");
|
||||||
@ -232,6 +231,4 @@ class Panel
|
|||||||
this.getOutline().setWidth(right);
|
this.getOutline().setWidth(right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,14 @@ polargraphcontroller
|
|||||||
====================
|
====================
|
||||||
|
|
||||||
Polargraph controller
|
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/
|
- Requires the excellent ControlP5 GUI library available from https://github.com/sojamo/controlp5.
|
||||||
- (http://code.google.com/p/controlp5/downloads/detail?name=controlP5_0.5.4.zip&can=2&q=).
|
|
||||||
- Requires the excellent Geomerative library available from http://www.ricardmarxer.com/geomerative/.
|
- 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.
|
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
|
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.
|
copies of all the libraries that I use, as well as all the source, and compiled versions of the code where sensible.
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
class Rectangle
|
class Rectangle
|
||||||
{
|
{
|
||||||
@ -123,4 +122,8 @@ class Rectangle
|
|||||||
return false;
|
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
112
SerialPortWindow.pde
Normal 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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -25,7 +25,6 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
void button_mode_begin()
|
void button_mode_begin()
|
||||||
{
|
{
|
||||||
@ -723,7 +722,7 @@ void button_mode_sendButtonDeactivate()
|
|||||||
void numberbox_mode_previewCordOffsetValue(int value)
|
void numberbox_mode_previewCordOffsetValue(int value)
|
||||||
{
|
{
|
||||||
previewCordOffset = value;
|
previewCordOffset = value;
|
||||||
lastCommandQueueHash = 0;
|
previewQueue(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,569 +1,412 @@
|
|||||||
/**
|
/**
|
||||||
Polargraph controller
|
Polargraph controller
|
||||||
Copyright Sandy Noble 2015.
|
Copyright Sandy Noble 2015.
|
||||||
|
|
||||||
This file is part of Polargraph Controller.
|
This file is part of Polargraph Controller.
|
||||||
|
|
||||||
Polargraph Controller is free software: you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
Polargraph Controller is distributed in the hope that it will be useful,
|
Polargraph Controller is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Polargraph Controller. If not, see <http://www.gnu.org/licenses/>.
|
along with Polargraph Controller. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Requires the excellent ControlP5 GUI library available from http://www.sojamo.de/libraries/controlP5/.
|
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/.
|
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.
|
This is an application for controlling a polargraph machine, communicating using ASCII command language over a serial link.
|
||||||
|
|
||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
*/
|
||||||
|
|
||||||
*/
|
void button_mode_sendMachineLiveMode() {
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------
|
|
||||||
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()
|
|
||||||
{
|
|
||||||
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";
|
||||||
|
|
||||||
|
void button_mode_serialPortDialog() {
|
||||||
|
ControlFrameSimple cf = addSerialPortControlFrame("Serial Port", 200, 200, 20, 240, color( 100 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
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 ) );
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------
|
void button_mode_drawPixelsDialog() {
|
||||||
Details about the "drawing" subwindow
|
ControlFrameSimple cf = addDrawPixelsControlFrame("Render pixels", 450, 250, 20, 240, color( 100 ) );
|
||||||
------------------------------------------------------------------------*/
|
}
|
||||||
void button_mode_drawPixelsDialog()
|
|
||||||
{
|
|
||||||
this.dialogWindow = cp5.addControlWindow("drawPixelsWindow",100,100,450,150);
|
|
||||||
dialogWindow.hideCoordinates();
|
|
||||||
|
|
||||||
dialogWindow.setBackground(getBackgroundColour());
|
void button_mode_drawWritingDialog() {
|
||||||
|
ControlFrameSimple cf = addSpriteWritingControlFrame("Sprite Writing", 450, 250, 20, 240, color( 100 ) );
|
||||||
|
}
|
||||||
|
|
||||||
Radio rPos = cp5.addRadio("radio_startPosition",10,10);
|
void button_mode_RandomSpriteDialog() {
|
||||||
rPos.add("Top-right", DRAW_DIR_NE);
|
ControlFrameSimple cf = addRandomSpriteControlFrame("Random Sprite", 450, 250, 20, 240, color( 100 ) );
|
||||||
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);
|
void button_mode_drawNorwegianDialog() {
|
||||||
rSkip.add("Lift pen over masked pixels", 1);
|
ControlFrameSimple cf = addNorwegianPixelControlFrame("Norwegian Pixel", 450, 250, 20, 240, color( 100 ) );
|
||||||
rSkip.add("Draw masked pixels as blanks", 2);
|
}
|
||||||
rSkip.setWindow(dialogWindow);
|
|
||||||
|
|
||||||
// Radio rDir = cp5.addRadio("radio_rowStartDirection",100,10);
|
///*------------------------------------------------------------------------
|
||||||
// rDir.add("Upwards", 0);
|
// Details about the "writing" subwindow
|
||||||
// rDir.add("Downwards", 1);
|
//------------------------------------------------------------------------*/
|
||||||
// rDir.setWindow(dialogWindow);
|
|
||||||
|
|
||||||
Radio rStyle = cp5.addRadio("radio_pixelStyle",100,10);
|
String spriteWriting_textToWrite = "";
|
||||||
rStyle.add("Variable frequency square wave", PIXEL_STYLE_SQ_FREQ);
|
String spriteWriting_spriteFilePrefix = "sprite/let";
|
||||||
rStyle.add("Variable size square wave", PIXEL_STYLE_SQ_SIZE);
|
String spriteWriting_spriteFileSuffix = ".txt";
|
||||||
rStyle.add("Solid square wave", PIXEL_STYLE_SQ_SOLID);
|
|
||||||
rStyle.add("Scribble", PIXEL_STYLE_SCRIBBLE);
|
ControlFrameSimple addSpriteWritingControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
|
||||||
if (currentHardware >= HARDWARE_VER_MEGA)
|
final Frame f = new Frame( theName );
|
||||||
{
|
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
|
||||||
rStyle.add("Spiral", PIXEL_STYLE_CIRCLE);
|
|
||||||
rStyle.add("Sawtooth", PIXEL_STYLE_SAW);
|
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) {
|
||||||
}
|
}
|
||||||
rStyle.setWindow(dialogWindow);
|
|
||||||
|
|
||||||
Button submitButton = cp5.addButton("submitDrawWindow",0,280,10,120,20);
|
cp5s.put(DRAW_WRITING_WINDOW_NAME, p.cp5());
|
||||||
submitButton.setLabel("Generate commands");
|
println(cp5s);
|
||||||
submitButton.setWindow(dialogWindow);
|
|
||||||
|
// 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.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());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|
||||||
|
void spriteWriting_spriteFilePrefixField(String value) {
|
||||||
|
spriteWriting_spriteFilePrefix = 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spriteWriting_importTextButton() {
|
||||||
|
println("Text being imported!");
|
||||||
|
selectInput("Select the text file to load the text from:",
|
||||||
|
"spriteWriting_importTextToWriteFromFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
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 spriteWriting_submitWritingWindow(ControlP5 parent)
|
||||||
{
|
{
|
||||||
case PIXEL_STYLE_SQ_FREQ: button_mode_renderSquarePixel(); break;
|
println("Write.");
|
||||||
case PIXEL_STYLE_SQ_SIZE: button_mode_renderScaledSquarePixels(); break;
|
|
||||||
case PIXEL_STYLE_SQ_SOLID: button_mode_renderSolidSquarePixels(); break;
|
Textfield tf = parent.get(Textfield.class, "spriteWriting_spriteFilePrefixField");
|
||||||
case PIXEL_STYLE_SCRIBBLE: button_mode_renderScribblePixels(); break;
|
tf.submit();
|
||||||
case PIXEL_STYLE_CIRCLE: button_mode_renderCirclePixel(); break;
|
tf.setText(spriteWriting_getSpriteFilePrefix());
|
||||||
case PIXEL_STYLE_SAW: button_mode_renderSawPixel(); break;
|
|
||||||
|
Textfield wf = parent.get(Textfield.class, "spriteWriting_textToWriteField");
|
||||||
|
wf.submit();
|
||||||
|
wf.setText(spriteWriting_getTextToWrite());
|
||||||
|
|
||||||
|
println("Start dir: " + renderStartDirection);
|
||||||
|
println("Sprite file prefix: " + spriteWriting_spriteFilePrefix);
|
||||||
|
println("Text: " + spriteWriting_textToWrite);
|
||||||
|
|
||||||
|
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 sprite_spriteFilename;
|
||||||
|
int sprite_minSpriteSize = 100;
|
||||||
|
int sprite_maxSpriteSize = 500;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------
|
ControlFrameSimple addRandomSpriteControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
|
||||||
Details about the "writing" subwindow
|
final Frame f = new Frame( theName );
|
||||||
------------------------------------------------------------------------*/
|
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
|
||||||
String textToWrite = "";
|
|
||||||
String spriteFilePrefix = "sprite/let";
|
|
||||||
String spriteFileSuffix = ".txt";
|
|
||||||
|
|
||||||
void button_mode_drawWritingDialog()
|
f.add( p );
|
||||||
{
|
p.init();
|
||||||
this.dialogWindow = cp5.addControlWindow("drawWritingWindow",100,100,450,200);
|
f.setTitle(theName);
|
||||||
dialogWindow.hideCoordinates();
|
f.setSize( p.w, p.h );
|
||||||
|
f.setLocation( theX, theY );
|
||||||
dialogWindow.setBackground(getBackgroundColour());
|
f.addWindowListener( new WindowAdapter() {
|
||||||
|
@Override
|
||||||
Textfield spriteFileField = cp5.addTextfield("spriteFilePrefixField",20,20,150,20);
|
public void windowClosing(WindowEvent we) {
|
||||||
spriteFileField.setText(getSpriteFilePrefix());
|
p.dispose();
|
||||||
spriteFileField.setLabel("File prefix");
|
f.dispose();
|
||||||
spriteFileField.setWindow(dialogWindow);
|
}
|
||||||
|
}
|
||||||
Textfield writingField = cp5.addTextfield("textToWriteField",20,60,400,20);
|
);
|
||||||
writingField.setText(getTextToWrite());
|
f.setResizable( true );
|
||||||
writingField.setLabel("Text to write");
|
f.setVisible( true );
|
||||||
writingField.setWindow(dialogWindow);
|
// sleep a little bit to allow p to call setup.
|
||||||
|
// otherwise a nullpointerexception might be caused.
|
||||||
Button importTextButton = cp5.addButton("importTextButton",0,20,100,120,20);
|
try {
|
||||||
importTextButton.setLabel("Load text from file");
|
Thread.sleep( 100 );
|
||||||
importTextButton.setWindow(dialogWindow);
|
}
|
||||||
|
catch(Exception e) {
|
||||||
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<getTextToWrite().length(); i++)
|
|
||||||
{
|
|
||||||
String filename = getSpriteFilePrefix() + (int) getTextToWrite().charAt(i) + getSpriteFileSuffix();
|
|
||||||
addToCommandQueue(CMD_DRAW_SPRITE + int(gridSize * pixelScalingOverGridSize) + "," + filename+",END");
|
|
||||||
println(filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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()
|
||||||
/*------------------------------------------------------------------------
|
|
||||||
Details about the "sprite" subwindow
|
|
||||||
------------------------------------------------------------------------*/
|
|
||||||
String spriteFilename;
|
|
||||||
int minSpriteSize = 100;
|
|
||||||
int maxSpriteSize = 500;
|
|
||||||
|
|
||||||
void button_mode_drawSpriteDialog()
|
|
||||||
{
|
{
|
||||||
this.dialogWindow = cp5.addControlWindow("drawSpriteWindow",100,100,450,200);
|
return sprite_spriteFilename;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
int sprite_getMinimumSpriteSize()
|
||||||
void radio_drawWritingDirection(int dir)
|
|
||||||
{
|
{
|
||||||
renderStartDirection = dir;
|
return sprite_minSpriteSize;
|
||||||
|
}
|
||||||
|
int sprite_getMaximumSpriteSize()
|
||||||
|
{
|
||||||
|
return sprite_maxSpriteSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getSpriteFilename()
|
void sprite_submitSpriteWindow(Textfield tf)
|
||||||
{
|
|
||||||
return spriteFilename;
|
|
||||||
}
|
|
||||||
int getMinimumSpriteSize()
|
|
||||||
{
|
|
||||||
return minSpriteSize;
|
|
||||||
}
|
|
||||||
int getMaximumSpriteSize()
|
|
||||||
{
|
|
||||||
return maxSpriteSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
void submitSpriteWindow(int theValue)
|
|
||||||
{
|
{
|
||||||
println("Sprite.");
|
println("Sprite.");
|
||||||
|
|
||||||
Textfield tf = (Textfield) cp5.controller("spriteFilenameField");
|
|
||||||
tf.submit();
|
tf.submit();
|
||||||
tf.setText(getSpriteFilename());
|
tf.setText(sprite_getSpriteFilename());
|
||||||
|
|
||||||
println("Start dir: " + renderStartDirection);
|
println("Filename: " + sprite_getSpriteFilename());
|
||||||
println("Filename: " + spriteFilename);
|
|
||||||
|
|
||||||
addToCommandQueue(CMD_DRAW_SPRITE + "," + spriteFilename + ","
|
addToCommandQueue(CMD_DRAW_SPRITE + "," + sprite_getSpriteFilename() + ","
|
||||||
+ getMinimumSpriteSize() + "," + getMaximumSpriteSize() + "," + renderStartDirection + ",END");
|
+ sprite_getMinimumSpriteSize() + "," + sprite_getMaximumSpriteSize() + "," + DRAW_DIR_NE + ",END");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------
|
///*------------------------------------------------------------------------
|
||||||
Details about the "norwegian draw" subwindow
|
// Details about the "norwegian draw" subwindow
|
||||||
------------------------------------------------------------------------*/
|
//------------------------------------------------------------------------*/
|
||||||
String norwegianExecFilename = "filename.pbm";
|
String norwegian_execFilename = "filename.pbm";
|
||||||
int norwegianAmplitude = 20;
|
int norwegian_amplitude = 20;
|
||||||
int norwegianWavelength = 2;
|
int norwegian_wavelength = 2;
|
||||||
|
|
||||||
void button_mode_drawNorwegianDialog()
|
ControlFrameSimple addNorwegianPixelControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
|
||||||
{
|
final Frame f = new Frame( theName );
|
||||||
this.dialogWindow = cp5.addControlWindow("chooseNorwegianFilenameWindow",100,100,450,150);
|
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
|
||||||
dialogWindow.hideCoordinates();
|
|
||||||
|
|
||||||
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);
|
// set up controls
|
||||||
filenameField.setText(norwegianExecFilename);
|
Textfield filenameField = p.cp5().addTextfield("norwegian_execFilename",20,20,150,20)
|
||||||
filenameField.setLabel("Filename to execute from");
|
.setText(norwegian_execFilename)
|
||||||
filenameField.setWindow(dialogWindow);
|
.setLabel("Filename to execute from")
|
||||||
|
.plugTo(this, "norwegian_execFilename");
|
||||||
|
|
||||||
Numberbox minSizeField = cp5.addNumberbox("norwegianAmplitude",20,60,100,20);
|
Numberbox minSizeField = p.cp5().addNumberbox("norwegian_amplitude",20,60,100,20)
|
||||||
minSizeField.setValue(norwegianAmplitude);
|
.setValue(norwegian_amplitude)
|
||||||
minSizeField.setMin(10);
|
.setMin(10)
|
||||||
minSizeField.setMultiplier(0.5);
|
.setMultiplier(0.5)
|
||||||
minSizeField.setLabel("Amplitude");
|
.setLabel("Amplitude")
|
||||||
minSizeField.setWindow(dialogWindow);
|
.plugTo(this, "norwegian_amplitude");
|
||||||
|
|
||||||
Numberbox maxSizeField = cp5.addNumberbox("norwegianWavelength",20,100,100,20);
|
Numberbox maxSizeField = p.cp5().addNumberbox("norwegian_wavelength",20,100,100,20)
|
||||||
maxSizeField.setValue(norwegianWavelength);
|
.setValue(norwegian_wavelength)
|
||||||
maxSizeField.setMin(1);
|
.setMin(1)
|
||||||
maxSizeField.setMultiplier(0.5);
|
.setMultiplier(0.5)
|
||||||
maxSizeField.setLabel("Wavelength");
|
.setLabel("Wavelength")
|
||||||
maxSizeField.setWindow(dialogWindow);
|
.plugTo(this, "norwegian_wavelength");
|
||||||
|
|
||||||
Button outlineButton = cp5.addButton("submitNorwegianExecTraceOutline",0,180,20,80,20);
|
Button outlineButton = p.cp5().addButton("norwegian_submitNorwegianExecTraceOutline",0,180,20,80,20)
|
||||||
outlineButton.setLabel("Trace outline");
|
.setLabel("Trace outline")
|
||||||
outlineButton.setWindow(dialogWindow);
|
.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);
|
Button submitButton = p.cp5().addButton("norwegian_submitNorwegianExecFilenameWindow",0,180,100,80,20)
|
||||||
submitButton.setLabel("Submit");
|
.setLabel("Submit")
|
||||||
submitButton.setWindow(dialogWindow);
|
.addListener( new ControlListener() {
|
||||||
|
public void controlEvent( ControlEvent ev ) {
|
||||||
|
norwegian_submitNorwegianExec(p.cp5().get(Textfield.class, "norwegian_execFilename"), false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
filenameField.setFocus(true);
|
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.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)
|
addToCommandQueue(CMD_DRAW_NORWEGIAN + norwegian_execFilename + ","+norwegian_amplitude+","+norwegian_wavelength+",END");
|
||||||
{
|
}
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,60 +25,49 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
Set<String> getPanelNames() {
|
||||||
Set<String> getPanelNames()
|
|
||||||
{
|
|
||||||
if (this.panelNames == null)
|
if (this.panelNames == null)
|
||||||
this.panelNames = buildPanelNames();
|
this.panelNames = buildPanelNames();
|
||||||
return this.panelNames;
|
return this.panelNames;
|
||||||
}
|
}
|
||||||
List<String> getTabNames()
|
List<String> getTabNames() {
|
||||||
{
|
|
||||||
if (this.tabNames == null)
|
if (this.tabNames == null)
|
||||||
this.tabNames = buildTabNames();
|
this.tabNames = buildTabNames();
|
||||||
return this.tabNames;
|
return this.tabNames;
|
||||||
}
|
}
|
||||||
Set<String> getControlNames()
|
Set<String> getControlNames() {
|
||||||
{
|
|
||||||
if (this.controlNames == null)
|
if (this.controlNames == null)
|
||||||
this.controlNames = buildControlNames();
|
this.controlNames = buildControlNames();
|
||||||
return this.controlNames;
|
return this.controlNames;
|
||||||
}
|
}
|
||||||
Map<String, List<Controller>> getControlsForPanels()
|
Map<String, List<Controller>> getControlsForPanels() {
|
||||||
{
|
|
||||||
if (this.controlsForPanels == null)
|
if (this.controlsForPanels == null)
|
||||||
this.controlsForPanels = buildControlsForPanels();
|
this.controlsForPanels = buildControlsForPanels();
|
||||||
return this.controlsForPanels;
|
return this.controlsForPanels;
|
||||||
}
|
}
|
||||||
Map<String, Controller> getAllControls()
|
Map<String, Controller> getAllControls() {
|
||||||
{
|
|
||||||
if (this.allControls == null)
|
if (this.allControls == null)
|
||||||
this.allControls = buildAllControls();
|
this.allControls = buildAllControls();
|
||||||
return this.allControls;
|
return this.allControls;
|
||||||
}
|
}
|
||||||
Map<String, String> getControlLabels()
|
Map<String, String> getControlLabels() {
|
||||||
{
|
|
||||||
if (this.controlLabels == null)
|
if (this.controlLabels == null)
|
||||||
this.controlLabels = buildControlLabels();
|
this.controlLabels = buildControlLabels();
|
||||||
return this.controlLabels;
|
return this.controlLabels;
|
||||||
}
|
}
|
||||||
Map<String, Set<Panel>> getPanelsForTabs()
|
Map<String, Set<Panel>> getPanelsForTabs() {
|
||||||
{
|
|
||||||
if (this.panelsForTabs == null)
|
if (this.panelsForTabs == null)
|
||||||
this.panelsForTabs = buildPanelsForTabs();
|
this.panelsForTabs = buildPanelsForTabs();
|
||||||
return this.panelsForTabs;
|
return this.panelsForTabs;
|
||||||
}
|
}
|
||||||
Map<String, Panel> getPanels()
|
Map<String, Panel> getPanels() {
|
||||||
{
|
|
||||||
if (this.panels == null)
|
if (this.panels == null)
|
||||||
this.panels = buildPanels();
|
this.panels = buildPanels();
|
||||||
return this.panels;
|
return this.panels;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> getControlsToLockIfBoxNotSpecified()
|
Set<String> getControlsToLockIfBoxNotSpecified() {
|
||||||
{
|
|
||||||
if (this.controlsToLockIfBoxNotSpecified == null)
|
if (this.controlsToLockIfBoxNotSpecified == null)
|
||||||
{
|
{
|
||||||
this.controlsToLockIfBoxNotSpecified = buildControlsToLockIfBoxNotSpecified();
|
this.controlsToLockIfBoxNotSpecified = buildControlsToLockIfBoxNotSpecified();
|
||||||
@ -86,8 +75,7 @@ Set<String> getControlsToLockIfBoxNotSpecified()
|
|||||||
return this.controlsToLockIfBoxNotSpecified;
|
return this.controlsToLockIfBoxNotSpecified;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> getControlsToLockIfImageNotLoaded()
|
Set<String> getControlsToLockIfImageNotLoaded() {
|
||||||
{
|
|
||||||
if (this.controlsToLockIfImageNotLoaded == null)
|
if (this.controlsToLockIfImageNotLoaded == null)
|
||||||
{
|
{
|
||||||
this.controlsToLockIfImageNotLoaded = buildControlsToLockIfImageNotLoaded();
|
this.controlsToLockIfImageNotLoaded = buildControlsToLockIfImageNotLoaded();
|
||||||
@ -95,9 +83,7 @@ Set<String> getControlsToLockIfImageNotLoaded()
|
|||||||
return this.controlsToLockIfImageNotLoaded;
|
return this.controlsToLockIfImageNotLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hideAllControls() {
|
||||||
void hideAllControls()
|
|
||||||
{
|
|
||||||
for (String key : allControls.keySet())
|
for (String key : allControls.keySet())
|
||||||
{
|
{
|
||||||
Controller c = allControls.get(key);
|
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>();
|
Map<String, Panel> panels = new HashMap<String, Panel>();
|
||||||
|
|
||||||
float panelHeight = frame.getHeight() - getMainPanelPosition().y - (DEFAULT_CONTROL_SIZE.y*3);
|
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);
|
panels.put(PANEL_NAME_INPUT, inputPanel);
|
||||||
|
|
||||||
Panel rovingPanel = new Panel(PANEL_NAME_ROVING, panelOutline);
|
Panel rovingPanel = new Panel(PANEL_NAME_ROVING, panelOutline);
|
||||||
rovingPanel.setOutlineColour(color(200,200,200));
|
rovingPanel.setOutlineColour(color(100,200,200));
|
||||||
// get controls
|
// get controls
|
||||||
rovingPanel.setResizable(true);
|
rovingPanel.setResizable(true);
|
||||||
rovingPanel.setControls(getControlsForPanels().get(PANEL_NAME_ROVING));
|
rovingPanel.setControls(getControlsForPanels().get(PANEL_NAME_ROVING));
|
||||||
@ -133,7 +118,7 @@ Map<String, Panel> buildPanels()
|
|||||||
panels.put(PANEL_NAME_ROVING, rovingPanel);
|
panels.put(PANEL_NAME_ROVING, rovingPanel);
|
||||||
|
|
||||||
Panel tracePanel = new Panel(PANEL_NAME_TRACE, panelOutline);
|
Panel tracePanel = new Panel(PANEL_NAME_TRACE, panelOutline);
|
||||||
tracePanel.setOutlineColour(color(200,200,200));
|
tracePanel.setOutlineColour(color(200,255,200));
|
||||||
// get controls
|
// get controls
|
||||||
tracePanel.setResizable(true);
|
tracePanel.setResizable(true);
|
||||||
tracePanel.setControls(getControlsForPanels().get(PANEL_NAME_TRACE));
|
tracePanel.setControls(getControlsForPanels().get(PANEL_NAME_TRACE));
|
||||||
@ -143,7 +128,7 @@ Map<String, Panel> buildPanels()
|
|||||||
panels.put(PANEL_NAME_TRACE, tracePanel);
|
panels.put(PANEL_NAME_TRACE, tracePanel);
|
||||||
|
|
||||||
Panel detailsPanel = new Panel(PANEL_NAME_DETAILS, panelOutline);
|
Panel detailsPanel = new Panel(PANEL_NAME_DETAILS, panelOutline);
|
||||||
detailsPanel.setOutlineColour(color(200, 200, 200));
|
detailsPanel.setOutlineColour(color(200, 200, 255));
|
||||||
// get controls
|
// get controls
|
||||||
detailsPanel.setResizable(true);
|
detailsPanel.setResizable(true);
|
||||||
detailsPanel.setControls(getControlsForPanels().get(PANEL_NAME_DETAILS));
|
detailsPanel.setControls(getControlsForPanels().get(PANEL_NAME_DETAILS));
|
||||||
@ -153,7 +138,7 @@ Map<String, Panel> buildPanels()
|
|||||||
panels.put(PANEL_NAME_DETAILS, detailsPanel);
|
panels.put(PANEL_NAME_DETAILS, detailsPanel);
|
||||||
|
|
||||||
Panel queuePanel = new Panel(PANEL_NAME_QUEUE, panelOutline);
|
Panel queuePanel = new Panel(PANEL_NAME_QUEUE, panelOutline);
|
||||||
queuePanel.setOutlineColour(color(200, 200, 200));
|
queuePanel.setOutlineColour(color(200, 200, 50));
|
||||||
// get controls
|
// get controls
|
||||||
queuePanel.setResizable(true);
|
queuePanel.setResizable(true);
|
||||||
queuePanel.setControls(getControlsForPanels().get(PANEL_NAME_QUEUE));
|
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));
|
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);
|
Panel generalPanel = new Panel(PANEL_NAME_GENERAL, panelOutline);
|
||||||
generalPanel.setResizable(false);
|
generalPanel.setResizable(false);
|
||||||
generalPanel.setOutlineColour(color(200, 200, 200));
|
generalPanel.setOutlineColour(color(200, 50, 200));
|
||||||
// get controls
|
// get controls
|
||||||
generalPanel.setControls(getControlsForPanels().get(PANEL_NAME_GENERAL));
|
generalPanel.setControls(getControlsForPanels().get(PANEL_NAME_GENERAL));
|
||||||
// get control positions
|
// get control positions
|
||||||
@ -243,9 +228,9 @@ Map<String, Controller> buildAllControls()
|
|||||||
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
|
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
|
||||||
t.setLabel(getControlLabels().get(controlName));
|
t.setLabel(getControlLabels().get(controlName));
|
||||||
t.hide();
|
t.hide();
|
||||||
controlP5.Label l = t.captionLabel();
|
controlP5.Label l = t.getCaptionLabel();
|
||||||
l.style().marginTop = -17; //move upwards (relative to button size)
|
l.getStyle().marginTop = -17; //move upwards (relative to button size)
|
||||||
l.style().marginLeft = 4; //move to the right
|
l.getStyle().marginLeft = 4; //move to the right
|
||||||
map.put(controlName, t);
|
map.put(controlName, t);
|
||||||
// println("Added toggle " + controlName);
|
// println("Added toggle " + controlName);
|
||||||
}
|
}
|
||||||
@ -254,9 +239,9 @@ Map<String, Controller> buildAllControls()
|
|||||||
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
|
Toggle t = cp5.addToggle(controlName, false, 100, 100, 100, 100);
|
||||||
t.setLabel(getControlLabels().get(controlName));
|
t.setLabel(getControlLabels().get(controlName));
|
||||||
t.hide();
|
t.hide();
|
||||||
controlP5.Label l = t.captionLabel();
|
controlP5.Label l = t.getCaptionLabel();
|
||||||
l.style().marginTop = -17; //move upwards (relative to button size)
|
l.getStyle().marginTop = -17; //move upwards (relative to button size)
|
||||||
l.style().marginLeft = 4; //move to the right
|
l.getStyle().marginLeft = 4; //move to the right
|
||||||
map.put(controlName, t);
|
map.put(controlName, t);
|
||||||
// println("Added minitoggle " + controlName);
|
// println("Added minitoggle " + controlName);
|
||||||
}
|
}
|
||||||
@ -266,9 +251,9 @@ Map<String, Controller> buildAllControls()
|
|||||||
n.setLabel(getControlLabels().get(controlName));
|
n.setLabel(getControlLabels().get(controlName));
|
||||||
n.hide();
|
n.hide();
|
||||||
n.setDecimalPrecision(0);
|
n.setDecimalPrecision(0);
|
||||||
controlP5.Label l = n.captionLabel();
|
controlP5.Label l = n.getCaptionLabel();
|
||||||
l.style().marginTop = -17; //move upwards (relative to button size)
|
l.getStyle().marginTop = -17; //move upwards (relative to button size)
|
||||||
l.style().marginLeft = 40; //move to the right
|
l.getStyle().marginLeft = 40; //move to the right
|
||||||
// change the control direction to left/right
|
// change the control direction to left/right
|
||||||
n.setDirection(Controller.VERTICAL);
|
n.setDirection(Controller.VERTICAL);
|
||||||
map.put(controlName, n);
|
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))
|
else if (MODE_ADJUST_PREVIEW_CORD_OFFSET.equals(key))
|
||||||
{
|
{
|
||||||
n.setDecimalPrecision(1);
|
n.setDecimalPrecision(0);
|
||||||
n.setValue(0);
|
n.setValue(0);
|
||||||
n.setMultiplier(0.5);
|
n.setMultiplier(0.5);
|
||||||
}
|
}
|
||||||
@ -563,9 +548,6 @@ Map<String, Controller> initialiseToggleValues(Map<String, Controller> map)
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String getControlLabel(String butName)
|
String getControlLabel(String butName)
|
||||||
{
|
{
|
||||||
if (controlLabels.containsKey(butName))
|
if (controlLabels.containsKey(butName))
|
||||||
@ -582,10 +564,10 @@ Map<String, PVector> buildControlPositionsForPanel(Panel panel)
|
|||||||
int row = 0;
|
int row = 0;
|
||||||
for (Controller controller : panel.getControls())
|
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));
|
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++;
|
row++;
|
||||||
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
|
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
|
||||||
{
|
{
|
||||||
@ -596,7 +578,7 @@ Map<String, PVector> buildControlPositionsForPanel(Panel panel)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
PVector p = new PVector(col*(DEFAULT_CONTROL_SIZE.x+CONTROL_SPACING.x), row*(DEFAULT_CONTROL_SIZE.y+CONTROL_SPACING.y));
|
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++;
|
row++;
|
||||||
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
|
if (p.y + (DEFAULT_CONTROL_SIZE.y*2) >= panel.getOutline().getHeight())
|
||||||
{
|
{
|
||||||
@ -605,9 +587,9 @@ Map<String, PVector> buildControlPositionsForPanel(Panel panel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, PVector> buildControlSizesForPanel(Panel panel)
|
Map<String, PVector> buildControlSizesForPanel(Panel panel)
|
||||||
{
|
{
|
||||||
//println("Building control sizes for panel " + panel.getName());
|
//println("Building control sizes for panel " + panel.getName());
|
||||||
@ -617,16 +599,16 @@ Map<String, PVector> buildControlSizesForPanel(Panel panel)
|
|||||||
int row = 0;
|
int row = 0;
|
||||||
for (Controller controller : panel.getControls())
|
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);
|
PVector s = new PVector(DEFAULT_CONTROL_SIZE.y, DEFAULT_CONTROL_SIZE.y);
|
||||||
map.put(controller.name(), s);
|
map.put(controller.getName(), s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PVector s = new PVector(DEFAULT_CONTROL_SIZE.x, DEFAULT_CONTROL_SIZE.y);
|
PVector s = new PVector(DEFAULT_CONTROL_SIZE.x, DEFAULT_CONTROL_SIZE.y);
|
||||||
map.put(controller.name(), s);
|
map.put(controller.getName(), s);
|
||||||
//println("Added size of " + controller.name() + " to panel. " + 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_ACTIVATE, "Activate button");
|
||||||
result.put(MODE_SEND_BUTTON_DEACTIVATE, "Deactivate 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;
|
return result;
|
||||||
@ -1090,13 +1072,13 @@ Set<String> buildControlNames()
|
|||||||
result.add(MODE_SELECT_ROVE_IMAGE_SOURCE);
|
result.add(MODE_SELECT_ROVE_IMAGE_SOURCE);
|
||||||
result.add(MODE_SEND_START_TEXT);
|
result.add(MODE_SEND_START_TEXT);
|
||||||
result.add(MODE_SHOW_WRITING_DIALOG);
|
result.add(MODE_SHOW_WRITING_DIALOG);
|
||||||
result.add(MODE_START_SWIRLING);
|
// result.add(MODE_START_SWIRLING);
|
||||||
result.add(MODE_STOP_SWIRLING);
|
// result.add(MODE_STOP_SWIRLING);
|
||||||
result.add(MODE_START_MARKING);
|
// result.add(MODE_START_MARKING);
|
||||||
result.add(MODE_STOP_MARKING);
|
// result.add(MODE_STOP_MARKING);
|
||||||
result.add(MODE_START_SPRITE);
|
// result.add(MODE_START_SPRITE);
|
||||||
result.add(MODE_START_RANDOM_SPRITES);
|
// result.add(MODE_START_RANDOM_SPRITES);
|
||||||
result.add(MODE_STOP_RANDOM_SPRITES);
|
// result.add(MODE_STOP_RANDOM_SPRITES);
|
||||||
result.add(MODE_DRAW_NORWEGIAN_DIALOG);
|
result.add(MODE_DRAW_NORWEGIAN_DIALOG);
|
||||||
|
|
||||||
result.add(MODE_LIVE_BLUR_VALUE);
|
result.add(MODE_LIVE_BLUR_VALUE);
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
static final String CMD_CHANGELENGTH = "C01,";
|
static final String CMD_CHANGELENGTH = "C01,";
|
||||||
static final String CMD_CHANGEPENWIDTH = "C02,";
|
static final String CMD_CHANGEPENWIDTH = "C02,";
|
||||||
@ -945,7 +944,7 @@ void sendMachineStoreMode()
|
|||||||
}
|
}
|
||||||
void sendMachineLiveMode()
|
void sendMachineLiveMode()
|
||||||
{
|
{
|
||||||
addToRealtimeCommandQueue(CMD_MACHINE_MODE_LIVE+"END");
|
addToCommandQueue(CMD_MACHINE_MODE_LIVE+"END");
|
||||||
}
|
}
|
||||||
void sendMachineExecMode()
|
void sendMachineExecMode()
|
||||||
{
|
{
|
||||||
|
234
gamepad.pde
234
gamepad.pde
@ -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);
|
|
||||||
//}
|
|
File diff suppressed because it is too large
Load Diff
31
tabSetup.pde
31
tabSetup.pde
@ -25,7 +25,6 @@
|
|||||||
sandy.noble@gmail.com
|
sandy.noble@gmail.com
|
||||||
http://www.polargraph.co.uk/
|
http://www.polargraph.co.uk/
|
||||||
https://github.com/euphy/polargraphcontroller
|
https://github.com/euphy/polargraphcontroller
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Set<Panel> getPanelsForTab(String tabName)
|
Set<Panel> getPanelsForTab(String tabName)
|
||||||
@ -84,25 +83,25 @@ List<String> buildTabNames()
|
|||||||
|
|
||||||
void initTabs()
|
void initTabs()
|
||||||
{
|
{
|
||||||
cp5.tab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT);
|
cp5.getTab(TAB_NAME_INPUT).setLabel(TAB_LABEL_INPUT);
|
||||||
cp5.tab(TAB_NAME_INPUT).activateEvent(true);
|
cp5.getTab(TAB_NAME_INPUT).activateEvent(true);
|
||||||
cp5.tab(TAB_NAME_INPUT).setId(1);
|
cp5.getTab(TAB_NAME_INPUT).setId(1);
|
||||||
|
|
||||||
cp5.tab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS);
|
cp5.getTab(TAB_NAME_DETAILS).setLabel(TAB_LABEL_DETAILS);
|
||||||
cp5.tab(TAB_NAME_DETAILS).activateEvent(true);
|
cp5.getTab(TAB_NAME_DETAILS).activateEvent(true);
|
||||||
cp5.tab(TAB_NAME_DETAILS).setId(2);
|
cp5.getTab(TAB_NAME_DETAILS).setId(2);
|
||||||
|
|
||||||
cp5.tab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING);
|
cp5.getTab(TAB_NAME_ROVING).setLabel(TAB_LABEL_ROVING);
|
||||||
cp5.tab(TAB_NAME_ROVING).activateEvent(true);
|
cp5.getTab(TAB_NAME_ROVING).activateEvent(true);
|
||||||
cp5.tab(TAB_NAME_ROVING).setId(3);
|
cp5.getTab(TAB_NAME_ROVING).setId(3);
|
||||||
|
|
||||||
cp5.tab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE);
|
cp5.getTab(TAB_NAME_TRACE).setLabel(TAB_LABEL_TRACE);
|
||||||
cp5.tab(TAB_NAME_TRACE).activateEvent(true);
|
cp5.getTab(TAB_NAME_TRACE).activateEvent(true);
|
||||||
cp5.tab(TAB_NAME_TRACE).setId(4);
|
cp5.getTab(TAB_NAME_TRACE).setId(4);
|
||||||
|
|
||||||
cp5.tab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE);
|
cp5.getTab(TAB_NAME_QUEUE).setLabel(TAB_LABEL_QUEUE);
|
||||||
cp5.tab(TAB_NAME_QUEUE).activateEvent(true);
|
cp5.getTab(TAB_NAME_QUEUE).activateEvent(true);
|
||||||
cp5.tab(TAB_NAME_QUEUE).setId(5);
|
cp5.getTab(TAB_NAME_QUEUE).setId(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<String> buildPanelNames()
|
public Set<String> buildPanelNames()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user