313 lines
9.8 KiB
Java
313 lines
9.8 KiB
Java
|
|
/**
|
|
* @author Luis
|
|
*
|
|
*/
|
|
import java.io.*;
|
|
|
|
public class foamMain {
|
|
|
|
/**
|
|
* @param args
|
|
*/
|
|
public static void main(String[] args) {
|
|
// TODO Auto-generated method stub
|
|
// args.length is equivalent to argc in C
|
|
FileOutputStream out; // declare a file output object
|
|
PrintWriter p; // declare a print stream object
|
|
|
|
// System.out.println("TRAZA 0");
|
|
// File 1
|
|
FileInputStream fstream; // declare a file input object
|
|
BufferedReader in; // declare a file input object
|
|
|
|
// File 2
|
|
FileInputStream fstream2; // declare a file input object
|
|
BufferedReader in2; // declare a file input object
|
|
|
|
if (args.length == 2){
|
|
try{
|
|
// Open the file that is the first
|
|
// command line parameter
|
|
fstream = new FileInputStream(args[0]);
|
|
fstream2 = new FileInputStream(args[1]);
|
|
|
|
// Convert our input stream to a DataInputStream
|
|
in = new BufferedReader(new InputStreamReader(fstream));
|
|
in2 = new BufferedReader(new InputStreamReader(fstream2));
|
|
|
|
// Tokenizer to split the sentence:
|
|
StreamTokenizer st = new StreamTokenizer(in);
|
|
StreamTokenizer st2 = new StreamTokenizer(in2);
|
|
|
|
// Create a new file output stream connected to "output.gcode"
|
|
out = new FileOutputStream("output.gcode");
|
|
|
|
// Connect print stream to the output stream
|
|
p = new PrintWriter( out );
|
|
|
|
// Command
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
|
|
//FIRST LINE
|
|
//System.out.println("G1 X-1400 Y700 A-1400 B-700 F3000.0");
|
|
// CONFIGURATION G20 G17 G90 M3
|
|
|
|
System.out.println("G20");
|
|
System.out.println("G17");
|
|
System.out.println("G90");
|
|
System.out.println("M3");
|
|
|
|
/*p.println("G20");
|
|
p.println("G17");
|
|
p.println("G90");
|
|
p.println("M3");*/
|
|
|
|
// Continue to read lines while there are still some left to read
|
|
while (in.ready() && in2.ready()){
|
|
|
|
// First buffer for X and Y
|
|
String buffer1 = new String();
|
|
// Second buffer for A and B
|
|
String buffer2 = new String();
|
|
// Third buffer to mix them
|
|
String buffer3;
|
|
//Check if there is enumeration code before the instruction
|
|
if (st.sval.contains("N"))
|
|
st.nextToken();
|
|
if (st2.sval.contains("N"))
|
|
st2.nextToken();
|
|
|
|
// If the first command is G we compare if not we print the sentence.
|
|
if (((st.sval.compareTo("G00")==0)||(st.sval.compareTo("G0")==0)) && ((st2.sval.compareTo("G00")==0)||(st2.sval.compareTo("G0")==0))||((st.sval.compareTo("G01")==0)||(st.sval.compareTo("G1")==0)) && ((st2.sval.compareTo("G01")==0)||(st2.sval.compareTo("G1")==0))){
|
|
|
|
/////// File 1 ///////
|
|
if (st.sval.contains("G")){
|
|
buffer1 = buffer1.concat(st.sval+" "); // G1
|
|
st.nextToken();
|
|
}else if(st.sval.contains("M")){// G1
|
|
buffer1 = buffer1.concat(st.sval+" "); // G1
|
|
st.nextToken();
|
|
}
|
|
|
|
if(st.sval.contains("Z")){
|
|
while (!((st.sval.contains("G")||st.sval.contains("M")))){
|
|
st.nextToken();
|
|
buffer1 = "";
|
|
}
|
|
if (st.sval.contains("G")){
|
|
buffer1 = buffer1.concat(st.sval+" "); // G1
|
|
st.nextToken();
|
|
}else if(st.sval.contains("M")){// G1
|
|
buffer1 = buffer1.concat(st.sval+" "); // G1
|
|
st.nextToken();
|
|
}
|
|
}
|
|
if (st.sval.contains("X")||st.sval.contains("Y")){
|
|
buffer1 = buffer1.concat(st.sval+" "); // X or Y
|
|
st.nextToken();
|
|
}
|
|
if (st.sval.contains("X")||st.sval.contains("Y")){
|
|
buffer1 = buffer1.concat(st.sval+" "); // X or Y
|
|
st.nextToken();
|
|
}else if (st.sval.contains("Z")){
|
|
st.nextToken();
|
|
}
|
|
if (st.sval.contains("X")||st.sval.contains("Y")){
|
|
buffer1 = buffer1.concat(st.sval+" "); // X or Y
|
|
st.nextToken();
|
|
}else if (st.sval.contains("Z")){
|
|
st.nextToken();
|
|
}
|
|
buffer3 = new String(buffer1); // Mix buffer1 and 2
|
|
|
|
|
|
//// File 2 ////
|
|
if (st2.sval.contains("G")){
|
|
buffer2 = buffer2.concat(st2.sval+" "); // G2
|
|
st2.nextToken(); // X
|
|
}else if(st2.sval.contains("M")){// M
|
|
buffer2 = buffer2.concat(st2.sval+" "); // M
|
|
st2.nextToken();
|
|
}
|
|
|
|
// change X per A, Y per B (first round)
|
|
if(st2.sval.contains("Z")){
|
|
while (!((st2.sval.contains("G")||st2.sval.contains("M")))){
|
|
st2.nextToken();
|
|
buffer2 = "";
|
|
}
|
|
if (st2.sval.contains("G")){
|
|
buffer2 = buffer2.concat(st2.sval+" "); // G1
|
|
st2.nextToken();
|
|
}else if(st2.sval.contains("M")){// G1
|
|
buffer2 = buffer2.concat(st2.sval+" "); // G1
|
|
st2.nextToken();
|
|
}
|
|
}
|
|
if (st2.sval.contains("X")){
|
|
st2.sval = st2.sval.replace('X','A');
|
|
buffer2 = buffer2.concat(st2.sval+" "); // A
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}
|
|
if (st2.sval.contains("Y-")){
|
|
st2.sval = st2.sval.replace("Y-","B");
|
|
buffer2 = buffer2.concat(st2.sval+" "); // B
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}else if (st2.sval.contains("Z")){
|
|
st2.nextToken();
|
|
}
|
|
if(st2.sval.contains("Y")){
|
|
st2.sval = st2.sval.replace("Y","B-");
|
|
buffer2 = buffer2.concat(st2.sval+" "); // B-
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}else if(st2.sval.contains("Z")){
|
|
st2.nextToken();
|
|
}
|
|
|
|
// change X per A, Y per B (second round)
|
|
if (st2.sval.contains("X")){
|
|
st2.sval = st2.sval.replace('X','A');
|
|
buffer2 = buffer2.concat(st2.sval+" "); // A
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}else if (st2.sval.contains("Y-")){
|
|
st2.sval = st2.sval.replace("Y-","B");
|
|
buffer2 = buffer2.concat(st2.sval+" "); // B
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}else if(st2.sval.contains("Y")){
|
|
st2.sval = st2.sval.replace("Y","B-");
|
|
buffer2 = buffer2.concat(st2.sval+" "); // B-
|
|
buffer3 = buffer3.concat(st2.sval+" "); // mix buffer 1 and 2
|
|
st2.nextToken();
|
|
}else if(st2.sval.contains("Z")){
|
|
st2.nextToken();
|
|
}
|
|
|
|
//Compare F: To mix times
|
|
if ((st.sval.contains("F"))&&(st2.sval.contains("F"))){
|
|
//st.nextToken();
|
|
buffer1 = buffer1.concat(st.sval); // F
|
|
//st2.nextToken();
|
|
buffer2 = buffer2.concat(st2.sval); // F
|
|
|
|
if (st.sval.compareTo(st2.sval)==0){ // Same time
|
|
buffer3 = buffer3.concat(st.sval);
|
|
System.out.println(buffer3);
|
|
//p.println (buffer3);
|
|
|
|
//prepare for next loop
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
}else if (st.sval.compareTo(st2.sval)<0){ // Less time
|
|
|
|
// Calculate time
|
|
st.sval = st.sval.replace('F','0');
|
|
st2.sval = st2.sval.replace('F','0');
|
|
double aDouble = Double.parseDouble(st.sval);
|
|
double bDouble = Double.parseDouble(st2.sval);
|
|
double valueF = (bDouble-aDouble);
|
|
st.sval = String.valueOf(valueF);
|
|
buffer3 = buffer3.concat('F'+st.sval);
|
|
//Print the result
|
|
System.out.println(buffer3);
|
|
//p.println (buffer3);
|
|
|
|
//prepare for next loop
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
}else if (st.sval.compareTo(st2.sval)>0){ // More time
|
|
// Calculate time
|
|
st.sval = st.sval.replace('F','0');
|
|
st2.sval = st2.sval.replace('F','0');
|
|
double aDouble = Double.parseDouble(st.sval);
|
|
double bDouble = Double.parseDouble(st2.sval);
|
|
double valueF = (aDouble-bDouble);
|
|
st.sval = String.valueOf(valueF);
|
|
buffer3 = buffer3.concat('F'+st.sval);
|
|
//Print the result
|
|
System.out.println(buffer3);
|
|
//p.println (buffer3);
|
|
|
|
//prepare for next loop
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
}else{ // If I cannot mix them
|
|
System.out.println(buffer1); // 1
|
|
//p.println (buffer1);
|
|
System.out.println(buffer2); // 2
|
|
//p.println (buffer2);
|
|
//prepare for next loop
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
}
|
|
}else{
|
|
System.out.println(buffer3+"F3000.0");
|
|
//p.println (buffer3+"F3000.0");
|
|
}
|
|
}else{
|
|
//Check if there is enumeration code before the instruction
|
|
while (st.sval.contains("N"))
|
|
st.nextToken();
|
|
while (st2.sval.contains("N"))
|
|
st2.nextToken();
|
|
do{
|
|
buffer1 = buffer1.concat(st.sval+" ");
|
|
st.nextToken();
|
|
st2.nextToken();
|
|
}while (!(st.sval.contains("N"))&&((st.sval==null)||!(st.sval.contains("G"))||!(st.sval.contains("M"))));
|
|
System.out.println(buffer1);
|
|
//p.println (buffer1);
|
|
|
|
//prepare for next loop*/
|
|
|
|
}
|
|
|
|
/*switch (){
|
|
case 'G':
|
|
System.out.println(st.sval);
|
|
break;
|
|
default:
|
|
System.out.println("Nothing");
|
|
}//*/
|
|
|
|
//TO DO: Mix lines, checking time
|
|
// Take number after F of input1
|
|
// Take number after F of input2
|
|
// If they are the same:
|
|
// Take everything before F of input1
|
|
// take everything after X
|
|
// Change X per A, change Y per B
|
|
// If is not the same
|
|
// Put input1 the same
|
|
// put the input2 chaging X per A and Y per B
|
|
|
|
// Print line to the file
|
|
//p.println (in.readLine());
|
|
//p.println (in2.readLine());
|
|
}
|
|
//LAST LINE */
|
|
//p.println ("G1 X1200 Y-700 A1200 B700 F3000.0");
|
|
//System.out.println("G1 X1200 Y-700 A1200 B700 F3000.0");
|
|
|
|
//Closing files
|
|
in.close();
|
|
in2.close();
|
|
out.close();
|
|
p.close();
|
|
|
|
} catch (Exception e){
|
|
//System.out.println("Error writing to file");
|
|
System.err.println("Error writing to file");
|
|
}
|
|
}else
|
|
System.out.println("Invalid parameters");
|
|
}
|
|
|
|
}
|