feat: Factory Model

master
Tongg 4 months ago
parent 8ead72772d
commit bb800bbd0d
  1. 24
      App.xaml.cs
  2. 4
      Language/en_US.xaml
  3. 5
      Language/zh_CN.xaml
  4. 20
      Model/Extension/CommonExtension.cs
  5. 2
      Model/Helper/Common.cs
  6. 36
      ViewModel/Configuration/SettingsPages/SettingsVM.cs
  7. 18
      ViewModel/Grading/DiamondSelectVM.cs
  8. 6
      ViewModel/Grading/GradingLoadingVM.cs
  9. 60
      Views/Configuration/SettingPages/CustomSettingPage.xaml
  10. 2
      Views/UserControl/Viewport3D.xaml
  11. 22
      Views/UserControl/Viewport3D.xaml.cs
  12. 2
      Views/UserControl/ViewportData/Enum/PlaneType.cs
  13. 87
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  14. 4
      Views/UserControl/ViewportData/Helper/ViewportManager.cs
  15. 4
      Views/UserControl/ViewportData/ViewportData.cs

@ -4,6 +4,7 @@ using System.IO;
using System.Windows; using System.Windows;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Threading; using System.Windows.Threading;
using log4net;
using log4net.Config; using log4net.Config;
using SparkClient.Model.Helper; using SparkClient.Model.Helper;
using SparkClient.ViewModel.Configuration.SettingsPages; using SparkClient.ViewModel.Configuration.SettingsPages;
@ -15,21 +16,44 @@ namespace SparkClient;
/// </summary> /// </summary>
public partial class App : Application public partial class App : Application
{ {
private static readonly ILog Logger = LogManager.GetLogger(typeof(App));
protected override void OnStartup(StartupEventArgs e) protected override void OnStartup(StartupEventArgs e)
{ {
base.OnStartup(e); base.OnStartup(e);
//加载日志配置文件 //加载日志配置文件
XmlConfigurator.Configure(new FileInfo("log4net.config")); XmlConfigurator.Configure(new FileInfo("log4net.config"));
Logger.Info("==== ==== ==== ==== ==== ==== ==== ====");
Logger.Info("App Client Start: App Initialize");
Logger.Info("Loaded Logs Config: log4net.config");
//运行是否需要归档 //运行是否需要归档
Log4NetHelper.ArchiveOldLogs(); Log4NetHelper.ArchiveOldLogs();
Logger.Info("Check Logs need to be archived");
//打开数据库连接 //打开数据库连接
//读取数据库多语言配置 //读取数据库多语言配置
DataBaseHelper.CreateConnection(); DataBaseHelper.CreateConnection();
Logger.Info("Create Sqlite Connection...");
Logger.Info("Load Language Set");
string LanguageId = Settings.SelectValueById("LanguageId"); string LanguageId = Settings.SelectValueById("LanguageId");
if (LanguageId.Length == 0) if (LanguageId.Length == 0)
{ {
LanguageId = "zh-cn"; LanguageId = "zh-cn";
} }
MultilingualHelper.setLanguage(LanguageId); 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("==== ==== ==== ==== ==== ==== ==== ====");
} }
} }

@ -239,4 +239,8 @@
<sys:String x:Key="ViewportCutXuanZ">Rotate Cut Tool to This Face</sys:String> <sys:String x:Key="ViewportCutXuanZ">Rotate Cut Tool to This Face</sys:String>
<sys:String x:Key="ViewportCenterFlag">Show Center Mark</sys:String> <sys:String x:Key="ViewportCenterFlag">Show Center Mark</sys:String>
<sys:String x:Key="CustomSettingPageRunModeSet">RunModel</sys:String>
<sys:String x:Key="CustomSettingPageFactory">Factory</sys:String>
<sys:String x:Key="CustomSettingPageLaboratory">Laboratory</sys:String>
</ResourceDictionary> </ResourceDictionary>

@ -239,4 +239,9 @@
<sys:String x:Key="GradingLoadingPrevious">上一帧</sys:String> <sys:String x:Key="GradingLoadingPrevious">上一帧</sys:String>
<sys:String x:Key="GradingLoadingNext">下一帧</sys:String> <sys:String x:Key="GradingLoadingNext">下一帧</sys:String>
<!-- 2025/03/17 add -->
<sys:String x:Key="CustomSettingPageRunModeSet">运行模式</sys:String>
<sys:String x:Key="CustomSettingPageFactory">工厂模式</sys:String>
<sys:String x:Key="CustomSettingPageLaboratory">实验室模式</sys:String>
</ResourceDictionary> </ResourceDictionary>

