下载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;
}
}
}
文章浏览阅读3k次。1.清除webapps\ROOT下的内容2.修改conf下web.xml <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servle..._tomcat实现无文根访问
文章浏览阅读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
文章浏览阅读6.5k次。逍遥安卓与Genymotion两种安卓模拟器的对比测试_逍遥模拟器 genymotion
文章浏览阅读1.9w次。系统已经安装过了java1.8(解压缩版的),已经安装了 jdk ,并且设置好了 java 环境变量,CMD 运行 java 或 javac 都正常,其他依赖 jdk 的应用程序都能正常运行,安装完FreeMind提示需要java1.5.0环境解决方法如下:1:点击上图中提示的确定按钮,浏览器自动跳转到下图,接着根据提示安装java环境;2.安装成功后,双击桌面Free..._mc-wns-client
文章浏览阅读1w次,点赞2次,收藏8次。限制网站进入有三个方法:浏览器设置—找到Internet选项—点击内容审查程序的启用—许可站点—输入网址—点击始终—确定—设置密码—删除缓存关闭浏览器,然后在浏览器输入4399网址就进不了,但是有个问题,只要搜索4399之后,通过搜索条目还是可以进去,有了网页缓存之后又能进。 第三方软件限制,因为知道了第三个方法,这个方法没有过多寻找软件,但第三方软件强制关闭之后就实现不了限制网..._学校电脑禁止访问4399
文章浏览阅读188次。场景: 有开发人员账号,能够把设备加到开发人员账号中,真机调试。如今须要打包,安装到的越狱手机上(此越狱手机没有加到开发人员账号中,另外公司的人)。常识:没有越狱的话,最大的问题就是设备的签名,每一个程序都有相应的mobile provision文件,这个文件记录了这个程序是用来公布的还是 调试的,调试的话,是在哪些设备上调试,以及相应的公布和调试证书。...
文章浏览阅读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 扫雷");未登录的用户可以在代码段下方复制扫雷源码;_扫雷游戏代码
文章浏览阅读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
文章浏览阅读2.8w次,点赞8次,收藏27次。前言:相信不少小伙伴在项目需要打包上线时都遇到过一种情况,如服务器的地址或是端口变了,需要修改项目里的配置文件,于是不得不将jar包拿下来修改再上传,或是重新打包上传,可谓是不胜烦琐,今天教大家一个小技巧,既如何直接在Linux里面修改配置文件!准备步骤:1.安装unzip 命令:yum install -y unzip zip2.直接vim jar包名3./要找的..._linx怎么编辑配置文件
文章浏览阅读2.2k次。错误:解决办法:手动刷新neo4j,他就解决了。很魔幻这是调试好的_get_config().split()