diff --git a/Resource/Images/UserControl/03-8-3.png b/Resource/Images/UserControl/03-8-3.png
new file mode 100644
index 0000000..b2c78f5
Binary files /dev/null and b/Resource/Images/UserControl/03-8-3.png differ
diff --git a/SparkClient.csproj b/SparkClient.csproj
index 62c3379..dfac916 100644
--- a/SparkClient.csproj
+++ b/SparkClient.csproj
@@ -24,6 +24,7 @@
+
@@ -189,6 +190,8 @@
+
+
diff --git a/SparkClient.sln.DotSettings.user b/SparkClient.sln.DotSettings.user
index 4910ea3..79d18e2 100644
--- a/SparkClient.sln.DotSettings.user
+++ b/SparkClient.sln.DotSettings.user
@@ -12,6 +12,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
@@ -31,9 +32,11 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
@@ -50,11 +53,13 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs
index f0c7643..7531fa6 100644
--- a/ViewModel/Grading/GradingResultVM.cs
+++ b/ViewModel/Grading/GradingResultVM.cs
@@ -1,6 +1,7 @@
using System.ComponentModel;
using System.Data;
using System.IO;
+using System.IO.Ports;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Input;
@@ -12,27 +13,16 @@ using SaveFileDialog = Microsoft.Win32.SaveFileDialog;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using SparkClient.Views.Dialog;
-using NPOI.HPSF;
using Application = System.Windows.Application;
using MessageBox = SparkClient.Views.Dialog.MessageBox;
using System.Windows;
-using SharpDX;
using SparkClient.Views.UserControl.ViewportData.Entity;
using SparkClient.ViewModel.Configuration.SettingsPages;
using SparkClient.Views.UserControl.ViewportData.Helper;
-using System.Diagnostics.Metrics;
using log4net;
-using SparkClient.ViewModel.Configuration;
using System.Drawing.Printing;
using System.Drawing;
-using RectangleF = System.Drawing.RectangleF;
-using FontFamily = System.Drawing.FontFamily;
-using FontStyle = System.Drawing.FontStyle;
-using NPOI.SS.Formula.Functions;
-using System.Windows.Media;
-using Brush = System.Drawing.Brush;
-using Brushes = System.Drawing.Brushes;
-
+using HandyControl.Controls;
namespace SparkClient.ViewModel.Grading;
///
/// 检测结果画面VM
@@ -67,6 +57,10 @@ public class GradingResultVM : BaseViewModel
public ICommand SaveFileCommand { get; }
public ICommand SaveAsCommand { get; }
+ // 热敏标签打印
+ public ICommand ThermalPrintCommand { get; }
+ private SerialPort _serialPort;
+
///
/// 左侧计算结果展示数据
///
@@ -167,6 +161,10 @@ public class GradingResultVM : BaseViewModel
{
SaveAsCommand = new RelayCommand(SaveAs);
SaveFileCommand = new RelayCommand(SaveFile);
+ // 热敏标签打印
+ ThermalPrintCommand = new RelayCommand(ExecuteThermalPrint);
+ // 初始化 SerialPort
+ InitializeSerialPort();
if (result != null)
{
@@ -1684,131 +1682,247 @@ public class GradingResultVM : BaseViewModel
DataBaseHelper.ExecuteNonQuery(sql);
}
#endregion
+
+
+ // 执行热敏打印的方法
+ private void ExecuteThermalPrint(object parameter)
+ {
+ try
+ {
+ // 准备要打印的数据
+ string printData = PreparePrintData();
+
+ // 创建打印文档
+ PrintDocument printDocument = new PrintDocument();
+
+ // 确保 PrintPage 事件处理程序正确实现
+ printDocument.PrintPage += (sender, e) =>
+ {
+ // 设置打印字体和格式
+ Font printFont = new Font("Courier", 10);
+ SolidBrush drawBrush = new SolidBrush(System.Drawing.Color.Black);
+ float yPos = 0f;
+ int linesPerPage = 0;
- public void PrintLabel()
+ // 逐行打印数据
+ using (StringReader sr = new StringReader(printData))
+ {
+ string line;
+ while ((line = sr.ReadLine()) != null)
+ {
+ yPos = e.MarginBounds.Top + (linesPerPage * printFont.GetHeight(e.Graphics));
+ e.Graphics.DrawString(line, printFont, drawBrush, e.MarginBounds.Left, yPos);
+ linesPerPage++;
+ }
+ }
+
+ // 表示已完成打印,不需要额外的页面
+ e.HasMorePages = false;
+ };
+
+ // 创建自定义打印预览窗体
+ CustomPrintPreviewForm customPreviewForm = new CustomPrintPreviewForm(printDocument);
+
+ // 显示自定义打印预览窗体
+ DialogResult result = customPreviewForm.ShowDialog();
+
+ if (result == DialogResult.OK)
+ {
+ // 打开串口
+ if (!_serialPort.IsOpen)
+ {
+ _serialPort.Open();
+ }
+
+ // 将数据转换为字节数组
+ byte[] dataToSend = System.Text.Encoding.UTF8.GetBytes(printData);
+
+ // 发送数据到串口
+ _serialPort.Write(dataToSend, 0, dataToSend.Length);
+
+ Logger.Info("数据已发送到热敏打印机。");
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.Error($"热敏打印发生错误: {ex.Message}");
+ Growl.Error("热敏打印发生错误");
+ }
+ finally
+ {
+ // 关闭串口
+ if (_serialPort.IsOpen)
+ {
+ _serialPort.Close();
+ }
+ }
+ }
+
+ // 自定义打印预览窗体类
+ public class CustomPrintPreviewForm : Form
{
- PrintDocument printDoc = new PrintDocument();
- printDoc.PrintPage += new PrintPageEventHandler(PrintPageHandler);
- printDoc.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 550, 300);
+ private PrintPreviewControl printPreviewControl;
+ private Button confirmButton;
+ private Button systemPrintButton; // 新增的系统打印按钮
+ private PrintDocument printDocument;
+
+ public CustomPrintPreviewForm(PrintDocument document)
+ {
+ this.printDocument = document;
- PrintDialog printDialog = new PrintDialog();
- printDialog.Document = printDoc;
+ // 初始化打印预览控件
+ printPreviewControl = new PrintPreviewControl();
+ printPreviewControl.Dock = DockStyle.Fill;
+ printPreviewControl.Document = printDocument;
- if (printDialog.ShowDialog() == DialogResult.OK)
+ // 初始化确认按钮
+ confirmButton = new Button();
+ confirmButton.Text = "确认打印";
+ confirmButton.Dock = DockStyle.Bottom;
+ confirmButton.Click += ConfirmButton_Click;
+
+ // 初始化系统打印按钮
+ systemPrintButton = new Button();
+ systemPrintButton.Text = "系统打印";
+ systemPrintButton.Dock = DockStyle.Bottom;
+ systemPrintButton.Click += SystemPrintButton_Click;
+
+ // 将控件添加到窗体
+ this.Controls.Add(printPreviewControl);
+ this.Controls.Add(confirmButton);
+ this.Controls.Add(systemPrintButton);
+
+ // 设置窗体属性
+ this.Size = new System.Drawing.Size(800, 600);
+ }
+
+ private void ConfirmButton_Click(object sender, EventArgs e)
{
- printDoc.Print();
+ this.DialogResult = DialogResult.OK;
+ this.Close();
+ }
+
+ private void SystemPrintButton_Click(object sender, EventArgs e)
+ {
+ // 创建一个打印对话框
+ PrintDialog printDialog = new PrintDialog();
+ // 将打印对话框关联到当前的 PrintDocument
+ printDialog.Document = printDocument;
+
+ // 显示打印对话框,如果用户点击了“确定”按钮
+ if (printDialog.ShowDialog() == DialogResult.OK)
+ {
+ // 使用用户在对话框中选择的打印机和设置进行打印
+ printDocument.Print();
+ }
}
}
+ // 准备要打印的数据
- private void PrintPageHandler(object sender, PrintPageEventArgs e)
+ private string PreparePrintData()
{
var result = algorithmResult.measurements;
- int startX = 10;
- int startY = 10;
- var col2X = startX + 90;
- var col3X = col2X + 70;
- // 设置字体
- Font font = new Font(FontFamily.GenericSerif, 12, FontStyle.Bold);
-
- // 设置颜色
- Brush brush = Brushes.Black;
-
- // 设置对齐方式
- StringFormat format = new StringFormat();
- format.Alignment = StringAlignment.Center; // 水平居中
- format.LineAlignment = StringAlignment.Center; // 垂直居中
-
- // 绘制文本
- // 第一行
- int X = startX;
- int Y = startY;
- e.Graphics.DrawString(Standard, font, brush, new PointF(X, Y));
- X += 70;
- e.Graphics.DrawString(Shape, font, brush, new PointF(X, Y));
- X += 50;
- e.Graphics.DrawString($"ID:{DiamondCode}", font, brush, new PointF(X, Y));
- X += 100;
- e.Graphics.DrawString($"Weight:{Wight}ct.", font, brush, new PointF(X, Y));
- X += 120;
- Brush backgroundBrush = new SolidBrush(System.Drawing.Color.Black); // 背景色为黄色
- e.Graphics.FillRectangle(backgroundBrush, new RectangleF(X, Y, 200, font.Height));
- e.Graphics.DrawString(CutLevelTotal, font, Brushes.White, new PointF(X, Y));
-
- // 第二行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Diameter", font, brush, new PointF(X, Y));
-
- e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER)}mm", font, brush, new PointF(col2X, Y));
-
- e.Graphics.DrawString($"({FormatDouble_D(result.M1)}mm-{FormatDouble_D(result.M2)}mm)", font, brush, new PointF(col3X, Y));
- e.Graphics.DrawString($"0.3%", font, brush, new PointF(310, Y));
- e.Graphics.FillRectangle(backgroundBrush, new RectangleF(350, Y, 200, font.Height));
- e.Graphics.DrawString(SymLevelTotal, font, Brushes.White, new PointF(X, Y));
-
- // 第三行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Total Dep.", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER * result.TOTAL_DEPTH)}mm", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"{FormatDouble_P(result.TOTAL_DEPTH)}%", font, brush, new PointF(X, Y));
- e.Graphics.DrawString($"{DtResults.Where(X=> "TOTAL_DEPTH".Equals(X.TestItemId)).Select(X=>X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
- // 第四行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Table", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER * result.TABLE)}mm", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"{FormatDouble_P(result.TABLE)}%", font, brush, new PointF(X, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "TABLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
- // 第五行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Crown", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_A(result.CROWN_ANGLE)}°", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"({FormatDouble_A(result.CROWN_ANGLE_MIN)}°-{FormatDouble_A(result.CROWN_ANGLE_MAX)}°)", font, brush, new PointF(X, Y));
- X += 120;
- e.Graphics.DrawString($"({FormatDouble_A(result.CROWN_HEIGHT)}%)", font, brush, new PointF(X, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "CROWN_ANGLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(410, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "CROWN_HEIGHT".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
- // 第六行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Pavil.", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_A(result.PAV_ANGLE)}°", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"({FormatDouble_A(result.PAV_ANGLE_MIN)}°-{FormatDouble_A(result.PAV_ANGLE_MAX)}°)", font, brush, new PointF(X, Y));
- X += 120;
- e.Graphics.DrawString($"({FormatDouble_A(result.PAV_DEPTH)}%)", font, brush, new PointF(X, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "PAV_ANGLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(410, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "PAV_DEPTH".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
- // 第七行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Culet", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_P(result.CULET)}%", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"Twist", font, brush, new PointF(X, Y));
- X += 60;
- e.Graphics.DrawString($"({FormatDouble_A(result.TWIST_MIN)}°-{FormatDouble_A(result.TWIST_MAX)}°)", font, brush, new PointF(X, Y));
- // 第八行
- X = startX;
- Y += font.Height;
- e.Graphics.DrawString("Girdle 16M", font, brush, new PointF(X, Y));
- X = col2X;
- e.Graphics.DrawString($"{FormatDouble_D(result.GIRDLE_VALLEY)}", font, brush, new PointF(X, Y));
- X = col3X;
- e.Graphics.DrawString($"({FormatDouble_P(result.GIRDLE_VALLEY_MIN)}%-{FormatDouble_P(result.GIRDLE_VALLEY_MAX)}%)", font, brush, new PointF(X, Y));
- e.Graphics.DrawString($"{DtResults.Where(X => "GIRDLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+ // 定义每个字段的目标宽度,确保每个字段有足够的空间
+ int paramWidth = 20; // 参数列宽度
+ int avgWidth = 15; // 平均值列宽度
+ int rangeWidth = 50; // 区间列宽度
+ int cutGradeWidth = 15; // 切工等级列宽度
+ int symGradeWidth = 15; // 对称性等级列宽度
+
+ // 格式化数值,确保数值位数一致
+ string formatNumber = "{0,8:F2}"; // 数值占8个字符宽度,保留两位小数
+
+ // 使用固定宽度填充每个字段,确保整齐
+ string data = $"{string.Format(formatNumber, "机构:IGI").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, "形状:圆形").PadRight(avgWidth)}" +
+ $"{string.Format(formatNumber, $"编码:{DiamondCode}").PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, $"重量: {Wight}ct.").PadRight(paramWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "参数").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, "平均值").PadRight(avgWidth)}" +
+ $"{string.Format(formatNumber, "区间(Min/Max)").PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "切工等级").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "对称性等级").PadRight(symGradeWidth)}" + "\n";
+
+ // 使用 PadRight 对齐每列,确保每一列内容在宽度内对齐
+ data += $"{string.Format(formatNumber, "直径(mm)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.DIAMETER).PadRight(avgWidth)}" +
+ $"{string.Format($"({formatNumber}-{formatNumber})", result.M1, result.M2).PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "完美").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "很好").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "全深比(%)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.TOTAL_DEPTH * 100).PadRight(avgWidth)}" +
+ $"{string.Format(formatNumber, "-").PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, CutLevelTotal).PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "-").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "台宽比(%)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.TABLE * 100).PadRight(avgWidth)}" +
+ $"{string.Format($"({formatNumber}-{formatNumber})", result.TABLE * 100 - 0.7, result.TABLE * 100 + 0.3).PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "极好").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "-").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "冠角(°)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.CROWN_ANGLE).PadRight(avgWidth)}" +
+ $"{string.Format($"({formatNumber}-{formatNumber})", result.CROWN_ANGLE_MIN, result.CROWN_ANGLE_MAX).PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "一般 - 差").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "好").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "冠高比(%)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.CROWN_HEIGHT).PadRight(avgWidth)}" +
+ $"{string.Format(formatNumber, "-").PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "完美").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "很好").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "波谷腰厚(%)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.GIRDLE_VALLEY).PadRight(avgWidth)}" +
+ $"{string.Format($"({formatNumber}-{formatNumber})", result.GIRDLE_VALLEY_MIN, result.GIRDLE_VALLEY_MAX).PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "极好").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "-").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "亭深比(%)").PadRight(paramWidth)}" +
+ $"{string.Format(formatNumber, result.PAV_DEPTH).PadRight(avgWidth)}" +
+ $"{string.Format($"({formatNumber}-{formatNumber})", result.PAV_DEPTH - 0.3, result.PAV_DEPTH + 0.3).PadRight(rangeWidth)}" +
+ $"{string.Format(formatNumber, "极好").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, "极好").PadRight(symGradeWidth)}" + "\n";
+
+ data += $"{string.Format(formatNumber, "综合切工等级: 一般 - 差").PadRight(paramWidth + avgWidth + rangeWidth)}" +
+ $"{string.Format(formatNumber, "综合对称等级: 好").PadRight(cutGradeWidth)}" +
+ $"{string.Format(formatNumber, $"签发日期: {DateTime.Now:yyyy/M/d}").PadRight(symGradeWidth)}" + "\n";
+
+ return data;
+ }
+
+ private void InitializeSerialPort()
+ {
+ try
+ {
+ string _serialPortName = "COM1"; // 根据实际情况设置串口号
+ int _baudRate = 9600; // 根据实际情况设置波特率
+
+ _serialPort = new SerialPort(_serialPortName, _baudRate);
+ _serialPort.ReadTimeout = 500;
+ _serialPort.WriteTimeout = 500;
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ Logger.Error($"无法访问串口: {ex.Message}");
+ Growl.Error("热敏打印发生错误");
+ }
+ catch (IOException ex)
+ {
+ Logger.Error($"串口操作失败: {ex.Message}");
+ Growl.Error("热敏打印发生错误");
+ }
+ catch (ArgumentOutOfRangeException ex)
+ {
+ Logger.Error($"参数超出范围: {ex.Message}");
+ Growl.Error("热敏打印发生错误");
+ }
}
+
#region 钻石操作相关
//暂略
//部分代码(直接操作控件)需要在xaml.cs里边写
diff --git a/Views/Grading/GradingResult.xaml b/Views/Grading/GradingResult.xaml
index 12dc145..cd66d0c 100644
--- a/Views/Grading/GradingResult.xaml
+++ b/Views/Grading/GradingResult.xaml
@@ -139,6 +139,26 @@
Margin="10 0 0 0" FontSize="16" Width="80" BorderBrush="Black" BorderThickness="0" Height="30"/>
+
+
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index 2c2ccfc..532b5eb 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -45,6 +45,10 @@
x:Name="BtnFcuntion3View" Click="BtnFunction_OnClick">
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
index 45df875..797a4f2 100644
--- a/Views/UserControl/Viewport3D.xaml.cs
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -42,7 +42,12 @@ public partial class Viewport3D
private void Viewport3D_OnLoaded(object sender, RoutedEventArgs e)
{
ViewportManager.SetViewport3D(Viewport3Dx);
+ ViewportManager.SetViewport(this);
ViewportManager.LoadModelByEntities(new List());
+ #if DEBUG
+ #else
+ BtnShow3DView.Visibility = Visibility.Hidden;
+ #endif
//选项初始化 显示-后端-管理类 一致
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
@@ -174,7 +179,9 @@ public partial class Viewport3D
{
var directionName = ((Button)sender).Name.ToString();
var directionValue = (int) TbCustomizeRevolve.Value;
-
+
+
+
switch (directionName)
{
case "BtnFcuntion1View":
@@ -210,6 +217,9 @@ public partial class Viewport3D
await Task.Delay(7000);
ViewportManager.DoubleClickSelect = !false;
break;
+ case "BtnShow3DView":
+
+ break;
}
diff --git a/Views/UserControl/ViewportData/Helper/UnityHelper.cs b/Views/UserControl/ViewportData/Helper/UnityHelper.cs
new file mode 100644
index 0000000..10dc8fd
--- /dev/null
+++ b/Views/UserControl/ViewportData/Helper/UnityHelper.cs
@@ -0,0 +1,18 @@
+namespace SparkClient.Views.UserControl.ViewportData.Helper;
+
+public class UnityHelper
+{
+ private static string _image_path = AppDomain.CurrentDomain.BaseDirectory + "/temp/image/";
+
+ /***
+ * 1、根据模型信息和钻石编码生成签名作为stl文件名(导出:ViewportHelperPro.ExportModelsToStl(null, path+filename))
+ * 2、判断同名STL文件是否存在 存在跳到 7
+ * 3、 清理temp下,image、stl两个目录
+ * 4、导出模型stl文件,记录完整的路径paramA
+ * 5、执行导出命令 xx.exe --model=_stl_path+paramA --output=_image_path --type=0/1 0:心图(0.png) 1:箭图(1.png)
+ * 6、等待命令结束
+ * 7、判断图片文件是否存在 --->>不存在:提示生成失败,请重试, --->>不存在并且从2过来的,跳到1
+ * 8、展示图片弹窗,并注以说明:心箭图为模拟渲染,实际请以切工镜观测为准。
+ * 9、关闭
+ */
+}
\ No newline at end of file
diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
index 40ff913..a65144a 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
@@ -899,6 +899,7 @@ public class ViewportHelperPro
/// 旋转时间 秒
public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360)
{
+ ViewportManager.GetViewport().ViewportRightMenuShowModelFaceByType.IsChecked = false;
ViewportManager.ClearDicModels();
ViewportManager.DoubleClickSelect = false;
diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
index 8efb773..d9ac7b4 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
@@ -63,6 +63,8 @@ public class ViewportManager
/// 网格线(圈)
///
public static LineGeometryModel3D MainModelCircleLine_P = new LineGeometryModel3D();
+
+
///
/// 腰垂直线
///
@@ -88,6 +90,9 @@ public class ViewportManager
/// 模型控件对象映射
///
private static Viewport3DX _viewport;
+
+ //模型
+ private static Viewport3D _viewport3D = null;
public static void SetViewport3D(Viewport3DX viewport3D)
{
if (_viewport != null)
@@ -105,6 +110,24 @@ public class ViewportManager
throw new Exception("Viewport is not set");
return _viewport;
+ }
+ public static void SetViewport(Viewport3D viewport3D)
+ {
+ if (_viewport != null)
+ {
+ ClearDicModels();
+ _viewport.Items.Clear();
+
+ }
+
+ _viewport3D = viewport3D;
+ }
+ public static Viewport3D GetViewport()
+ {
+ if (_viewport3D == null)
+ throw new Exception("Viewport is not set");
+ return _viewport3D;
+
}
#region 模型选中交互管理
//是否双击选中