diff --git a/App.xaml.cs b/App.xaml.cs
index 6de3409..d520b0c 100644
--- a/App.xaml.cs
+++ b/App.xaml.cs
@@ -4,6 +4,7 @@ using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
+using log4net;
using log4net.Config;
using SparkClient.Model.Helper;
using SparkClient.ViewModel.Configuration.SettingsPages;
@@ -15,21 +16,44 @@ namespace SparkClient;
///
public partial class App : Application
{
+ private static readonly ILog Logger = LogManager.GetLogger(typeof(App));
protected override void OnStartup(StartupEventArgs e)
{
- base.OnStartup(e);
+ base.OnStartup(e);
//加载日志配置文件
XmlConfigurator.Configure(new FileInfo("log4net.config"));
+ Logger.Info("==== ==== ==== ==== ==== ==== ==== ====");
+ Logger.Info("App Client Start: App Initialize");
+ Logger.Info("Loaded Logs Config: log4net.config");
//运行是否需要归档
Log4NetHelper.ArchiveOldLogs();
+ Logger.Info("Check Logs need to be archived");
//打开数据库连接
//读取数据库多语言配置
DataBaseHelper.CreateConnection();
+ Logger.Info("Create Sqlite Connection...");
+
+ Logger.Info("Load Language Set");
string LanguageId = Settings.SelectValueById("LanguageId");
if (LanguageId.Length == 0)
{
LanguageId = "zh-cn";
- }
+ }
MultilingualHelper.setLanguage(LanguageId);
+ Logger.Info($"Loaded Language is {LanguageId}");
+ string runMode = Settings.SelectValueById("RunMode");
+ Logger.Info($"Load RunMode Set {runMode}");
+ if (runMode.Length != 0 && int.TryParse(runMode, out int iRunMode))
+ {
+ Common.RunMode = iRunMode;
+ }
+ else
+ {
+ Common.RunMode = 0;
+ }
+ Logger.Info($"Load RunMode is {Common.RunMode}");
+
+ Logger.Info("App Client Start: App Initialize Succeed !!!");
+ Logger.Info("==== ==== ==== ==== ==== ==== ==== ====");
}
}
\ No newline at end of file
diff --git a/Language/en_US.xaml b/Language/en_US.xaml
index 5678ef5..a06848e 100644
--- a/Language/en_US.xaml
+++ b/Language/en_US.xaml
@@ -239,4 +239,8 @@
Rotate Cut Tool to This Face
Show Center Mark
+
+ RunModel
+ Factory
+ Laboratory
diff --git a/Language/zh_CN.xaml b/Language/zh_CN.xaml
index 37dc1e1..390a981 100644
--- a/Language/zh_CN.xaml
+++ b/Language/zh_CN.xaml
@@ -239,4 +239,9 @@
上一帧
下一帧
+
+ 运行模式
+ 工厂模式
+ 实验室模式
+
\ No newline at end of file
diff --git a/Model/Extension/CommonExtension.cs b/Model/Extension/CommonExtension.cs
new file mode 100644
index 0000000..88a6348
--- /dev/null
+++ b/Model/Extension/CommonExtension.cs
@@ -0,0 +1,20 @@
+namespace SparkClient.Model.Extension;
+
+public static class CommonExtension
+{
+ public static string ToSafeString(this object obj)
+ {
+ if (null == obj)
+ {
+ return "";
+ }
+ else
+ {
+ return obj.ToString( );
+ }
+ }
+ public static bool IsNullOrEmpty(this string str)
+ {
+ return String.IsNullOrEmpty(str);
+ }
+}
\ No newline at end of file
diff --git a/Model/Helper/Common.cs b/Model/Helper/Common.cs
index a2b585d..93c07db 100644
--- a/Model/Helper/Common.cs
+++ b/Model/Helper/Common.cs
@@ -21,6 +21,8 @@ public class Common
public const string DataBaseTempFileName = "SparkDBtemp.db";
public const string DataBaseName = "SparkDB";
+
+ public static int RunMode = 0;
///
/// 将 DataTable 转换为 JSON 字符串
diff --git a/ViewModel/Configuration/SettingsPages/SettingsVM.cs b/ViewModel/Configuration/SettingsPages/SettingsVM.cs
index 338a0d9..68dabc2 100644
--- a/ViewModel/Configuration/SettingsPages/SettingsVM.cs
+++ b/ViewModel/Configuration/SettingsPages/SettingsVM.cs
@@ -48,6 +48,22 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
public DataTable _rules;
public DataTable Rules { get { return _rules; } set { _rules = value; OnPropertyChanged(nameof(Rules)); } }
+
+ private DataTable _runMode;
+ public DataTable RunMode
+ {
+ get { return _runMode;}
+ set { _runMode = value; OnPropertyChanged(nameof(RunMode)); }
+ }
+
+ private string _nowRunMode;
+
+ public string NowRunMode
+ {
+ get { return _nowRunMode; }
+ set { _nowRunMode = value; OnPropertyChanged(nameof(NowRunMode)); }
+ }
+
public SettingsVM()
{
try {
@@ -83,6 +99,18 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
this.ExcelFileChecked = ExcelFileChecked;
bool.TryParse(Settings.SelectValueById("DatFileChecked"), out bool DatFileChecked);
this.DatFileChecked = DatFileChecked;
+
+ RunMode = new DataTable();
+ RunMode.Columns.Add("Key");
+ RunMode.Columns.Add("Value");
+ RunMode.Rows.Add(MultilingualHelper.getString("CustomSettingPageFactory"), "1");
+ RunMode.Rows.Add(MultilingualHelper.getString("CustomSettingPageLaboratory"), "0");
+ NowRunMode = Settings.SelectValueById("RunMode");
+ if (NowRunMode.Length == 0)
+ {
+ NowRunMode = "0";
+ }
+
FilePath = Settings.SelectValueById("FilePath");
RuleId = Settings.SelectValueById("RuleId");
selectRules();
@@ -197,6 +225,14 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
Value = RuleId,
};
RuleData.insert();
+
+ Settings runModeData = new Settings()
+ {
+ Key = "RunMode",
+ ItemName = "运行模式",
+ Value = NowRunMode,
+ };
+ runModeData.insert();
}
catch (Exception ex)
{
diff --git a/ViewModel/Grading/DiamondSelectVM.cs b/ViewModel/Grading/DiamondSelectVM.cs
index b883c2b..bce7c84 100644
--- a/ViewModel/Grading/DiamondSelectVM.cs
+++ b/ViewModel/Grading/DiamondSelectVM.cs
@@ -113,9 +113,27 @@ public class DiamondSelectVM : BaseViewModel
item.IsHighlighted = true;
};
List tempButtons2 = new List();
- var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/UIResource/round_P8-P8.png", UriKind.RelativeOrAbsolute));
- ButtonViewModel button = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "ROUND P8 P8", Command = StartGradingCommand, IsFocused = true};
- tempButtons2.Add(button);
+ if (Common.RunMode == 0)
+ {
+ var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/UIResource/round_P8-P8.png", UriKind.RelativeOrAbsolute));
+ ButtonViewModel button = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "ROUND P8 P8", Command = StartGradingCommand, IsFocused = true};
+ tempButtons2.Add(button);
+ }else if (Common.RunMode == 1)
+ {
+ var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/UIResource/round_P8-P8.png", UriKind.RelativeOrAbsolute));
+ ButtonViewModel button1 = new ButtonViewModel() { Text = "P8-P8 Stage 1", ImageSource = bitmap, Type = "ROUND P8 P8 S1", Command = StartGradingCommand, IsFocused = true};
+ ButtonViewModel button2 = new ButtonViewModel() { Text = "P8-P8 Stage 2", ImageSource = bitmap, Type = "ROUND P8 P8 S2", Command = StartGradingCommand, IsFocused = true};
+ ButtonViewModel button3 = new ButtonViewModel() { Text = "P8-P8 Stage 3", ImageSource = bitmap, Type = "ROUND P8 P8 S3", Command = StartGradingCommand, IsFocused = true};
+ ButtonViewModel button4 = new ButtonViewModel() { Text = "P8-P8 Stage 4", ImageSource = bitmap, Type = "ROUND P8 P8 S4", Command = StartGradingCommand, IsFocused = true};
+ ButtonViewModel button5 = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "ROUND P8 P8", Command = StartGradingCommand, IsFocused = true};
+ tempButtons2.Add(button1);
+ tempButtons2.Add(button2);
+ tempButtons2.Add(button3);
+ tempButtons2.Add(button4);
+ tempButtons2.Add(button5);
+ }
+
+
Buttons2 = tempButtons2;
}
}
diff --git a/ViewModel/Grading/GradingLoadingVM.cs b/ViewModel/Grading/GradingLoadingVM.cs
index 11ee063..f3184f8 100644
--- a/ViewModel/Grading/GradingLoadingVM.cs
+++ b/ViewModel/Grading/GradingLoadingVM.cs
@@ -157,6 +157,12 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
stringBuilder.Append(line);
}
Parameter = JsonConvert.DeserializeObject(stringBuilder.ToString());
+ Parameter.DiamondCode = _diamondCode;
+ Parameter.Standard = getStandardName();
+ Parameter.Shape = _diamnondType.Split(" ")[0];
+ Parameter.CrownType = _diamnondType.Split(" ")[1];
+ Parameter.PavType = _diamnondType.Split(" ")[2];
+ Parameter.error_msg = _diamnondType;
await CompleteProgressQuicklyAsync();
return 0;
}
diff --git a/Views/Configuration/SettingPages/CustomSettingPage.xaml b/Views/Configuration/SettingPages/CustomSettingPage.xaml
index 7d0a214..7ca0de9 100644
--- a/Views/Configuration/SettingPages/CustomSettingPage.xaml
+++ b/Views/Configuration/SettingPages/CustomSettingPage.xaml
@@ -57,6 +57,8 @@
+
+
@@ -144,52 +146,16 @@
DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding RuleId, Mode=TwoWay}"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index 7e5db06..0e2845f 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -52,7 +52,7 @@
-
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
index c443a21..45fa51b 100644
--- a/Views/UserControl/Viewport3D.xaml.cs
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -78,6 +78,28 @@ public partial class Viewport3D
// Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails;
// Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate;
// Viewport3Dx.ShowTriangleCountInfo = !Viewport3Dx.ShowTriangleCountInfo;
+
+ //工厂模式屏蔽一些东西
+ string step = ViewportManager.DiamondType.Split(" ").Last();
+ if (Common.RunMode == 1 && step.StartsWith("S"))
+ {
+ //禁用部分右键菜单
+ ViewportRightMenuShowModelFaceByType.IsChecked = false; //模型颜色按面分类
+ ContextMenu.Items.Remove(ViewportRightMenuShowModelFaceByType);
+ ViewportRightMenuShowDefectFace.IsChecked = false; //瑕疵面
+ ContextMenu.Items.Remove(ViewportRightMenuShowDefectFace);
+ ViewportRightMenuShowLighting.IsChecked = false; //关灯
+
+ if ("S1".Equals(step))
+ {
+ //有效数据
+ ViewportManager.DicValueParamToFacet.Clear();
+ ViewportManager.DicValueParamToFacet.Add("CROWN_ANGLE", PlaneType.CrownIncomplete);
+ ViewportManager.DicValueParamToFacet.Add("CROWN_HEIGHT", PlaneType.CrownIncomplete);
+ }
+
+ }
+
}
diff --git a/Views/UserControl/ViewportData/Enum/PlaneType.cs b/Views/UserControl/ViewportData/Enum/PlaneType.cs
index c548982..198d057 100644
--- a/Views/UserControl/ViewportData/Enum/PlaneType.cs
+++ b/Views/UserControl/ViewportData/Enum/PlaneType.cs
@@ -26,6 +26,8 @@ public enum PlaneType
LowerGirdleFact = 22,
[Description("底尖(或底小面)")]
Culet = 23,
+ [Description("未完成的冠部")]
+ CrownIncomplete = 32,
[Description("其他")]
Other = 99
}
\ No newline at end of file
diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
index 8254d03..a1487da 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
@@ -1,5 +1,6 @@
using System.Collections.ObjectModel;
using System.IO;
+using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;
@@ -21,6 +22,9 @@ using HelixToolkit.Wpf;
using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder;
using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera;
using System.Windows.Input;
+using SparkClient.Model.Extension;
+using SparkClient.Model.Helper;
+using MessageBox = SparkClient.Views.Dialog.MessageBox;
namespace SparkClient.Views.UserControl.ViewportData.Helper;
@@ -583,110 +587,181 @@ public class ViewportHelperPro
///
public static List GenerateLineTextModels(List entities, string valKey = "")
{
- Logger.Info("【面文本生成】开始生成面相关文本信息");
- var selFacet = entities;
- var selFacetType = entities.First().PlaneType;
-
var result = new List();
- if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
+ string steps = ViewportManager.DiamondType.Split(" ").Last();
+ if (Common.RunMode == 0 && steps.StartsWith("S"))
{
- // Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
- // List facetTypeAll =
- // ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
- // var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
- // .ToDictionary(group => group.Key, group => group.ToList());
- // Logger.Info($"【面文本生成】 腰由{groupedDic.Count}个面组成");
- //
- // var selPlaneCode = entities.First().PlaneCode;
- // Logger.Info($"【面文本生成】 当前选择{selPlaneCode}");
- //
- // List facetPoints = new List();
- // entities.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
- // var facetIndex = -1;
- // int.TryParse(selPlaneCode.Split("_")[1], out facetIndex);
- //
- // if (facetIndex == -1)
- // {
- // Logger.Info($"【面文本生成】 面索引解析失败{selPlaneCode}");
- // return result;
- // }
- // int linePointType = facetIndex % 4;
- // Console.WriteLine(facetIndex);
- // switch (linePointType)
- // {
- // case 0:
- // case 2:
- // var longestLine1 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);
- // result.Add(DisplayLineModel3D(new List>() { longestLine1 }, new Color4(1f, 0, 0, 1f), 2f));
- // break;
- // case 1:
- // case 3:
- // var longestLine2 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? false : true);
- // result.Add(DisplayLineModel3D(new List>() { longestLine2 }, new Color4(1f, 0, 0, 1f), 2f));
- // break;
- // }
- //
- // if (result.Exists(e => e == null))
- // {
- // Logger.Info("目标线段为空");
- // return result;
- // }
+ Logger.Info("【面文本生成】开始生成面相关文本信息");
+ var selFacet = entities;
+ var selFacetType = entities.First().PlaneType;
- //开始找值[选中线的值]
- // string param = string.Empty;
- // var valueIndex = 0;
- // if (facetIndex % 8 == 0 || (facetIndex + 1) % 8 == 0)
- // {
- // //上腰面
- // Logger.Info($"【面文本生成】 腰面值 波峰【上腰面】");
- // valueIndex = (int)Math.Ceiling(facetIndex / 8.0) == 8 ? 0 : (int)Math.Ceiling(facetIndex / 8.0);
- // param = "GIRDLE_BONE";
- // } else if (linePointType == 3 || linePointType == 0)
- // {
- // //风筝面
- // Logger.Info($"【面文本生成】 腰面值 波峰【风筝面】");
- // valueIndex = (facetIndex / 8);
- // param = "GIRDLE_BEZEL";
- // }
- // else
- // {
- // //腰厚比
- // Logger.Info($"【面文本生成】 腰面值 波峰【腰厚比】");
- // valueIndex = (facetIndex / 4);
- // param = "GIRDLE_VALLEY";
- // }
- //
- // valueIndex += 1;
- // var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
- // if (detail == null)
- // {
- // Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
- // return result;
- // }
- // Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
- // var paramValue = detail[$"{param}_{valueIndex}"];
- // if (paramValue == null)
- // {
- // Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在");
- // return result;
- // }
- // Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}");
- // var valueFloat = (Math.Floor(float.Parse(paramValue.ToString()) * 1000) / 10).ToString();
- // Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
- // var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- // result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
- List facetTypeAll =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
- var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
- .ToDictionary(group => group.Key, group => group.ToList());
- List girdleKey = new List { "GIRDLE_BEZEL", "GIRDLE_BONE", "GIRDLE_VALLEY" };
- var girdleResultDic = new Dictionary>>();
- foreach (var key in girdleKey)
+
+ if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
+ {
+ // Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
+ // List facetTypeAll =
+ // ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ // var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
+ // .ToDictionary(group => group.Key, group => group.ToList());
+ // Logger.Info($"【面文本生成】 腰由{groupedDic.Count}个面组成");
+ //
+ // var selPlaneCode = entities.First().PlaneCode;
+ // Logger.Info($"【面文本生成】 当前选择{selPlaneCode}");
+ //
+ // List facetPoints = new List();
+ // entities.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
+ // var facetIndex = -1;
+ // int.TryParse(selPlaneCode.Split("_")[1], out facetIndex);
+ //
+ // if (facetIndex == -1)
+ // {
+ // Logger.Info($"【面文本生成】 面索引解析失败{selPlaneCode}");
+ // return result;
+ // }
+ // int linePointType = facetIndex % 4;
+ // Console.WriteLine(facetIndex);
+ // switch (linePointType)
+ // {
+ // case 0:
+ // case 2:
+ // var longestLine1 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);
+ // result.Add(DisplayLineModel3D(new List>() { longestLine1 }, new Color4(1f, 0, 0, 1f), 2f));
+ // break;
+ // case 1:
+ // case 3:
+ // var longestLine2 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? false : true);
+ // result.Add(DisplayLineModel3D(new List>() { longestLine2 }, new Color4(1f, 0, 0, 1f), 2f));
+ // break;
+ // }
+ //
+ // if (result.Exists(e => e == null))
+ // {
+ // Logger.Info("目标线段为空");
+ // return result;
+ // }
+
+ //开始找值[选中线的值]
+ // string param = string.Empty;
+ // var valueIndex = 0;
+ // if (facetIndex % 8 == 0 || (facetIndex + 1) % 8 == 0)
+ // {
+ // //上腰面
+ // Logger.Info($"【面文本生成】 腰面值 波峰【上腰面】");
+ // valueIndex = (int)Math.Ceiling(facetIndex / 8.0) == 8 ? 0 : (int)Math.Ceiling(facetIndex / 8.0);
+ // param = "GIRDLE_BONE";
+ // } else if (linePointType == 3 || linePointType == 0)
+ // {
+ // //风筝面
+ // Logger.Info($"【面文本生成】 腰面值 波峰【风筝面】");
+ // valueIndex = (facetIndex / 8);
+ // param = "GIRDLE_BEZEL";
+ // }
+ // else
+ // {
+ // //腰厚比
+ // Logger.Info($"【面文本生成】 腰面值 波峰【腰厚比】");
+ // valueIndex = (facetIndex / 4);
+ // param = "GIRDLE_VALLEY";
+ // }
+ //
+ // valueIndex += 1;
+ // var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
+ // if (detail == null)
+ // {
+ // Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
+ // return result;
+ // }
+ // Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
+ // var paramValue = detail[$"{param}_{valueIndex}"];
+ // if (paramValue == null)
+ // {
+ // Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在");
+ // return result;
+ // }
+ // Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}");
+ // var valueFloat = (Math.Floor(float.Parse(paramValue.ToString()) * 1000) / 10).ToString();
+ // Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
+ // var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ // result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
+ List facetTypeAll =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+ List girdleKey = new List { "GIRDLE_BEZEL", "GIRDLE_BONE", "GIRDLE_VALLEY" };
+ var girdleResultDic = new Dictionary>>();
+ foreach (var key in girdleKey)
+ {
+ var resultDic = new Dictionary>();
+ for (int i = 0; i < groupedDic.Count; i++)
+ {
+ switch (key)
+ {
+ case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
+ break;
+ case "GIRDLE_BONE": if (i % 8 == 0) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
+ break;
+ case "GIRDLE_VALLEY": if (i % 4 == 2) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
+ break;
+ }
+ }
+ girdleResultDic.Add(key, resultDic);
+ }
+
+ foreach (var gridleResult in girdleResultDic)
+ {
+ foreach (var dic in gridleResult.Value)
+ {
+ //高亮四边形左边的线,并绑定值
+ List facetPoints = new List();
+ dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
+ //高亮的线
+ var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1;
+ if ("GIRDLE_VALLEY".Equals(gridleResult.Key))
+ {
+ var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);;
+ if (showLine == null) continue;
+ result.Add(DisplayLineModel3D(new List>() { showLine }, new Color4(1f, 0, 0, 1f), 2f));
+ }
+ //文字显示位置
+ var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ var resIndex = gridleResult.Value.Keys.ToList().IndexOf(dic.Key);
+ if (resIndex == -1) continue;
+ resIndex += 1;
+ var detail = ViewportManager.DiamondData[$"{gridleResult.Key}_DETAIL"];
+ if (detail == null)
+ {
+ Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL Key不存在");
+ return result;
+ }
+ Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL == {detail}");
+ var paramValue = detail[$"{gridleResult.Key}_{resIndex}"];
+ if (paramValue == null)
+ {
+ Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL.{gridleResult.Key}_{resIndex} Key不存在");
+ return result;
+ }
+
+ var valueFloat = ValueFormat(paramValue.ToString(), gridleResult.Key, false);
+ result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
+ }
+ }
+
+ } else if (selFacetType == PlaneType.Girdle && !string.IsNullOrWhiteSpace(valKey))
{
+ Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}");
+ /***
+ * GIRDLE_BEZEL 风筝
+ * GIRDLE_BONE 上腰
+ * GIRDLE_VALLEY 波谷
+ */
+ List facetTypeAll =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
var resultDic = new Dictionary>();
for (int i = 0; i < groupedDic.Count; i++)
{
- switch (key)
+ switch (valKey)
{
case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
break;
@@ -696,335 +771,345 @@ public class ViewportHelperPro
break;
}
}
- girdleResultDic.Add(key, resultDic);
- }
- foreach (var gridleResult in girdleResultDic)
- {
- foreach (var dic in gridleResult.Value)
+ if (resultDic.Count == 0)
+ {
+ Logger.Info($"【面文本生成】 关联面获取失败");
+ }
+
+ foreach (var dic in resultDic)
{
//高亮四边形左边的线,并绑定值
List facetPoints = new List();
dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
//高亮的线
+ // var showLine = GetLeftParallelLineSegment(facetPoints);
var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1;
- if ("GIRDLE_VALLEY".Equals(gridleResult.Key))
- {
- var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);;
- if (showLine == null) continue;
- result.Add(DisplayLineModel3D(new List>() { showLine }, new Color4(1f, 0, 0, 1f), 2f));
- }
+ var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);;
+ if (showLine == null) continue;
+
//文字显示位置
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- var resIndex = gridleResult.Value.Keys.ToList().IndexOf(dic.Key);
+ var resIndex = resultDic.Keys.ToList().IndexOf(dic.Key);
if (resIndex == -1) continue;
resIndex += 1;
- var detail = ViewportManager.DiamondData[$"{gridleResult.Key}_DETAIL"];
+ var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"];
if (detail == null)
{
- Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL Key不存在");
+ Logger.Info($"【面文本生成】 {valKey}_DETAIL Key不存在");
return result;
}
- Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL == {detail}");
- var paramValue = detail[$"{gridleResult.Key}_{resIndex}"];
+ Logger.Info($"【面文本生成】 {valKey}_DETAIL == {detail}");
+ var paramValue = detail[$"{valKey}_{resIndex}"];
if (paramValue == null)
{
- Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL.{gridleResult.Key}_{resIndex} Key不存在");
+ Logger.Info($"【面文本生成】 {valKey}_DETAIL.{valKey}_{resIndex} Key不存在");
return result;
}
-
- var valueFloat = ValueFormat(paramValue.ToString(), gridleResult.Key, false);
- result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
+ result.Add(DisplayLineModel3D(new List>() { showLine }, new Color4(1f, 0, 0, 1f), 2f));
+ var valueFloat = ValueFormat(paramValue.ToString(), valKey, true);
+ result.Add(DisplayText3D($"{valueFloat} \r\n {resIndex}", facetTextPoint));
}
- }
- } else if (selFacetType == PlaneType.Girdle && !string.IsNullOrWhiteSpace(valKey))
- {
- Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}");
- /***
- * GIRDLE_BEZEL 风筝
- * GIRDLE_BONE 上腰
- * GIRDLE_VALLEY 波谷
- */
- List facetTypeAll =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
- var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
- .ToDictionary(group => group.Key, group => group.ToList());
- var resultDic = new Dictionary>();
- for (int i = 0; i < groupedDic.Count; i++)
- {
- switch (valKey)
- {
- case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
- break;
- case "GIRDLE_BONE": if (i % 8 == 0) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
- break;
- case "GIRDLE_VALLEY": if (i % 4 == 2) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]);
- break;
- }
}
-
- if (resultDic.Count == 0)
- {
- Logger.Info($"【面文本生成】 关联面获取失败");
- }
-
- foreach (var dic in resultDic)
- {
- //高亮四边形左边的线,并绑定值
- List facetPoints = new List();
- dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
- //高亮的线
- // var showLine = GetLeftParallelLineSegment(facetPoints);
- var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1;
- var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);;
- if (showLine == null) continue;
-
- //文字显示位置
- var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- var resIndex = resultDic.Keys.ToList().IndexOf(dic.Key);
- if (resIndex == -1) continue;
- resIndex += 1;
- var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"];
- if (detail == null)
- {
- Logger.Info($"【面文本生成】 {valKey}_DETAIL Key不存在");
- return result;
- }
- Logger.Info($"【面文本生成】 {valKey}_DETAIL == {detail}");
- var paramValue = detail[$"{valKey}_{resIndex}"];
- if (paramValue == null)
- {
- Logger.Info($"【面文本生成】 {valKey}_DETAIL.{valKey}_{resIndex} Key不存在");
- return result;
- }
- result.Add(DisplayLineModel3D(new List>() { showLine }, new Color4(1f, 0, 0, 1f), 2f));
- var valueFloat = ValueFormat(paramValue.ToString(), valKey, true);
- result.Add(DisplayText3D($"{valueFloat} \r\n {resIndex}", facetTextPoint));
- }
-
- }
- else
- {
- Logger.Info($"【面文本生成】 命中面{selFacetType},不是腰");
- //查找同类面
- List facetTypeAll =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
- var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
- .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)
+ else
{
- 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); });
- var param = string.IsNullOrWhiteSpace(valKey) ? ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null : valKey;
- if (param == null)
+ Logger.Info($"【面文本生成】 命中面{selFacetType},不是腰");
+ //查找同类面
+ List facetTypeAll =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+ Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个");
+ var valueIndex = 1;
+ //台面显示
+ if (selFacetType == PlaneType.TableFacet)
{
- continue;
- }
-
- if (groupedDic.Count == 1)
- {
- var paramValue = ViewportManager.DiamondData[$"{param}"];
- if (paramValue == null)
+ List tablePointList = new List();
+ foreach (var entity in groupedDic["11_0"])
{
- Logger.Info($"【面文本生成】 {param} Key不存在");
- continue;
+ tablePointList.Add(entity.Point1);
+ tablePointList.Add(entity.Point2);
+ tablePointList.Add(entity.Point3);
}
- var valueFloat = ValueFormat(paramValue.ToString(), param, true);
- Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
- var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
+ HashSet tablePointSet = new HashSet(tablePointList);
+ tablePointList = VectorClockwiseSort(tablePointSet.ToList());
- } else if (groupedDic.Count == 16)
- {
- facetIndex += 1;
- valueIndex = facetIndex == 16 ? 1 : facetIndex % 2 == 0 ? valueIndex + 1 : valueIndex;
- var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
- if (detail == null)
+ List> line = new List>();
+ for (int i = 0; i < tablePointList.Count / 2; i++)
{
- Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
- continue;
+ line.Add(new Tuple(tablePointList[i], tablePointList[i+tablePointList.Count / 2]));
}
- Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
- var paramValue = detail[$"{param}_{valueIndex}"];
- if (paramValue == null)
+ string param = "TABLE";
+ var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
+ for (int i = 0; i < line.Count; i++)
{
- Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在");
- continue;
+ 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)));
}
- Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}");
-
- var valueFloat = ValueFormat(paramValue.ToString(), param, true);
- Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
- var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- if(PlaneType.LowerGirdleFact == selFacetType)
- result.Add(DisplayText3D($"\r\n\r\n{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y, facetTextPoint.Z)));
- else
- result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z)));
+ result.Add( DisplayLineModel3D(line, new Color4(1f, 0, 0, 1f), 0.7f));
+
+ }
- } else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1)
+ foreach (var kv in groupedDic)
{
- facetIndex += 1;
-
- var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
- if (detail == null)
+ 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); });
+ var param = string.IsNullOrWhiteSpace(valKey) ? ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null : valKey;
+ if (param == null)
{
- Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
continue;
}
- Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
- var paramValue = detail[$"{param}_{facetIndex}"];
- if (paramValue == null)
+
+ if (groupedDic.Count == 1)
{
- Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} Key不存在");
- continue;
- }
- Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} ==={paramValue}");
+ var paramValue = ViewportManager.DiamondData[$"{param}"];
+ if (paramValue == null)
+ {
+ Logger.Info($"【面文本生成】 {param} Key不存在");
+ continue;
+ }
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
+ Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
+ var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
+
+ } else if (groupedDic.Count == 16)
+ {
+ facetIndex += 1;
+ valueIndex = facetIndex == 16 ? 1 : facetIndex % 2 == 0 ? valueIndex + 1 : valueIndex;
+ var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
+ if (detail == null)
+ {
+ Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
+ continue;
+ }
+ Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
+ var paramValue = detail[$"{param}_{valueIndex}"];
+ if (paramValue == null)
+ {
+ Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在");
+ continue;
+ }
+ Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}");
+
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
+ Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
+ var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ if(PlaneType.LowerGirdleFact == selFacetType)
+ result.Add(DisplayText3D($"\r\n\r\n{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y, facetTextPoint.Z)));
+ else
+ 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)
+ {
+ facetIndex += 1;
- var valueFloat = ValueFormat(paramValue.ToString(), param, true);
- Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
- var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
- result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint));
+ var detail = ViewportManager.DiamondData[$"{param}_DETAIL"];
+ if (detail == null)
+ {
+ Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在");
+ continue;
+ }
+ Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}");
+ var paramValue = detail[$"{param}_{facetIndex}"];
+ if (paramValue == null)
+ {
+ Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} Key不存在");
+ continue;
+ }
+ Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} ==={paramValue}");
+
+ var valueFloat = ValueFormat(paramValue.ToString(), param, true);
+ Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
+ var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint));
+ }
}
- }
- if (string.IsNullOrWhiteSpace(valKey))
- {
- if (PlaneType.StarFacet == selFacetType || PlaneType.UpperGirdleFacet == selFacetType)
+ if (string.IsNullOrWhiteSpace(valKey))
{
- //星刻面: 在底面的点显示 星刻面长度比
- //上腰面: 在顶面的点显示 对应星刻面的 1-星刻面长度比
- string valParam = "STAR";
- List allStartEntity =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.StarFacet);
- var allStartEntityGroupByFacet = allStartEntity.GroupBy(entity => entity.PlaneCode)
- .ToDictionary(group => group.Key, group => group.ToList());
- List allUpperGridleEntity =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.UpperGirdleFacet);
- var allUpperGridleEntityGroupByFacet = allUpperGridleEntity.GroupBy(entity => entity.PlaneCode)
- .ToDictionary(group => group.Key, group => group.ToList());
- List points = new List();
- for (int i = 0; i < allStartEntityGroupByFacet.Count; i++)
+ if (PlaneType.StarFacet == selFacetType || PlaneType.UpperGirdleFacet == selFacetType)
{
- List pointsTemp = new List();
-
- allStartEntityGroupByFacet[$"13_{i}"].ForEach(e =>
+ //星刻面: 在底面的点显示 星刻面长度比
+ //上腰面: 在顶面的点显示 对应星刻面的 1-星刻面长度比
+ string valParam = "STAR";
+ List allStartEntity =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.StarFacet);
+ var allStartEntityGroupByFacet = allStartEntity.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+ List allUpperGridleEntity =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.UpperGirdleFacet);
+ var allUpperGridleEntityGroupByFacet = allUpperGridleEntity.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+ List points = new List();
+ for (int i = 0; i < allStartEntityGroupByFacet.Count; i++)
{
- pointsTemp.Add(e.Point1);
- pointsTemp.Add(e.Point2);
- pointsTemp.Add(e.Point3);
- });
- int upperGridleIndex = ((i + 1) * 2) >= 16 ? 1 : ((i + 1) * 2);
- // allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex}"].ForEach(e =>
- // {
- // pointsTemp.Add(e.Point1);
- // pointsTemp.Add(e.Point2);
- // pointsTemp.Add(e.Point3);
- // });
- allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex-1}"].ForEach(e =>
+ List pointsTemp = new List();
+
+ allStartEntityGroupByFacet[$"13_{i}"].ForEach(e =>
+ {
+ pointsTemp.Add(e.Point1);
+ pointsTemp.Add(e.Point2);
+ pointsTemp.Add(e.Point3);
+ });
+ int upperGridleIndex = ((i + 1) * 2) >= 16 ? 1 : ((i + 1) * 2);
+ // allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex}"].ForEach(e =>
+ // {
+ // pointsTemp.Add(e.Point1);
+ // pointsTemp.Add(e.Point2);
+ // pointsTemp.Add(e.Point3);
+ // });
+ allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex-1}"].ForEach(e =>
+ {
+ pointsTemp.Add(e.Point1);
+ pointsTemp.Add(e.Point2);
+ pointsTemp.Add(e.Point3);
+ });
+ Vector3? mostFrequent = pointsTemp
+ .GroupBy(v => v)
+ .Select(group => new { Vector = group.Key, Count = group.Count() })
+ .OrderByDescending(x => x.Count)
+ .FirstOrDefault()?.Vector;
+ if(mostFrequent.HasValue)
+ points.Add(mostFrequent.Value);
+ }
+ var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"];
+ for (int i = 0; i < 8; i++)
{
- pointsTemp.Add(e.Point1);
- pointsTemp.Add(e.Point2);
- pointsTemp.Add(e.Point3);
- });
- Vector3? mostFrequent = pointsTemp
- .GroupBy(v => v)
- .Select(group => new { Vector = group.Key, Count = group.Count() })
- .OrderByDescending(x => x.Count)
- .FirstOrDefault()?.Vector;
- if(mostFrequent.HasValue)
- points.Add(mostFrequent.Value);
- }
- var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"];
- for (int i = 0; i < 8; i++)
+ var valIndex = i + 1;
+ var paramValue = detail[$"{valParam}_{valIndex}"];
+ var valueFloat = ValueFormat(paramValue.ToString(), valParam);
+ var finalValue = PlaneType.StarFacet == selFacetType
+ ? valueFloat
+ : (100 - (double.Parse(valueFloat))).ToString();
+ result.Add(DisplayText3D($"{finalValue}%", new Vector3(points[i].X,points[i].Y-0.2f,points[i].Z)));
+ }
+
+ }else if (PlaneType.LowerGirdleFact == selFacetType)
{
- var valIndex = i + 1;
- var paramValue = detail[$"{valParam}_{valIndex}"];
- var valueFloat = ValueFormat(paramValue.ToString(), valParam);
- var finalValue = PlaneType.StarFacet == selFacetType
- ? valueFloat
- : (100 - (double.Parse(valueFloat))).ToString();
- result.Add(DisplayText3D($"{finalValue}%", new Vector3(points[i].X,points[i].Y-0.2f,points[i].Z)));
+ //下腰面: 在底面的点显示 下腰比
+ string valParam = "LOWER_HALVES_RATIO";
+
+ List allLowerGirdleEntity =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.LowerGirdleFact);
+ var allLowerGirdleGroupByFacet = allLowerGirdleEntity.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+
+ var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"];
+ for (int i = 0; i < 8; i++)
+ {
+ var valIndex = i + 1;
+ //获取点
+ List pointsTemp = new List();
+ allLowerGirdleGroupByFacet[$"22_{i*2}"].ForEach(e =>
+ {
+ pointsTemp.Add(e.Point1);
+ pointsTemp.Add(e.Point2);
+ pointsTemp.Add(e.Point3);
+ });
+ float? maxY = pointsTemp.Any() ? pointsTemp.Max(v => v.Y) : (float?)null;
+ Vector3? points = pointsTemp
+ .Where(v => maxY.HasValue && v.Y == maxY.Value)
+ .GroupBy(v => v)
+ .Select(g => new { Point = g.Key, Count = g.Count() })
+ .OrderByDescending(x => x.Count)
+ .ThenByDescending(x => x.Point.Y)
+ .FirstOrDefault()?.Point;
+ if(!points.HasValue)continue;
+ Vector3 point = points.Value;
+ //取值
+ var paramValue = detail[$"{valParam}_{valIndex}"];
+ var valueFloat = ValueFormat(paramValue.ToString(), valParam);
+ result.Add(DisplayText3D($"{valueFloat}%", new Vector3(point.X,point.Y+0.2f,point.Z)));
+ }
}
-
- }else if (PlaneType.LowerGirdleFact == selFacetType)
+ }
+ }
+ }else if (Common.RunMode == 1)
+ {
+ //
+ var selFacetType = entities.First().PlaneType;
+
+ string step = ViewportManager.DiamondType.Split(" ").Last();
+ if ("S1".Equals(step))
+ {
+ try
{
- //下腰面: 在底面的点显示 下腰比
- string valParam = "LOWER_HALVES_RATIO";
-
- List allLowerGirdleEntity =
- ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.LowerGirdleFact);
- var allLowerGirdleGroupByFacet = allLowerGirdleEntity.GroupBy(entity => entity.PlaneCode)
+ //有效数据
+ List facetTypeAll =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList());
+ Logger.Info($"【面文本生成】 [工厂模式]同类面{groupedDic.Count}个");
- var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"];
- for (int i = 0; i < 8; i++)
+ foreach (var kv in groupedDic)
{
- var valIndex = i + 1;
- //获取点
- List pointsTemp = new List();
- allLowerGirdleGroupByFacet[$"22_{i*2}"].ForEach(e =>
+ 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 =>
{
- pointsTemp.Add(e.Point1);
- pointsTemp.Add(e.Point2);
- pointsTemp.Add(e.Point3);
+ facetPoints.Add(e.Point1);
+ facetPoints.Add(e.Point2);
+ facetPoints.Add(e.Point3);
});
- float? maxY = pointsTemp.Any() ? pointsTemp.Max(v => v.Y) : (float?)null;
- Vector3? points = pointsTemp
- .Where(v => maxY.HasValue && v.Y == maxY.Value)
- .GroupBy(v => v)
- .Select(g => new { Point = g.Key, Count = g.Count() })
- .OrderByDescending(x => x.Count)
- .ThenByDescending(x => x.Point.Y)
- .FirstOrDefault()?.Point;
- if(!points.HasValue)continue;
- Vector3 point = points.Value;
- //取值
- var paramValue = detail[$"{valParam}_{valIndex}"];
- var valueFloat = ValueFormat(paramValue.ToString(), valParam);
- result.Add(DisplayText3D($"{valueFloat}%", new Vector3(point.X,point.Y+0.2f,point.Z)));
+ var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
+ facetIndex += 1;
+ if (valKey.IsNullOrEmpty())
+ {
+ //显示两个值
+ var param = new List { "CROWN_ANGLE", "CROWN_HEIGHT" };
+
+ StringBuilder sbShowText = new StringBuilder();
+ foreach (var p in param)
+ {
+ var detail = ViewportManager.DiamondData[$"{p}_DETAIL"];
+ var paramValue = detail[$"{p}_{facetIndex}"];
+ var valueFloat = ValueFormat(paramValue.ToString(), p, true);
+ sbShowText.Append(valueFloat);
+ sbShowText.Append("\r\n");
+ }
+
+ sbShowText.Append($" {facetIndex}");
+ result.Add(DisplayText3D(sbShowText.ToString(),
+ new Vector3(facetTextPoint.X, facetTextPoint.Y - 0.4f, facetTextPoint.Z)));
+ }
+ else
+ {
+ //显示一个值
+ StringBuilder sbShowText = new StringBuilder();
+ var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"];
+ var paramValue = detail[$"{valKey}_{facetIndex}"];
+ var valueFloat = ValueFormat(paramValue.ToString(), valKey, true);
+ sbShowText.Append(valueFloat);
+ sbShowText.Append("\r\n");
+ sbShowText.Append($" {facetIndex}");
+ result.Add(DisplayText3D(sbShowText.ToString(),
+ new Vector3(facetTextPoint.X, facetTextPoint.Y - 0.2f, facetTextPoint.Z)));
+ }
}
}
+ catch (Exception ex)
+ {
+ new MessageBox().Show($"面取值错误:{ex.Message}");
+ return result;
+ }
}
+
+
}
+
+
return result;
}
diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
index ea12854..61ad571 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
@@ -23,6 +23,10 @@ public class ViewportManager
public static List ViewportTriangle = new List();
public static JsonObject DiamondData = new JsonObject();
+
+ public static string DiamondCode = string.Empty;
+ //钻石类型
+ public static string DiamondType = string.Empty;
///
/// 模型正方向(从模型中心出发的方向)
///
diff --git a/Views/UserControl/ViewportData/ViewportData.cs b/Views/UserControl/ViewportData/ViewportData.cs
index 59cb4db..8b8480c 100644
--- a/Views/UserControl/ViewportData/ViewportData.cs
+++ b/Views/UserControl/ViewportData/ViewportData.cs
@@ -1,5 +1,7 @@
using System.Text.Json.Nodes;
using SharpDX;
+using SparkClient.Model.Extension;
+using SparkClient.Model.Helper;
using SparkClient.Views.UserControl.ViewportData.Entity;
using SparkClient.Views.UserControl.ViewportData.Enum;
using SparkClient.Views.UserControl.ViewportData.Helper;
@@ -92,7 +94,9 @@ public class ViewportData
ViewportManager.PositiveDirection.Y = 0f;
ViewportManager.PositiveDirection.Z = 0;
}
-
+
+ ViewportManager.DiamondCode = DiamondCode;
+ ViewportManager.DiamondType = json.AsObject()["error_msg"].ToSafeString();
var measurements = json.AsObject()["measurements"];
ViewportManager.DiamondData = measurements==null?new JsonObject():measurements.AsObject();
var midZ = facets.SelectMany(e => new[] { e.Point1.X, e.Point2.X, e.Point3.X }).OrderBy(z => Math.Abs(z))