C# VTK-程序员宅基地

技术标签: c#  C# VTK  wpf  开发语言  

WPF+VTK加载图像点云

下载NuGet程序包
在这里插入图片描述
引入控件

xmlns:vtk="clr-namespace:Kitware.VTK;assembly=Kitware.VTK"
<WindowsFormsHost Margin="1" Background="Black">
	<vtk:RenderWindowControl x:Name="Window3DShow"/>
</WindowsFormsHost>

实例化

vtkRenderWindow renderWindow = Window3DShow.RenderWindow;;
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer(); //获取渲染器

点云显示

private void ReadPlainText()
        {
    
            string filePath = @"C:\Users\Administrator\Desktop\1234.txt";
            FileStream fs = null;
            StreamReader sr = null;
            String sLineBuffer;
            String[] sXYZ;
            char[] chDelimiter = new char[] {
     ' ', '\t', ';' };
            double[] xyz = new double[3];
            vtkPoints points = vtkPoints.New();
            vtkMergePoints mergePoints = vtkMergePoints.New();
            int cnt = 0;

            // z value
            double minValue = 0.0, maxValue = 0.0;
            vtkAxesActor axesActor = vtkAxesActor.New();    //三维轴表示法
            //vtkCubeAxesActor2D
            vtkOrientationMarkerWidget widgetAxes = vtkOrientationMarkerWidget.New(); //用于操作标记属性的2D小部件
            vtkElevationFilter elevationFilter = vtkElevationFilter.New();  //沿指定方向生成标量

            try
            {
    
                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                sr = new StreamReader(fs);
                while (!sr.EndOfStream)
                {
    
                    sLineBuffer = sr.ReadLine();
                    cnt++;
                    sXYZ = sLineBuffer.Split(chDelimiter, StringSplitOptions.RemoveEmptyEntries);
                    if (sXYZ == null || sXYZ.Length != 3)
                    {
    
                        Console.WriteLine("data seems to be in wrong format at line " + cnt, "Format Exception");
                        return;
                    }
                    xyz[0] = double.Parse(sXYZ[0], CultureInfo.InvariantCulture);
                    xyz[1] = double.Parse(sXYZ[1], CultureInfo.InvariantCulture);
                    xyz[2] = double.Parse(sXYZ[2], CultureInfo.InvariantCulture);

                    if (xyz[2] < minValue)
                    {
    
                        minValue = xyz[2];
                    }

                    if (xyz[2] > maxValue)
                    {
    
                        maxValue = xyz[2];
                    }
                    points.InsertNextPoint(xyz[0], xyz[1], xyz[2]);
                }

                vtkPolyData polydata = vtkPolyData.New(); //(具体数据集表示顶点、直线、多边形和三角形
                polydata.SetPoints(points);
                vtkVertexGlyphFilter glyphFilter = vtkVertexGlyphFilter.New(); //(制作一个vtkPolyData,每个点上都有一个顶点
                glyphFilter.SetInputConnection(polydata.GetProducerPort());
                //
                elevationFilter.SetInputConnection(glyphFilter.GetOutputPort());
                elevationFilter.SetLowPoint(0, 0, minValue);
                elevationFilter.SetHighPoint(0, 0, maxValue);

                vtkPolyDataMapper mapper1 = vtkPolyDataMapper.New();
                mapper1.SetInputConnection(elevationFilter.GetOutputPort());

                //vtkActor actor1 = vtkActor.New(); //(表示渲染场景中的对象
                actor1.SetMapper(mapper1);
                actor1.GetProperty().SetPointSize(1);
                actor1.GetProperty().SetColor(1, 1, 1);
                //获取对RenderWindowControl 1的renderwindow的引用
                //vtkRenderWindow renderWindow = Window3DShow.RenderWindow;
                // renderer
                //vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();

                // set background color
                renderer.SetBackground(0.0, 0.0, 0.0);
                // add our actor to the renderer(添加到渲染器
                renderer.AddActor(actor1);

                //文字显示
                // Source部分
                text3D = new vtkVectorText();
                text3D.SetText("VTK");
                // Mapper部分
                vtkPolyDataMapper text3DMapper = vtkPolyDataMapper.New();
                text3DMapper.SetInputConnection(text3D.GetOutputPort());

                /*//  Actor部分 
                vtkActor text3DActor = new vtkActor();
                //  渲染部分
                renderer.AddActor(text3DActor);*/

                //  Actor部分 (vtkFollower类的应用)
                vtkFollower text3DActor = new vtkFollower();
                text3DActor.SetMapper(text3DMapper);
                text3DActor.SetScale(0.3, 0.3, 0.5);                      // 大小
                //text3DActor.AddPosition(WorldPointend[0], WorldPointend[1], WorldPointend[2]);// 位置(文字左下角坐标)
                text3DActor.GetProperty().SetColor(0.0, 1.0, 0.0);        // 颜色
                //  渲染部分(与普通Actor的渲染不一样)
                text3DActor.SetCamera(renderer.GetActiveCamera());
                renderer.AddViewProp(text3DActor);

                // Add axesWidget
                widgetAxes.SetOrientationMarker(axesActor);
                widgetAxes.SetInteractor(renderWindow.GetInteractor());
                widgetAxes.SetEnabled(1);
                //widgetAxes.SetInteractive(0);

                //在中心窗口小部件中显示参与者
                renderer.ResetCamera();

				renderWindow.Render();
            }
            catch (IOException ex)
            {
    
                Console.WriteLine("显示点云失败");
            }
            finally
            {
    
                if (sr != null)
                {
    
                    sr.Close();
                    sr.Dispose();
                    sr = null;
                }
            }
        }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/KsirZz/article/details/125262178

