This commit is contained in:
Sandy Noble 2017-06-25 17:18:56 +01:00
commit c545545f19
2 changed files with 78 additions and 41 deletions

View File

@ -1,7 +1,7 @@
/*------------------------------------------------------------------------ /*------------------------------------------------------------------------
Class and controllers on the "serial port" subwindow Class and controllers on the "serial port" subwindow
------------------------------------------------------------------------*/ ------------------------------------------------------------------------*/
ControlFrameSimple addSerialPortControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) { ControlFrameSimple addSerialPortControlFrame(String theName, int theWidth, int theHeight, int theX, int theY, int theColor ) {
final Frame f = new Frame( theName ); final Frame f = new Frame( theName );
final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor ); final ControlFrameSimple p = new ControlFrameSimple( this, theWidth, theHeight, theColor );
@ -28,36 +28,44 @@ ControlFrameSimple addSerialPortControlFrame(String theName, int theWidth, int t
} }
catch(Exception e) { 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); ScrollableList sl = p.cp5().addScrollableList("dropdown_serialPort")
.setPosition(10, 10)
.setSize(150, 150)
.setBarHeight(20)
.setItemHeight(16)
.plugTo(this, "dropdown_serialPort");
sl.addItem("No serial connection", -1);
String[] ports = Serial.list(); String[] ports = Serial.list();
for (int i = 0; i < ports.length; i++) { for (int i = 0; i < ports.length; i++) {
println("Adding " + ports[i]); println("Adding " + ports[i]);
r.addItem(ports[i], i); sl.addItem(ports[i], i);
} }
int portNo = getSerialPortNumber(); int portNo = getSerialPortNumber();
if (portNo >= 0 && portNo < ports.length) println("portNo: " + portNo);
r.activate(ports[portNo]); if (portNo < 0 || portNo >= ports.length)
else portNo = -1;
r.activate("No serial connection");
// set the value of the actual control
sl.setValue(portNo);
sl.setOpen(false);
return p; return p;
} }
void radio_serialPort(int newSerialPort) void dropdown_serialPort(int newSerialPort)
{ {
println("In radio_serialPort"); println("In dropdown_serialPort, newSerialPort: " + newSerialPort);
// No serial in list is slot 0 in code because of list index
// So shift port index by one
newSerialPort -= 1;
if (newSerialPort == -2) if (newSerialPort == -2)
{ {
} }

View File

@ -58,7 +58,7 @@ import java.lang.reflect.Method;
int majorVersionNo = 2; int majorVersionNo = 2;
int minorVersionNo = 4; int minorVersionNo = 4;
int buildNo = 0; int buildNo = 2;
String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo; String programTitle = "Polargraph Controller v" + majorVersionNo + "." + minorVersionNo + " build " + buildNo;
ControlP5 cp5; ControlP5 cp5;
@ -149,6 +149,8 @@ List<String> machineMessageLog = new ArrayList<String>();
List<PreviewVector> previewCommandList = new ArrayList<PreviewVector>(); List<PreviewVector> previewCommandList = new ArrayList<PreviewVector>();
long lastCommandQueueHash = 0L; long lastCommandQueueHash = 0L;
File lastImageDirectory = null;
File lastPropertiesDirectory = null;
String lastCommand = ""; String lastCommand = "";
String lastDrawingCommand = ""; String lastDrawingCommand = "";
@ -571,7 +573,6 @@ void setup()
println("Serial ports available on your machine:"); println("Serial ports available on your machine:");
println(serialPorts); println(serialPorts);
// println("getSerialPortNumber()"+getSerialPortNumber());
if (getSerialPortNumber() >= 0) if (getSerialPortNumber() >= 0)
{ {
println("About to connect to serial port in slot " + getSerialPortNumber()); println("About to connect to serial port in slot " + getSerialPortNumber());
@ -682,17 +683,28 @@ void windowResized()
windowWidth = frame.getWidth(); windowWidth = frame.getWidth();
windowHeight = frame.getHeight(); windowHeight = frame.getHeight();
println("New window size: " + windowWidth + " x " + windowHeight); println("New window size: " + windowWidth + " x " + windowHeight);
if (frame.getExtendedState() == Frame.MAXIMIZED_BOTH) {
println("Max");
frame.setExtendedState(0);
frame.setSize(windowWidth, windowHeight);
}
for (String key : getPanels().keySet()) for (String key : getPanels().keySet())
{ {
Panel p = getPanels().get(key); Panel p = getPanels().get(key);
p.setSizeByHeight(windowHeight - p.getOutline().getTop() - (DEFAULT_CONTROL_SIZE.y*2)); p.setSizeByHeight(windowHeight - p.getOutline().getTop() - (DEFAULT_CONTROL_SIZE.y*2));
if (debugPanels) {
println("Resize " + key + " to be " + p.getOutline().getWidth() + "px across, " + p.getOutline().getHeight() + "px tall");
}
} }
// Required to tell CP5 to be able to use the new sized window // Required to tell CP5 to be able to use the new sized window
// How does this work?
cp5.setGraphics(this,0,0); cp5.setGraphics(this,0,0);
loop(); loop();
} }
void draw() void draw()
{ {
@ -995,7 +1007,9 @@ void drawMoveImageOutline()
PVector offsetMouseVector = PVector.sub(getDisplayMachine().scaleToDisplayMachine(getMouseVector()), centroid); PVector offsetMouseVector = PVector.sub(getDisplayMachine().scaleToDisplayMachine(getMouseVector()), centroid);
if (pointPaths != null) if (pointPaths != null)
{ {
for (int i = 0; i<pointPaths.length; i++) int increment = round((pointPaths.length/10.0)+0.5);
println(increment);
for (int i = 0; i<pointPaths.length; i+=increment)
{ {
if (pointPaths[i] != null) if (pointPaths[i] != null)
{ {
@ -1072,11 +1086,14 @@ void loadImageWithFileChooser()
{ {
public void run() { public void run() {
JFileChooser fc = new JFileChooser(); JFileChooser fc = new JFileChooser();
if (lastImageDirectory != null) fc.setCurrentDirectory(lastImageDirectory);
fc.setFileFilter(new ImageFileFilter()); fc.setFileFilter(new ImageFileFilter());
fc.setDialogTitle("Choose an image file..."); fc.setDialogTitle("Choose an image file...");
int returned = fc.showOpenDialog(frame); int returned = fc.showOpenDialog(frame);
lastImageDirectory = fc.getCurrentDirectory();
if (returned == JFileChooser.APPROVE_OPTION) if (returned == JFileChooser.APPROVE_OPTION)
{ {
File file = fc.getSelectedFile(); File file = fc.getSelectedFile();
@ -1117,11 +1134,16 @@ void loadVectorWithFileChooser()
{ {
public void run() { public void run() {
JFileChooser fc = new JFileChooser(); JFileChooser fc = new JFileChooser();
if (lastImageDirectory != null)
{
fc.setCurrentDirectory(lastImageDirectory);
}
fc.setFileFilter(new VectorFileFilter()); fc.setFileFilter(new VectorFileFilter());
fc.setDialogTitle("Choose a vector file..."); fc.setDialogTitle("Choose a vector file...");
int returned = fc.showOpenDialog(frame); int returned = fc.showOpenDialog(frame);
lastImageDirectory = fc.getCurrentDirectory();
if (returned == JFileChooser.APPROVE_OPTION) if (returned == JFileChooser.APPROVE_OPTION)
{ {
File file = fc.getSelectedFile(); File file = fc.getSelectedFile();
@ -1149,7 +1171,7 @@ class VectorFileFilter extends javax.swing.filechooser.FileFilter
public boolean accept(File file) { public boolean accept(File file) {
String filename = file.getName(); String filename = file.getName();
filename.toLowerCase(); filename.toLowerCase();
if (file.isDirectory() || filename.endsWith(".svg") || filename.endsWith(".gco") || filename.endsWith(".g") || filename.endsWith(".txt")) if (file.isDirectory() || filename.endsWith(".svg") || isGCodeExtension(filename))
return true; return true;
else else
return false; return false;
@ -1166,11 +1188,15 @@ void loadNewPropertiesFilenameWithFileChooser()
public void run() public void run()
{ {
JFileChooser fc = new JFileChooser(); JFileChooser fc = new JFileChooser();
if (lastPropertiesDirectory != null) fc.setCurrentDirectory(lastPropertiesDirectory);
fc.setFileFilter(new PropertiesFileFilter()); fc.setFileFilter(new PropertiesFileFilter());
fc.setDialogTitle("Choose a config file..."); fc.setDialogTitle("Choose a config file...");
int returned = fc.showOpenDialog(frame); int returned = fc.showOpenDialog(frame);
lastPropertiesDirectory = fc.getCurrentDirectory();
if (returned == JFileChooser.APPROVE_OPTION) if (returned == JFileChooser.APPROVE_OPTION)
{ {
File file = fc.getSelectedFile(); File file = fc.getSelectedFile();
@ -1214,6 +1240,7 @@ void saveNewPropertiesFileWithFileChooser()
public void run() public void run()
{ {
JFileChooser fc = new JFileChooser(); JFileChooser fc = new JFileChooser();
if (lastPropertiesDirectory != null) fc.setCurrentDirectory(lastPropertiesDirectory);
fc.setFileFilter(new PropertiesFileFilter()); fc.setFileFilter(new PropertiesFileFilter());
fc.setDialogTitle("Enter a config file name..."); fc.setDialogTitle("Enter a config file name...");
@ -1245,12 +1272,18 @@ RShape loadShapeFromFile(String filename) {
if (filename.toLowerCase().endsWith(".svg")) { if (filename.toLowerCase().endsWith(".svg")) {
sh = RG.loadShape(filename); sh = RG.loadShape(filename);
} }
else if (filename.toLowerCase().endsWith(".gco") || filename.toLowerCase().endsWith(".g") || filename.toLowerCase().endsWith(".txt")) { else if (isGCodeExtension(filename)) {
sh = loadShapeFromGCodeFile(filename); sh = loadShapeFromGCodeFile(filename);
} }
return sh; return sh;
} }
boolean isGCodeExtension(String filename) {
return (filename.toLowerCase().endsWith(".gcode") || filename.toLowerCase().endsWith(".g") || filename.toLowerCase().endsWith(".ngc") || filename.toLowerCase().endsWith(".txt"));
}
int countLines(String filename) throws IOException { int countLines(String filename) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(filename)); InputStream is = new BufferedInputStream(new FileInputStream(filename));
try { try {
@ -1427,18 +1460,17 @@ Map<String, Float> unpackGCodeInstruction(String line) throws Exception {
try { try {
String[] splitted = line.trim().split(" "); String[] splitted = line.trim().split(" ");
for (int i = 0; i < splitted.length; i++) { for (int i = 0; i < splitted.length; i++) {
// remove ; character
splitted[i] = splitted[i].replace(";", "");
String axis = splitted[i].substring(0, 1); String axis = splitted[i].substring(0, 1);
String sanitisedValue = splitted[i].substring(1); String sanitisedValue = splitted[i].substring(1);
println("BEfore:" + sanitisedValue);
sanitisedValue = sanitisedValue.replace(",", "."); sanitisedValue = sanitisedValue.replace(",", ".");
println("After: " + sanitisedValue);
Float value = Float.parseFloat(sanitisedValue); Float value = Float.parseFloat(sanitisedValue);
if ("X".equalsIgnoreCase(axis) || "Y".equalsIgnoreCase(axis) || "Z".equalsIgnoreCase(axis) || "G".equalsIgnoreCase(axis)) { if ("X".equalsIgnoreCase(axis) || "Y".equalsIgnoreCase(axis) || "Z".equalsIgnoreCase(axis) || "G".equalsIgnoreCase(axis)) {
instruction.put(axis.toUpperCase(), value); instruction.put(axis.toUpperCase(), value);
} }
} }
// println("instruction: " + instruction); // println("instruction: " + instruction);
if (instruction.isEmpty()) { if (instruction.isEmpty()) {
throw new Exception("Empty instruction"); throw new Exception("Empty instruction");
} }
@ -1450,7 +1482,6 @@ Map<String, Float> unpackGCodeInstruction(String line) throws Exception {
println("e: " + e); println("e: " + e);
throw new Exception("Exception while reading the lines from a gcode file: " + line + ", " + e.getMessage()); throw new Exception("Exception while reading the lines from a gcode file: " + line + ", " + e.getMessage());
} }
println("Instruction: " + instruction);
return instruction; return instruction;
} }
@ -3058,21 +3089,19 @@ void loadFromPropertiesFile()
if (getVectorFilename() != null) if (getVectorFilename() != null)
{ {
RShape shape = null; RShape shape = null;
try // test if file exists
{ File f = new File(getVectorFilename());
if (f.isFile()) {
shape = RG.loadShape(getVectorFilename()); shape = RG.loadShape(getVectorFilename());
} }
catch (Exception e) else {
{ println("Tried to load vector file (" + getVectorFilename() + ") but I couldn't find it.");
shape = null;
} }
if (shape != null) if (shape != null) {
{
setVectorShape(shape); setVectorShape(shape);
} }
else else {
{
println("File not found (" + getVectorFilename() + ")"); println("File not found (" + getVectorFilename() + ")");
} }
} }