Merge remote-tracking branch 'origin/master'

master
handefeng 5 months ago
commit e7c3f500c4
  1. BIN
      Resource/Images/UserControl/03-8-3.png
  2. 2
      SparkClient.csproj
  3. 12
      ViewModel/Grading/GradingResultVM.cs
  4. 4
      Views/UserControl/Viewport3D.xaml
  5. 25
      Views/UserControl/Viewport3D.xaml.cs
  6. 18
      Views/UserControl/ViewportData/Helper/UnityHelper.cs
  7. 1
      Views/UserControl/ViewportData/Helper/VideoHelper.cs
  8. 39
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  9. 47
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -190,6 +190,8 @@
<Resource Include="Resource\Images\UIResource\08-5.jpg" />
<None Remove="Resource\Images\UIResource\03-0.jpg" />
<Resource Include="Resource\Images\UIResource\03-0.jpg" />
<None Remove="Resource\Images\UserControl\03-8-3.png" />
<Resource Include="Resource\Images\UserControl\03-8-3.png" />
</ItemGroup>
<ItemGroup>

@ -749,6 +749,11 @@ public class GradingResultVM : BaseViewModel
}
else
{
if (!File.Exists(getFilePath()))
{
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
return;
}
string fullPath = Path.Combine(getFilePath(), this.DiamondCode);
if (FileSaveEnabled("Txt"))
{
@ -803,7 +808,14 @@ public class GradingResultVM : BaseViewModel
}
else
{
try {
Directory.CreateDirectory(defultFilePath);
}
catch (Exception ex)
{
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
Logger.Error($"全局异常捕获:{ex.Message}", ex);
}
return defultFilePath;
}
}

@ -45,6 +45,10 @@
x:Name="BtnFcuntion3View" Click="BtnFunction_OnClick">
<Image Source="pack://Application:,,,/Resource/Images/UserControl/03-8-2.png" Width="40" Height="40"></Image>
</Button>
<Button Grid.Column="5" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2"
x:Name="BtnShow3DView" Click="BtnFunction_OnClick">
<Image Source="pack://Application:,,,/Resource/Images/UserControl/03-8-3.png" Width="40" Height="40"></Image>
</Button>
</Grid>
<Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu >

@ -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<Viewport3DTriangleEntity>());
#if DEBUG
#else
BtnShow3DView.Visibility = Visibility.Hidden;
#endif
//选项初始化 显示-后端-管理类 一致
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
@ -189,17 +194,31 @@ public partial class Viewport3D
break;
case "BtnFcuntion3View":
//低
//var center = ViewportManager.ModelBounds.Center;
//var maxDimension = ViewportManager.ModelBounds.Size.Length();
//var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内
//var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
//camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向
//camera.Width = ViewportManager.calCameraWidth();
//camera.UpDirection = new Vector3D(0, -1, 0);
//camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z);
var center = ViewportManager.ModelBounds.Center;
ViewportManager.ClearMeshLines(ViewportRightMenuShowMeshLines);
var maxDimension = ViewportManager.ModelBounds.Size.Length();
var distance = maxDimension * 1.2; // 调整相机到模型的距离,保证视野范围内
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向
camera.Width = ViewportManager.calCameraWidth();
camera.Position = new Point3D(center.X, center.Y, center.Z + distance); // 从前面看,Z轴正方向
camera.UpDirection = new Vector3D(0, -1, 0);
camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z);
await Task.Delay(100);
ViewportHelperPro.RotateModel(new Vector3D(0,-1,0));
await Task.Delay(5000);
await Task.Delay(7000);
ViewportHelperPro.RotateModel(new Vector3D(-1,0,0));
await Task.Delay(7000);
ViewportManager.DoubleClickSelect = !false;
break;
case "BtnShow3DView":
break;
}

@ -0,0 +1,18 @@
namespace SparkClient.Views.UserControl.ViewportData.Helper;
public class UnityHelper
{
private static string _image_path = AppDomain.CurrentDomain.BaseDirectory + "/temp/image/";
/***
* 1stl文件名ViewportHelperPro.ExportModelsToStl(null, path+filename)
* 2STL文件是否存在 7
* 3 temp下imagestl两个目录
* 4stl文件paramA
* 5 xx.exe --model=_stl_path+paramA --output=_image_path --type=0/1 00.png 11.png
* 6
* 7 --->> --->>21
* 8
* 9
*/
}

@ -212,6 +212,7 @@ public class VideoHelper
{
ViewportHelperPro.RotateModel(new Vector3D(-1, 0, 0));
});
ViewportManager.DoubleClickSelect = !false;
}

