WPF中使用TranslateTransform3D修改CAD的3D旋转中心

简介: 原文:WPF中使用TranslateTransform3D修改CAD的3D旋转中心        前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转中心的实现方法。
原文: WPF中使用TranslateTransform3D修改CAD的3D旋转中心

       前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转中心的实现方法。(这个功能的实现有一段时间了,需要通过代码好好总结一下)

      TranslateTransform3D以相对容器的偏移移动对象,通过OffsetX、OffsetY、OffsetZ属性来指定偏移量。

 

(1)定义对象

        private TranslateTransform3D _translateTransform3D = new TranslateTransform3D();

 

(2)点击左键进行设置旋转中心

        private void OnMouseLeftButtonUp(object sender, MouseEventArgs e)
        {

            Point mouseposition = e.GetPosition(ViewPort);
            PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition);
            Point mousePosBorderPos = e.GetPosition(ViewPort);

            if (Keyboard.Modifiers == ModifierKeys.Alt)
            {
                VisualTreeHelper.HitTest(ViewPort, null, HTResultCenter, pointparams);
            }
        }

        其中ViewPort和CadGrid可以参考文章:WPF中CAD control的XAML实现

 

(3)HitTest去设置旋转中心

        private HitTestResultBehavior HTResultCenter(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                _rotCenter3D = rayResult.PointHit;
                _translateTransform3D.OffsetX = rayResult.PointHit.X;
                _translateTransform3D.OffsetY = rayResult.PointHit.Y;
                _translateTransform3D.OffsetZ = rayResult.PointHit.Z;
            }
            return HitTestResultBehavior.Stop;
        }

 

       通过这两个方法就实现了3D旋转中心的更改,再次旋转3D的话你就会发现旋转中心就是你设置的那个点了。

       在修改旋转中心的时候,我们还做了一个小小的功能,就是设置好点后,让旋转中心移到CadGrid的中心,这样便于观察旋转结果。

        private void MoveCenter(Point mouseposition)
        {
                //convert previous 3D rotation center to 2D.
                bool bRet = false;
                Point previousRotCenter2D = Convert3DPointTo2D(_previousRotCenter3D, out bRet);

 

                //Translate previous 2D rotation center to center of cad window.
                Point centerWnd = new Point(ViewPort.Width / 2.0, ViewPort.Height / 2.0);
                Translate(centerWnd, previousRotCenter2D);

 

                 _translateTransform3D.OffsetX = _rotCenter3D.X;
                _translateTransform3D.OffsetY = _rotCenter3D.Y;
                _translateTransform3D.OffsetZ = _rotCenter3D.Z;

                _previousRotCenter3D = _rotCenter3D;
        }

目录
相关文章
|
算法 C# 图形学
WPF绘制深度不同颜色的3D模型填充图和线框图
原文:WPF绘制深度不同颜色的3D模型填充图和线框图 在机械测量过程中,测量的数据需要进行软件处理。通常测量一个零件之后,需要重建零件的3D模型,便于观察测量结果是否与所测工件一致。
2858 0
|
C# 图形学 传感器
WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化
原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及填充和线框图。
1022 0
|
C# 索引
好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果
原文:好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/46567895 效果呢就是这么个效果,但是大家要发挥想象力,比如做成一个可以旋转的按钮等等。
889 0
|
C# Windows 图形学
优化WPF 3D性能
原文:优化WPF 3D性能 Maximize WPF 3D Performance .NET Framework 4.5   As you use the Windows Presentation Foundation (WPF) to build 3D contr...
1316 0
|
C# 小程序
WPF 3D变换应用
原文:WPF 3D变换应用  WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开发效率高,而且也容易上手。         下面给大家演示的是使用在WPF 3D上实现视角变换,通过鼠标拖动来变换观察视角,通过滚轮来放缩视距。
702 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
857 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2040 0
|
C#
【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
原文:【C#/WPF】Image图片的Transform变换:平移、缩放、旋转 WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移、缩放、旋转,是修改它所在的Image控件的Transform变换属性。
4734 0
|
C#
在WPF中将图片转换成3D图像并可以旋转
原文:在WPF中将图片转换成3D图像并可以旋转 时光偷走的,永远都是我们眼皮底下看不见的珍贵。   https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看一下源代码最初的运行效果,是否是自己需要的。
1485 0
|
11天前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库