feat: 模型修改

master
Tongg 7 months ago
parent f17891206f
commit 278c30b108
  1. 12
      Model/Helper/Common.cs
  2. 6
      ViewModel/Grading/DiamondSelectVM.cs
  3. 12
      Views/Configuration/ConfigMenuPage.xaml
  4. 34
      Views/UserControl/ViewportData/Entity/ColorConfigEntity.cs
  5. 56
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  6. 3
      Views/UserControl/ViewportData/Helper/ViewportManager.cs
  7. 4
      Views/UserControl/ViewportData/ViewportData.cs

@ -1,5 +1,7 @@
using System.Data; using System.Data;
using System.Reflection; using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace SparkClient.Model.Helper; namespace SparkClient.Model.Helper;
@ -88,4 +90,14 @@ public class Common
return entityList; return entityList;
} }
private static string GenerateMd5Hash(string input)
{
using (var md5 = MD5.Create())
{
var inputBytes = Encoding.UTF8.GetBytes(input);
var hashBytes = md5.ComputeHash(inputBytes);
return string.Concat(hashBytes.Select(b => b.ToString("X2")));
}
}
} }

@ -114,7 +114,9 @@ public class DiamondSelectVM : BaseViewModel
/// <param name="param"></param> /// <param name="param"></param>
public async void StartGrading(object param) public async void StartGrading(object param)
{ {
#if DEBUG
DoStartGrading(param);
#else
LoadingDialog loading = new LoadingDialog(); LoadingDialog loading = new LoadingDialog();
try try
{ {
@ -236,7 +238,7 @@ public class DiamondSelectVM : BaseViewModel
finally { finally {
} }
#endif
} }
// 将 UI 操作调度到主线程并显示错误信息 // 将 UI 操作调度到主线程并显示错误信息

@ -78,10 +78,10 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
<Style x:Key="InCloseHoverImageStyle" TargetType="Image"> <Style x:Key="InCloseHoverImageStyle" TargetType="Image">
<Setter Property="Source" Value="pack://application:,,,/Resource/Images/UIResource/01-8.png"/> <Setter Property="Source" Value="pack://application:,,,/Resource/Images/UIResource/01-8-1.png"/>
<Style.Triggers> <Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=Border}}" Value="True"> <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=Border}}" Value="True">
<Setter Property="Source" Value="pack://application:,,,/Resource/Images/UIResource/01-8-1.png"/> <Setter Property="Source" Value="pack://application:,,,/Resource/Images/UIResource/01-8.png"/>
</DataTrigger> </DataTrigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>
@ -181,10 +181,12 @@
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="*"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Button Grid.Row="0" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Right" Padding="0" Margin="0 5 10 0 " Command="{Binding CloseCommand}"> <Button Grid.Row="0" Background="Transparent" BorderBrush="Transparent"
<Image Style="{StaticResource InCloseHoverImageStyle}" x:Name="ImageClosed" Width="25" Height="40"/> HorizontalAlignment="Right" Padding="0" Margin="0 0 0 10 "
Command="{Binding CloseCommand}" Width="50" Height="50">
<Image Style="{StaticResource InCloseHoverImageStyle}" x:Name="ImageClosed" Width="40" Height="40"/>
</Button> </Button>
<Grid Grid.Row="1"> <Grid Grid.Row="1">

