feat:3d控件

master
Tongg 7 months ago
parent dd57554f39
commit 6e2f1d81f4
  1. 14
      Language/zh_CN.xaml
  2. 2
      MainWindow.xaml.cs
  3. BIN
      Resource/Images/UserControl/Bottom@3x.png
  4. BIN
      Resource/Images/UserControl/Top@3x.png
  5. BIN
      Resource/Images/UserControl/arrow.png
  6. BIN
      Resource/Images/UserControl/biaochi1@3x.png
  7. BIN
      Resource/Images/UserControl/biaochi2@3x.png
  8. BIN
      Resource/Images/UserControl/zuanshi@1x.png
  9. BIN
      Resource/Images/UserControl/zuanshi@3x.png
  10. 15
      SparkClient.csproj
  11. 61
      Views/Grading/GradingResult.xaml
  12. 172
      Views/Grading/GradingResult.xaml.cs
  13. 144
      Views/UserControl/Viewport3D.xaml
  14. 41
      Views/UserControl/Viewport3D.xaml.cs

@ -99,4 +99,18 @@
<sys:String x:Key="GradeStandard">定级标准</sys:String> <sys:String x:Key="GradeStandard">定级标准</sys:String>
<sys:String x:Key="SavePathIsnotExists">保存路径不存在</sys:String> <sys:String x:Key="SavePathIsnotExists">保存路径不存在</sys:String>
<sys:String x:Key="RULE_NAME">RULE_NAME</sys:String> <sys:String x:Key="RULE_NAME">RULE_NAME</sys:String>
<!-- 3D的右键菜单 -->
<sys:String x:Key="ViewportRightMenuFront">正面视角</sys:String>
<sys:String x:Key="ViewportRightMenuSaveViewToPNG">截图当前视角到PNG</sys:String>
<sys:String x:Key="ViewportRightMenuShowModelFace">显示模型面</sys:String>
<sys:String x:Key="ViewportRightMenuShowModelFrame">显示模型边框</sys:String>
<sys:String x:Key="ViewportRightMenuShowLighting">显示光照</sys:String>
<sys:String x:Key="ViewportRightMenuSelectFace">双击选择面</sys:String>
<sys:String x:Key="ViewportRightMenuSelectFaceFrame">显示选择面的边框</sys:String>
<sys:String x:Key="ViewportRightMenuSelectFaceLengthText">显示选择面边框长度文本</sys:String>
<sys:String x:Key="ViewportRightMenuSelectFaceAngleText">显示选择面夹角角度文本</sys:String>
<sys:String x:Key="ViewportRightMenuSelectFaceKind">显示选择面的同类面</sys:String>
<sys:String x:Key="ViewportRightMenuShowDefectFace">显示瑕疵面</sys:String>
<sys:String x:Key="ViewportRightMenuShowFront">显示正方向标识</sys:String>
</ResourceDictionary> </ResourceDictionary>