@ -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);
}
}

@ -22,6 +22,8 @@ public class Common
public const string DataBaseName = "SparkDB"; public const string DataBaseName = "SparkDB";
public static int RunMode = 0;
/// <summary> /// <summary>
/// 将 DataTable 转换为 JSON 字符串 /// 将 DataTable 转换为 JSON 字符串
/// </summary> /// </summary>

@ -48,6 +48,22 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
public DataTable _rules; public DataTable _rules;
public DataTable Rules { get { return _rules; } set { _rules = value; OnPropertyChanged(nameof(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() public SettingsVM()
{ {
try { try {
@ -83,6 +99,18 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
this.ExcelFileChecked = ExcelFileChecked; this.ExcelFileChecked = ExcelFileChecked;
bool.TryParse(Settings.SelectValueById("DatFileChecked"), out bool DatFileChecked); bool.TryParse(Settings.SelectValueById("DatFileChecked"), out bool DatFileChecked);
this.DatFileChecked = 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"); FilePath = Settings.SelectValueById("FilePath");
RuleId = Settings.SelectValueById("RuleId"); RuleId = Settings.SelectValueById("RuleId");
selectRules(); selectRules();
@ -197,6 +225,14 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
Value = RuleId, Value = RuleId,
}; };
RuleData.insert(); RuleData.insert();
Settings runModeData = new Settings()
{
Key = "RunMode",
ItemName = "运行模式",
Value = NowRunMode,
};
runModeData.insert();
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -113,9 +113,27 @@ public class DiamondSelectVM : BaseViewModel
item.IsHighlighted = true; item.IsHighlighted = true;
}; };
List<ButtonViewModel> tempButtons2 = new List<ButtonViewModel>(); List<ButtonViewModel> tempButtons2 = new List<ButtonViewModel>();
if (Common.RunMode == 0)
{
var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/UIResource/round_P8-P8.png", UriKind.RelativeOrAbsolute)); 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}; ButtonViewModel button = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "ROUND P8 P8", Command = StartGradingCommand, IsFocused = true};
tempButtons2.Add(button); 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; Buttons2 = tempButtons2;
} }
} }

@ -157,6 +157,12 @@ public class GradingLoadingVM : BaseViewModel,IDisposable
stringBuilder.Append(line); stringBuilder.Append(line);
} }
Parameter = JsonConvert.DeserializeObject<AlgorithmResultEntity>(stringBuilder.ToString()); Parameter = JsonConvert.DeserializeObject<AlgorithmResultEntity>(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(); await CompleteProgressQuicklyAsync();
return 0; return 0;
} }

