📄 patternforprogram.java
字号:
import java.awt.Color;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
public class PatternForProgram { //程序计算模块
private String inputStr;
private double x,z;
/* public static void main(String[] args) {//测试主函数
PatternForProgram pf=new PatternForProgram("g02x 80z 190");
pf.CheckProgram();
}
*/
//主体部分
Sys_runTime runtimePanel;
public PatternForProgram(String inputStr,Sys_runTime runtimePanel){//构造时候传入程序代码
this.inputStr=inputStr;
this.runtimePanel=runtimePanel;
x=Sys_runTime.getx(); //x轴坐标
z=Sys_runTime.getz(); //z轴坐标
}
public void CheckProgram(){ //基本算法
String info="";
String gcode,xcode,zcode,ucode,wcode;
//代码格式 g00 x90 z150 x后面不能带有空格
String chkGstr="([Gg][0-9]*+\\s*([XxUu][-+0-9]*+)*\\s*([ZzWw][-+0-9]*+)*\\s*([Rr][0-9]*+)*)*([Mm][0-9][0-9])*"; //G代码判断公式
//String chkMstr="[Mm][0-9][0-9]"; //辅助代码 m代码判断公式
boolean g=false;
if(inputStr.charAt(0)=='G'|| inputStr.charAt(0)=='g'){ //程序第一字母为g,则匹配g代码
g=true;
}
//分解代码
if(inputStr.matches(chkGstr)==false){//匹配表达式
JOptionPane.showMessageDialog(null,"输入的代码格式无效");
return;
}else{ //代码匹配执行,求gcode,或者m代码直接给出结果
if(!g){
if(inputStr.substring(1).equals("00")){
JOptionPane.showMessageDialog(null,"你输入的["+inputStr+"]是辅助功能M代码"+"--程序暂停功能");
return;
}
if(inputStr.substring(1).equals("02")){
JOptionPane.showMessageDialog(null,"你输入的["+inputStr+"]是辅助功能M代码"+"--程序结束功能,程序将返回刀具零点");
runtimePanel.setrung92();
JOptionPane.showMessageDialog(null,"当前刀具坐标 X : "+Sys_runTime.getx() + "Z :"+ Sys_runTime.getz());
return;
}
JOptionPane.showMessageDialog(null,"你输入的["+inputStr+"]是辅助功能M代码"+"--此功能暂不需要");
}else{//g代码
int start=1;
gcode=checkNumber(inputStr);
System.out.println(gcode);
start+=gcode.length();
if(gcode.equals("0") || gcode.equals("00")){
info=info+"快速走刀";
}
else if(gcode.equals("1") || gcode.equals("01")){
info=info+"正常走刀";
}
else if(gcode.equals("2") || gcode.equals("02")){
info=info+"顺圆方向(逆时针)走刀(走刀轨迹为圆弧)";
}
else if(gcode.equals("3") || gcode.equals("03")){
info=info+"逆圆方向(顺时针)走刀(走刀轨迹为圆弧)";
} else
{
info=info+"G"+gcode+"功能暂不需要,请输入G00,G01,G02,G03功能";
JOptionPane.showMessageDialog(null,info);
return;
}
//判断 xzr
if(inputStr.charAt(start)=='X' || inputStr.charAt(start)=='x'){
xcode=checkNumber(inputStr.substring(start,inputStr.length()));
runtimePanel.setxto(Integer.parseInt(xcode));
start=start+xcode.length()+1; //下一个开始点位置
info=info+"\r\nx方向移动到" + xcode;
}
if(inputStr.charAt(start)=='U' || inputStr.charAt(start)=='u'){
ucode=checkNumber(inputStr.substring(start,inputStr.length()));
start=start+ucode.length()+1;
runtimePanel.setxadd(Integer.parseInt(ucode));
info=info+"\r\nx方向移动了" + ucode;
}
if(inputStr.charAt(start)=='W' || inputStr.charAt(start)=='w'){
wcode=checkNumber(inputStr.substring(start,inputStr.length()));
start=start+wcode.length();
runtimePanel.setzadd(Integer.parseInt(wcode));
info=info+"\r\nZ方向移动了" + wcode;
}
if(inputStr.charAt(start)=='Z' || inputStr.charAt(start)=='z'){
zcode=checkNumber(inputStr.substring(start,inputStr.length()));
start=start+zcode.length();
runtimePanel.setyto(Integer.parseInt(zcode));
info=info+"\r\nZ方向移动到" + zcode;
}
JOptionPane.showMessageDialog(null,info);
}
}
}
public String checkNumber(String str){ //判断代码中的关键字后面的数字位数,递归调用
String s=str;
if(!(s.charAt(0)<='9' && s.charAt(0)>='0' ))
s=s.substring(1,s.length());
try{
int i=Integer.parseInt(s);
}catch(Exception e){
s=s.substring(0,s.length()-1);
//System.out.println(s);
s=checkNumber(s);
}
return s;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -