using System.Collections.Generic;
using System.Text;
using XYCAM.Entites;
using System;
using System.IO;
using System.Windows.Forms;
using Microsoft.Win32;
using Autodesk.AutoCAD.Windows;
namespace XYCAM.Script
{
public class XycamScriptClass : ScriptBase
{
//主界面自定义变量V37=2时上下异形为为斜退
//注意斜退外形第二刀补正量必须为负数
//当附加斜度打开 自定义变量=6时不输出开粗第一刀斜度
// 做开形状时输入自定义变量=延时的时间
// 本后处理自动修改模拟器补正值
#region 自定义方法
///
/// 运行2d轨迹
///
///
private void Run2()
{
//if (V87 == 14)
//{
// AddL("清角开始");
//}
//else if (V87 == 15)
//{
// AddL("清角结束");
//}
//锥度输出,不为同R且与上一个锥度不同时
if (NoCut)
{
return;
}
else
{
if (T != LastT && V36 != 3)
{
AddL(G41orG42 ? G52 : G51, T);
}
if (V36 == 3)
{
if (T != LastT)
{
AddL((G41orG42 ? G52 : G51) + "A0.");
}
}
//判断当前模式是G01或者G00
if (Cut == G1 || Cut == G0)
//加入加工直线的机器指令
Add(Cut + X + Y);
//否则一定是G02 G03 ,圆弧指令
else
{
//加入加工圆弧的机器指令
Add(Cut + X + Y + I + J);
//为圆孔试输出直径
if (IsCircle)
{
//Fmt是一个快速定义字符格式的方法,第一个参数是前缀字符,第二个参数是数值,第三个参数是小数位数,默认3位,可以省略
Add("( ", Fmt("D", (R * 2).Value), " )");
}
//否则输出半径
else
{
Add("( ", Fmt("R", R.Value), " )");
}
}
//同R处理逻辑
string RA = R3;
string RB = RA.Replace(R3, "R" + V37);
string RC = R3;
string RD = RC.Replace("R", "CC");
//同R处理逻辑
if (V87 == 9 && V37 < 10)
{
if (V37 != 0)
{
Add(R3, RB);
}
else
{
Add(R3, R3);//沙迪克模式
}
//牧野机同R格式为G24L + 半径值
//Fmt是一个快速定义字符格式的方法,第一个参数是前缀字符,第二个参数是数值,第三个参数是小数位数,默认3位,可以省略
// Add(Fmt("G24L", R.Value));
}
if (V87 == 9 && V37 > 10)
{
Add(RD);//沙迪克模式
//牧野机同R格式为G24L + 半径值
//Fmt是一个快速定义字符格式的方法,第一个参数是前缀字符,第二个参数是数值,第三个参数是小数位数,默认3位,可以省略
// Add(Fmt("G24L", R.Value));
}
AddL();
if (V36 == 3)
{
if (T != LastT)
{
AddL(T);
}
}
}
}
///
/// 运行3d轨迹
///
///
string Run3d
{
get
{
if (Cut == G1 || Cut == G0)
{
return Cut + X + Y + ":" + Cut + X2 + Y2; //两平面格式
}
else
{
return "(R" + R + ") " + Cut + X + Y + I + J + ":" + Cut + X2 + Y2 + I2 + J2; //两平面格式
}
}
}
///
/// 用变量记录特殊标签,方便之后统一修改
///
private const string title1 = "顶针孔";
///
/// 记录上一个标签
///
string preTitle = "顶针孔";
///
/// 程序面字典, 查询键为字符(程序面+辅助面) ,对应的值为 整数类型(子程序面呼叫号码)
///
Dictionary progamPlaneDictionary = new Dictionary();
///
/// 子程序面集合字符,最后加入到程序结尾操作区域
///
string progamPlanes = "";
#endregion
///
/// 初始化参数
///
protected override void Init()
{
V55 = 1;//沙迪克模式
V4 = 0;
V11 = 1;
D.Set(3, "H");
D1.Set(3, "H");
Dv.Set(3, "");
E.Set(4, "C");
E1.Set(4, "C");
N.Set(4, "N");
F.Set(3, "F");
T.Set(3, "A");
T1.Set(3, "A");
X.Set(4, "X");
Y.Set(4, "Y");
U.Set(4, "U");
V.Set(4, "V");
US.Set(4, "U");
VS.Set(4, "V");
W.Set(3, "W");
I.Set(4, "I");
J.Set(4, "J");
X2.Set(4, "X");//两平面时的辅助面X
Y2.Set(4, "Y");//两平面时的辅助面Y
I2.Set(4, "I");//两平面时的辅助面I
J2.Set(4, "J");//两平面时的辅助面J
R.Set(4, "");
R3.Set(4, "R");
K.Set(4, "K");
L.Set(4, "L");
Z1.Set(3, "TP");
Z2.Set(3, "TN");
StartX.Set(4, "X");
StartY.Set(4, "Y");
XS.Set(4, "X");
YS.Set(4, "Y");
XS1.Set(4, "X");
YS1.Set(4, "Y");
XS2.Set(4, "X");
YS2.Set(4, "Y");
G41orG42 = false;
MachineType = "沙迪克";
}
//string filePath = "D:\\NcViewer \\Tools\\沙迪克1.TDL";
//string newTxtPath = "D:\\NcViewer \\Tools\\沙迪克.TDL";//此处改为自己电脑上模拟器的路径
bool 无屑外部路径
{
get { return !V34 && V39 && V1 == 0 && V12 == 1; }
}
bool 自动化内孔开粗
{
get
{
return V1 == 0 && V5 == 2 && V12 == 1 && V36 != 4;
}
}
bool C1
{
get { return V12 == 1 || V36 == 1 && !V47; }
}
bool C2
{
get { return V12 == 2; }
}
bool C3
{
get { return V12 == 3; }
}
bool C4
{
get { return V12 == 4; }
}
bool NoCut
{
get { return (Title == "修刀" && V12 == 1) || (V36 == 5 && C1 && Title == "修斜度") || (Title == "抓位") || (Title == "返修" && V12 < 3) || (Title == "主程式"); }
}
Dp TT
{
get { return new Dp("A", 3, V28); }
}
Dp LL
{
get { return new Dp("L", 2, V41); }
}
int 修刀次数
{
get { return V27 < 0 ? (int)V27 * -1 : (int)V27; }
}
///
/// 重写条件头 标题内容
///
///
///
protected override string DischageRow(EntityDischarge e)
{
StringBuilder sb = new StringBuilder();
sb.Append("( 高度:" + e.Height);
sb.Append(" 线径:" + e.Diameter);
sb.Append(" 材料:" + e.Materials);
sb.Append(" 加工类型:" + e.Type + ")");
return sb.ToString();
}
///
/// 重写条件头 组内容
///
///
///
protected override string DischageItem(EntityDischarge e)
{
StringBuilder sb = new StringBuilder();
sb.Append(e.U1);
sb.Append(e.U2);
sb.Append(e.U3);
return sb.ToString();
}
///
/// 补偿列
///
/// 补偿组编号
///
protected override string OffsetRow(int i)
{
return "(" + (char)(i + 'A') + ")" + QN;
}
///
/// 补正项
///
/// 补偿编号
/// 补偿值
///
protected override string OffsetItem(int d, double dv)
{
return string.Format("H{0:D3}={1:F4}", d, dv);
}
///
/// 程序开始
///
///
public override void ProgamStart()
{
// 弹出一个消息框
// System.Windows.Forms.MessageBox.Show("程序可能有问题,请仔细检查。挂壁了别找我啊");
//// 弹出一个确定 / 取消的消息框
// System.Windows.Forms.DialogResult result = System.Windows.Forms.MessageBox.Show("是否输出条件头", "警告", System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Warning);
// // 处理用户的选择
// if (result == System.Windows.Forms.DialogResult.OK)
// {
// AddL(DischageGroup());//加入自定义条件头
// System.Console.WriteLine("输出");
// }
// else if (result == System.Windows.Forms.DialogResult.Cancel)
// {
// System.Console.WriteLine("不输出");
// }
AddL("(" + Name + ")");//文件名
// AddL("(" + NCFilePath + ")");
//AddL("(WIRE=SODICK-3D.wdl)");
AddL("(WIRE=Sodick-3D)");
AddL("(" + Date + ")");//路径
AddL("(TP" + V29.ToString("0.0000") + "TN" + V31.ToString("0.0000") + "W-TOP30.0)");
AddL(AH);
AddL("H000=0.0000");
string offsetGroup = OffsetGroup().Replace("H002=", "H002=-");
string offsetGroupB = OffsetGroup().Replace("H002=", "H002=-").Replace("H004=", "H004=-").Replace("H005=", "H005=-");
if (V37 == 2 && V1 != 0 && V27 != 3)
{
AddL(offsetGroup);
}
else if (V27 == 3 && V37 == 2)
{
AddL(offsetGroupB);
}
else
{
AddL(OffsetGroup());
}
//// 打印修改后的字符串数组
//foreach (string str in offsetGroup)
//{
// Console.WriteLine(str);
//}
AddL(CutMOED);
if (V29 == 0 && V31 == 0)
{
AddL("TP" + V25.ToString("0.0000"));
AddL("TN" + V31.ToString("0.0000"));
}
else
{
AddL("TP" + V29.ToString("0.0000"));
AddL("TN" + V31.ToString("0.0000"));
}
}
System.IO.StreamWriter writer = null;
System.IO.StreamWriter sw = null;
System.IO.FileStream fileStream = null;
System.IO.StreamReader reader = null;
//StreamWriter sw = null;
//StreamWriter swA = null;
///
/// 程序结束
///
///
public override void ProgamEnd()
{
if (Title == "主程式" || Title == "副程式")
{
AddL("M99");
}
else
{
AddL(M02);
}
AddL(troubleshooting);
AddL(progamPlanes);
string offsetGroup = OffsetGroup();
string[] lines = offsetGroup.Split('\n');
// 创建一个列表来保存需要保留的行
List remainingLines = new List();
for (int i = 0; i < lines.Length; i++)
{
// 在这里添加任何条件以确定是否删除当前行
if (lines[i].Contains("H"))
{
remainingLines.Add(lines[i]);
}
}
// 将剩余的行重新合并成一个字符串
string result = string.Join("\n", remainingLines);
StringBuilder outputBuilder = new StringBuilder();
// AddL(result);
string[] liness = result.Split('\n'); // 将result按换行符拆分成字符串数组
for (int i = 0; i < liness.Length; i++)
{
string[] parts = liness[i].Split('=');
// 确保 parts 数组的长度至少为 2,以避免超出数组界限
if (parts.Length >= 2)
{
string code = parts[0];
string value = parts[1].Trim();
int index = int.Parse(code.Substring(1));
string item = "Item" + i + "=\"[" + index.ToString("D2") + "][" + value + "]\"";
outputBuilder.AppendLine(item);
}
else
{
// 如果数组长度不足 2,则输出警告或采取适当的错误处理
// Console.WriteLine("Warning: Line " + (i + 1) + " does not contain valid key-value pair.");
}
}
string outputText = outputBuilder.ToString();
// string resultB = strB.Replace(".NC", "");
if (Registry.CurrentUser.OpenSubKey(@"SOFTWARE\CW") == null)
{
RegistryKey key1 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\CW", true);
var path = new System.Windows.Forms.OpenFileDialog();
path.Title = "选择目标文件保存位置";
path.Filter = "TDL 文件 (*.TDL)|*.TDL|所有文件 (*.*)|*.*";
path.ShowDialog();
var txtPath = path.FileName;
key1.SetValue("LOADER", txtPath, RegistryValueKind.String);
key1.Close();
}
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\CW");
var tdl = key.GetValue("LOADER").ToString();
string[] text = File.ReadAllLines(tdl);
var sb = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
sb.Append(text[i] + "\n");
if (text[i] == "[Dcode]") { break; }
}
sb.AppendLine(outputText);
var sw = new StreamWriter(tdl, false, Encoding.Default);
sw.Write(sb);
sw.Close();
//try
//{
// // 指定外部文件的路径
// // 创建文件流
// fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
// // 创建StreamReader来读取文件内容
// reader = new System.IO.StreamReader(fileStream);
// // 读取文件内容
// string line;
// while ((line = reader.ReadLine()) != null)
// {
// // Console.WriteLine(line); // 处理每一行的数据,可以根据需要修改
// }
// // 实例化 StreamWriter,覆盖已存在的文件,使用默认字符编码
// sw = new System.IO.StreamWriter(newTxtPath, false, System.Text.Encoding.Default);
// // 将内容写入文件
// sw.Write(line + outputText);
// // AddL(outputText);
// // System.Threading.Thread.Sleep(1000);
//}
//catch (Exception ex)
//{
// // 处理异常
//}
//finally
//{
// // 在 finally 块中确保关闭文件流
// if (sw != null)
// {
// sw.Close();
// }
// // 确保关闭文件流和StreamReader以释放资源
// if (reader != null)
// {
// reader.Close();
// }
// if (fileStream != null)
// {
// fileStream.Close();
// }
//}
}
// 假设 V37 和 V31 是整数类型的变量
short LastG = 1;
string lastOutput = ""; // 用于跟踪上一次输出的结果
double LastV37 = 0; // 用于跟踪上一次输出的V37值
bool OutputM02 = false;
bool firstOutput = true; // 标志是否为第一次输出
bool firstOutputA = true; // 标志是否为第一次输出
///
/// 孔开始
///
///
protected override void Start()
{
AddL("");
if (Title == "副程式")
{
if (!OutputM02)
{
AddL("T83\r\nT97\r\nC777\r\nM02");
OutputM02 = true; // 设置标志为已输出
}
// AddL("");
// 判断V37是否与上一次相同
if (V37 != LastV37)
{
if (!firstOutput) // 如果不是第一次输出
{
AddL("M99");
}
AddL("N00" + V37);
if (Title == "副程式")
{
if (firstOutputA)
{
AddL("G59G92", X, Y);
}
else
{
AddL("G00", X, Y);
}
LastV37 = V37; // 更新上一次输出的V37值
firstOutput = false; // 设置标志为不是第一次输出
}
}
}
else
{
AddL(N);
}
if (HasAngle || Is3d)
{
if (IsDistinctPlane)
{
//将当前孔的程序面+辅助面组合成字符,用做key查询字典
string key = V29 + "," + V31;
int index;
//查询字典中有没有存在对应的元素,如果没有
if (!progamPlaneDictionary.ContainsKey(key))
{
//记录字典中元素的数量
int count = progamPlaneDictionary.Count;
//设置子程序号
index = count + 8001;
//存入 程序面+辅助面组合 作为键 , 子程序号码 作为值
progamPlaneDictionary.Add(key, index);
//设置程序面的字符
//Dp TP = new Dp("TP", 3, V29);
////设置辅助面(原清角值)的字符
//Dp TN = new Dp("TN", 3, V31);
//这里的QN是换行符
//这个progamPlanes是一个自定义变量,在上面的用户自定义变量中,
//用变量承载子程序的字符,最后加入到程序结尾操作区域
progamPlanes += QN;
progamPlanes += "( Plane " + (count + 1) + " )" + QN;
progamPlanes += "N" + index + ("(设程序面)") + QN;
progamPlanes += TP + QN;
progamPlanes += TN + QN;
progamPlanes += "M99" + QN + QN;
}
//如果有对应的元素,则获取对应的子程序号码
else
{
index = progamPlaneDictionary[key];
}
//在当前程序执行处加入呼叫子程序的代码
AddL("M98P", index);
}
}
if (V37 == 2 && Is3d)
{
if (U == 0 && V == 0)
{
AddL(G0, X, Y);
AddL("T91");
AddL(V7 == 0 ? "G142H000" : "G141H000"); ;
}
else
{
AddL(G0, X, Y);
AddL(V7 == 0 ? "G142H000" : "G141H000"); ;
AddL(G0, X, Y, ":", G0, X2, Y2);
AddL("HOLD(手动穿线)");
}
}
else
{
if (Title == "主程式")
{
AddL("G54", G0, X, Y);
// AddL("T91");
AddL("M98P00" + V37);
}
else
{
AddL(G0, X, Y);
AddL("T91");
}
}
}
///
/// CRT()
///
///
private void ExecuteOperation()
{
string operation;
if (V12 == 1 && V36 != 1)
{
operation = "开 粗";
}
else if (V36 == 1)
{
operation = "切 断";
}
else if (V12 == 2 && V36 == 5)
{
operation = "修斜度";
}
else if (V12 == 2)
{
operation = "粗 修";
}
else if (V12 > 2 && V36 != 1)
{
operation = "精 修";
}
else
{
operation = " 精 修 ";
}
if (IsCircle)
{
double radius = System.Math.Sqrt(V42 / System.Math.PI);
// 计算直径
double diameter = 2 * radius;
//AddL("直径" + diameter.ToString("0.000"));
if (Is3d)
{
AddL("CRT(-" + N + "-3d-" + operation + "D" + diameter.ToString("0.000") + " -)");
}
else
{
AddL("CRT(-" + N + "-2d-" + operation + "D" + diameter.ToString("0.000") + " -)");
}
}
else
{
if (Is3d)
{
AddL("CRT(-" + N + "-3d-" + operation + LL + " -)");
}
else
{
AddL("CRT(-" + N + "-2d-" + operation + LL + " -)");
}
}
}
///
/// 进刀点
///
///
protected override void Offset()
{
if (NoCut)
{
return;
}
if (V1 == 0)
{
//修刀次数等于2,从第3刀开始加
//修刀次数大于2,从倒数第2刀开始加
if (V12 == 3)
{
AddL(Fmt("N", BuilderIndex + 9000));
if (V13 == 1 && V5 != 1)
{
AddL("T91");
}
}
}
}
///
/// 补正偏移
///
///
protected override void Feed()
{
if (NoCut)
{
return;
}
ExecuteOperation();
if (C1)
{
if (V34)
{
AddL("T84C000 WP45");
}
else if (无屑外部路径)
{
AddL("T85C001");
}
else
{
AddL("T84", E);
}
}
else//修刀条件
{
AddL("T85", E);
}
if (V36 == 3)
{
AddL("/M98P8888");
AddL("G149G249G349G449G549G649G749");
}
else
{
}
if (V12 == 1 && V36 != 5 && !V39 && V36 != 1 && Title != "仅修刀")
{
AddL("/M98P8888");
}
if (Title == "内孔线在外" || Title == "外形线在内")
{
Add(G41orG42 ? G41 : G42 + "H000");
}
else if (V36 == 3)
{
Add("G40H000");
}
else
{
Add(G41orG42 ? G42 + "H000" : G41 + "H000");
}
if (HasAngle)
{
Add(G41orG42 ? G52 : G51, T);
}
else
{
if (Title == "内孔线在外" || Title == "外形线在内")
{
Add(G41orG42 ? G51 : G52);
}
else
{
Add(G41orG42 ? G52 : G51);
}
}
AddL(Cut + X + Y);
if (V34)
{
AddL("T84", E);
}
if (V36 == 3)
{
AddL("H000");
}
else if (V36 == 5)
{
AddL(D + 100);
}
else
{
AddL(D);
}
//if (V39 && V36 != 3 && V12 == 1 && V1 == 0)
//{
// AddL("T85 ");
//}
if (!HasAngle && V36 != 3)
{
if (V1 == 0)
{
if (!C1 && V36 != 3)
{
AddL("AH997");
}
else if (C1)
{
AddL("AH996");
}
}
else // V1 != 0
{
AddL((C1 || V36 == 1) ? "AH998" : "AH999");
}
}
}
///
/// 暂停点
///
///
protected override void M01()
{
if (NoCut)
{
return;
}
Run2();
AddL("M00C000");
}
///
/// 闭合点
///
///
protected override void Close()
{
if (NoCut)
{
return;
}
if (V5 == 2 && N > 3000 && V12 == 1)
{
AddL("M00C000");
}
Run2();
// if (C1&&V43)
// {
// AddL("M00C000BACK0.5");
// }
}
///
/// 过切点
///
///
protected override void OverCut()
{
if (NoCut)
{
return;
}
Run2();
}
///
/// 脱离点
///
///
protected override void Out()
{
if (NoCut)
{
return;
}
if (自动化内孔开粗)
{
AddL("T90");
}
Add("G40H000G50A0.0");
if (V1 == 0 && !V34 && V5 != 2)
{
Add("M05");
AddL(G0, XS1, YS1);
}
else
{
if (V5 == 2 && V1 == 0)
{
Add("M05");
AddL(G0, X, Y);
}
else
{
AddL(G1, X, Y);
}
}
if (V1 == 2 && V12 == 1)
{
AddL("G04X" + V37.ToString("0.0"));
}
else if (V1 == 1 && V12 == 1)
{
AddL("G04X5.");
}
}
///
/// 常规加工
///
///
protected override void Default()
{
if (NoCut)
{
return;
}
if (V54 == 0)
{
if (V87 == 14)
{
AddL("H000");
}
else if (V87 == 15)
{
Run2();
AddL(D);
}
}
else
{
}
Run2();
}
///
/// 同一个孔中的跳步(如内孔旋转进刀,外形多线头)
///
///
protected override void Move()
{
if (V1 != 1)
{
if (Is3d)
{
AddL(G0, X, Y, ":", G0, X2, Y2);
}
else
{
if (V1 == 2 && C1)
{
AddL("FLAG4D0");
}
Run2();
}
}
else
{
AddL("T90");
AddL(G0 + X + Y);
AddL("T91");
}
}
///
/// 上下异形补正
///
///
protected override void Offset3d()
{
}
///
/// 上下异形进刀
///
///
protected override void Feed3d()
{
string G142 = "G142";
string G141 = "G141";
ExecuteOperation();
if (C1)
{
if (V34)
{
AddL("T84C000 WP45");
}
else if (无屑外部路径)
{
AddL("T85C001");
}
else
{
AddL("T84", E);
}
}
else//修刀条件
{
AddL("T85", E);
}
if (V37 == 2)
{
}
else
{
AddL(G41orG42 ? G142 : G141, "H000");
}
AddL(Run3d);
if (V36 == 3)
{
AddL("H000");
}
else
{
AddL(D);
}
}
///
/// 常规路径
///
///
protected override void Default3d()
{
if (V54 == 0 || V54 == 4)
{
if (V87 == 14)
{
AddL("H000");
}
else if (V87 == 15)
{
AddL(Run3d);
AddL(D);
}
}
else
{
}
AddL(Run3d);
}
///
/// 上下异形前置暂停点
///
protected override void M013d()
{
AddL(Run3d);
AddL("M00C000");
}
///
/// 上下异形过切点
///
protected override void OverCut3d()
{
AddL(Run3d);
}
///
/// 上下异形闭合点
///
protected override void Close3d()
{
AddL(Run3d);
}
///
/// 上下异形脱离
///
///
protected override void Out3d()
{
if (自动化内孔开粗)
{
AddL("T90");
}
AddL("H000");
if (V37 == 2)
{
if (V1 == 0)
{
AddL("M05", G0, X, Y, ":", G0, X2, Y2);
}
else
{
AddL(G1, X, Y, ":", G1, X2, Y2);
}
}
else
{
if (V1 == 0 && !V35)
{
AddL("M05", G0, XS - 0.001, YS, ":", G0, XS - 0.001, YS);
AddL("G140");
AddL("M05", G0, XS, YS);
}
else if (V1 == 0 && V35)
{
AddL("M05", G0, X - 0.001, Y, ":", G0, X - 0.001, Y);
AddL("G140");
AddL("M05", G0, X, Y);
}
else
{
AddL(G1, X - 0.001, Y, ":", G1, X - 0.001, Y);
AddL("G140");
AddL(G1, X, Y);
}
}
if (V1 == 1 && V12 == 1 && V36 != 1)
{
AddL("G4X5.");
}
}
public override void StartProcess1()
{
//AddL("(开粗工序开始:)");
}
public override void StartProcess2()
{
//AddL("(粗修工序开始:)");
}
public override void StartProcess3()
{
//AddL("(精修工序开始:)");
}
public override void StartProcess4()
{
//AddL("(切断工序开始:)");
}
class Dp
{
public string Name { get; set; }
public int Precision { get; set; }
public double Value { get; set; }
public Dp(string name, int precision, double value)
{
Name = name;
Precision = precision;
Value = value;
}
public override string ToString()
{
string format = "0." + new string('0', Precision);
return string.Format("{0}{1}", Name, Value.ToString(format));
}
}
Dp TP
{
get { return new Dp("TP", 4, V29); }
}
Dp TN
{
get { return new Dp("TN", 4, V31); }
}
protected override void WireOn()
{
}
///
/// 在剪线之前的动作
///
protected override void BeforeWireOff()
{
if (preTitle != title1)
{
AddL("M00");
}
if (Is3d)
{
if (V37 == 2)
{
if (V1 == 0)
{
if (!V46)
{
AddL("T90");
}
AddL("M05", G0, XS - 0.001, YS, ":", G0, XS - 0.001, YS);
AddL("G140", G0, XS, YS);
}
else
{
AddL("T90");
AddL("M05", G0, X - 0.001, Y, ":", G0, X - 0.001, Y);
AddL("G140", G0, X, Y);
}
}
}
}
protected override void WireOff()
{
if (Title == "主程式")
{
return;
}
if (!自动化内孔开粗)
{
AddL("T90");
}
}
///
/// 进刀分段
///
protected override void SegmentFeed()
{
AddL("T84C000");
AddL(G1, X, Y);
}
///
/// 上下异形进刀分段
///
protected override void SegmentFeed3d()
{
AddL("T84C000");
AddL(Run3d);
//AddL(G41orG42 ? "G140" : "G140", Run3d);
//AddL(G41orG42 ? "G142" : "G141", Run3d);
}
///
/// 返回线的进刀点
///
protected override void BackLineFeed()
{
//空跑参数
AddL("FLAG4D1");
AddL("T91");
AddL(G41orG42 ? G42 + G52 : G41 + G51, T);
Run2();
AddL(D);
}
///
/// 返回线的结束点
///
protected override void BackLineEnd()
{
Default();
//正常参数
AddL("T84C001");
}
///
/// 返回线的结束前的过渡区域
///
protected override void TransitionZoneBeforeBackLineEnd()
{
Default();
//过渡的弱参数
AddL("FLAG4D0");
AddL("T84C000");
}
///
/// 返回线的进刀点
///
protected override void NoOffsetFeed()
{
//无补正参数
AddL("T84C000");
Run2();
}
string CutMOED = @"T94
G90
G54
G136(干涉检测改成G137关闭干涉检测)
G27
G26RA00.0000
G11(改成G12开启自动排短路)";
string AH = @"
(BSA)
H996=0.0000 (HOLE-1)
H997=0.0000 (HOLE-X)
H998=0.0000 (PUNCH-1)
H999=0.0000 (PUNCH-X)
(附件斜度H+100)
";
string M02 = @"
T83
T97
C777
M02";
string troubleshooting = @"N8888
G91
WT0 WS33 MAO333
G01X0.001
G04X4.0
WT22 WS33
G01X-0.001
G04X4.0
WT160 WS70 MAO264
G90
M99";
}
}