@ -57,6 +57,8 @@
<RowDefinition Height="auto"/> <RowDefinition Height="auto"/>
<RowDefinition Height="auto"/> <RowDefinition Height="auto"/>
<RowDefinition Height="auto"/> <RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Border Grid.Row="0" Style="{DynamicResource BorderRowStyle}"> <Border Grid.Row="0" Style="{DynamicResource BorderRowStyle}">
@ -144,52 +146,16 @@
DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding RuleId, Mode=TwoWay}"/> DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding RuleId, Mode=TwoWay}"/>
</Grid> </Grid>
</Border> </Border>
<!-- <Label Grid.Row="2" Content="{DynamicResource LanguageSettings}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="150" /> --> <Border Grid.Row="4" Style="{DynamicResource BorderRowStyle}">
<!-- <ComboBox Grid.Row="2" Grid.Column="1" Background="White" Width="150" HorizontalAlignment="Left" --> <Grid>
<!-- ItemsSource="{Binding Languages}" Margin="10 0" DisplayMemberPath="Key" SelectedValuePath="Value" --> <Grid.ColumnDefinitions>
<!-- SelectedValue="{Binding LanguageId, Mode=TwoWay}" > --> <ColumnDefinition Width="150"/>
<!-- </ComboBox> --> <ColumnDefinition Width="*"/>
<!-- <GridSplitter Grid.Row="3" Grid.ColumnSpan="2" Height="1" HorizontalAlignment="Stretch" Background="#BBBBBB"></GridSplitter> --> </Grid.ColumnDefinitions>
<!-- <Label Content="{DynamicResource UpdateFile}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="5" Grid.Row="4" Grid.Column="0" Width="150"/> --> <TextBlock Grid.Column="0" Text="{StaticResource CustomSettingPageRunModeSet}" Style="{DynamicResource TextBlockStyle}" />
<!-- <Grid Grid.Row="4" Grid.Column="1" Width="88" HorizontalAlignment="Left"> --> <ComboBox Grid.Column="1" Background="White" Width="150" HorizontalAlignment="Left" ItemsSource="{Binding RunMode}"
<!-- <Grid.RowDefinitions> --> DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding NowRunMode, Mode=TwoWay}"/>
<!-- <RowDefinition /> --> </Grid>
<!-- <RowDefinition /> --> </Border>
<!-- <RowDefinition /> -->
<!-- <RowDefinition /> -->
<!-- </Grid.RowDefinitions> -->
<!-- <CheckBox Grid.Row="0" Content="{DynamicResource TxtFile}" IsChecked="{Binding TxtFileChecked}"/> -->
<!-- <CheckBox Grid.Row="1" Content="{DynamicResource StlFile}" IsChecked="{Binding StlFileChecked}"/> -->
<!-- <CheckBox Grid.Row="2" Content="{DynamicResource ExcelFile}" IsChecked="{Binding ExcelFileChecked}"/> -->
<!-- <CheckBox Grid.Row="3" Content="{DynamicResource DatFile}" IsChecked="{Binding DatFileChecked}"/> -->
<!-- </Grid> -->
<!-- -->
<!-- <GridSplitter Grid.Row="5" Grid.ColumnSpan="2" Height="1" HorizontalAlignment="Stretch" Background="#BBBBBB"></GridSplitter> -->
<!-- <Label Grid.Row="6" Content="{DynamicResource SavePath}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="150"/> -->
<!-- <Grid Grid.Row="6" Grid.Column="1"> -->
<!-- <Grid.ColumnDefinitions> -->
<!-- <ColumnDefinition Width="300"/> -->
<!-- <ColumnDefinition/> -->
<!-- </Grid.ColumnDefinitions> -->
<!-- <TextBox TextWrapping="Wrap" Name ="filePath" Grid.Column="0" Text="{Binding FilePath}" Background="White" Width="300" HorizontalAlignment="Left"/> -->
<!-- <TextBlock Text="{DynamicResource Please enter}" Grid.Column="0" Foreground="#BBBBBB" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"> -->
<!-- <TextBlock.Style> -->
<!-- <Style TargetType="TextBlock"> -->
<!-- <Setter Property="Visibility" Value="Collapsed"/> -->
<!-- <Style.Triggers> -->
<!-- <DataTrigger Binding="{Binding Path=Text, ElementName=filePath}" Value=""> -->
<!-- <Setter Property="Visibility" Value="Visible"/> -->
<!-- </DataTrigger> -->
<!-- </Style.Triggers> -->
<!-- </Style> -->
<!-- </TextBlock.Style> -->
<!-- </TextBlock> -->
<!-- <Button Grid.Column="1" Background="#A7896F" Content="{DynamicResource Select}" Foreground="White" HorizontalAlignment="Left" Width="80" Command="{Binding SelectFileCommand}"/> -->
<!-- </Grid> -->
<!-- <GridSplitter Grid.Row="7" Grid.ColumnSpan="2" Height="1" HorizontalAlignment="Stretch" Background="#BBBBBB"></GridSplitter> -->
<!-- <Label Grid.Row="8" Grid.Column="0" Content="{DynamicResource GradeStandard}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="150"/> -->
<!-- <ComboBox Grid.Row="8" Grid.Column="1" Background="White" Width="150" HorizontalAlignment="Left" ItemsSource="{Binding Rules}" -->
<!-- DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding RuleId, Mode=TwoWay}"/> -->
<!-- <GridSplitter Grid.Row="9" Grid.ColumnSpan="2" Height="1" HorizontalAlignment="Stretch" Background="#BBBBBB"></GridSplitter> -->
</Grid> </Grid>
</Border> </Border>

@ -52,7 +52,7 @@
</Grid> </Grid>
<Border Grid.Row="1" x:Name="MainBorder"> <Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu > <Border.ContextMenu >
<ContextMenu> <ContextMenu x:Name="ContextMenu">
<!-- ViewportCutXuanZ --> <!-- ViewportCutXuanZ -->
<MenuItem Header="{StaticResource ViewportCutXuanZ}" x:Name="ViewportCutXuanZ" Click="MenuItem_OnClick"/> <MenuItem Header="{StaticResource ViewportCutXuanZ}" x:Name="ViewportCutXuanZ" Click="MenuItem_OnClick"/>
<Separator /> <Separator />

@ -78,6 +78,28 @@ public partial class Viewport3D
// Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails; // Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails;
// Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate; // Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate;
// Viewport3Dx.ShowTriangleCountInfo = !Viewport3Dx.ShowTriangleCountInfo; // 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);
}
}
} }