@ -86,7 +86,7 @@ public partial class MainWindow
{ {
DataBaseHelper.CloseConnection(); DataBaseHelper.CloseConnection();
this.Close(); this.Close();
Application.Current.Shutdown(); Environment.Exit(0);
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -95,6 +95,21 @@
<None Remove="Resource\Images\Temp\top.png" /> <None Remove="Resource\Images\Temp\top.png" />
<EmbeddedResource Remove="Resource\Images\Temp\**" /> <EmbeddedResource Remove="Resource\Images\Temp\**" />
<None Remove="Resource\Images\Temp\**" /> <None Remove="Resource\Images\Temp\**" />
<None Remove="Resource\Images\UserControl\zuanshi@1x.png" />
<Resource Include="Resource\Images\UserControl\zuanshi@1x.png" />
<None Remove="Resource\Images\UserControl\biaochi1@3x.png" />
<Resource Include="Resource\Images\UserControl\biaochi1@3x.png" />
<None Remove="Resource\Images\UserControl\biaochi2@3x.png" />
<Resource Include="Resource\Images\UserControl\biaochi2@3x.png" />
<None Remove="Resource\Images\UserControl\Bottom@3x.png" />
<Resource Include="Resource\Images\UserControl\Bottom@3x.png" />
<None Remove="Resource\Images\UserControl\Top@3x.png" />
<Resource Include="Resource\Images\UserControl\Top@3x.png" />
<None Remove="Resource\Images\UserControl\zuanshi@3x.png" />
<Resource Include="Resource\Images\UserControl\zuanshi@3x.png" />
<None Remove="Resource\Images\UserControl\arrow.svg" />
<None Remove="Resource\Images\UserControl\arrow.png" />
<Resource Include="Resource\Images\UserControl\arrow.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -6,6 +6,7 @@
xmlns:hc="https://handyorg.github.io/handycontrol" xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:SparkClient.Views.Grading" xmlns:local="clr-namespace:SparkClient.Views.Grading"
xmlns:hx="http://helix-toolkit.org/wpf/SharpDX" xmlns:hx="http://helix-toolkit.org/wpf/SharpDX"
xmlns:userControl="clr-namespace:SparkClient.Views.UserControl"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignWidth="1000" d:DesignWidth="1000"
d:DesignHeight="600" d:DesignHeight="600"
@ -134,39 +135,39 @@
<Border Grid.Row="1" Grid.Column="2" Background="Aquamarine"> <Border Grid.Row="1" Grid.Column="2" Background="Aquamarine">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition> <!-- <RowDefinition Height="50"></RowDefinition> -->
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<userControl:Viewport3D ></userControl:Viewport3D>
<Border Grid.Row="0" Background="Fuchsia" /> <!-- <Border Grid.Row="0" Background="Fuchsia" /> -->
<Border Grid.Row="1" BorderThickness="1" CornerRadius="0" BorderBrush="Black" Margin="5"> <!-- <Border Grid.Row="1" BorderThickness="1" CornerRadius="0" BorderBrush="Black" Margin="5"> -->
<hx:Viewport3DX Grid.Column="0" x:Name="Viewport3Dx" MouseLeftButtonDown="Viewport3Dx_OnMouseLeftButtonDown" ClipToBounds="True"> <!-- <hx:Viewport3DX Grid.Column="0" x:Name="Viewport3Dx" MouseLeftButtonDown="Viewport3Dx_OnMouseLeftButtonDown" ClipToBounds="True"> -->
<hx:Viewport3DX.InputBindings> <!-- <hx:Viewport3DX.InputBindings> -->
<KeyBinding Key="B" Command="hx:ViewportCommands.BackView" /> <!-- <KeyBinding Key="B" Command="hx:ViewportCommands.BackView" /> -->
<KeyBinding Key="F" Command="hx:ViewportCommands.FrontView" /> <!-- <KeyBinding Key="F" Command="hx:ViewportCommands.FrontView" /> -->
<KeyBinding Key="U" Command="hx:ViewportCommands.TopView" /> <!-- <KeyBinding Key="U" Command="hx:ViewportCommands.TopView" /> -->
<KeyBinding Key="D" Command="hx:ViewportCommands.BottomView" /> <!-- <KeyBinding Key="D" Command="hx:ViewportCommands.BottomView" /> -->
<KeyBinding Key="L" Command="hx:ViewportCommands.LeftView" /> <!-- <KeyBinding Key="L" Command="hx:ViewportCommands.LeftView" /> -->
<KeyBinding Key="R" Command="hx:ViewportCommands.RightView" /> <!-- <KeyBinding Key="R" Command="hx:ViewportCommands.RightView" /> -->
<KeyBinding Command="hx:ViewportCommands.ZoomExtents" Gesture="Control+E" /> <!-- <KeyBinding Command="hx:ViewportCommands.ZoomExtents" Gesture="Control+E" /> -->
<MouseBinding Command="hx:ViewportCommands.Rotate" Gesture="RightClick" /> <!-- <MouseBinding Command="hx:ViewportCommands.Rotate" Gesture="RightClick" /> -->
<MouseBinding Command="hx:ViewportCommands.Zoom" Gesture="MiddleClick" /> <!-- <MouseBinding Command="hx:ViewportCommands.Zoom" Gesture="MiddleClick" /> -->
<MouseBinding Command="hx:ViewportCommands.Pan" Gesture="LeftClick" /> <!-- <MouseBinding Command="hx:ViewportCommands.Pan" Gesture="LeftClick" /> -->
</hx:Viewport3DX.InputBindings> <!-- </hx:Viewport3DX.InputBindings> -->
<!-- <hx:DirectionalLight3D x:Name="MainDirectionalLight" /> --> <!-- ~1~ <hx:DirectionalLight3D x:Name="MainDirectionalLight" /> @1@ -->
<!-- <hx:PointLight3D x:Name="MainPointLight" /> --> <!-- ~1~ <hx:PointLight3D x:Name="MainPointLight" /> @1@ -->
<!-- <hx:AmbientLight3D x:Name="AmbientLight" /> --> <!-- ~1~ <hx:AmbientLight3D x:Name="AmbientLight" /> @1@ -->
<!-- <hx:AxisPlaneGridModel3D --> <!-- ~1~ <hx:AxisPlaneGridModel3D @1@ -->
<!-- AutoSpacing="false" --> <!-- ~1~ AutoSpacing="false" @1@ -->
<!-- RenderShadowMap="true" --> <!-- ~1~ RenderShadowMap="true" @1@ -->
<!-- Offset="-65" /> --> <!-- ~1~ Offset="-65" /> @1@ -->
</hx:Viewport3DX> <!-- </hx:Viewport3DX> -->
</Border> <!-- </Border> -->
</Grid> </Grid>
</Border> </Border>
</Grid> </Grid>
</Border> </Border>

@ -22,21 +22,21 @@ public partial class GradingResult
DataContext = new GradingResultVM(null); DataContext = new GradingResultVM(null);
this.Viewport3Dx.EffectsManager = new DefaultEffectsManager(); // this.Viewport3Dx.EffectsManager = new DefaultEffectsManager();
this.Viewport3Dx.Camera = new PerspectiveCamera() // this.Viewport3Dx.Camera = new PerspectiveCamera()
{ // {
Position = new Point3D(0, 0, 5), // Position = new Point3D(0, 0, 5),
LookDirection = new Vector3D(0, 0, -1), // LookDirection = new Vector3D(0, 0, -1),
UpDirection = new Vector3D(0, 1, 0), // UpDirection = new Vector3D(0, 1, 0),
FarPlaneDistance = 1000, // FarPlaneDistance = 1000,
NearPlaneDistance = 0.1 // NearPlaneDistance = 0.1
}; // };
Loaded += (sender, args) => // Loaded += (sender, args) =>
{ // {
var entities = Viewport3DHelper.InitDemo(Viewport3Dx); // var entities = Viewport3DHelper.InitDemo(Viewport3Dx);
triangles.AddRange(entities); // triangles.AddRange(entities);
}; // };
} }
@ -47,77 +47,77 @@ public partial class GradingResult
/// <param name="e"></param> /// <param name="e"></param>
private void Viewport3Dx_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) private void Viewport3Dx_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{ {
// 获取鼠标点击位置 // // 获取鼠标点击位置
var mousePosition = e.GetPosition(Viewport3Dx); // var mousePosition = e.GetPosition(Viewport3Dx);
//
// 查找鼠标点击的 3D 对象 // // 查找鼠标点击的 3D 对象
var hits = Viewport3Dx.FindHits(mousePosition); // var hits = Viewport3Dx.FindHits(mousePosition);
//
// 如果没有命中任何 3D 对象 // // 如果没有命中任何 3D 对象
if (hits == null || hits.Count == 0) // if (hits == null || hits.Count == 0)
{ // {
Console.WriteLine("未点击到任何模型"); // Console.WriteLine("未点击到任何模型");
foreach (var item in mouseAddModels) // foreach (var item in mouseAddModels)
{ // {
Viewport3Dx.Items.Remove(item); // Viewport3Dx.Items.Remove(item);
} // }
mouseAddModels.Clear(); // mouseAddModels.Clear();
return; // return;
} // }
//
// 获取第一个命中的对象 // // 获取第一个命中的对象
var hit = hits[0]; // var hit = hits[0];
//
// 检查是否是 MeshGeometryModel3D // // 检查是否是 MeshGeometryModel3D
if (hit.ModelHit is MeshGeometryModel3D modelHit) // if (hit.ModelHit is MeshGeometryModel3D modelHit)
{ // {
foreach (var item in mouseAddModels) // foreach (var item in mouseAddModels)
{ // {
Viewport3Dx.Items.Remove(item); // Viewport3Dx.Items.Remove(item);
} // }
mouseAddModels.Clear(); // mouseAddModels.Clear();
// 获取几何信息 // // 获取几何信息
var geometry = modelHit.Geometry as MeshGeometry3D; // var geometry = modelHit.Geometry as MeshGeometry3D;
if (geometry != null) // if (geometry != null)
{ // {
// 获取命中的三角形索引 // // 获取命中的三角形索引
var triangleIndex = hit.TriangleIndices; // var triangleIndex = hit.TriangleIndices;
//
// 获取三角形顶点 // // 获取三角形顶点
var vertex1 = geometry.Positions[triangleIndex.Item1]; // var vertex1 = geometry.Positions[triangleIndex.Item1];
var vertex2 = geometry.Positions[triangleIndex.Item2]; // var vertex2 = geometry.Positions[triangleIndex.Item2];
var vertex3 = geometry.Positions[triangleIndex.Item3]; // var vertex3 = geometry.Positions[triangleIndex.Item3];
//
string strPoint = vertex1.X + ","+ vertex1.Y+","+ vertex1.Z + ";"+ vertex2.X + ","+ vertex2.Y + ","+ vertex2.Z+";"+vertex3.X + ","+ vertex3.Y + ","+ vertex3.Z; // string strPoint = vertex1.X + ","+ vertex1.Y+","+ vertex1.Z + ";"+ vertex2.X + ","+ vertex2.Y + ","+ vertex2.Z+";"+vertex3.X + ","+ vertex3.Y + ","+ vertex3.Z;
string triangleCode = Viewport3DTriangleEntity.GenerateMD5Hash(strPoint); // string triangleCode = Viewport3DTriangleEntity.GenerateMD5Hash(strPoint);
//
//命中实体 // //命中实体
Viewport3DTriangleEntity res = triangles.Find(e => triangleCode.Equals(e.TriangleCode)); // Viewport3DTriangleEntity res = triangles.Find(e => triangleCode.Equals(e.TriangleCode));
//
if (res == null) // if (res == null)
return; // return;
//
//命中面 // //命中面
List<Viewport3DTriangleEntity> facet = triangles.Where(e => res.PlaneCode.Equals(e.PlaneCode)).ToList(); // List<Viewport3DTriangleEntity> facet = triangles.Where(e => res.PlaneCode.Equals(e.PlaneCode)).ToList();
var colorFacet = new Color4(1.0f, 1.0f, 0.0f, 1.0f); // var colorFacet = new Color4(1.0f, 1.0f, 0.0f, 1.0f);
var data1 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facet,colorFacet); // var data1 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facet,colorFacet);
mouseAddModels.AddRange(data1); // mouseAddModels.AddRange(data1);
//命中面标线 // //命中面标线
var data2 = Viewport3DHelper.GenerateLineTextModelByEntity(Viewport3Dx, facet); // var data2 = Viewport3DHelper.GenerateLineTextModelByEntity(Viewport3Dx, facet);
mouseAddModels.AddRange(data2); // mouseAddModels.AddRange(data2);
//命中同类面 // //命中同类面
List<Viewport3DTriangleEntity> facetType = triangles.Where(e => res.PlaneType.Equals(e.PlaneType)).ToList(); // List<Viewport3DTriangleEntity> facetType = triangles.Where(e => res.PlaneType.Equals(e.PlaneType)).ToList();
//排除自己 // //排除自己
facet.ForEach(e=>facetType.Remove(e)); // facet.ForEach(e=>facetType.Remove(e));
var colorFacetType = new Color4(0.9f, 0.9f, 0.7f, 1.0f); // var colorFacetType = new Color4(0.9f, 0.9f, 0.7f, 1.0f);
var data3 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facetType,colorFacetType); // var data3 = Viewport3DHelper.GenerateEmissiveModelByEntity(Viewport3Dx,facetType,colorFacetType);
mouseAddModels.AddRange(data3); // mouseAddModels.AddRange(data3);
} // }
} // }
else // else
{ // {
Console.WriteLine("点击的对象不是 MeshGeometryModel3D"); // Console.WriteLine("点击的对象不是 MeshGeometryModel3D");
} // }
} }
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)

