- 浏览: 848009 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
在vtk中显示标签有好几种方法,前面了解了vtkLabeledDataMapper,现在来了解下vtkLabelPlacementMapper。
在使用vtkLabelPlacementMapper之前,需要先使用vtkPointSetToLabelHierarchy来组织标签数据。首先来看看如何构造标签数据。
首先定义一个vtkStringArray来存放标签名称,同时给这个数组指定名称为labels,在后面需要使用。
vtkStringArray labels = new vtkStringArray(); labels.SetName("labels");
定义点集合,以及cellarray,然后随机生成100个点,以这些点的id值作为标签的值,最后构造一个vtkPolyData,其cell类型为vertex,即显示100个顶点。
vtkPoints points = new vtkPoints(); vtkCellArray verts = new vtkCellArray(); for(int i=0;i<100;i++){ points.InsertNextPoint(math.Random(1,3), math.Random(1,3), math.Random(1,3)); labels.InsertNextValue(String.valueOf(i)); verts.InsertNextCell(1); verts.InsertCellPoint(i); } vtkPolyData polyData = new vtkPolyData(); polyData.SetPoints(points); polyData.SetVerts(verts); polyData.GetPointData().AddArray(labels);
然后定义标签文本的属性,即设置字体的大小,字体颜色以及使用何种字体等信息。
vtkTextProperty textProp = new vtkTextProperty(); textProp.SetFontSize(12); textProp.SetColor(1.0, 1.0, 0.5); textProp.SetFontFamilyToArial(); // textProp.SetFontFamilyToCourier();
接着定义vtkPointSetToLabelHierarchy,设置输入为前面的polyData,指定作为标签的数组名称为labels,以及标签的个数,最后设置标签文本的属性:
vtkPointSetToLabelHierarchy hie = new vtkPointSetToLabelHierarchy(); hie.SetInput(polyData); hie.SetMaximumDepth(15); hie.SetLabelArrayName("labels"); hie.SetTargetLabelCount(100); hie.SetTextProperty(textProp);
最后使用vtkLabelPlacementMapper来映射vtkPointSetToLabelHierarchy,vtkFreeTypeLabelRenderStrategy
是具体的标签渲染策略。下面的一些方法是用来调整最终标签显示的样式, .SetShapeToNone();设置不显示边框,labelMapper.SetShapeToRect();设置边框为矩形,SetShapeToRoundedRect设置边框为圆角矩形,这些方法在一定程度上会影响标签的渲染速度,因为需要做相应的计算来调整边框的位置等信息。UseUnicodeStringsOff表示不使用Unicode字符串。
vtkLabelPlacementMapper labelMapper = new vtkLabelPlacementMapper(); labelMapper.SetInputConnection(hie.GetOutputPort()); vtkFreeTypeLabelRenderStrategy strategy = new vtkFreeTypeLabelRenderStrategy(); labelMapper.SetRenderStrategy(strategy); labelMapper.UseDepthBufferOn(); labelMapper.SetShapeToNone(); labelMapper.SetStyleToOutline(); labelMapper.UseUnicodeStringsOff(); labelActor2d = new vtkActor2D(); labelActor2d.SetMapper(labelMapper);
最终效果如图:
相比于vtkLabeledDataMapper,vtkLabelPlacementMapper速度要快一些,但是当数据量上千以后,速度也会变慢,但是还可以接受。另外,vtkLabelPlacementMapper在显示标签时,标签不会相互覆盖,如果后面的标签被挡住了,会自动隐藏,这样屏幕就不会因为标签太多导致拥挤。
这两种标签都是2d 的,即标签始终面向屏幕,而且可以设置字体,缺点就是当显示大量标签时,速度慢,影响用户使用。
在工作的过程中,也尝试了其它的办法,比如使用vtkVectorText结合vtkFollower来显示数字和字母。vtkVectorText是采用三角面的方式来定义一个数字或者字母,一个数字零就包含了很多三角形。vtkFollower实际上就是一个vtkActor,只是它提供了一些方法可使让自身始终朝向相机,因此,可以使用这两者来显示标签,同时保持标签使用朝向屏幕。但是,因为这里的一个标签就是一个actor,当数量达到一定程度时,性能会下降,只是相比前面的两种要快点。
另外一个缺陷是vtkVectorText只定义了常用的ascii字符,即数字以及字母等字符,所以不支持汉字的显示,因此,如何快速的显示大量标签还是没有找到好的解决办法,看来只有等到vtk 6.0出来解决了。
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3216要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2806要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 6999好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2098java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1689java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3289java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4708在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4365何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 5082在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4208在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5156在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3768Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32764在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2160下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1760因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1443前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 135521、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12424老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 4049软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
而`vtkRenderWindow`是实际的显示窗口,它包含一个或多个`Renderer`。通过`RenderWindowInteractor`,你可以与可视化结果进行交互,如旋转、平移和缩放。 6. **运行和交互**:最后,调用`RenderWindow`的`Render`...
VTK-9.1.0-cp38-cp38-win_amd64.zip 是针对Python 3.8版本且适用于64位Windows系统的VTK库的压缩包。这个版本的VTK提供了对现代计算机图形硬件的充分利用,支持复杂的三维渲染和交互操作。 "whl" 文件格式是Python...
在VTK-5.2.0-win32这个压缩包中,主要的文件是`vtk-5.2.0-win32.exe`,这是一个可执行文件,用于在Windows系统上安装VTK库。这个安装程序将包含各种库文件、头文件、示例代码、文档等,以便开发者可以在自己的项目中...
VTK-8.2.0-cp36-cp36m-win_amd64.zip 是一个专为基于Windows x64平台设计的Python 3.6版本的VTK库压缩包。它包含了Python接口的VTK库,允许开发者在Python环境中进行高效的数据可视化。 此压缩包中的“VTK-8.2.0-cp...
VTK-8.2.0-cp38-cp38-win_amd64
vtk-9.3.0-cp310-cp310-win_amd64.whl
VTK-8.1.0是安装mayavi-4.5.0+vtk81-cp36-cp36m-win_amd64.whl的基础模块,为后期numpy模块中图像的显示做铺垫。
VTK-9.0.1-cp36-cp36m-win_amd64.whl
vtk-9.3.1-cp310-cp310-win_amd64.whl
vtk-9.3.1-cp312-cp312-win_amd64.whl
The Visualization Toolkit (VTK) is an open-source, freely available software system for 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several ...
vtk-9.1.0-cp36-cp36m-win_amd64
适用平台:windows x64文件格式:whl安装方式:切换到whl路径,执行pip install whl文件名
VTK-7.1.1-cp36-cp36m-win32
**Python库vtk-9.0.3-cp39-cp39-macosx_11_0_arm64.whl详解** `vtk-9.0.3-cp39-cp39-macosx_11_0_arm64.whl`是一个针对Python开发的库,特别适用于在MacOS系统上运行,特别是搭载了Apple M1芯片的新型号(arm64架构...
VTK-5.0.1-control-1.1.zip 是一个特定版本的VTK控制模块的压缩包,适用于开发三维软件。在VTK中,"control"通常指的是用户界面和交互部分,它允许用户与三维可视化场景进行交互。 VTK的核心功能包括数据处理、几何...
VTK-9.1.0-cp310-cp310-win_amd64.whl
VTK-7.1.1-cp35-cp35m-win_amd64.whl
VTK-9.0.1-cp36-cp36m-win_amd64
VTK用户手册中文翻译版(带书签) VTK(Visualization Toolkit)是一款开源的数据可视化工具库,由Kitware公司开发维护。VTK用户手册是官方提供的详细手册,涵盖了VTK的使用基础、可视化模型、图形模型、交互功能、...