@ -26,6 +26,8 @@ public enum PlaneType
LowerGirdleFact = 22, LowerGirdleFact = 22,
[Description("底尖(或底小面)")] [Description("底尖(或底小面)")]
Culet = 23, Culet = 23,
[Description("未完成的冠部")]
CrownIncomplete = 32,
[Description("其他")] [Description("其他")]
Other = 99 Other = 99
} }

@ -1,5 +1,6 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.IO; using System.IO;
using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Animation; using System.Windows.Media.Animation;
@ -21,6 +22,9 @@ using HelixToolkit.Wpf;
using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder; using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder;
using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera; using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera;
using System.Windows.Input; using System.Windows.Input;
using SparkClient.Model.Extension;
using SparkClient.Model.Helper;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
namespace SparkClient.Views.UserControl.ViewportData.Helper; namespace SparkClient.Views.UserControl.ViewportData.Helper;
@ -582,12 +586,16 @@ public class ViewportHelperPro
/// <param name="valKey">指定数据集</param> /// <param name="valKey">指定数据集</param>
/// <returns></returns> /// <returns></returns>
public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, string valKey = "") public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, string valKey = "")
{
var result = new List<GeometryModel3D>();
string steps = ViewportManager.DiamondType.Split(" ").Last();
if (Common.RunMode == 0 && steps.StartsWith("S"))
{ {
Logger.Info("【面文本生成】开始生成面相关文本信息"); Logger.Info("【面文本生成】开始生成面相关文本信息");
var selFacet = entities; var selFacet = entities;
var selFacetType = entities.First().PlaneType; var selFacetType = entities.First().PlaneType;
var result = new List<GeometryModel3D>();
if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey)) if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{ {
// Logger.Info($"【面文本生成】 命中面{selFacetType},是腰"); // Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
@ -1023,6 +1031,83 @@ public class ViewportHelperPro
} }
} }
} }
}else if (Common.RunMode == 1)
{
//
var selFacetType = entities.First().PlaneType;
string step = ViewportManager.DiamondType.Split(" ").Last();
if ("S1".Equals(step))
{
try
{
//有效数据
List<Viewport3DTriangleEntity> 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}个");
foreach (var kv in groupedDic)
{
var value = kv.Value;
var key = kv.Key;
var facetIndex = -1;
int.TryParse(key.Split("_")[1], out facetIndex);
List<Vector3> facetPoints = new List<Vector3>();
value.ForEach(e =>
{
facetPoints.Add(e.Point1);
facetPoints.Add(e.Point2);
facetPoints.Add(e.Point3);
});
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
facetIndex += 1;
if (valKey.IsNullOrEmpty())
{
//显示两个值
var param = new List<string> { "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; return result;

@ -23,6 +23,10 @@ public class ViewportManager
public static List<Viewport3DTriangleEntity> ViewportTriangle = new List<Viewport3DTriangleEntity>(); public static List<Viewport3DTriangleEntity> ViewportTriangle = new List<Viewport3DTriangleEntity>();
public static JsonObject DiamondData = new JsonObject(); public static JsonObject DiamondData = new JsonObject();
public static string DiamondCode = string.Empty;
//钻石类型
public static string DiamondType = string.Empty;
/// <summary> /// <summary>
/// 模型正方向(从模型中心出发的方向) /// 模型正方向(从模型中心出发的方向)
/// </summary> /// </summary>

@ -1,5 +1,7 @@
using System.Text.Json.Nodes; using System.Text.Json.Nodes;
using SharpDX; using SharpDX;
using SparkClient.Model.Extension;
using SparkClient.Model.Helper;
using SparkClient.Views.UserControl.ViewportData.Entity; using SparkClient.Views.UserControl.ViewportData.Entity;
using SparkClient.Views.UserControl.ViewportData.Enum; using SparkClient.Views.UserControl.ViewportData.Enum;
using SparkClient.Views.UserControl.ViewportData.Helper; using SparkClient.Views.UserControl.ViewportData.Helper;
@ -93,6 +95,8 @@ public class ViewportData
ViewportManager.PositiveDirection.Z = 0; ViewportManager.PositiveDirection.Z = 0;
} }
ViewportManager.DiamondCode = DiamondCode;
ViewportManager.DiamondType = json.AsObject()["error_msg"].ToSafeString();
var measurements = json.AsObject()["measurements"]; var measurements = json.AsObject()["measurements"];
ViewportManager.DiamondData = measurements==null?new JsonObject():measurements.AsObject(); 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)) var midZ = facets.SelectMany(e => new[] { e.Point1.X, e.Point2.X, e.Point3.X }).OrderBy(z => Math.Abs(z))

Loading…
Cancel
Save