原文: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

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能够找到相应的偏差值。

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

  1. 如何让django模型中的字段和model名显示为中文

    如何让django模型中的字段和model名显示为中文:在模型中加入class Meta即可 class People(models.Model): name = models.CharField(n ...

  2. 使用questionsModel.values()后不能获取模型中的属性对应的外键属性值的解决方式

    class QuestionsModel(models.Model): author = models.ForeignKey(FrontUserModel,null=True) content = m ...

  3. laravel--为什么属性在模型中没有定义,却取出来了值,这些属性哪里来的

    看laravel模型中的这段代码, public function getLimitUsersAttribute() { return $this->user_limit - $this-> ...

  4. vue中父组件如何监听子组件值的变化

    vue中我们会遇到很多父子组件通信的需求, 下面简单列一下,父子组件通信的几种情况 1:父组件向子组件传值:使用prop向子组件传值: 2:子组件实时监听父组件传来的值的变化:使用watch去监听父组 ...

  5. 关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案

    在win7,win10,vs2015,vs2017之间折腾了两天,死活就是调不出来Mysql数据源.真是活见鬼了. 直接说方案吧. 一,卸载你所安装过的mysql-connector-net.mysq ...

  6. QTreeView/QTableView中利用QStandardItem实现复选框三种形态变化

    https://www.techieliang.com/2017/12/729/ 原文地址 using_checkbox_item.h /** * @file using_checkbox_item. ...

  7. Sql Server中利用ISNULL方法判断数字并预设值

    1.ISNULL方法有两个参数,ISNULL(a,b),表达式含义为如果a为NULL,则设置该字段内容为b. 例如 table tab id sum 1 1 2 null select t.id,is ...

  8. Django模型中的admin后台管理无法显示字段

    在执行django后台管理时,登陆到http://127.0.0.1:8000/admin/,进入页面后没有对应的字段显示.请解决? 代码: models.py from django.db impo ...

  9. vuejs2.0与1.x版本中怎样使用js实时访问input的值的变化

    vuejs 2.0中js实时监听input 在2.0的版本中,vuejs把v-el 和 v-ref 合并为一个 ref 属性了,可以在组件实例中通过 $refs 来调用.这意味着 v-el:my-el ...

随机推荐

  1. QMap 的增删改查

    map 是一种数据容器,它提供一种由key 到 value 的映射.map 的key 是唯一的, 也是有序的.map 通常由近似平衡的红黑树来实现.key 的有序性,使得插入,查找节点比较有效.map ...

  2. docker 在运行 aspnetcore 镜像时提示 命令找不到

    不要讲路径映射到镜像中的应用根文件夹 例如默认的 /app

  3. [AngularFire2] Build a Custom Node Backend Using Firebase Queue

    In this lesson we are going to learn how to build a custom Node process for batch processing of Fire ...

  4. 【solr专题之四】关于VelocityResponseWriter 分类: H4_SOLR/LUCENCE 2014-07-22 12:32 1639人阅读 评论(0) 收藏

    一.关于Velocity的基本配置 在Solr中,可以以多种方式返回搜索结果,如单纯的文本回复(XML.JSON.CSV等),也可以返回velocity,js等格式.而VelocityResponse ...

  5. 在word中使用notepad++实现代码的语法高亮 分类: C_OHTERS 2013-09-22 10:38 2273人阅读 评论(0) 收藏

    转载自:http://blog.csdn.net/woohello/article/details/7621651 有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩 ...

  6. [TypeScript] Catch unsafe use of "this" in TypeScript functions

    this is probably the most tricky thing to use in JavaScript and therefore TypeScript. Fortunately th ...

  7. 【37.07%】【UESTC 360】Another LCIS

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status F ...

  8. tky项目第②个半月总结

    在上一篇半月总结中,介绍了tky项目的整体架构.项目的进展情况.项目的优势与开发中存在的问题等.今天来聊聊这半个月中,项目中发生的事情. 在这半个月中,项目中有了较大的突破:成功通过了国家评測中心的測 ...

  9. Git远程操作具体解释

    Git是眼下最流行的版本号管理系统,学会Git差点儿成了开发人员的必备技能. Git有非常多优势,当中之中的一个就是远程操作非常简便.本文具体介绍5个Git命令,它们的概念和使用方法,理解了这些内容. ...

  10. uva 116 Unidirectional TSP【号码塔+打印路径】

    主题: uva 116 Unidirectional TSP 意甲冠军:给定一个矩阵,当前格儿童值三个方向回格最小值和当前的和,就第一列的最小值并打印路径(同样则去字典序最小的). 分析:刚開始想错了 ...