@ -14,19 +14,19 @@ public class ColorConfigEntity
private string _selFacetColor = "#FFBDB759"; private string _selFacetColor = "#FFBDB759";
private string _selBorderColor = "#FF000000"; private string _selBorderColor = "#FF000000";
private string _selTypeColor = "#FFFCFCD1"; private string _selTypeColor = "#FFFCFCD1";
private string _selFontColor = "#FFF4A061"; private string _selFontColor = "#FFFF0000";
private string _selLineColor; private string _selLineColor = "#FFFF0000";
private string _selFrontColor = "FFFF0000"; private string _selFrontColor = "#FFFF0000";
private string _errFacetColor = "#FFFF0000"; private string _errFacetColor = "#FFFF0000";
private string _tableFacetColor; private string _tableFacetColor = "#FF87CEFA";
private string _upperMainFacetColor; private string _upperMainFacetColor = "#FF1E90FF";
private string _starFacetColor; private string _starFacetColor = "#FF0000FF";
private string _upperGridleFacetColor; private string _upperGirdleFacetColor = "#FF6495ED";
private string _girdleFacetColor; private string _girdleFacetColor = "#3300BFFF";
private string _pavilionFacetColor; private string _pavilionFacetColor = "#FF6A5ACD";
private string _lowerGridleFacetColor; private string _lowerGirdleFacetColor = "#FFAEEEEE";
private string _culetFacetColor; private string _culetFacetColor = "#FFFFFFFF";
/// <summary> /// <summary>
/// 面部颜色 /// 面部颜色
@ -211,15 +211,15 @@ public class ColorConfigEntity
/// <summary> /// <summary>
/// 上腰面颜色 /// 上腰面颜色
/// </summary> /// </summary>
public Color4 UpperGridleFacetColor public Color4 UpperGirdleFacetColor
{ {
get get
{ {
return CommonHelper.HexToColor4(_upperGridleFacetColor); return CommonHelper.HexToColor4(_upperGirdleFacetColor);
} }
set set
{ {
_upperGridleFacetColor = CommonHelper.Color4ToHex(value); _upperGirdleFacetColor = CommonHelper.Color4ToHex(value);
} }
} }
@ -256,15 +256,15 @@ public class ColorConfigEntity
/// <summary> /// <summary>
/// 下腰面颜色 /// 下腰面颜色
/// </summary> /// </summary>
public Color4 LowerGridleFacetColor public Color4 LowerGirdleFacetColor
{ {
get get
{ {
return CommonHelper.HexToColor4(_lowerGridleFacetColor); return CommonHelper.HexToColor4(_lowerGirdleFacetColor);
} }
set set
{ {
_lowerGridleFacetColor = CommonHelper.Color4ToHex(value); _lowerGirdleFacetColor = CommonHelper.Color4ToHex(value);
} }
} }

