fix 1.2 1.3 3

master
Tongg 5 months ago
parent 258323ec83
commit cd4f5b955f
  1. 1
      Language/zh_CN.xaml
  2. 2
      Model/Entity/ApiEntity/AlgorithmResultEntity.cs
  3. 73
      Model/Services/SOCClientService.cs
  4. 30
      ViewModel/BaseWindow/BaseControlVM.cs
  5. 1
      ViewModel/Grading/DiamondSelectVM.cs
  6. 7
      ViewModel/Grading/GradingLoadingVM.cs
  7. 3
      Views/UserControl/Viewport3D.xaml
  8. 11
      Views/UserControl/Viewport3D.xaml.cs
  9. 2
      Views/UserControl/ViewportData/Entity/Viewport3DTriangleEntity.cs
  10. 5
      Views/UserControl/ViewportData/Helper/CommonHelper.cs
  11. 122
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  12. 22
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

@ -155,6 +155,7 @@
<sys:String x:Key="ViewportSaveFail">保存失败</sys:String>
<sys:String x:Key="ViewportSelectPath">选择路径</sys:String>
<sys:String x:Key="ViewportRightMenuReset">重置网格线</sys:String>
<sys:String x:Key="ViewportCutXuanZ">切工仪旋转至此面</sys:String>
<!-- 登录页 -->
<sys:String x:Key="LoginWindowTitle">星辉钻石检测系统</sys:String>

@ -39,6 +39,8 @@ namespace SparkClient.Model.Entity.ApiEntity
/// 面的类型。
/// </summary>
public int facet_type { get; set; }
public double theta { get; set; }
}
/// <summary>

@ -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
/// </summary>
private readonly string _authToken;
private bool GenImage;
/// <summary>
/// 构造函数,初始化基础URL和认证令牌。
/// </summary>
@ -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;
@ -108,7 +112,9 @@ namespace SparkClient.Model.Services
{
return new SocResultEntity { Status = StatusCodes.DeviceNotFound, Images = new List<string>() };
}
return new SocResultEntity { Status = result.Status, Images = new List<string>() , DeviceId = result.device_id};
return new SocResultEntity
{ Status = result.Status, Images = new List<string>(), 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<string>() , DeviceId = ""};
return new SocResultEntity
{ Status = StatusCodes.DeviceNotFound, Images = new List<string>(), DeviceId = "" };
}
finally
{
GenImage = false;
}
}
@ -298,6 +309,62 @@ namespace SparkClient.Model.Services
}
}
public async Task<string> 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<ResponseStatus>(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<string> 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<ResponseStatus>(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;
}
}
}

@ -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,24 +147,29 @@ 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))
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
{
WindowManager.mainViewModel.Content = WindowManager.PreviousVM();

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

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

@ -53,6 +53,9 @@
<Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu >
<ContextMenu>
<!-- ViewportCutXuanZ -->
<MenuItem Header="{StaticResource ViewportCutXuanZ}" x:Name="ViewportCutXuanZ" Click="MenuItem_OnClick"/>
<Separator />
<!-- 菜单 -->
<MenuItem Header="{StaticResource ViewportRightMenuFront}" x:Name="ViewportRightMenuFront" Click="MenuItem_OnClick"/>
<MenuItem Header="{StaticResource ViewportRightMenuSaveViewToPNG}" x:Name="ViewportRightMenuSaveViewToPNG" Click="MenuItem_OnClick"/>

@ -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,7 +70,7 @@ public partial class Viewport3D
ViewportRightMenuShowModelFaceByType.IsChecked = true;
var a = Viewport3Dx.Items;
#if DEBUG
// Viewport3Dx.ShowViewCube = true;
// Viewport3Dx.ShowCoordinateSystem = true;
// Viewport3Dx.ShowCameraInfo = true;
@ -77,7 +78,6 @@ public partial class Viewport3D
// Viewport3Dx.ShowFrameDetails = !Viewport3Dx.ShowFrameDetails;
// Viewport3Dx.ShowFrameRate = !Viewport3Dx.ShowFrameRate;
// Viewport3Dx.ShowTriangleCountInfo = !Viewport3Dx.ShowTriangleCountInfo;
#endif
}
@ -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

@ -37,5 +37,5 @@ public class Viewport3DTriangleEntity
/// </summary>
public PlaneType PlaneType { get; set; }
public Double Theta { get; set; }
}

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

@ -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<Tuple<Vector3,Vector3>>(){ViewportManager.MainModelGirdleMaxLines}, new Color4(1f, 0, 0, 1f) ));
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3,Vector3>>(){ViewportManager.MainModelGirdleMinLines}, new Color4(0f, 1f, 0, 1f) ));
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3,Vector3>>(){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<Viewport3DTriangleEntity> 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<Vector3> facetPoints = new List<Vector3>();
// 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<Tuple<Vector3, Vector3>>() { 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<Vector3> tablePointList = new List<Vector3>();
foreach (var entity in groupedDic["11_0"])
{
tablePointList.Add(entity.Point1);
tablePointList.Add(entity.Point2);
tablePointList.Add(entity.Point3);
}
HashSet<Vector3> tablePointSet = new HashSet<Vector3>(tablePointList);
tablePointList = VectorClockwiseSort(tablePointSet.ToList());
List<Tuple<Vector3, Vector3>> line = new List<Tuple<Vector3, Vector3>>();
for (int i = 0; i < tablePointList.Count / 2; i++)
{
line.Add(new Tuple<Vector3, Vector3>(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));
}
}
/***
*
* 1181664other
* 2
* 1
* 80-7 -> 1-8
* 161-23-45-67-89-1011-1213-1415-0
* 64else里的东西来
* 3
* 4Manager里制定面-
* 5
* 6
* -id的文本
* +0.1"个单位 显示文本
*/
// var selFaceVector = entities
// .SelectMany(entity => new[] { entity.Point1, entity.Point2, entity.Point3 })
// .Distinct()
// .ToList();
// var uniqueLines = new HashSet<string>();
// 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");

@ -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<GeometryModel3D> ChooseAddModels = new List<GeometryModel3D>();
/// <summary>
@ -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<string, PlaneType> DicValueParamToFacet = new Dictionary<string, PlaneType>()

Loading…
Cancel
Save