@ -0,0 +1,144 @@
<Border x:Class="SparkClient.Views.UserControl.Viewport3D"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SparkClient.Views.UserControl"
xmlns:hx="http://helix-toolkit.org/wpf/SharpDX"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
>
<!-- Tongg注: 后期如果时间充裕把这个控件单独封装在一个DLL里边,影响MVVM结构-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2">
<Border BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="10" Padding="5" >
<Image Source="pack://Application:,,,/Resource/Images/UserControl/zuanshi@3x.png" ></Image>
</Border>
</Button>
<Button Grid.Column="1" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2">
<Border BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="10" Padding="5" >
<Image Source="pack://Application:,,,/Resource/Images/UserControl/Top@3x.png" ></Image>
</Border>
</Button>
<Button Grid.Column="2" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2">
<Border BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="10" Padding="5" >
<Image Source="pack://Application:,,,/Resource/Images/UserControl/Bottom@3x.png" ></Image>
</Border>
</Button>
<Button Grid.Column="3" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2">
<Border BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="10" Padding="5" >
<Image Source="pack://Application:,,,/Resource/Images/UserControl/biaochi1@3x.png" ></Image>
</Border>
</Button>
<Button Grid.Column="4" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2">
<Border BorderBrush="DarkGoldenrod" BorderThickness="1" CornerRadius="10" Padding="5" >
<Image Source="pack://Application:,,,/Resource/Images/UserControl/biaochi2@3x.png" ></Image>
</Border>
</Button>
</Grid>
<Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu>
<!-- <sys:String x:Key="ViewportRightMenuFront">正面视角</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSaveViewToPNG">截图当前视角到PNG</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuShowModelFace">显示模型面</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuShowModelFrame">显示模型边框</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuShowLighting">显示光照</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSelectFace">双击选择面</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSelectFaceFrame">显示选择面的边框</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSelectFaceLengthText">显示选择面边框长度文本</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSelectFaceAngleText">显示选择面夹角角度文本</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuSelectFaceKind">显示选择面的同类面</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuShowDefectFace">显示瑕疵面</sys:String> -->
<!-- <sys:String x:Key="ViewportRightMenuShowFront">显示正方向标识</sys:String> -->
<ContextMenu>
<!-- 菜单 -->
<MenuItem Header="{StaticResource ViewportRightMenuFront}" Click="MenuItem_OnClick"/>
<MenuItem Header="{StaticResource ViewportRightMenuSaveViewToPNG}" Click="MenuItem_OnClick"/>
<!-- 选择 -->
<MenuItem Header="{StaticResource ViewportRightMenuShowModelFace}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuShowModelFrame}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuShowLighting}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuShowDefectFace}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuShowFront}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<Separator />
<MenuItem Header="{StaticResource ViewportRightMenuSelectFace}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceFrame}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceLengthText}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceAngleText}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceKind}" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
</ContextMenu>
</Border.ContextMenu>
<hx:Viewport3DX ShowCoordinateSystem="True" PreviewMouseRightButtonUp="UIElement_OnPreviewMouseRightButtonUp" PreviewMouseRightButtonDown="UIElement_OnPreviewMouseRightButtonDown">
<hx:Viewport3DX.EffectsManager><hx:EffectsManager ></hx:EffectsManager></hx:Viewport3DX.EffectsManager>
<hx:Viewport3DX.InputBindings>
<KeyBinding Key="B" Command="hx:ViewportCommands.BackView" />
<KeyBinding Key="F" Command="hx:ViewportCommands.FrontView" />
<KeyBinding Key="U" Command="hx:ViewportCommands.TopView" />
<KeyBinding Key="D" Command="hx:ViewportCommands.BottomView" />
<KeyBinding Key="L" Command="hx:ViewportCommands.LeftView" />
<KeyBinding Key="R" Command="hx:ViewportCommands.RightView" />
<KeyBinding Command="hx:ViewportCommands.ZoomExtents" Gesture="Control+E" />
<MouseBinding Command="hx:ViewportCommands.Rotate" Gesture="RightClick" />
<MouseBinding Command="hx:ViewportCommands.Zoom" Gesture="MiddleClick" />
<MouseBinding Command="hx:ViewportCommands.Pan" Gesture="LeftClick" />
</hx:Viewport3DX.InputBindings>
</hx:Viewport3DX>
</Border>
<Grid Grid.Row="2" Height="100">
<Grid Width="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Button Grid.Column="1" Grid.Row="0" Padding="0" Background="Transparent" BorderBrush="Transparent" >
<Image Source="../../Resource/Images/UserControl/arrow.png" />
</Button>
<Button Grid.Column="0" Grid.Row="1" Padding="0" Background="Transparent" BorderBrush="Transparent" >
<Image Source="../../Resource/Images/UserControl/arrow.png" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform >
<RotateTransform Angle="-90" ></RotateTransform>
</Image.RenderTransform>
</Image>
</Button>
<Button Grid.Column="2" Grid.Row="1" Padding="0" Background="Transparent" BorderBrush="Transparent" >
<Image Source="../../Resource/Images/UserControl/arrow.png" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform >
<RotateTransform Angle="90" ></RotateTransform>
</Image.RenderTransform>
</Image>
</Button>
<Button Grid.Column="1" Grid.Row="2" Padding="0" Background="Transparent" BorderBrush="Transparent" >
<Image Source="../../Resource/Images/UserControl/arrow.png" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform >
<RotateTransform Angle="180" ></RotateTransform>
</Image.RenderTransform>
</Image>
</Button>
<TextBox Grid.Column="1" Grid.Row="1" Style="{StaticResource TextBoxExtend}" Padding="0" TextAlignment="Center" Text="123">
</TextBox>
</Grid>
</Grid>
</Grid>
</Border>

@ -0,0 +1,41 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using HandyControl.Controls;
namespace SparkClient.Views.UserControl;
public partial class Viewport3D
{
public Viewport3D()
{
InitializeComponent();
DataContext = this;
}
private void MenuItem_OnChecked(object sender, RoutedEventArgs e)
{
Growl.InfoGlobal("Viewport is checked" + e.OriginalSource);
}
private void MenuItem_OnUnchecked(object sender, RoutedEventArgs e)
{
Growl.InfoGlobal("Viewport is Unchecked" + e.OriginalSource);
}
private void UIElement_OnPreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
MainBorder.ContextMenu.IsOpen = true;
}
private void UIElement_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
MainBorder.ContextMenu.IsOpen = false;
e.Handled = true;
}
private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
}
}
Loading…
Cancel
Save