智能推荐

修改tomcat设置访问根目录文件_tomcat实现无文根访问-程序员宅基地

文章浏览阅读3k次。1.清除webapps\ROOT下的内容2.修改conf下web.xml &lt;servlet&gt; &lt;servlet-name&gt;default&lt;/servlet-name&gt; &lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servle..._tomcat实现无文根访问

Spark 官方文档(4)——Configuration配置_typeerror: sparkconf.setmaster() missing 1 require-程序员宅基地

文章浏览阅读6.7k次。Spark可以通过三种方式配置系统:通过SparkConf对象, 或者Java系统属性配置Spark的应用参数通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量通过log4j.properties配置日志属性Spark属性Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性。 下面展示了在本地机使用_typeerror: sparkconf.setmaster() missing 1 required positional argument: 'va

逍遥安卓与Genymotion两种安卓模拟器的对比测试_逍遥模拟器 genymotion-程序员宅基地

文章浏览阅读6.5k次。逍遥安卓与Genymotion两种安卓模拟器的对比测试_逍遥模拟器 genymotion

运行FreeMind 弹出This application requires a Java Runtime Environment 1.5.0解决办法_mc-wns-client-程序员宅基地

文章浏览阅读1.9w次。系统已经安装过了java1.8(解压缩版的),已经安装了 jdk ,并且设置好了 java 环境变量,CMD 运行 java 或 javac 都正常,其他依赖 jdk 的应用程序都能正常运行,安装完FreeMind提示需要java1.5.0环境解决方法如下:1:点击上图中提示的确定按钮,浏览器自动跳转到下图,接着根据提示安装java环境;2.安装成功后,双击桌面Free..._mc-wns-client

限制浏览器登录某网站,比如4399_学校电脑禁止访问4399-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏8次。限制网站进入有三个方法:浏览器设置—找到Internet选项—点击内容审查程序的启用—许可站点—输入网址—点击始终—确定—设置密码—删除缓存关闭浏览器,然后在浏览器输入4399网址就进不了,但是有个问题,只要搜索4399之后,通过搜索条目还是可以进去,有了网页缓存之后又能进。 第三方软件限制,因为知道了第三个方法,这个方法没有过多寻找软件,但第三方软件强制关闭之后就实现不了限制网..._学校电脑禁止访问4399

IOS之怎样把自己开发的App安装到越狱的手机-程序员宅基地

文章浏览阅读188次。场景: 有开发人员账号,能够把设备加到开发人员账号中,真机调试。如今须要打包,安装到的越狱手机上(此越狱手机没有加到开发人员账号中,另外公司的人)。常识:没有越狱的话,最大的问题就是设备的签名,每一个程序都有相应的mobile provision文件,这个文件记录了这个程序是用来公布的还是 调试的,调试的话,是在哪些设备上调试,以及相应的公布和调试证书。...

随便推点

makefile生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明_gcc -mp-程序员宅基地

文章浏览阅读6.6k次,点赞4次,收藏18次。1. 为什么要使用后缀名为 .d 的依赖文件?在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件。 比如 main.c 源文件内容如下:#include "stdio.h"#include "defs.h"int main(int argc, char *argv[]){ printf("Hello, %s!\n", NAME); retur..._gcc -mp

大道至简第一章读后感-程序员宅基地

文章浏览阅读66次。《大道至简》第一章读后感 很荣幸的接触到了《大道至简》这本周爱民先生著的以软件工程实践者的思想为主要内容的作品,这是一本很难得的专家分享自己对编程见解的书,通过读这本书的第一章,我第一次认识到编程并没有想象中困难,也让我对自己有了信心。 这本书的第一章主要分为编程的精义、会或者不会编程、程序=算法+结构、语言、在没有工程的时代这五部分。 其中,在编程的精义这一部..._《大道至简》第一章读后感

扫雷游戏源代码_扫雷游戏代码-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏5次。printf("w , a , s , d 控 制 坐 标 移 动");printf(" 1 键 插 旗 , 2 键 拔 旗 .");printf(" 按 空 格 键 有 惊 喜");printf("剩余雷数:%d \n",l2);system("title 扫雷");未登录的用户可以在代码段下方复制扫雷源码;_扫雷游戏代码

poj 1195 Mobile phones-程序员宅基地

文章浏览阅读51次。DescriptionSuppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The squares form an S * S matrix with the rows an

Linux里如何直接修改jar包里的配置文件_linx怎么编辑配置文件-程序员宅基地

文章浏览阅读2.8w次,点赞8次,收藏27次。前言:相信不少小伙伴在项目需要打包上线时都遇到过一种情况,如服务器的地址或是端口变了,需要修改项目里的配置文件,于是不得不将jar包拿下来修改再上传,或是重新打包上传,可谓是不胜烦琐,今天教大家一个小技巧,既如何直接在Linux里面修改配置文件!准备步骤:1.安装unzip 命令:yum install -y unzip zip2.直接vim jar包名3./要找的..._linx怎么编辑配置文件

python报错AttributeError: ‘NoneType‘ object has no attribute ‘split‘_get_config().split()-程序员宅基地

文章浏览阅读2.2k次。错误:解决办法:手动刷新neo4j,他就解决了。很魔幻这是调试好的_get_config().split()

推荐文章

热门文章

相关标签