diff --git a/HexcalMC/Base/Editor3D/Editor3D.cs b/HexcalMC/Base/Editor3D/Editor3D.cs
index 750c219..c44e6a7 100644
--- a/HexcalMC/Base/Editor3D/Editor3D.cs
+++ b/HexcalMC/Base/Editor3D/Editor3D.cs
@@ -91,7 +91,8 @@ namespace Plot3D
Spring,
Summer,
Winter,
- }
+ Green
+ }
public enum eRaster
{
@@ -1344,6 +1345,7 @@ namespace Plot3D
Byte[,] u8_RGB;
switch (e_Scheme)
{
+ case eColorScheme.Green: return new Color[] { Color.Green };
case eColorScheme.Rainbow_Sweep: return CalcRainbow(6); // all colors, also magenta
case eColorScheme.Rainbow_Bright: return CalcRainbow(4); // from red to blue, no magenta
case eColorScheme.Monochrome: return new Color[] { Color.Goldenrod };
@@ -1411,7 +1413,7 @@ namespace Plot3D
/// Constructor 1
///
public cColorScheme(eColorScheme e_Scheme)
- : this (GetSchema(e_Scheme))
+ : this (GetSchema(e_Scheme))
{
}
@@ -1817,10 +1819,14 @@ namespace Plot3D
mi_ColorScheme = i_ColorScheme;
}
- ///
- /// s32_Radius defines the size of the shape and i_Brush the color
- ///
- public cShape3D AddShape(cPoint3D i_Point, eScatterShape e_Shape, int s32_Radius, Brush i_Brush, Object o_Tag = null)
+ public cScatterData()
+ {
+ }
+
+ ///
+ /// s32_Radius defines the size of the shape and i_Brush the color
+ ///
+ public cShape3D AddShape(cPoint3D i_Point, eScatterShape e_Shape, int s32_Radius, Brush i_Brush, Object o_Tag = null)
{
cShape3D i_Shape3D = new cShape3D(-1, -1, i_Point, e_Shape, s32_Radius, i_Brush, o_Tag);
mi_Shapes3D.Add(i_Shape3D);
@@ -4146,8 +4152,9 @@ namespace Plot3D
///
public Editor3D()
{
- // avoid flicker
- SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ this.DoubleBuffered = true; // 启用双缓冲
+ // avoid flicker
+ SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
mi_Bounds = new cBounds (this);
@@ -4593,8 +4600,9 @@ namespace Plot3D
///
protected override void OnPaint(PaintEventArgs e)
{
- // Stupidly the .NET framework draws a red cross if any exception occurres in OnPaint()
- try
+ base.OnPaint(e);
+ // Stupidly the .NET framework draws a red cross if any exception occurres in OnPaint()
+ try
{
Render(e.Graphics);
}
diff --git a/HexcalMC/HexcalMC.csproj b/HexcalMC/HexcalMC.csproj
index 155fd7f..9f7e1f7 100644
--- a/HexcalMC/HexcalMC.csproj
+++ b/HexcalMC/HexcalMC.csproj
@@ -307,6 +307,7 @@
+
diff --git a/HexcalMC/HexcalMC.sln b/HexcalMC/HexcalMC.sln
index cfe162a..06ffc72 100644
--- a/HexcalMC/HexcalMC.sln
+++ b/HexcalMC/HexcalMC.sln
@@ -5,8 +5,6 @@ VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexcalMC", "HexcalMC.csproj", "{19741897-37D8-43EE-94A2-637975035CEA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Editor3D", "..\..\..\..\Editor3D\Editor3D\Editor3D\Editor3D.csproj", "{70634D82-9FD4-4EC9-A1A8-92638B07E832}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -29,18 +27,6 @@ Global
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x64.Build.0 = Release|x64
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x86.ActiveCfg = Release|x86
{19741897-37D8-43EE-94A2-637975035CEA}.Release|x86.Build.0 = Release|x86
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|x64.ActiveCfg = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|x64.Build.0 = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|x86.ActiveCfg = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Debug|x86.Build.0 = Debug|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|Any CPU.Build.0 = Release|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|x64.ActiveCfg = Release|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|x64.Build.0 = Release|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|x86.ActiveCfg = Release|Any CPU
- {70634D82-9FD4-4EC9-A1A8-92638B07E832}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/HexcalMC/MainFrom.cs b/HexcalMC/MainFrom.cs
index 7f14670..6a4d895 100644
--- a/HexcalMC/MainFrom.cs
+++ b/HexcalMC/MainFrom.cs
@@ -1,4 +1,9 @@
-using System;
+using ACS.SPiiPlusNET;
+using HexcalMC.Base;
+using HexcalMC.Form;
+using HexcalMC.Hexcal;
+using HexcalMC.Properties;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -6,12 +11,8 @@ using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
-using ACS.SPiiPlusNET;
-using HexcalMC.Base;
-using HexcalMC.Form;
-using HexcalMC.Hexcal;
-using HexcalMC.Properties;
using Telerik.WinControls.UI;
+using static HexcalMC.EtalonForm;
namespace HexcalMC
{
@@ -43,11 +44,41 @@ namespace HexcalMC
private int m_nTotalAxis; //定义总轴数
private Axis[] m_arrAxisList = null;
+ //定一个运动到位次数的变量和三个方法,开始统计运动到位次数,停止统计运动到位次数,获取运动到位次数
+
+ #region 运动到位次数
+
+
+ // 记录运动到位次数的变量
+ private int m_nInPosCount = 0;
+ private bool isCounting = false;
+
+ // 开始统计运动到位次数
+ public void StartCounting()
+ {
+ isCounting = true;
+ m_nInPosCount = 0; // 重置计数器
+ }
+
+ // 停止统计运动到位次数
+ public void StopCounting()
+ {
+ isCounting = false;
+ m_nInPosCount = 0; // 重置计数器
+ }
+
+ // 获取运动到位次数
+ public int GetInPosCount()
+ {
+ return m_nInPosCount;
+ }
+
+ #endregion
+
public MainFrom()
{
InitializeComponent();
-
// 处理未被捕获的线程异常
Application.ThreadException += Application_ThreadException;
@@ -61,12 +92,10 @@ namespace HexcalMC
MaximizeBox = false; // 禁用窗体的最大化按钮
DebugDfn.textBox_Msg = TextBoxMsg;
-
//加载配置文件
LoadConfig();
_acs = new Api(); //初始化 ACS运动控制类
-
//启动界面刷新
timer_RefreshUI.Start();
}
@@ -88,11 +117,11 @@ namespace HexcalMC
DebugDfn._strEndTime = DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss");
timer_RefreshUI.Stop();
- Btn_StopServer_Click(null,null);
+ Btn_StopServer_Click(null, null);
Btn_ACSStop_Click(null, null);//关闭ACS
string copyFileName = DebugDfn.StrDebugSavePath + "\\Debug(" + DebugDfn._strStartTime + " To " +
- DebugDfn._strEndTime + ")" + ".txt";
+ DebugDfn._strEndTime + ")" + ".txt";
if (!File.Exists(DebugDfn.StrDebugSavePath))
{
//创建文件夹 DebugDfn.StrDebugSavePath
@@ -118,9 +147,8 @@ namespace HexcalMC
return;
}
-
MotionSpeed = FileIni.ReadDouble(StrConfigFile, "MOTOR", "MOTION_SPEED"); //运动定位速度
- //正限位
+ //正限位
XMaxstrokesw = FileIni.ReadDouble(StrConfigFile, "MOTOR", "X_MAXSTROKESW");
YMaxstrokesw = FileIni.ReadDouble(StrConfigFile, "MOTOR", "Y_MAXSTROKESW");
ZMaxstrokesw = FileIni.ReadDouble(StrConfigFile, "MOTOR", "Z_MAXSTROKESW");
@@ -159,19 +187,20 @@ namespace HexcalMC
formsPlot1.Refresh();
}
-
#region 运动平台变量区
public Api _acs;
private const int MaxUiLimitCnt = 24;
private int _mNTotalAxis;
- private int _mNTotalBuffer = 0;
- private Axis[] _mArrAxisList = null;
+
+ //private int _mNTotalBuffer = 0;
+ //private Axis[] _mArrAxisList = null;
public bool _mAcsConnected; //ACS通讯状态
// For update values
private MotorStates _mNMotorState; //运动状态
+
private ProgramStates _mNProgramState; //程序状态
private object _mObjReadVar;
private Array _mArrReadVector;
@@ -184,7 +213,7 @@ namespace HexcalMC
private Label[] _mlblAcc; //加速中
private Label[] _mlblInPos; //轴就位
private Label[] _mlblEnable; //使能
- bool[] axisEnabled = new bool[MaxUiLimitCnt]; //轴使能状态
+ private bool[] axisEnabled = new bool[MaxUiLimitCnt]; //轴使能状态
public bool totalAxisEnabled = false;
private HomeStates _homeStates; //回家状态
@@ -198,6 +227,7 @@ namespace HexcalMC
//定义 XYZ三个轴的左右行程范围
public string StrConfigFile = Application.StartupPath + "\\File\\config.ini";
+
public static double MotionSpeed = 60;
public static double XMaxstrokesw = 730; //正限位
public static double YMaxstrokesw = 1000;
@@ -211,14 +241,13 @@ namespace HexcalMC
//定义一个3D点,存储当前平台实时位置
public Point3D _mPoint3D;
- #endregion
-
+ #endregion 运动平台变量区
#region hexcal软件交互
private void StartServer()
{
- // 对_mTcpIpServer增加判断是否已经启动且存在设备连接
+ // 对_mTcpIpServer增加判断是否已经启动且存在设备连接
if (_mTcpIpServer != null && _mTcpIpServer.ConnectStatus)
{
//弹窗提醒已经启动
@@ -268,9 +297,11 @@ namespace HexcalMC
case "100.0.0.1":
ParseHexcalMsg(msg);
break;
+
case "100.0.0.2":
ParseHexcalMsg(msg);
break;
+
default:
DebugDfn.AddLogText("未知来源,没有应答");
break;
@@ -353,7 +384,6 @@ namespace HexcalMC
//{
// checkPlatformStatus();
//}
-
else if (msg.Contains("CMMTYP")) //测量机类型
{
SendMsgToHexcal("CMMTYP MA 19617, FDC V15.00, 10 8 3 , 0");
@@ -362,7 +392,6 @@ namespace HexcalMC
{
SendMsgToHexcal("00-000-000-00000 FDC V51.04.0000 DATE: 12/21/22 TIME: 12:50:55");
}
-
else if (msg.Contains("SHOW MAXSTROKESW")) //最大行程,根据实际情况填写
{
//MAXSTROKESW 233.200000,346.500000,15.100000,0.000000,0.000000,0.000000,0.000000
@@ -371,7 +400,6 @@ namespace HexcalMC
string resultString = ConstructString("MAXSTROKESW", values);
SendMsgToHexcal(resultString);
}
-
else if (msg.Contains("SHOW MINSTROKESW")) //最小行程,根据实际情况填写
{
//MINSTROKESW -68.800000,-55.500000,-286.900000,0.000000,0.000000,0.000000,0.000000
@@ -470,7 +498,7 @@ namespace HexcalMC
//执行回家
IsHomed();
}
- else if (msg.Contains("MOVABS")) //移动指令,解析移动位置
+ else if (msg.Contains("MOVABS")) //移动指令,解析移动位置
{
//收到指令 ,形如 MOVABS 0.015000,127.172997,-114.897003,0.000000\r\n
SendMsgToHexcal("%");
@@ -504,6 +532,7 @@ namespace HexcalMC
case TcpIpServer.EnumTcpIpServer.ClientConnect:
_mBHexcalConnected = true;
break;
+
default:
_mBHexcalConnected = false;
break;
@@ -514,7 +543,6 @@ namespace HexcalMC
{
if (_mTcpIpServer == null) return;
-
//发送数据
DebugDfn.AddLogText("回复 " + msg);
_mTcpIpServer.SendMessageToAllClients(msg += "\r\n"); //回复内容末尾加上\r\n,协议要求
@@ -542,7 +570,7 @@ namespace HexcalMC
DebugDfn.AddLogText("TCP服务端已关闭");
}
- #endregion
+ #endregion hexcal软件交互
#region ACS平台相关
@@ -550,7 +578,6 @@ namespace HexcalMC
//实现函数
-
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
// 防止程序终止
@@ -558,7 +585,6 @@ namespace HexcalMC
MessageBoxIcon.Information);
}
-
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
if (e.ExceptionObject is Exception ex)
@@ -573,7 +599,6 @@ namespace HexcalMC
MessageBoxIcon.Information);
}
-
//订阅报错
private void EnableFaultEvent()
{
@@ -689,8 +714,7 @@ namespace HexcalMC
//DebugDfn.AddLogText(string.Format(" - Axis {0}, Stoppped", axisNo));
}
- #endregion
-
+ #endregion 异常抓取
private void BtnEnable_Click(object sender, EventArgs e) //使能所有轴
{
@@ -768,8 +792,7 @@ namespace HexcalMC
UpdateSingleAxisStatus(); //刷新运动状态
- #endregion
-
+ #endregion 更新限位及运动状态
#region 到位判断
@@ -788,11 +811,15 @@ namespace HexcalMC
if (_currentMotionState == MotionStates.InPos && _currentMotionState != _currentMotorStateLast)
{
DebugDfn.AddLogText("运动到位");
+ if (isCounting)
+ {
+ m_nInPosCount++;
+ }
}
_currentMotorStateLast = _currentMotionState;
- #endregion
+ #endregion 到位判断
}
catch (Exception ex)
{
@@ -823,7 +850,6 @@ namespace HexcalMC
tmrMonitor.Interval = 50;
tmrMonitor.Start();
}
-
catch (COMException comex)
{
MessageBox.Show("Connection fail", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
@@ -831,7 +857,6 @@ namespace HexcalMC
_mAcsConnected = false;
}
-
catch (Exception ex)
{
DebugDfn.AddLogText("ACS平台连接异常" + ex);
@@ -841,12 +866,10 @@ namespace HexcalMC
private void Btn_ACSStop_Click(object sender, EventArgs e) //断开连接
{
-
if (_mAcsConnected)
{
//DisableFaultEvent(); //取消注册事件
_acs.CloseComm();
-
}
tmrMonitor.Stop();
@@ -877,9 +900,11 @@ namespace HexcalMC
case Axis.ACSC_AXIS_1: //X轴
newAxisNumber = 0;
break;
+
case Axis.ACSC_AXIS_0:
newAxisNumber = 1; //Y轴
break;
+
case Axis.ACSC_AXIS_8:
newAxisNumber = 2;
break;
@@ -1053,7 +1078,6 @@ namespace HexcalMC
_mLblLeftLimit[1] = lblLL1;
_mLblLeftLimit[2] = lblLL2;
-
_mLblRightLimit = new Label[MaxUiLimitCnt]; //右限位
_mLblRightLimit[0] = lblRL0;
_mLblRightLimit[1] = lblRL1;
@@ -1085,8 +1109,20 @@ namespace HexcalMC
public static bool IsWithinLimit(Point3D point) //判断点是否在行程范围内
{
if (point.X >= XMinstrokesw && point.X <= XMaxstrokesw &&
- point.Y >= YMinstrokesw && point.Y <= YMaxstrokesw &&
- point.Z >= ZMinstrokesw && point.Z <= ZMaxstrokesw)
+ point.Y >= YMinstrokesw && point.Y <= YMaxstrokesw &&
+ point.Z >= ZMinstrokesw && point.Z <= ZMaxstrokesw)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static bool IsWithinLimit(Point point) //判断点是否在行程范围内
+ {
+ if (point.X >= XMinstrokesw && point.X <= XMaxstrokesw &&
+ point.Y >= YMinstrokesw && point.Y <= YMaxstrokesw &&
+ point.Z >= ZMinstrokesw && point.Z <= ZMaxstrokesw)
{
return true;
}
@@ -1106,7 +1142,7 @@ namespace HexcalMC
if (_currentMotionState != MotionStates.Moving)
{
_currentMotionState = MotionStates.Moving; //设置当前运动状态
- //判断 point3D是否合法
+ //判断 point3D是否合法
if (point3D != null)
{
if (IsWithinLimit(point3D)) //判断点是否在行程范围内
@@ -1118,7 +1154,7 @@ namespace HexcalMC
point3D.Z
};
//判断各轴使能状态,如果未使能,则使能
-
+
if (!totalAxisEnabled)
{
_acs.EnableM(UseAxis);
@@ -1176,7 +1212,6 @@ namespace HexcalMC
DebugDfn.AddLogText("参考位置: " + xPosition + " " + yPosition + " " + zPosition);
}
-
//构造point3D格式
point3D = new Point3D(xPosition, yPosition, zPosition);
@@ -1209,7 +1244,6 @@ namespace HexcalMC
private void rtb_quick_loc_Click(object sender, EventArgs e)//快速定位
{
-
// 获取文本框的值
double x = double.Parse(rtb_SetX.Text);
double y = double.Parse(rtb_Sety.Text);
@@ -1221,7 +1255,7 @@ namespace HexcalMC
SetPositionXyz(point);
}
- static bool CalculateTotalEnabled(bool[] axisEnabled, params int[] axisIndices)//判断轴使能状态
+ private static bool CalculateTotalEnabled(bool[] axisEnabled, params int[] axisIndices)//判断轴使能状态
{
bool totalEnabled = true;
foreach (int index in axisIndices)
@@ -1271,8 +1305,6 @@ namespace HexcalMC
return;
}
-
-
if (_currentMotionState != MotionStates.Moving)
{
_currentMotionState = MotionStates.Moving; //设置当前运动状态
@@ -1297,8 +1329,21 @@ namespace HexcalMC
private void rtb_etalon_Click(object sender, EventArgs e) //etalon校准
{
DebugDfn.AddLogText("Etalon校准");
- EtalonForm etalonForm = new EtalonForm();
- etalonForm.ShowDialog();
+ //判断通讯对象是否存在
+ if (_acs == null || !_acs.IsConnected)
+ {
+ DebugDfn.AddLogText("未建立与运动平台通讯,请在主界面先建立通讯");
+
+ // 在合适的位置调用 MessageBox.Show() 方法
+ MessageBox.Show("未建立与运动平台通讯,请在主界面先建立通讯", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+ return;
+ }
+ else
+ {
+ EtalonForm etalonForm = new EtalonForm(this);
+ etalonForm.Show();
+ }
}
#endregion ACS平台相关
@@ -1321,9 +1366,7 @@ namespace HexcalMC
{
Motion motion = new Motion(this);
motion.Show();
-
}
-
}
private void Rtb_about_Click(object sender, EventArgs e) //关于界面
diff --git a/HexcalMC/Motion/EtalonForm.Designer.cs b/HexcalMC/Motion/EtalonForm.Designer.cs
index 172a1d6..5df80f6 100644
--- a/HexcalMC/Motion/EtalonForm.Designer.cs
+++ b/HexcalMC/Motion/EtalonForm.Designer.cs
@@ -29,9 +29,7 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EtalonForm));
- this.button1 = new System.Windows.Forms.Button();
- this.statusStrip1 = new System.Windows.Forms.StatusStrip();
- this.editor3D = new Plot3D.Editor3D();
+ this.btn_draw_test = new System.Windows.Forms.Button();
this.checkMirrorY = new System.Windows.Forms.CheckBox();
this.checkMirrorX = new System.Windows.Forms.CheckBox();
this.label8 = new System.Windows.Forms.Label();
@@ -42,73 +40,58 @@
this.label3 = new System.Windows.Forms.Label();
this.comboRaster = new System.Windows.Forms.ComboBox();
this.comboColors = new System.Windows.Forms.ComboBox();
- this.labelMouseInfo = new System.Windows.Forms.ToolStripStatusLabel();
- this.button2 = new System.Windows.Forms.Button();
- this.textBox1 = new System.Windows.Forms.TextBox();
- this.statusStrip1.SuspendLayout();
+ this.btn_etalon_import = new System.Windows.Forms.Button();
+ this.labelMouseInfo = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.btn_clear = new System.Windows.Forms.Button();
+ this.btn_startmove = new System.Windows.Forms.Button();
+ this.btn_stop = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.text_etalon_info = new System.Windows.Forms.RichTextBox();
+ this.editor3D = new Plot3D.Editor3D();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
- // button1
+ // btn_draw_test
//
- this.button1.Location = new System.Drawing.Point(9, 569);
- this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(121, 23);
- this.button1.TabIndex = 1;
- this.button1.Text = "button1";
- this.button1.UseVisualStyleBackColor = true;
- this.button1.Click += new System.EventHandler(this.button1_Click);
- //
- // statusStrip1
- //
- this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.labelMouseInfo});
- this.statusStrip1.Location = new System.Drawing.Point(0, 679);
- this.statusStrip1.Name = "statusStrip1";
- this.statusStrip1.Size = new System.Drawing.Size(1020, 22);
- this.statusStrip1.TabIndex = 2;
- this.statusStrip1.Text = "statusStrip1";
- //
- // editor3D
- //
- this.editor3D.BackColor = System.Drawing.Color.White;
- this.editor3D.BorderColorFocus = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(153)))), ((int)(((byte)(255)))));
- this.editor3D.BorderColorNormal = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
- this.editor3D.LegendPos = Plot3D.Editor3D.eLegendPos.BottomLeft;
- this.editor3D.Location = new System.Drawing.Point(159, 25);
- this.editor3D.Name = "editor3D";
- this.editor3D.Normalize = Plot3D.Editor3D.eNormalize.Separate;
- this.editor3D.Raster = Plot3D.Editor3D.eRaster.Labels;
- this.editor3D.Size = new System.Drawing.Size(515, 610);
- this.editor3D.TabIndex = 0;
- this.editor3D.TooltipMode = ((Plot3D.Editor3D.eTooltip)((Plot3D.Editor3D.eTooltip.UserText | Plot3D.Editor3D.eTooltip.Coord)));
- this.editor3D.TopLegendColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(150)))));
+ this.btn_draw_test.Location = new System.Drawing.Point(8, 539);
+ this.btn_draw_test.Name = "btn_draw_test";
+ this.btn_draw_test.Size = new System.Drawing.Size(121, 23);
+ this.btn_draw_test.TabIndex = 1;
+ this.btn_draw_test.Text = "绘图测试";
+ this.btn_draw_test.UseVisualStyleBackColor = true;
+ this.btn_draw_test.Click += new System.EventHandler(this.btn_draw_test_Click);
//
// checkMirrorY
//
this.checkMirrorY.AutoSize = true;
this.checkMirrorY.BackColor = System.Drawing.Color.Transparent;
- this.checkMirrorY.Location = new System.Drawing.Point(81, 149);
+ this.checkMirrorY.Location = new System.Drawing.Point(80, 111);
this.checkMirrorY.Name = "checkMirrorY";
this.checkMirrorY.Size = new System.Drawing.Size(72, 16);
this.checkMirrorY.TabIndex = 39;
this.checkMirrorY.Text = "Mirror Y";
this.checkMirrorY.UseVisualStyleBackColor = false;
+ this.checkMirrorY.CheckedChanged += new System.EventHandler(this.checkMirrorY_CheckedChanged);
//
// checkMirrorX
//
this.checkMirrorX.AutoSize = true;
this.checkMirrorX.BackColor = System.Drawing.Color.Transparent;
- this.checkMirrorX.Location = new System.Drawing.Point(9, 149);
+ this.checkMirrorX.Location = new System.Drawing.Point(8, 111);
this.checkMirrorX.Name = "checkMirrorX";
this.checkMirrorX.Size = new System.Drawing.Size(72, 16);
this.checkMirrorX.TabIndex = 38;
this.checkMirrorX.Text = "Mirror X";
this.checkMirrorX.UseVisualStyleBackColor = false;
+ this.checkMirrorX.CheckedChanged += new System.EventHandler(this.checkMirrorX_CheckedChanged);
//
// label8
//
this.label8.AutoSize = true;
- this.label8.Location = new System.Drawing.Point(7, 168);
+ this.label8.Location = new System.Drawing.Point(6, 130);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(89, 12);
this.label8.TabIndex = 31;
@@ -122,119 +105,209 @@
"Left Theta, Right Phi",
"Left Theta and Phi",
"Middle Theta and Phi"});
- this.comboMouse.Location = new System.Drawing.Point(9, 181);
+ this.comboMouse.Location = new System.Drawing.Point(8, 143);
this.comboMouse.MaxDropDownItems = 30;
this.comboMouse.Name = "comboMouse";
this.comboMouse.Size = new System.Drawing.Size(121, 20);
this.comboMouse.TabIndex = 40;
+ this.comboMouse.SelectedIndexChanged += new System.EventHandler(this.comboMouse_SelectedIndexChanged);
//
// btnReset
//
- this.btnReset.Location = new System.Drawing.Point(9, 205);
+ this.btnReset.Location = new System.Drawing.Point(8, 167);
this.btnReset.Name = "btnReset";
this.btnReset.Size = new System.Drawing.Size(121, 21);
this.btnReset.TabIndex = 41;
- this.btnReset.Text = "Reset Position";
+ this.btnReset.Text = "重置视图";
this.btnReset.UseVisualStyleBackColor = true;
+ this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
//
// btnScreenshot
//
- this.btnScreenshot.Location = new System.Drawing.Point(9, 230);
+ this.btnScreenshot.Location = new System.Drawing.Point(8, 192);
this.btnScreenshot.Name = "btnScreenshot";
this.btnScreenshot.Size = new System.Drawing.Size(121, 21);
this.btnScreenshot.TabIndex = 42;
- this.btnScreenshot.Text = "Save Screenshot";
+ this.btnScreenshot.Text = "保存截图";
this.btnScreenshot.UseVisualStyleBackColor = true;
+ this.btnScreenshot.Click += new System.EventHandler(this.btnScreenshot_Click);
//
// label4
//
this.label4.AutoSize = true;
- this.label4.Location = new System.Drawing.Point(7, 95);
+ this.label4.Location = new System.Drawing.Point(6, 57);
this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(113, 12);
+ this.label4.Size = new System.Drawing.Size(47, 12);
this.label4.TabIndex = 28;
- this.label4.Text = "Coordinate System:";
+ this.label4.Text = "坐标系:";
//
// label3
//
this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(7, 58);
+ this.label3.Location = new System.Drawing.Point(6, 20);
this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(83, 12);
+ this.label3.Size = new System.Drawing.Size(35, 12);
this.label3.TabIndex = 27;
- this.label3.Text = "Color Scheme:";
+ this.label3.Text = "色卡:";
//
// comboRaster
//
this.comboRaster.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboRaster.FormattingEnabled = true;
- this.comboRaster.Location = new System.Drawing.Point(9, 109);
+ this.comboRaster.Location = new System.Drawing.Point(8, 71);
this.comboRaster.MaxDropDownItems = 30;
this.comboRaster.Name = "comboRaster";
this.comboRaster.Size = new System.Drawing.Size(121, 20);
this.comboRaster.TabIndex = 36;
+ this.comboRaster.SelectedIndexChanged += new System.EventHandler(this.comboRaster_SelectedIndexChanged);
//
// comboColors
//
this.comboColors.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboColors.FormattingEnabled = true;
- this.comboColors.Location = new System.Drawing.Point(9, 73);
+ this.comboColors.Location = new System.Drawing.Point(8, 35);
this.comboColors.MaxDropDownItems = 30;
this.comboColors.Name = "comboColors";
this.comboColors.Size = new System.Drawing.Size(121, 20);
this.comboColors.TabIndex = 35;
+ this.comboColors.SelectedIndexChanged += new System.EventHandler(this.comboColors_SelectedIndexChanged);
+ //
+ // btn_etalon_import
+ //
+ this.btn_etalon_import.Location = new System.Drawing.Point(15, 29);
+ this.btn_etalon_import.Name = "btn_etalon_import";
+ this.btn_etalon_import.Size = new System.Drawing.Size(102, 30);
+ this.btn_etalon_import.TabIndex = 43;
+ this.btn_etalon_import.Text = "导入etalon文件";
+ this.btn_etalon_import.UseVisualStyleBackColor = true;
+ this.btn_etalon_import.Click += new System.EventHandler(this.btn_etalon_import_Click);
//
// labelMouseInfo
//
+ this.labelMouseInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.labelMouseInfo.AutoSize = true;
+ this.labelMouseInfo.ForeColor = System.Drawing.Color.Blue;
+ this.labelMouseInfo.Location = new System.Drawing.Point(146, 614);
this.labelMouseInfo.Name = "labelMouseInfo";
- this.labelMouseInfo.Size = new System.Drawing.Size(99, 17);
- this.labelMouseInfo.Text = "labelMouseInfo";
+ this.labelMouseInfo.Size = new System.Drawing.Size(65, 12);
+ this.labelMouseInfo.TabIndex = 45;
+ this.labelMouseInfo.Text = "Mouse Info";
//
- // button2
+ // groupBox1
//
- this.button2.Location = new System.Drawing.Point(933, 106);
- this.button2.Name = "button2";
- this.button2.Size = new System.Drawing.Size(75, 23);
- this.button2.TabIndex = 43;
- this.button2.Text = "button2";
- this.button2.UseVisualStyleBackColor = true;
+ this.groupBox1.Controls.Add(this.btn_clear);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Controls.Add(this.labelMouseInfo);
+ this.groupBox1.Controls.Add(this.btn_draw_test);
+ this.groupBox1.Controls.Add(this.comboColors);
+ this.groupBox1.Controls.Add(this.comboRaster);
+ this.groupBox1.Controls.Add(this.editor3D);
+ this.groupBox1.Controls.Add(this.checkMirrorY);
+ this.groupBox1.Controls.Add(this.label4);
+ this.groupBox1.Controls.Add(this.checkMirrorX);
+ this.groupBox1.Controls.Add(this.btnScreenshot);
+ this.groupBox1.Controls.Add(this.label8);
+ this.groupBox1.Controls.Add(this.btnReset);
+ this.groupBox1.Controls.Add(this.comboMouse);
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(717, 643);
+ this.groupBox1.TabIndex = 46;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "可视化";
//
- // textBox1
+ // btn_clear
//
- this.textBox1.Location = new System.Drawing.Point(691, 106);
- this.textBox1.Multiline = true;
- this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(213, 23);
- this.textBox1.TabIndex = 44;
+ this.btn_clear.Location = new System.Drawing.Point(8, 568);
+ this.btn_clear.Name = "btn_clear";
+ this.btn_clear.Size = new System.Drawing.Size(121, 23);
+ this.btn_clear.TabIndex = 46;
+ this.btn_clear.Text = "清空绘图";
+ this.btn_clear.UseVisualStyleBackColor = true;
+ this.btn_clear.Click += new System.EventHandler(this.btn_clear_Click);
+ //
+ // btn_startmove
+ //
+ this.btn_startmove.Image = global::HexcalMC.Properties.Resources.start;
+ this.btn_startmove.Location = new System.Drawing.Point(15, 116);
+ this.btn_startmove.Name = "btn_startmove";
+ this.btn_startmove.Size = new System.Drawing.Size(72, 72);
+ this.btn_startmove.TabIndex = 47;
+ this.btn_startmove.UseVisualStyleBackColor = true;
+ this.btn_startmove.Click += new System.EventHandler(this.btn_startmove_Click);
+ //
+ // btn_stop
+ //
+ this.btn_stop.Image = global::HexcalMC.Properties.Resources.stop;
+ this.btn_stop.Location = new System.Drawing.Point(128, 116);
+ this.btn_stop.Name = "btn_stop";
+ this.btn_stop.Size = new System.Drawing.Size(72, 72);
+ this.btn_stop.TabIndex = 48;
+ this.btn_stop.UseVisualStyleBackColor = true;
+ this.btn_stop.Click += new System.EventHandler(this.btn_stop_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.text_etalon_info);
+ this.groupBox2.Controls.Add(this.label1);
+ this.groupBox2.Controls.Add(this.btn_startmove);
+ this.groupBox2.Controls.Add(this.btn_stop);
+ this.groupBox2.Controls.Add(this.btn_etalon_import);
+ this.groupBox2.Location = new System.Drawing.Point(747, 12);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(465, 643);
+ this.groupBox2.TabIndex = 49;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "etalon操作";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(9, 225);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(29, 12);
+ this.label1.TabIndex = 49;
+ this.label1.Text = "输出";
+ //
+ // text_etalon_info
+ //
+ this.text_etalon_info.Location = new System.Drawing.Point(6, 249);
+ this.text_etalon_info.Name = "text_etalon_info";
+ this.text_etalon_info.Size = new System.Drawing.Size(440, 361);
+ this.text_etalon_info.TabIndex = 50;
+ this.text_etalon_info.Text = "";
+ //
+ // editor3D
+ //
+ this.editor3D.BackColor = System.Drawing.Color.White;
+ this.editor3D.BorderColorFocus = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(153)))), ((int)(((byte)(255)))));
+ this.editor3D.BorderColorNormal = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
+ this.editor3D.LegendPos = Plot3D.Editor3D.eLegendPos.BottomLeft;
+ this.editor3D.Location = new System.Drawing.Point(148, 20);
+ this.editor3D.Name = "editor3D";
+ this.editor3D.Normalize = Plot3D.Editor3D.eNormalize.Separate;
+ this.editor3D.Raster = Plot3D.Editor3D.eRaster.Labels;
+ this.editor3D.Size = new System.Drawing.Size(548, 590);
+ this.editor3D.TabIndex = 0;
+ this.editor3D.TooltipMode = ((Plot3D.Editor3D.eTooltip)((Plot3D.Editor3D.eTooltip.UserText | Plot3D.Editor3D.eTooltip.Coord)));
+ this.editor3D.TopLegendColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(150)))));
//
// EtalonForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1020, 701);
- this.Controls.Add(this.textBox1);
- this.Controls.Add(this.button2);
- this.Controls.Add(this.checkMirrorY);
- this.Controls.Add(this.checkMirrorX);
- this.Controls.Add(this.label8);
- this.Controls.Add(this.comboMouse);
- this.Controls.Add(this.btnReset);
- this.Controls.Add(this.btnScreenshot);
- this.Controls.Add(this.label4);
- this.Controls.Add(this.label3);
- this.Controls.Add(this.comboRaster);
- this.Controls.Add(this.comboColors);
- this.Controls.Add(this.statusStrip1);
- this.Controls.Add(this.button1);
- this.Controls.Add(this.editor3D);
+ this.ClientSize = new System.Drawing.Size(1237, 681);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "EtalonForm";
this.Text = "EtalonForm";
this.Load += new System.EventHandler(this.EtalonForm_Load);
- this.statusStrip1.ResumeLayout(false);
- this.statusStrip1.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
this.ResumeLayout(false);
- this.PerformLayout();
}
@@ -242,8 +315,7 @@
#endregion
private Plot3D.Editor3D editor3D;
- private System.Windows.Forms.Button button1;
- private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.Button btn_draw_test;
private System.Windows.Forms.CheckBox checkMirrorY;
private System.Windows.Forms.CheckBox checkMirrorX;
private System.Windows.Forms.Label label8;
@@ -254,8 +326,14 @@
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ComboBox comboRaster;
private System.Windows.Forms.ComboBox comboColors;
- private System.Windows.Forms.ToolStripStatusLabel labelMouseInfo;
- private System.Windows.Forms.Button button2;
- private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button btn_etalon_import;
+ private System.Windows.Forms.Label labelMouseInfo;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button btn_startmove;
+ private System.Windows.Forms.Button btn_stop;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Button btn_clear;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.RichTextBox text_etalon_info;
}
}
\ No newline at end of file
diff --git a/HexcalMC/Motion/EtalonForm.cs b/HexcalMC/Motion/EtalonForm.cs
index f1e5306..d2d80ba 100644
--- a/HexcalMC/Motion/EtalonForm.cs
+++ b/HexcalMC/Motion/EtalonForm.cs
@@ -10,9 +10,6 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
-using ScottPlot;
-using ScottPlot.Plottable;
-
using Plot3D;
// enums
@@ -47,6 +44,13 @@ using cUserInput = Plot3D.Editor3D.cUserInput;
using delRendererFunction = Plot3D.Editor3D.delRendererFunction;
using static Plot3D.Editor3D;
using System.Diagnostics;
+using System.Drawing.Imaging;
+using System.Text.RegularExpressions;
+using System.IO;
+using Telerik.WinControls;
+using static Telerik.WinControls.UI.ValueMapper;
+using HexcalMC.Base;
+using ACS.SPiiPlusNET;
namespace HexcalMC
{
@@ -85,18 +89,65 @@ namespace HexcalMC
private cPoint3D[] mi_Pyramid;
private int ms32_AnimationAngle;
- public EtalonForm()
+ // etalon解析变量
+ private List etalon_points = new List();
+
+ private List filteredPoints = new List(); //过滤后的点
+ private List dwellTimes = new List();
+
+ private static Timer refresh_time = new Timer();
+ private static int currentIndex = 0;
+
+ private readonly MainFrom mainFrom;
+ private readonly Api _acs; //ACS控制器
+
+ public EtalonForm(MainFrom _mainFrom)
{
InitializeComponent();
+ mainFrom = _mainFrom;
+ this._acs = _mainFrom._acs;
}
private void EtalonForm_Load(object sender, EventArgs e)
{
+ InitScatterPlot(); //清空绘图
+ DebugDfn.textBox_Msg = this.text_etalon_info;
+ }
+
+ private void InitScatterPlot() //绘图区初始化
+ {
+ comboColors.Sorted = false;
+ foreach (eColorScheme e_Scheme in Enum.GetValues(typeof(eColorScheme)))
+ {
+ comboColors.Items.Add(e_Scheme.ToString().Replace('_', ' '));
+ }
+ comboColors.SelectedIndex = (int)eColorScheme.Monochrome; //默认色卡
+
+ comboRaster.Sorted = false;
+ foreach (eRaster e_Raster in Enum.GetValues(typeof(eRaster)))
+ {
+ comboRaster.Items.Add(e_Raster);
+ }
+ comboRaster.SelectedIndex = (int)eRaster.Labels; //坐标系栅格样式
+
+ //设置默认
+ comboMouse.SelectedIndex = 0;
+
+ // 设置定时器
+ refresh_time.Interval = 100;
+ refresh_time.Tick += new EventHandler(OnAnimationTimer);
+ refresh_time.Start();
}
private void DemoScatterPlot(bool b_Lines)
{
+ comboColors.Enabled = true; // Some of the demos will disable this combobox
+ me_ColorScheme = (eColorScheme)comboColors.SelectedIndex;
+
+ checkMirrorX.Checked = editor3D.AxisX.Mirror;
+ checkMirrorY.Checked = editor3D.AxisY.Mirror;
+
// 3 pixels for line width and for circle radius
const int SIZE = 3;
@@ -138,31 +189,8 @@ namespace HexcalMC
editor3D.Selection.Enabled = true;
editor3D.UndoBuffer.Enabled = true;
editor3D.Invalidate();
-
- // For shapes this setting does not make a difference
- //checkPointSelection.Checked = false;
- //if (!b_Lines)
- // checkPointSelection.Enabled = false;
}
- //; Machine: ZIM
- //; Position: 1
- //; Created: 2/15/2023 12:29:13 PM
- //; Program: TRAC-CAL V48, Build: 10, 5/13/2022 8:29:25 AM
- //; File: 'cncData.xml'
- //G71
- //G90
- //G500
- //G01 X8000.000 Y200.000 Z-1400.000 F2000
- //G04 F=2
- //G01 X7800.000 Y300.000 Z-1400.000 F2000
- //G04 F=2
- //G01 X7600.000 Y400.000 Z-1400.000 F2000
- //G04 F=2
- //G01 X7400.000 Y500.000 Z-1400.000 F2000
- //G04 F=2
- //G01 X7200.000 Y600.000 Z-1400.000 F2000
-
private eInvalidate OnSelectEvent(eSelEvent e_Event, Keys e_Modifiers, int s32_DeltaX, int s32_DeltaY, cObject3D i_Object)//
{
eInvalidate e_Invalidate = eInvalidate.NoChange;
@@ -219,41 +247,395 @@ namespace HexcalMC
mi_StatusTimer.Stop();
-
-
mi_StatusTimer.Start();
return e_Invalidate;
}
- private void button1_Click(object sender, EventArgs e)
+ private void comboRaster_SelectedIndexChanged(object sender, EventArgs e) //坐标栅格样式
{
- DemoScatterPlot(false);
+ editor3D.Raster = (eRaster)comboRaster.SelectedIndex;
+ editor3D.Invalidate();
}
-
+ private void checkMirrorY_CheckedChanged(object sender, EventArgs e) //Y轴镜像
+ {
+ editor3D.AxisY.Mirror = checkMirrorY.Checked;
+ editor3D.Invalidate();
+ }
- private void comboMouse_SelectedIndexChanged(object sender, EventArgs e)
+ private void checkMirrorX_CheckedChanged(object sender, EventArgs e) //x轴镜像
+ {
+ editor3D.AxisX.Mirror = checkMirrorX.Checked;
+ editor3D.Invalidate();
+ }
+
+ private void btnReset_Click(object sender, EventArgs e) //重置视图
+ {
+ editor3D.SetCoefficients(1350, 70, 230);
+ editor3D.Invalidate();
+ }
+
+ private void btnScreenshot_Click(object sender, EventArgs e) //截图保存
+ {
+ SaveFileDialog i_Dlg = new SaveFileDialog();
+ i_Dlg.Title = "Save as PNG image";
+ i_Dlg.Filter = "PNG Image|*.png";
+ i_Dlg.DefaultExt = ".png";
+
+ if (DialogResult.Cancel == i_Dlg.ShowDialog(this))
+ return;
+
+ Bitmap i_Bitmap = editor3D.GetScreenshot();
+ try
+ {
+ i_Bitmap.Save(i_Dlg.FileName, ImageFormat.Png);
+ }
+ catch (Exception Ex)
+ {
+ MessageBox.Show(this, Ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void comboMouse_SelectedIndexChanged(object sender, EventArgs e) //鼠标控制方式
{
switch (comboMouse.SelectedIndex)
{
case 0:
editor3D.SetUserInputs(eMouseCtrl.L_Theta_R_Phi);
- labelMouseInfo.Text = "Left mouse: Elevate, Right mouse: Rotate";
+ labelMouseInfo.Text = "鼠标左键:升高,鼠标右键:旋转";
break;
+
case 1:
editor3D.SetUserInputs(eMouseCtrl.L_Theta_L_Phi);
- labelMouseInfo.Text = "Left mouse: Elevate and Rotate";
+ labelMouseInfo.Text = "鼠标左键:升高和旋转";
break;
+
case 2:
editor3D.SetUserInputs(eMouseCtrl.M_Theta_M_Phi);
- labelMouseInfo.Text = "Middle mouse: Elevate and Rotate";
+ labelMouseInfo.Text = "鼠标中键:升高和旋转";
break;
+
default:
Debug.Assert(false);
break;
}
- labelMouseInfo.Text += ", Left mouse + SHIFT: Move, Left mouse + CTRL or wheel: Zoom, Left mouse + ALT: Select";
+ labelMouseInfo.Text += ", 鼠标左键 + SHIFT:移动、鼠标左键 + CTRL 或滚轮:缩放、鼠标左键 + ALT:选择";
+ }
+
+ private void comboColors_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ me_ColorScheme = (eColorScheme)comboColors.SelectedIndex;
+
+ //判断 points 是否为空,表示当前是否已经有真实数据
+ if (etalon_points.Count > 0)
+ {
+ PointScatterPlot(etalon_points); //更新真实数据
+ }
+ //else
+ //{
+ // DemoScatterPlot(false); //更新虚拟数据
+ //}
+ }
+
+ private void btn_startmove_Click(object sender, EventArgs e) //开始运动
+ {
+ DebugDfn.AddLogText("开始运动");
+ int timeout = 5000;
+
+ Axis[] axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1, Axis.ACSC_AXIS_8, Axis.ACSC_NONE };
+
+ //判断电机状态
+ if (!mainFrom.totalAxisEnabled)
+ {
+ DebugDfn.AddLogText("存在电机未使能");
+
+ _acs.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); //Y轴
+ // Wait axis 1 enabled during 5 sec
+ _acs.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout);
+
+ _acs.WaitMotorEnabled(Axis.ACSC_AXIS_8, 1, timeout);
+
+ DebugDfn.AddLogText("电机已启用");
+ }
+
+ // 创建多点运动
+ double dwellTime = dwellTimes.Average()*1000; //将秒转换为毫秒
+ DebugDfn.AddLogText("平均停顿时间(毫秒):" + dwellTime);
+ _acs.MultiPointM(MotionFlags.ACSC_NONE, axes, dwellTime);
+
+ //判断是否有点
+ if (filteredPoints.Count == 0)
+ {
+ DebugDfn.AddLogText("没有点");
+ return;
+ }
+
+ // 添加符合条件的点到运动路径中
+ foreach (var point in filteredPoints)
+ {
+ double[] points = new double[3];
+ points[0] = point.Y;
+ points[1] = point.X;
+ points[2] = point.Z;
+ _acs.AddPointM(axes, points);
+
+ }
+ // 打印添加点的数量
+ DebugDfn.AddLogText("添加点的数量:" + filteredPoints.Count);
+
+ // Finish the motion End of the multi-point motion
+ _acs.EndSequenceM(axes);
+
+ //启动统计
+ mainFrom.StartCounting();
+ }
+
+ private void btn_stop_Click(object sender, EventArgs e) //停止运动
+ {
+ DebugDfn.AddLogText("停止运动");
+ try
+ {
+ Axis[] m_arrAxisList = new Axis[] { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1, Axis.ACSC_AXIS_8, Axis.ACSC_NONE };
+
+ if (m_arrAxisList != null) _acs.HaltM(m_arrAxisList);
+
+ DebugDfn.AddLogText("立即停止 已发送命令");
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ Debug.WriteLine(ex.Message);
+ }
+
+ //停止统计
+ mainFrom.StopCounting();
+ }
+
+ private void btn_etalon_import_Click(object sender, EventArgs e) //解析Etalon文件
+ {
+ //打开文件对号框,选择 mpf格式文件
+ OpenFileDialog i_Dlg = new OpenFileDialog();
+ i_Dlg.Title = "导入Etalon文件";
+ i_Dlg.Filter = "Etalon文件|*.mpf";
+ i_Dlg.DefaultExt = ".mpf";
+ i_Dlg.Multiselect = false;
+
+ if (DialogResult.Cancel == i_Dlg.ShowDialog(this))
+ return;
+
+ //读取文件
+ string s_File = i_Dlg.FileName;
+
+ //设置路径显示
+
+ DebugDfn.AddLogText("导入Etalon文件:" + s_File);
+
+ //解析文件
+ parse_mpf_file(s_File);
+
+ DebugDfn.AddLogText("Etalon文件解析完成");
+ }
+
+ private bool parse_mpf_file(string mpf_file_path) // 编写解析mpf文件的函数
+ {
+ //; Machine: ZIM
+ //; Position: 1
+ //; Created: 2/15/2023 12:29:13 PM
+ //; Program: TRAC-CAL V48, Build: 10, 5/13/2022 8:29:25 AM
+ //; File: 'cncData.xml'
+ //G71
+ //G90
+ //G500
+ //G01 X8000.000 Y200.000 Z-1400.000 F2000 //坐标
+ //G04 F=2 // 停顿时间
+ //G01 X7800.000 Y300.000 Z-1400.000 F2000
+ //G04 F=2
+ //G01 X7600.000 Y400.000 Z-1400.000 F2000
+ //G04 F=2
+ //G01 X7400.000 Y500.000 Z-1400.000 F2000
+ //G04 F=2
+ //G01 X7200.000 Y600.000 Z-1400.000 F2000
+
+ //判断文件是否存在
+ if (!File.Exists(mpf_file_path))
+ {
+ MessageBox.Show("文件不存在");
+ return false;
+ }
+
+ //清空之前的数据
+ etalon_points.Clear();
+ filteredPoints.Clear();
+ dwellTimes.Clear();
+
+ //读取文件
+ string[] lines = File.ReadAllLines(mpf_file_path);
+ Regex regex = new Regex(@"G01 X(?[-+]?\d*\.?\d+) Y(?[-+]?\d*\.?\d+) Z(?[-+]?\d*\.?\d+)");
+ Regex dwellRegex = new Regex(@"G04 F=(?\d+)");
+
+ foreach (string line in lines)
+ {
+ Match match = regex.Match(line);
+ if (match.Success)
+ {
+ double x = double.Parse(match.Groups["X"].Value);
+ double y = double.Parse(match.Groups["Y"].Value);
+ double z = double.Parse(match.Groups["Z"].Value);
+ etalon_points.Add(new Point(x, y, z));
+ }
+
+ Match dwellMatch = dwellRegex.Match(line);
+ if (dwellMatch.Success)
+ {
+ int f = int.Parse(dwellMatch.Groups["F"].Value);
+ dwellTimes.Add(f);
+ }
+ }
+
+ // 输出解析结果
+ //Console.WriteLine("Points:");
+ //foreach (var point in etalon_points)
+ //{
+ // Console.WriteLine($"X: {point.X}, Y: {point.Y}, Z: {point.Z}");
+ //}
+
+ //Console.WriteLine("Dwell Times:");
+ //foreach (var dwellTime in dwellTimes)
+ //{
+ // Console.WriteLine($"F: {dwellTime}");
+ //}
+
+ //过滤点集
+ foreach (var point in etalon_points)
+ {
+ if (MainFrom.IsWithinLimit(point)) //判断点是否在行程范围内
+ {
+ filteredPoints.Add(point);
+ }
+ }
+
+ //打印过滤后的点集大小
+ DebugDfn.AddLogText("过滤后的点集大小:" + filteredPoints.Count);
+ PointScatterPlot(filteredPoints);//绘制散点图
+ return true;
+ }
+
+ private void PointScatterPlot(List points) //绘制散点图
+ {
+ comboColors.Enabled = true; // Some of the demos will disable this combobox
+ me_ColorScheme = (eColorScheme)comboColors.SelectedIndex;
+
+ checkMirrorX.Checked = editor3D.AxisX.Mirror;
+ checkMirrorY.Checked = editor3D.AxisY.Mirror;
+
+ // 3 pixels for line width and for circle radius
+ const int SIZE = 3;
+
+ cColorScheme i_Scheme = new cColorScheme(me_ColorScheme);
+ cScatterData i_ShapeData = new cScatterData(i_Scheme);
+ cLineData i_LineData = new cLineData(i_Scheme);
+ List i_Points = new List();
+
+ foreach (var point in points)
+ {
+ double d_X = point.X;
+ double d_Y = point.Y;
+ double d_Z = point.Z;
+
+ cPoint3D i_Point = new cPoint3D(d_X, d_Y, d_Z, "Scatter Point");
+
+ // You can store the returned shape in a variable and later modify it's properties
+ cShape3D i_Shape = i_ShapeData.AddShape(i_Point, eScatterShape.Circle, SIZE, null);
+ }
+
+ // You can store the returned lines in a variable and later modify their properties
+ cLine3D[] i_Lines = i_LineData.AddConnectedLines(i_Points, SIZE, null);
+
+ // Depending on your use case you can also specify MaintainXY or MaintainXYZ here
+ editor3D.Clear();
+ editor3D.Normalize = eNormalize.Separate;
+ editor3D.AddRenderData(i_ShapeData, i_LineData);
+
+ editor3D.Selection.HighlightColor = Color.FromArgb(90, 90, 90);
+ editor3D.Selection.Callback = OnSelectEvent;
+ editor3D.Selection.MultiSelect = true;
+ editor3D.Selection.Enabled = true;
+ editor3D.UndoBuffer.Enabled = true;
+ editor3D.Invalidate();
+ }
+
+ public class Point
+ {
+ public double X { get; }
+ public double Y { get; }
+ public double Z { get; }
+
+ public Point(double x, double y, double z)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ }
+ }
+
+ private void btn_clear_Click(object sender, EventArgs e) //清空绘图
+ {
+ editor3D.Clear();
+ editor3D.Normalize = eNormalize.Separate;
+ editor3D.Invalidate();
+ }
+
+ private void btn_draw_test_Click(object sender, EventArgs e)
+ {
+ DemoScatterPlot(false);
+ }
+
+ private void OnAnimationTimer(object sender, EventArgs e)
+ {
+ cScatterData i_ShapeData = new cScatterData();
+ currentIndex = mainFrom.GetInPosCount();//获取当前点的数量
+
+
+ if (currentIndex < filteredPoints.Count)
+ {
+ // 更新点的颜色
+ for (int i = 0; i <= currentIndex; i++)
+ {
+ double d_X = filteredPoints[i].X;
+ double d_Y = filteredPoints[i].Y;
+ double d_Z = filteredPoints[i].Z;
+
+ cPoint3D i_Point = new cPoint3D(d_X, d_Y, d_Z, "Scatter Point");
+ SolidBrush i_brush = new SolidBrush(Color.Red);
+ // You can store the returned shape in a variable and later modify it's properties
+ cShape3D i_Shape = i_ShapeData.AddShape(i_Point, eScatterShape.Circle, 5, i_brush, null);
+ }
+
+ // 对于剩余部分的点,不做颜色更新
+ for (int i = currentIndex; i < filteredPoints.Count; i++)
+ {
+ double d_X = filteredPoints[i].X;
+ double d_Y = filteredPoints[i].Y;
+ double d_Z = filteredPoints[i].Z;
+
+ cPoint3D i_Point = new cPoint3D(d_X, d_Y, d_Z, "Scatter Point");
+ SolidBrush i_brush = new SolidBrush(Color.Gray);
+ // You can store the returned shape in a variable and later modify it's properties
+ cShape3D i_Shape = i_ShapeData.AddShape(i_Point, eScatterShape.Circle, 3, i_brush, null);
+ }
+
+ //打印 所有点的数量和 currentIndex
+ Console.WriteLine("所有点的数量:" + filteredPoints.Count + "当前点的数量:" + currentIndex);
+
+
+ }
+
+
+ editor3D.Clear();
+ editor3D.Normalize = eNormalize.Separate;
+ editor3D.AddRenderData(i_ShapeData);
+ editor3D.Invalidate();
}
}
}
\ No newline at end of file
diff --git a/HexcalMC/Motion/EtalonForm.resx b/HexcalMC/Motion/EtalonForm.resx
index 7c9958f..abbc23a 100644
--- a/HexcalMC/Motion/EtalonForm.resx
+++ b/HexcalMC/Motion/EtalonForm.resx
@@ -117,9 +117,6 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- 17, 17
-
25
diff --git a/HexcalMC/Properties/Resources.Designer.cs b/HexcalMC/Properties/Resources.Designer.cs
index 39034bd..5370ee5 100644
--- a/HexcalMC/Properties/Resources.Designer.cs
+++ b/HexcalMC/Properties/Resources.Designer.cs
@@ -210,6 +210,16 @@ namespace HexcalMC.Properties {
}
}
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap start {
+ get {
+ object obj = ResourceManager.GetObject("start", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
///
diff --git a/HexcalMC/Properties/Resources.resx b/HexcalMC/Properties/Resources.resx
index 846b3da..de6a0d2 100644
--- a/HexcalMC/Properties/Resources.resx
+++ b/HexcalMC/Properties/Resources.resx
@@ -121,6 +121,9 @@
..\Resources\about.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\etalon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\motion.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -139,6 +142,9 @@
..\Resources\Hexagon.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\quick_location.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -154,16 +160,13 @@
..\Resources\stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\demo_show.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\home.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\demo_show.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\etalon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\start.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/HexcalMC/bin/x64/Debug/HexcalMC.application b/HexcalMC/bin/x64/Debug/HexcalMC.application
index 6d65875..ce349ec 100644
--- a/HexcalMC/bin/x64/Debug/HexcalMC.application
+++ b/HexcalMC/bin/x64/Debug/HexcalMC.application
@@ -21,7 +21,7 @@
- kjOJfgYi/k+pJ5FhmEfpQmK1QNF+Sr/rAs3Y4JuCvnE=
+ 3I+Sdzke39z2xPBTFN2cGyU/DYa1hH93nKjBGpXTzUw=
diff --git a/HexcalMC/bin/x64/Debug/HexcalMC.exe b/HexcalMC/bin/x64/Debug/HexcalMC.exe
index 4ba0827..f567cb3 100644
Binary files a/HexcalMC/bin/x64/Debug/HexcalMC.exe and b/HexcalMC/bin/x64/Debug/HexcalMC.exe differ
diff --git a/HexcalMC/bin/x64/Debug/HexcalMC.exe.manifest b/HexcalMC/bin/x64/Debug/HexcalMC.exe.manifest
index 59f1a01..3f66852 100644
--- a/HexcalMC/bin/x64/Debug/HexcalMC.exe.manifest
+++ b/HexcalMC/bin/x64/Debug/HexcalMC.exe.manifest
@@ -55,14 +55,14 @@
-
+
- Uv0oJrFdIL2ljwa9FK9n8TvSxO1qxvCPi6Z0wKBelNs=
+ Pllh2aI7tVRTnfFfbvwT2qdIQZ30ZwrhlbF820ogi8o=
diff --git a/HexcalMC/bin/x64/Debug/HexcalMC.pdb b/HexcalMC/bin/x64/Debug/HexcalMC.pdb
index b686f2a..60efdb7 100644
Binary files a/HexcalMC/bin/x64/Debug/HexcalMC.pdb and b/HexcalMC/bin/x64/Debug/HexcalMC.pdb differ
diff --git a/HexcalMC/bin/x64/Debug/app.publish/HexcalMC.exe b/HexcalMC/bin/x64/Debug/app.publish/HexcalMC.exe
index 0f89def..de34627 100644
Binary files a/HexcalMC/bin/x64/Debug/app.publish/HexcalMC.exe and b/HexcalMC/bin/x64/Debug/app.publish/HexcalMC.exe differ