diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index eba0fbc..8904949 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -90,8 +90,8 @@
-
-
+
+
>不存在:提示生成失败,请重试, --->>不存在并且从2过来的,跳到1
* 8、展示图片弹窗,并注以说明:心箭图为模拟渲染,实际请以切工镜观测为准。
* 9、关闭
+ *
+ * 图片展示框左侧展示心图0.png,右侧展示箭图1.png 同时展示在一起
*/
+ public static void GenerateRender(string modelInfo, string diamondCode)
+ {
+ string fileName = GenerateSignature(modelInfo, diamondCode) + ".stl";
+ string fullStlPath = Path.Combine(_stl_path, fileName);
+
+ // 1. 检查STL文件是否存在
+ if (File.Exists(fullStlPath))
+ {
+ if (ValidateImages())
+ {
+ ShowImages();
+ return;
+ }
+ }
+
+ // 2. 清理Unity相关目录
+ CleanDirectory(_image_path);
+ CleanDirectory(_stl_path);
+
+ // 3. 导出模型为STL
+ ExportModelsToStl(fullStlPath);
+
+ // 4. 执行Unity渲染命令两次
+ ExecuteUnityRendering(fileName, 0); // 渲染心图
+ ExecuteUnityRendering(fileName, 1); // 渲染箭图
+
+ // 5. 验证图片是否生成
+ if (ValidateImages())
+ {
+ ShowImages();
+ }
+ else
+ {
+ MessageBox.Show("生成失败,请重试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private static string GenerateSignature(string modelInfo, string diamondCode)
+ {
+ // 模拟生成签名逻辑,可以自定义为更复杂的算法
+ return modelInfo.GetHashCode() + "_" + diamondCode.GetHashCode();
+ }
+
+ private static void CleanDirectory(string path)
+ {
+ if (Directory.Exists(path))
+ {
+ Directory.Delete(path, true);
+ }
+ Directory.CreateDirectory(path);
+ }
+
+ private static void ExportModelsToStl(string path)
+ {
+ // 模拟模型导出逻辑
+ // 调用ViewportHelperPro.ExportModelsToStl(null, path);
+ // Console.WriteLine("模型已导出为STL: " + path);
+ ViewportHelperPro.ExportModelsToStl(null, path);
+ }
+
+ private static void ExecuteUnityRendering(string fileName, int type)
+ {
+ string arguments = $"--model={_stl_path + fileName} --output={_image_path} --type={type}";
+ string exePath = Path.Combine(_unity_path, "RayTracing.exe");
+
+ if (!File.Exists(exePath))
+ {
+ throw new FileNotFoundException("Unity渲染插件未找到", exePath);
+ }
+
+ using (Process process = new Process())
+ {
+ process.StartInfo.FileName = exePath;
+ process.StartInfo.Arguments = arguments;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.CreateNoWindow = true;
+ process.Start();
+ process.WaitForExit();
+
+ if (process.ExitCode != 0)
+ {
+ throw new Exception("Unity渲染进程异常退出。");
+ }
+ }
+ }
+
+ private static bool ValidateImages()
+ {
+ string heartImage = Path.Combine(_image_path, "0.png");
+ string arrowImage = Path.Combine(_image_path, "1.png");
+
+ return File.Exists(heartImage) && File.Exists(arrowImage);
+ }
+
+ private static void ShowImages()
+ {
+ // 创建一个简单的图片展示窗口
+ Form form = new Form
+ {
+ Text = "心箭图模拟渲染",
+ Width = 800,
+ Height = 600
+ };
+
+ PictureBox heartBox = new PictureBox
+ {
+ ImageLocation = Path.Combine(_image_path, "0.png"),
+ SizeMode = PictureBoxSizeMode.Zoom,
+ Dock = DockStyle.Left,
+ Width = 400
+ };
+
+ PictureBox arrowBox = new PictureBox
+ {
+ ImageLocation = Path.Combine(_image_path, "1.png"),
+ SizeMode = PictureBoxSizeMode.Zoom,
+ Dock = DockStyle.Right,
+ Width = 400
+ };
+
+ form.Controls.Add(heartBox);
+ form.Controls.Add(arrowBox);
+
+ Label label = new Label
+ {
+ Text = "心箭图为模拟渲染,实际请以切工镜观测为准。",
+ Dock = DockStyle.Bottom,
+ Height = 30,
+ TextAlign = System.Drawing.ContentAlignment.MiddleCenter
+ };
+
+ form.Controls.Add(label);
+ form.ShowDialog();
+ }
}
\ No newline at end of file