WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化

简介: 原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及填充和线框图。
原文: WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化

注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及填充和线框图。

以下转载自:http://blog.csdn.net/wmjcom/article/details/6019460

1、本文的目的:

      在制造业领域,对于cad模型和加工零件,有理论值和实测值的区别。理论值是设计人员设计cad模型中的数值,而实测值是加工好零件后检测出的数值,一般上理论值和实测值是有误差的,这个误差就叫偏差(Deviation)。

      根据偏差的范围,一般软件都有颜色设置,比如哪个范围内显示绿色,哪个范围是蓝色,超差是红色等等。在cad模型中,对于每个加工点或者测量点,根据其偏差值可以显示一个颜色,但这样显示的颜色比较离散,而且看不出一个整体加工工艺的变化。

      因此,为了实现将颜色显示连续和渐变,作者搜索一些网上资料和个人测试,实现了这个功能,特在此详细解释。

 

 

2、需要用到的网上的方法和代码

 

     文中用到的思想和类、方法来自下面这个博文,其中有源代码,可以下载并学习。

 

An article on WPF 3D performance enhancement techniques
WPF chart

Introduction

When using WPF for 3D graphics, many people have concerns over the performance. Following the guidelines from Microsoft online help, I built a 3D surface chart, as shown in the picture above. The surface chart has more than 40,000 vertices and more than 80,000 triangles. The performance is still fine. The project also includes 3D scatter plot which has a large number of data points. You can build the project, feel the performance of WPF 3D and decide whether WPF 3D is suitable for your 3D data visualization.

 

Link in: http://www.codeproject.com/KB/WPF/WPFChart3D.aspx

 

 

3、实现方法:

(1)利用SetRGBMaping()方法生成一张RGB的映射表,并将其作为材质应用在cad模型上;

(2)遍历cad模型每一个Point3D,读取或者计算每一个点对应的偏差值;

(3)根据偏差值计算出相应的color;

(4)根据color计算出其在RGB映射表中的位置;

(5)将这个位置添加到TextureCoordinates。

 

 

4、具体实现代码:

        private TextureMapping m_mapping = new TextureMapping();
        private void SetModelTextureCoordinates()
        {
            Model3DGroup M3dGroup = (Model3DGroup)_cadModel;
            if (null == M3dGroup)
                return;

 

            foreach (GeometryModel3D gm3d in M3dGroup.Children)
            {
                gm3d.Material = m_mapping.m_material;
                if (gm3d.Geometry is MeshGeometry3D)
                {
                    MeshGeometry3D mg3d = (MeshGeometry3D)gm3d.Geometry;

                    mg3d.TextureCoordinates.Clear();

                    foreach (Point3D p3d in mg3d.Positions)
                    {
                        Double dev = GetDeviation(p3d);
                        Color color = TextureMapping.PseudoColor(dev);
                        Point mapPt = m_mapping.GetMappingPosition(color);
                        mg3d.TextureCoordinates.Add(new Point(mapPt.X, mapPt.Y));
                    }
                }
            }
        }

 

5、其他说明

      作者使用网上源代码中的相关类,实现了TextureCoordinates的应用过程,唯一要说明的是偏差如何计算,这个源代码中是没有的,网上的博文只是做了一个模拟,具体的实际偏差需要用户个人定义。

      我的实现方法是通过另一个工具,生成一个包含所有偏差的文件,偏差的格式和个数与cad模型xaml文件中的Positions一致,这样通过遍历Positions能够找到相应的偏差值。

目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
3209 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1204 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
1087 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2416 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
921 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2159 0
|
文字识别 C# Windows
通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)
原文:通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)          从我在博客园写第一篇博客到现在已经有1年半了,我的第一篇博客写的就是手写识别,当时,客户需求在应用中加入手写输入功能,由于第三方的手写输入法都无法定制界面,所以领导决定自主开发,所以我就很简单地基于Tablet pc写了一个WPF控件,由于几个瓶颈问题,导致这个输入功能只能在我们的UI框架里使用,而无法做到像输入法那样可以输入到任意窗口。
2224 0
|
C# 存储
WPF中在XAML中实现数据类型转换的两种方法
原文:WPF中在XAML中实现数据类型转换的两种方法 熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女; 今天又把数据绑定部分又看了一下,在这里就算是做个总...
1060 0
|
C#
在WPF中快速实现键盘钩子
原文:在WPF中快速实现键盘钩子 大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候我是通过键盘钩子来实现的, 不过键盘钩子这种DLL调用的方式怎么都看着不大爽,这里介绍一种通过EventManager快速实现键盘事件感知的例子。
1099 0
|
C#
在WPF中将图片转换成3D图像并可以旋转
原文:在WPF中将图片转换成3D图像并可以旋转 时光偷走的,永远都是我们眼皮底下看不见的珍贵。   https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看一下源代码最初的运行效果,是否是自己需要的。
1539 0