@ -899,7 +899,10 @@ public class ViewportHelperPro
/// <param name="speed">旋转时间 秒</param>
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;
// 设置旋转的中心点和旋转轴
var rotateTransform = new RotateTransform3D();
var rotation = new AxisAngleRotation3D(axis, 0);
@ -1284,7 +1287,7 @@ public class ViewportHelperPro
/// <param name="entities"></param>
/// <param name="thickness"></param>
/// <returns></returns>
public static List<LineGeometryModel3D> ShowMeshLines(List<Viewport3DTriangleEntity> entities, bool isCrown = true, double thickness = 1.0)
public static List<LineGeometryModel3D> ShowMeshLines(bool isCrown = true, double thickness = 0.2)
{
if (isCrown)
{
@ -1298,7 +1301,7 @@ public class ViewportHelperPro
}
var center = ViewportManager.CenterVector;
center.Y = Y;
Viewport3DTriangleEntity firstPoint = entities.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault();
Viewport3DTriangleEntity firstPoint = ViewportManager.ViewportTriangle.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault();
//var b = ((center.Z * firstPoint.Point1.X) - (firstPoint.Point1.Z * center.X)) / (firstPoint.Point1.X - center.X);
//var a = (firstPoint.Point1.Z - b) / firstPoint.Point1.X;
@ -1321,27 +1324,27 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>();
var XLine = lineCal.calXline(r);
edgeLines.Add(XLine);
lines.Add(DisplayLineModel3D(edgeLines, XlineColor));
lines.Add(DisplayLineModel3D(edgeLines, XlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 2));
var lineA = DisplayLineModel3D(edgeLines, XlineColor);
var lineA = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineA);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -2));
var lineB = DisplayLineModel3D(edgeLines, XlineColor);
var lineB = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineB);
bindingMoveLine(lineA, lineB);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 4));
var lineE = DisplayLineModel3D(edgeLines, XlineColor);
var lineE = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineE);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -4));
var lineF = DisplayLineModel3D(edgeLines, XlineColor);
var lineF = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineF);
bindingMoveLine(lineE, lineF);
@ -1358,31 +1361,32 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>();
var YLine = lineCal.calYline(r);
edgeLines.Add(YLine);
lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
lines.Add(DisplayLineModel3D(edgeLines, YlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 2));
var lineC = DisplayLineModel3D(edgeLines, YlineColor);
var lineC = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineC);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -2));
var lineD = DisplayLineModel3D(edgeLines, YlineColor);
var lineD = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineD);
bindingMoveLine(lineC, lineD);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 4));
var lineG = DisplayLineModel3D(edgeLines, YlineColor);
var lineG = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineG);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -4));
var lineH = DisplayLineModel3D(edgeLines, YlineColor);
var lineH = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineH);
bindingMoveLine(lineG, lineH);
return lines;
}
private static readonly double HitTestThickness = 5;
/// <summary>
/// 网状参考线 对向移动绑定
/// </summary>
@ -1390,10 +1394,12 @@ public class ViewportHelperPro
/// <param name="lineB"></param>
private static void bindingMoveLine(LineGeometryModel3D lineA, LineGeometryModel3D lineB)
{
lineA.HitTestThickness = HitTestThickness;
lineA.MouseDown3D += LineA_MouseDown3D;
lineA.MouseUp3D += LineA_MouseUp3D;
lineA.MouseMove3D += LineA_MouseMove3D;
moveLines.Add(lineA.GUID, lineB.GUID);
lineB.HitTestThickness = HitTestThickness;
lineB.MouseDown3D += LineA_MouseDown3D;
lineB.MouseUp3D += LineA_MouseUp3D;
lineB.MouseMove3D += LineA_MouseMove3D;
@ -1648,7 +1654,7 @@ public class ViewportHelperPro
/// <param name="radius"></param>
/// <param name="thickness"></param>
/// <returns></returns>
public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 1.0)
public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 0.2)
{
var Y = -0.01F;
if (!isCrown)
@ -1657,9 +1663,9 @@ public class ViewportHelperPro
}
var center = ViewportManager.CenterVector;
center.Y = Y;
return UpdateCircleGeometry(center, initialRadius);
return UpdateCircleGeometry(center, initialRadius, thickness);
}
private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0)
private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0, double thickness = 1.0)
{
// 生成圆形线的点
int segments = 100; // 圆的细分段数
@ -1677,7 +1683,8 @@ public class ViewportHelperPro
indices.Add(i);
indices.Add((i + 1) % segments);
}
var Circle = DisplayLineModel3D(positions, Color4.Black);
var Circle = DisplayLineModel3D(positions, Colors.Orange.ToColor4(),thickness);
Circle.HitTestThickness = HitTestThickness;
Circle.MouseDown3D += Circle_MouseDown3D;
Circle.MouseUp3D += Circle_MouseUp3D;
Circle.MouseMove3D += Circle_MouseMove3D;

@ -63,6 +63,8 @@ public class ViewportManager
/// 网格线(圈)
/// </summary>
public static LineGeometryModel3D MainModelCircleLine_P = new LineGeometryModel3D();
/// <summary>
/// 腰垂直线
/// </summary>
@ -88,6 +90,9 @@ public class ViewportManager
/// 模型控件对象映射
/// </summary>
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 模型选中交互管理
//是否双击选中
@ -156,6 +179,15 @@ public class ViewportManager
ChooseAddModels.Clear();
}
public static void ResetMeshLines()
{
MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines());
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
}
/// <summary>
/// 模拟面选中
/// </summary>
@ -289,12 +321,7 @@ public class ViewportManager
_viewport.Camera.UpDirection = new Vector3D(0, -1, 0);
_viewport.RenderHost.MSAA = MSAALevel.Maximum;
// TODO:
MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines(entities));
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(entities, false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
ResetMeshLines();
}
/// <summary>
@ -470,8 +497,16 @@ public class ViewportManager
_viewport.Items.Remove(MainModelCircleLine_C);
MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e));
_viewport.Items.Remove(MainModelCircleLine_P);
ResetMeshLines();
}
}
public static void ClearMeshLines(MenuItem menuItem)
{
ViewportManager.ShowMeshLines(false, true);
ViewportManager.ShowMeshLines(false, false);
menuItem.IsChecked = false;
}
#endregion

Loading…
Cancel
Save