|
@@ -1058,27 +1058,7 @@ namespace OTSIncAReportGraph.Controls
|
|
|
if (control_XRayTable1.Visible == false)
|
|
|
ShowXRay(dp);
|
|
|
|
|
|
- Dictionary<string, object> SEMStageData = (Dictionary<string, object>)resultFile.ResultInfo["SEMStageData"];
|
|
|
- string ScanFieldSize = SEMStageData["scanFieldSize"].ToString();
|
|
|
- string leftOrRight = SEMStageData["xAxisDir"].ToString().Split('_')[0];
|
|
|
- string downOrUp = SEMStageData["yAxisDir"].ToString().Split('_')[0];
|
|
|
- Point point = new Point();
|
|
|
- if (leftOrRight == "RIGHT")
|
|
|
- {
|
|
|
- point.X = dp.SEMPosX - int.Parse(ScanFieldSize) / 2 + dp.objParticleData.PosX;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- point.X = dp.SEMPosX + int.Parse(ScanFieldSize) / 2 + dp.objParticleData.PosX;
|
|
|
- }
|
|
|
- if (downOrUp == "UP")
|
|
|
- {
|
|
|
- point.Y = dp.SEMPosY + int.Parse(ScanFieldSize) / 2 + dp.objParticleData.PosY;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- point.Y = dp.SEMPosY - int.Parse(ScanFieldSize) / 2 + dp.objParticleData.PosY;
|
|
|
- }
|
|
|
+ Point point = CalculateParticleCenterPosition(resultFile, new Point(dp.SEMPosX, dp.SEMPosY), new Point(dp.objParticleData.PosX, dp.objParticleData.PosY));
|
|
|
|
|
|
m_str_mouseshow_left = "颗粒SEM位置:" + point.X.ToString() + ":" + point.Y.ToString();
|
|
|
m_sem_mouse_now_point = point;
|
|
@@ -1125,6 +1105,48 @@ namespace OTSIncAReportGraph.Controls
|
|
|
Invalidate();
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 计算颗粒中心的电镜坐标
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="resultFile"></param>
|
|
|
+ /// <param name="SEMPos"></param>
|
|
|
+ /// <param name="ParticlePos"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static Point CalculateParticleCenterPosition(ResultFile resultFile, Point SEMPos, Point ParticlePos)
|
|
|
+ {
|
|
|
+ Point point = new Point();
|
|
|
+ Dictionary<string, object> sampleMembers = ((Dictionary<string, object>)((Dictionary<string, object>)resultFile.ResultInfo["Sample"])["Members"]);
|
|
|
+ Dictionary<string, object> imageScanParam = (Dictionary<string, object>)((Dictionary<string, object>)((Dictionary<string, object>)sampleMembers["MsrParams"])["Members"])["ImageScanParam"];
|
|
|
+ Dictionary<string, object> SEMDataMsr = (Dictionary<string, object>)sampleMembers["SEMDataMsr"];
|
|
|
+ Dictionary<string, object> SEMStageData = (Dictionary<string, object>)resultFile.ResultInfo["SEMStageData"];
|
|
|
+ float ScanFieldSizeX = float.Parse(SEMDataMsr["ScanFieldSize"].ToString());
|
|
|
+ string leftOrRight = SEMStageData["xAxisDir"].ToString().Split(':')[1];
|
|
|
+ string downOrUp = SEMStageData["yAxisDir"].ToString().Split(':')[1];
|
|
|
+ string ImageResolution = imageScanParam["ImageResolution"].ToString();
|
|
|
+ int width = int.Parse(ImageResolution.Split('_')[1]);
|
|
|
+ int height = int.Parse(ImageResolution.Split('_')[2]);
|
|
|
+ float ScanFieldSizeY = ScanFieldSizeX * height / width;
|
|
|
+ float m_pixelSize = ScanFieldSizeX / width;
|
|
|
+ if (leftOrRight == "RIGHT_TOWARD")
|
|
|
+ {
|
|
|
+ point.X = (int)(SEMPos.X - ScanFieldSizeX / 2 + ParticlePos.X * m_pixelSize);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ point.X = (int)(SEMPos.X + ScanFieldSizeX / 2 - ParticlePos.X * m_pixelSize);
|
|
|
+ }
|
|
|
+ if (downOrUp == "UP_TOWARD")
|
|
|
+ {
|
|
|
+ point.Y = (int)(SEMPos.Y + ScanFieldSizeY / 2 - ParticlePos.Y * m_pixelSize);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ point.Y = (int)(SEMPos.Y - ScanFieldSizeY / 2 + ParticlePos.Y * m_pixelSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ return point;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取鼠标所在位置的信息,显示在框架的右下角
|
|
|
/// </summary>
|