@ -123,21 +123,21 @@ public class ViewportHelperPro
switch (planeType) switch (planeType)
{ {
case PlaneType.Girdle: case PlaneType.Girdle:
return new Color4(0, 0.74901f, 1, 0.2f); return ViewportManager.ColorConfig.GirdleFacetColor;
case PlaneType.TableFacet : case PlaneType.TableFacet :
return new Color4(0.52941f, 0.80734f, 0.98039f, 1); return ViewportManager.ColorConfig.TableFacetColor;
case PlaneType.UpperMainFacet: case PlaneType.UpperMainFacet:
return new Color4(30/255f, 144/255f, 1, 1f); return ViewportManager.ColorConfig.UpperMainFacetColor;
case PlaneType.StarFacet: case PlaneType.StarFacet:
return new Color4(0, 0, 1, 1f); return ViewportManager.ColorConfig.StarFacetColor;
case PlaneType.UpperGirdleFacet: case PlaneType.UpperGirdleFacet:
return new Color4(100/255f, 149/255f, 237/255f, 1f); return ViewportManager.ColorConfig.UpperGirdleFacetColor;
case PlaneType.PavilionMainFacet: case PlaneType.PavilionMainFacet:
return new Color4(106/255f, 90/255f, 205/255f, 1f); return ViewportManager.ColorConfig.PavilionFacetColor;
case PlaneType.LowerGirdleFact: case PlaneType.LowerGirdleFact:
return new Color4(175/255f, 238/255f, 238/255f, 1f); return ViewportManager.ColorConfig.LowerGirdleFacetColor;
case PlaneType.Culet: case PlaneType.Culet:
return new Color4(255/255f, 255/255f, 255/255f, 1f); return ViewportManager.ColorConfig.CuletFacetColor;
} }
return null; return null;
@ -338,10 +338,10 @@ public class ViewportHelperPro
} }
HashSet<Vector3> uniqueVectors = new HashSet<Vector3>(selFaceVector); HashSet<Vector3> uniqueVectors = new HashSet<Vector3>(selFaceVector);
for (int i = 0; i < uniqueVectors.ToList().Count - 1; i++) for (int i = 0; i < selFaceVector.ToList().Count - 1; i++)
{ {
var nowItem = uniqueVectors.ToList()[i]; var nowItem = selFaceVector.ToList()[i];
var nextItem = uniqueVectors.ToList()[i + 1]; var nextItem = selFaceVector.ToList()[i + 1];
var line = new Tuple<Vector3, Vector3>(nowItem, nextItem); var line = new Tuple<Vector3, Vector3>(nowItem, nextItem);
if (IsLineSegmentParallelToYAxis(line)) if (IsLineSegmentParallelToYAxis(line))
{ {
@ -455,7 +455,21 @@ public class ViewportHelperPro
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList()); .ToDictionary(group => group.Key, group => group.ToList());
foreach (var kv in groupedDic)
{
var value = kv.Value;
var key = kv.Key;
var facetIndex = key.Split("_")[1];
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);
result.Add(DisplayText3D($"{key.Split("_")[1]} \r\n 12334", facetTextPoint, textColor));
}
/*** /***
* *
* 1181664other * 1181664other
@ -677,6 +691,8 @@ public class ViewportHelperPro
{ {
Foreground = color??ViewportManager.ColorConfig.SelFontColor, Foreground = color??ViewportManager.ColorConfig.SelFontColor,
Scale = 0.8f, Scale = 0.8f,
VerticalAlignment = BillboardVerticalAlignment.Center,
HorizontalAlignment = BillboardHorizontalAlignment.Center
}); });
billboardTextModel.Geometry = billboardText; billboardTextModel.Geometry = billboardText;
@ -1059,6 +1075,22 @@ public class ViewportHelperPro
float z = vectors.Sum(v => v.Z) / vectors.Count; float z = vectors.Sum(v => v.Z) / vectors.Count;
return new Vector3(x, y, z); return new Vector3(x, y, z);
} }
public static Vector3 GetOffsetCenter(List<Vector3> facetVector, Vector3 center, float dev = 0.4f)
{
// 1. 去重 facetVector
var distinctFacetVector = facetVector.Distinct().ToList();
// 2. 计算多边形的几何中心
Vector3 polygonCenter = GetCentroid(distinctFacetVector);
// 3. 计算从模型中心点到几何中心的向量
Vector3 direction = polygonCenter - center;
// 4. 归一化方向向量并根据偏移量 dev 计算最终的偏移位置
Vector3 offsetCenter = polygonCenter + Vector3.Normalize(direction) * dev;
return offsetCenter;
}
/// <summary> /// <summary>
/// 计算夹角度数 /// 计算夹角度数
/// </summary> /// </summary>

@ -1,3 +1,4 @@
using System.Text.Json.Nodes;
using System.Windows.Media.Media3D; using System.Windows.Media.Media3D;
using HelixToolkit.Wpf.SharpDX; using HelixToolkit.Wpf.SharpDX;
using SharpDX; using SharpDX;
@ -14,6 +15,8 @@ public class ViewportManager
/// 视图中三角形实体们 /// 视图中三角形实体们
/// </summary> /// </summary>
public static List<Viewport3DTriangleEntity> ViewportTriangle = new List<Viewport3DTriangleEntity>(); public static List<Viewport3DTriangleEntity> ViewportTriangle = new List<Viewport3DTriangleEntity>();
public static JsonObject DiamondData = new JsonObject();
/// <summary> /// <summary>
/// 模型正方向(从模型中心出发的方向) /// 模型正方向(从模型中心出发的方向)
/// </summary> /// </summary>

@ -92,7 +92,9 @@ public class ViewportData
ViewportManager.PositiveDirection.Y = 0f; ViewportManager.PositiveDirection.Y = 0f;
ViewportManager.PositiveDirection.Z = 0; ViewportManager.PositiveDirection.Z = 0;
} }
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)) var midZ = facets.SelectMany(e => new[] { e.Point1.X, e.Point2.X, e.Point3.X }).OrderBy(z => Math.Abs(z))
.First(); .First();
List<Viewport3DTriangleEntity> facetsFinal = new List<Viewport3DTriangleEntity>(); List<Viewport3DTriangleEntity> facetsFinal = new List<Viewport3DTriangleEntity>();

Loading…
Cancel
Save