diff --git a/Language/zh_CN.xaml b/Language/zh_CN.xaml
index 4c77196..54fb6a7 100644
--- a/Language/zh_CN.xaml
+++ b/Language/zh_CN.xaml
@@ -155,6 +155,7 @@
保存失败
选择路径
重置网格线
+ 切工仪旋转至此面
星辉钻石检测系统
diff --git a/Model/Entity/ApiEntity/AlgorithmResultEntity.cs b/Model/Entity/ApiEntity/AlgorithmResultEntity.cs
index 52c605f..6de152b 100644
--- a/Model/Entity/ApiEntity/AlgorithmResultEntity.cs
+++ b/Model/Entity/ApiEntity/AlgorithmResultEntity.cs
@@ -39,6 +39,8 @@ namespace SparkClient.Model.Entity.ApiEntity
/// 面的类型。
///
public int facet_type { get; set; }
+
+ public double theta { get; set; }
}
///
diff --git a/Model/Services/SOCClientService.cs b/Model/Services/SOCClientService.cs
index 3d0de64..1f1f165 100644
--- a/Model/Services/SOCClientService.cs
+++ b/Model/Services/SOCClientService.cs
@@ -21,7 +21,7 @@ namespace SparkClient.Model.Services
public class SOCClientService
{
// Log地址
- private const string LogFilePath = @"..\..\..\Resource\Document\log.txt";
+
private static readonly ILog Logger = LogManager.GetLogger(typeof(SOCClientService));
@@ -35,6 +35,8 @@ namespace SparkClient.Model.Services
///
private readonly string _authToken;
+
+ private bool GenImage;
///
/// 构造函数,初始化基础URL和认证令牌。
///
@@ -66,6 +68,7 @@ namespace SparkClient.Model.Services
{
try
{
+ GenImage = true;
// 光照度和半圆
int lightLevel = 0;
string halfCircle = string.Empty;
@@ -77,6 +80,7 @@ namespace SparkClient.Model.Services
{
throw new Exception("No data found for the specified keys.");
}
+
foreach (DataRow row in table.Rows)
{
string key = row["Key"].ToString() ?? string.Empty;
@@ -91,14 +95,14 @@ namespace SparkClient.Model.Services
halfCircle = value; // 半圆
}
}
-
+
string url = $"{_baseUrl}/collect_images?light_level={lightLevel}&half_circle={halfCircle}";
-
+
var response = await SendGetRequestAsync(url);
if (!response.IsSuccessStatusCode)
{
- return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List()};
+ return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List() };
}
var jsonResponse = await response.Content.ReadAsStringAsync();
@@ -106,10 +110,12 @@ namespace SparkClient.Model.Services
if (result == null)
{
- return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List()};
+ return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List() };
}
- return new SocResultEntity { Status = result.Status, Images = new List() , DeviceId = result.device_id};
-
+
+ return new SocResultEntity
+ { Status = result.Status, Images = new List(), DeviceId = result.device_id };
+
}
catch (Exception ex)
{
@@ -118,7 +124,12 @@ namespace SparkClient.Model.Services
Logger.Warn($"Error in DoSoc: {ex.Message}");
// 或者使用日志框架记录日志
// logger.LogError(ex, "Error in DoSoc method.");
- return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List() , DeviceId = ""};
+ return new SocResultEntity
+ { Status = StatusCodes.DeviceNotFound, Images = new List(), DeviceId = "" };
+ }
+ finally
+ {
+ GenImage = false;
}
}
@@ -298,6 +309,62 @@ namespace SparkClient.Model.Services
}
}
+ public async Task CutRevolve(double angle)
+ {
+ int param = (int)angle * 100;
+ string url = $"{_baseUrl}/rotate_to?angle={param}";
+ if(GenImage) return StatusCodes.DeviceNotFound;
+ GenImage = true;
+ try
+ {
+ var response = await SendGetRequestAsync(url);
+
+ if (response.IsSuccessStatusCode)
+ {
+ var jsonResponse = await response.Content.ReadAsStringAsync();
+ var result = JsonConvert.DeserializeObject(jsonResponse);
+ return result.Status;
+ }
+
+ return StatusCodes.DeviceNotFound;
+ }
+ catch (Exception e)
+ {
+ string logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 发生异常: {e.Message}{Environment.NewLine}";
+ Logger.Error(logMessage);
+ return StatusCodes.DeviceNotFound;
+ }
+ finally
+ {
+ GenImage = false;
+ }
+ }
+
+ public async Task OpenPump(bool isOpen = true)
+ {
+ if(GenImage) return StatusCodes.DeviceNotFound;
+ int param = isOpen? 1 : 0 ;
+ string url = $"{_baseUrl}/set_pump?on={param}";
+ try
+ {
+ var response = await SendGetRequestAsync(url);
+
+ if (response.IsSuccessStatusCode)
+ {
+ var jsonResponse = await response.Content.ReadAsStringAsync();
+ var result = JsonConvert.DeserializeObject(jsonResponse);
+ return result.Status;
+ }
+
+ return StatusCodes.DeviceNotFound;
+ }
+ catch (Exception e)
+ {
+ string logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 发生异常: {e.Message}{Environment.NewLine}";
+ Logger.Error(logMessage);
+ return StatusCodes.DeviceNotFound;
+ }
+ }
}
diff --git a/ViewModel/BaseWindow/BaseControlVM.cs b/ViewModel/BaseWindow/BaseControlVM.cs
index e40d751..041a4f2 100644
--- a/ViewModel/BaseWindow/BaseControlVM.cs
+++ b/ViewModel/BaseWindow/BaseControlVM.cs
@@ -3,6 +3,7 @@ using System.Windows.Input;
using GlobalHotKey;
using HandyControl.Controls;
using SparkClient.Model.Helper;
+using SparkClient.Model.Services;
using SparkClient.ViewModel.Grading;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
namespace SparkClient.ViewModel.BaseWindow;
@@ -146,23 +147,28 @@ public class BaseControlVM : BaseViewModel
{
if(Content is GradingResultVM)
{
- bool isSaved = (Content as GradingResultVM).isSaved;
- if (isSaved)
- {
- WindowManager.PreviousVM();
- WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
- }
- else {
- // 部署改造:2
- WindowManager.PreviousVM();
- WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
- // MessageBox message = new MessageBox();
- // MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm"));
- // if (MessageBoxResult.OK.Equals(result))
- // {
- // WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
- // }
- }
+ WindowManager.PreviousVM();
+ WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
+ var _socClientService = new SOCClientService();
+ _socClientService.OpenPump(false);
+ //bool isSaved = (Content as GradingResultVM).isSaved;
+ // if (isSaved)
+ // {
+ //
+ // }
+ // else {
+ // // 部署改造:2
+ // WindowManager.PreviousVM();
+ // WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
+ // var _socClientService = new SOCClientService();
+ // _socClientService.OpenPump(false);
+ // // MessageBox message = new MessageBox();
+ // // MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm"));
+ // // if (MessageBoxResult.OK.Equals(result))
+ // // {
+ // // WindowManager.mainViewModel.Content = WindowManager.PreviousVM();
+ // // }
+ // }
}
else
{
diff --git a/ViewModel/Grading/DiamondSelectVM.cs b/ViewModel/Grading/DiamondSelectVM.cs
index 1a9d020..e91f229 100644
--- a/ViewModel/Grading/DiamondSelectVM.cs
+++ b/ViewModel/Grading/DiamondSelectVM.cs
@@ -207,6 +207,7 @@ public class DiamondSelectVM : BaseViewModel
else
{
//正常模式
+
var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode);
BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait"));
vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}";
diff --git a/ViewModel/Grading/GradingLoadingVM.cs b/ViewModel/Grading/GradingLoadingVM.cs
index 040a908..2841fa4 100644
--- a/ViewModel/Grading/GradingLoadingVM.cs
+++ b/ViewModel/Grading/GradingLoadingVM.cs
@@ -168,6 +168,13 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
if(type == 0){
_socClientService = new SOCClientService();
+ string openpupmStatus = await _socClientService.OpenPump(true);
+ if (!StatusCodes.Success.Equals(openpupmStatus))
+ {
+ new MessageBox().Show("气泵开启失败!");
+ return -1;
+ }
+
var processImage = _socClientService.ProcessImageCollectionAsync();
//通知页面可以播放图片
await processImage;
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index 8904949..611bf10 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -53,6 +53,9 @@
+
+
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
index 44d9a92..d8b5f56 100644
--- a/Views/UserControl/Viewport3D.xaml.cs
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -17,6 +17,7 @@ using SharpDX.Direct3D11;
using SharpDX.DXGI;
using MathNet.Numerics;
using System.Windows.Media;
+using SparkClient.Model.Services;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
using ObjExporter = SparkClient.Views.UserControl.ViewportData.Helper.ObjExporter;
@@ -69,15 +70,14 @@ public partial class Viewport3D
ViewportRightMenuShowModelFaceByType.IsChecked = true;
var a = Viewport3Dx.Items;
-#if DEBUG
- //Viewport3Dx.ShowViewCube = true;
- //Viewport3Dx.ShowCoordinateSystem = true;
- //Viewport3Dx.ShowCameraInfo = true;
- //Viewport3Dx.ShowCameraTarget = !Viewport3Dx.ShowCameraTarget;
- //Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails;
- //Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate;
- //Viewport3Dx.ShowTriangleCountInfo = !Viewport3Dx.ShowTriangleCountInfo;
-#endif
+
+ // Viewport3Dx.ShowViewCube = true;
+ // Viewport3Dx.ShowCoordinateSystem = true;
+ // Viewport3Dx.ShowCameraInfo = true;
+ // Viewport3Dx.ShowCameraTarget = !Viewport3Dx.ShowCameraTarget;
+ // Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails;
+ // Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate;
+ // Viewport3Dx.ShowTriangleCountInfo = !Viewport3Dx.ShowTriangleCountInfo;
}
@@ -502,6 +502,13 @@ public partial class Viewport3D
case "ViewportRightMenuReset":
ViewportManager.ResetMeshLines();
break;
+ case "ViewportCutXuanZ":
+ //获取当前选中的面,找到角度,*100,发送至切工仪
+ var res = ViewportManager.ViewportTriangle.Find(e => ViewportManager.ChooseTriangleCode.Equals(e.TriangleCode));
+ if (res == null) return;
+ SOCClientService service = new SOCClientService();
+ service.CutRevolve(res.Theta);
+ break;
}
}
#endregion
diff --git a/Views/UserControl/ViewportData/Entity/Viewport3DTriangleEntity.cs b/Views/UserControl/ViewportData/Entity/Viewport3DTriangleEntity.cs
index 70834c2..4f6cc94 100644
--- a/Views/UserControl/ViewportData/Entity/Viewport3DTriangleEntity.cs
+++ b/Views/UserControl/ViewportData/Entity/Viewport3DTriangleEntity.cs
@@ -36,6 +36,6 @@ public class Viewport3DTriangleEntity
/// 可选值:PlaneType
///
public PlaneType PlaneType { get; set; }
-
-
+
+ public Double Theta { get; set; }
}
\ No newline at end of file
diff --git a/Views/UserControl/ViewportData/Helper/CommonHelper.cs b/Views/UserControl/ViewportData/Helper/CommonHelper.cs
index ea78d0e..c8a21b8 100644
--- a/Views/UserControl/ViewportData/Helper/CommonHelper.cs
+++ b/Views/UserControl/ViewportData/Helper/CommonHelper.cs
@@ -46,7 +46,7 @@ public class CommonHelper
// 提取 PlaneCode 和 PlaneType
string planeCode = jsonObject.facet_id ?? (string)jsonObject.facet_id;
PlaneType planeType = (PlaneType)(int)jsonObject.facet_type;
-
+ Double theta = jsonObject.theta ?? (Double)jsonObject.theta;
// 生成 TriangleCode
var triangleCode = GenerateTriangleCode(point1, point2, point3);
@@ -58,7 +58,8 @@ public class CommonHelper
Point3 = point3,
TriangleCode = triangleCode,
PlaneCode = planeCode,
- PlaneType = planeType
+ PlaneType = planeType,
+ Theta = theta
};
}
diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
index 01de774..b614d76 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
@@ -521,16 +521,6 @@ public class ViewportHelperPro
if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
- // if (ViewportManager.MainModelGirdleMaxLines != null || ViewportManager.MainModelGirdleMinLines != null ||
- // ViewportManager.MainModelGirdleAvgLines != null)
- // {
- // result.Add(DisplayLineModel3D(new List>(){ViewportManager.MainModelGirdleMaxLines}, new Color4(1f, 0, 0, 1f) ));
- // result.Add(DisplayLineModel3D(new List>(){ViewportManager.MainModelGirdleMinLines}, new Color4(0f, 1f, 0, 1f) ));
- // result.Add(DisplayLineModel3D(new List>(){ViewportManager.MainModelGirdleAvgLines}, new Color4(1f, 0.5f, 0, 1f) ));
- // result.Add(DisplayText3D($"{CalculateLength(ViewportManager.MainModelGirdleMaxLines)}mm", ViewportManager.MainModelGirdleMaxLines.Item1, textColor));
- // result.Add(DisplayText3D($"{CalculateLength(ViewportManager.MainModelGirdleMinLines)}mm", ViewportManager.MainModelGirdleMinLines.Item1, textColor));
- // result.Add(DisplayText3D($"{CalculateLength(ViewportManager.MainModelGirdleAvgLines)}mm", ViewportManager.MainModelGirdleAvgLines.Item1, textColor));
- // }
List facetTypeAll =
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
@@ -615,27 +605,7 @@ public class ViewportHelperPro
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
- // foreach (var kv in groupedDic)
- // {
- // var value = kv.Value;
- // var key = kv.Key;
- // var facetIndex = -1;
- // int.TryParse(key.Split("_")[1], out facetIndex);
- // List facetPoints = new List();
- // value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
- //
- // int linePointType = facetIndex % 4;
- // /***
- // * 0 1 2 3
- // * 4 5 6 7
- // * 面index+1 % 4 = 0
- // * 面id-loop4 = 0 - 高亮左边的竖线 - 波峰 -
- // * 面id-loop4 = 1 - 高亮右边的竖线 - 波谷
- // * 面id-loop4 = 2 - 高亮左边的竖线 - 波谷
- // * 面id-loop4 = 3 - 高亮右边的竖线 - 波峰
- // */
- //
- // }
+
} else if (selFacetType == PlaneType.Girdle && !string.IsNullOrWhiteSpace(valKey))
{
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}");
@@ -697,8 +667,8 @@ public class ViewportHelperPro
return result;
}
result.Add(DisplayLineModel3D(new List>() { showLine }, new Color4(1f, 0, 0, 1f), 2f));
- var valueFloat = ValueFormat(paramValue.ToString(), valKey);
- result.Add(DisplayText3D($" {resIndex} \r\n {valueFloat}", facetTextPoint));
+ var valueFloat = ValueFormat(paramValue.ToString(), valKey, true);
+ result.Add(DisplayText3D($"{valueFloat} \r\n {resIndex}", facetTextPoint));
}
}
@@ -712,6 +682,36 @@ public class ViewportHelperPro
.ToDictionary(group => group.Key, group => group.ToList());
Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个");
var valueIndex = 1;
+ //台面显示
+ if (selFacetType == PlaneType.TableFacet)
+ {
+ List tablePointList = new List();
+ foreach (var entity in groupedDic["11_0"])
+ {
+ tablePointList.Add(entity.Point1);
+ tablePointList.Add(entity.Point2);
+ tablePointList.Add(entity.Point3);
+ }
+ HashSet tablePointSet = new HashSet(tablePointList);
+ tablePointList = VectorClockwiseSort(tablePointSet.ToList());
+
+ List> line = new List>();
+ for (int i = 0; i < tablePointList.Count / 2; i++)
+ {
+ line.Add(new Tuple(tablePointList[i], tablePointList[i+tablePointList.Count / 2]));
+ }
+ string param = "TABLE";
+ var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
+ for (int i = 0; i < line.Count; i++)
+ {
+ Vector3 point = line[i].Item2;
+ var valueFloat = ValueFormat(detail[$"{param}_{i+1}"].ToString(), param, true);
+ result.Add(DisplayText3D($"{valueFloat}", new Vector3(point.X, point.Y - 0.4f, point.Z)));
+ }
+ result.Add( DisplayLineModel3D(line, new Color4(1f, 0, 0, 1f), 0.7f));
+
+ }
+
foreach (var kv in groupedDic)
{
var value = kv.Value;
@@ -734,7 +734,7 @@ public class ViewportHelperPro
Logger.Info($"【面文本生成】 {param} Key不存在");
continue;
}
- var valueFloat = ValueFormat(paramValue.ToString(), param);
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
@@ -758,10 +758,10 @@ public class ViewportHelperPro
}
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}");
- var valueFloat = ValueFormat(paramValue.ToString(), param);
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- result.Add(DisplayText3D($" {facetIndex} \r\n {valueFloat}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z)));
+ result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z)));
} else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1)
{
@@ -782,53 +782,12 @@ public class ViewportHelperPro
}
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} ==={paramValue}");
- var valueFloat = ValueFormat(paramValue.ToString(), param);
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- result.Add(DisplayText3D($" {facetIndex} \r\n {valueFloat}", facetTextPoint));
+ result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint));
}
}
-
- /***
- * 思路:
- * 1、以面分组,1组为台面、底面,8组、16组、64组、other
- * 2、每组数据区别
- * 1组:取第一个数据
- * 8组:按索引0-7 -> 1-8
- * 16组:1-2、3-4、5-6、7-8、9-10、11-12、13-14、15-0共享数据
- * 64组:这组特殊理论上是腰,按照else里的东西来
- * 3、这个方法是主动点击,被动触发理论上通用
- * 4、主动触发:循环遍历面组,根据面类型获取算法存储的数据,在Manager里制定面-参数的一对多关系,主动触发时,取参数的首位为默认
- * 5、被动触发:根据结果页传入的参数编号,找到对应的面,循环遍历面组,根据面类型获取算法存储的数据,根据被动传入参数找到值
- * 6、 ①组面可能由至少两个三角形组成,计算出三角形拼接出的多边形的中心作为文字显示的中心
- * ②在从算法结果数据对应好面组的索引,做成值-组面id的文本,计算出这个文本的大小
- * ③在拼接的图片中心,平行于平面,向中心点外偏移“文本大小高度+0.1"个单位 显示文本
- */
-
- // var selFaceVector = entities
- // .SelectMany(entity => new[] { entity.Point1, entity.Point2, entity.Point3 })
- // .Distinct()
- // .ToList();
- // var uniqueLines = new HashSet();
- // var sortedVectors = VectorClockwiseSort(selFaceVector);
- // for (int i = 0; i < sortedVectors.Count; i++)
- // {
- // var current = sortedVectors[i];
- // var next = sortedVectors[(i + 1) % sortedVectors.Count];
- //
- // double length = (next - current).Length();
- // string lineKey = $"{length:F2}";
- // if (showAll == false)
- // {
- // if (uniqueLines.Contains(lineKey)) continue;
- // uniqueLines.Add(lineKey);
- // }
- // var midPoint = (current + next) / 2;
- // var text = $"{length:F2}mm";
- // var textY = midPoint.Y > ViewportManager.CenterVector.Y ? midPoint.Y + 0.3f : midPoint.Y - 0.3f;
- // var lengthTextModel = DisplayText3D(text, new Vector3(midPoint.X, textY, midPoint.Z),next - current, textColor);
- // result.Add(lengthTextModel);
- // }
}
@@ -2103,6 +2062,9 @@ public class ViewportHelperPro
v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}mm" : v.ToString("F1");
case "PAV_ANGLE":
+ case "STAR_ANGLE":
+ case "UPPER_HALF_ANGLE":
+ case "LOWER_HALF_ANGLE":
case "TWIST":
v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}°" : v.ToString("F1");
@@ -2113,7 +2075,7 @@ public class ViewportHelperPro
// case "CROWN HEIGHT":
// case "PAV DEPTH":
v *= 100;
- return hasUnit ? $"{(Math.Round(v / 0.5) * 0.5).ToString("F1")}%" : (Math.Round(v / 0.5) * 0.5).ToString("F1");
+ return hasUnit ? $"{v.ToString("F1")}%" : v.ToString("F1");
default:
v = Math.Floor(v * 1000) / 1000;
return hasUnit ? $"{(v*100).ToString("F1")}%" : (v*100).ToString("F1");
diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
index e6de322..c9b27ba 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
@@ -148,6 +148,20 @@ public class ViewportManager
public static bool DoubleClickSelectShowPlaneType = true;
//选中三角形代码
public static string ChooseTriangleCode = string.Empty;
+
+ private static bool _HasTriangleSelect;
+ public static bool HasTriangleSelect
+ {
+ get { return _HasTriangleSelect; }
+
+ set
+ {
+ _HasTriangleSelect = value;
+ if(_viewport3D != null)
+ _viewport3D.ViewportCutXuanZ.IsEnabled = value;
+ }
+ }
+
//通过选中添加的元素
public static List ChooseAddModels = new List();
///
@@ -158,6 +172,7 @@ public class ViewportManager
if (string.IsNullOrWhiteSpace(ChooseTriangleCode))
{
ClearDicModels();
+ HasTriangleSelect = false;
return;
}
@@ -169,6 +184,7 @@ public class ViewportManager
// if (DoubleClickSelectShowBorderAngle) models.Add(SelShowType.BorderAngle);
if (DoubleClickSelectShowPlaneType) models.Add(SelShowType.IsTypePanel);
ChooseAddModels.AddRange(ViewportHelperPro.GentrateChosenView(ChooseTriangleCode, valType, models.ToArray()));
+ HasTriangleSelect = true;
ChooseAddModels.ForEach(e =>
{
if (e != null) _viewport.Items.Add(e);
@@ -184,6 +200,7 @@ public class ViewportManager
_viewport.Items.Remove(item);
}
ChooseAddModels.Clear();
+ HasTriangleSelect = false;
}
public static void InitMeshLines()
{
@@ -248,10 +265,11 @@ public class ViewportManager
{
{ PlaneType.UpperMainFacet,"CROWN_ANGLE"},
{ PlaneType.PavilionMainFacet, "PAV_ANGLE"},
- { PlaneType.StarFacet, "STAR"},
+ { PlaneType.StarFacet, "STAR_ANGLE"},
{ PlaneType.TableFacet, "TABLE"},
{ PlaneType.Culet, "COC"},
- { PlaneType.LowerGirdleFact, "LOWER_HALVES_RATIO"},
+ { PlaneType.LowerGirdleFact, "LOWER_HALF_ANGLE"},
+ { PlaneType.UpperGirdleFacet, "UPPER_HALF_ANGLE"},
};
// 数据 -> 面
public static Dictionary DicValueParamToFacet = new Dictionary()