我有一些VTK文件,看起来像这样:
# vtk DataFile Version 1.0
Line representation of vtk
ASCII
DATASET POLYDATA
POINTS 30 FLOAT
234 462 35
233 463 35
231 464 35
232 464 35
229 465 35
[...]
LINES 120 360
2 0 1
2 0 1
2 1 0
2 1 3
2 1 0
2 1 3
2 2 5
2 2 3
[...]
Run Code Online (Sandbox Code Playgroud)
我想从这些VTK文件中获取两个列表:edgesList和verticesList:
我不知道如何使用standard-vtk-python库提取它.我到目前为止:
import sys, vtk
filename = "/home/graphs/g000231.vtk"
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
reader.Update()
idList = vtk.vtkIdList()
polyDataOutput = …
Run Code Online (Sandbox Code Playgroud) 我正在用wxPython和VTK创建一个应用程序.屏幕左侧有一个配置面板(wx.Panel),右侧有一个VTK窗口,也基于wx.Panel.将面板放置在wxFrame的boxsizer中,并使用wxFormBuilder应用程序中定义的比例大小调整大小,然后使用该大小来生成XRC文件.
我有一个非常具体的问题,一些Windows 7机器一直没有正确调整窗口的VTK部分 - 请参阅上面屏幕截图中VTK窗口周围的白色边框.我试图让这个VTK窗口固定为1280x720 - 它是 - 但是有一个尺寸问题,一些元素正在切断窗口的底部和右边.在Ubuntu 10.04,XP或Windows 7的某些版本上运行时,此错误不存在(我不确定那些有效的和那些尚未有效的内容是什么).
当遇到这个错误时,我可以与屏幕的白色部分进行交互 - 通过VTK交互器正确处理点击,因此它仍然是我的VTK场景的一部分.
应用程序设置如下,右侧VTK窗格是graphics_panel
.面板设置为wxEXPAND
没有其他标志,我的应用程序中的所有元素都自动设置为大小(没有设置最小,最大或默认大小).唯一的例外是bSizer1(主要的wxFrame sizer),它具有最小宽度和高度设置(我不确定这是否是正确的方法,但它似乎工作正常).
我从wxFormBuilder生成XRC,然后在我的应用程序中使用它,我的VTK场景设置如下:
class MyScene(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, style=wx.NO_BORDER)
#'parent' is main_frame (wx.Frame instance)
self._parent = parent
self.renderer = vtk.vtkRenderer()
# I create and add my VTK actors here (SNIPPED)
self._set_lighting()
self.widget = VTKWidget(self,-1) #VTKWidget is a wxVTKRenderWindowInteractor
self.widget.GetRenderWindow().AddRenderer(self.renderer)
self.widget.Enable(1)
self.widget.SetDoubleBuffered(True)
self.Bind(wx.EVT_SIZE, self.on_size)
Run Code Online (Sandbox Code Playgroud)
我一直在尝试解决使用该on_size
函数的元素大小的MyScene
问题,但下面没有任何内容可以解决我的问题.报告的数值都正常的和错误的系统是符合市场预期.
def on_size(self, evt):
print "---- MyScene on_size ----"
print "Widget …
Run Code Online (Sandbox Code Playgroud) 您好我试图在Windows 8下使用CMake编译VTK和ITK.ITK编译完美,但当我尝试通过CMake处理VTK时,我得到错误cmTryCompileExec has stopped working
.我怎么解决这个问题?我的CMake版本是2.8.12.1
我有一组存储在VTK文件中的数据,它代表一个带有数组中标量点数据的域的切割.我正在尝试生成所述标量的等高线图,使其看起来有点像使用ParaView制作的附图.我宁愿坚持使用vtk库而不是使用其他东西,比如Matplotlib,因为我认为它们会产生更好的可视化效果..
我在网上看过几个例子,但没有一个对我有效(没有错误被抛出,我最终得到的只是背景的空渲染),所有我能做的就是表面图数据(例如:这里).
这是我所拥有的代码的当前版本(非常类似于成功生成曲面图的代码):
# import data
reader = vtk.vtkDataSetReader()
reader.SetFileName('inputDataFiles/k_zCut.vtk')
reader.ReadAllVectorsOn()
reader.ReadAllScalarsOn()
reader.Update()
# access data
data = reader.GetOutput()
d = data.GetPointData()
array=d.GetArray('k')
# create the filter
contours = vtk.vtkContourFilter()
contours.SetInput(reader.GetOutput())
contours.GenerateValues(5,1.,5.)
# create the mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInput(contours.GetOutput())
mapper.ScalarVisibilityOff()
mapper.SetScalarRange(1., 5.)
# create the actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# create a rendering window and renderer
ren = vtk.vtkRenderer()
ren.SetBackground( 0.329412, 0.34902, 0.427451 ) #Paraview blue
# Assign actor to the renderer
ren.AddActor(actor)
renWin = …
Run Code Online (Sandbox Code Playgroud) 我在远程服务器上有一个.vtk文件.我通过http访问它(我验证了文件的URL是正确的,实际上我可以从浏览器下载它).我也尝试使用matlab创建的.vtk文件中的xtk体积渲染中的建议删除文件中的空格.
但我得到一个例外
Unable to get property 'length' of undefined or null reference.
Run Code Online (Sandbox Code Playgroud)
你能否指导一下应该使用的.vtk文件格式,以使其顺利运行?我正在关注xtk教程http://jsfiddle.net/gh/get/toolkit/edge/xtk/lessons/tree/master/05/#run,下面是我的代码
window.onload = function () {
// create and initialize a 3D renderer
var r = new X.renderer3D();
r.init();
// create a new X.mesh
var skull = new X.mesh();
// .. and associate the .vtk file to it
skull.file = 'http://localhost/startup/bunnycheck.vtk'; //using other .vtk file
//skull.file = 'http://x.babymri.org/?skull.vtk';
// .. make it transparent
skull.opacity = 0.5;
// .. add the mesh
r.add(skull); …
Run Code Online (Sandbox Code Playgroud) 我试图用python和python-vtk处理MHD图像文件.该文件放在谷歌驱动器:mhd.
我想将它转换为numpy数组,然后根据给定的值"500例如"分割它们.然后计算摘要信息.我按照这个
[post]的说明如何将3D vtkDataSet转换为numpy数组?
但它对我的情况不起作用.
import vtk
imageReader = vtk.vtkMetaImageReader()
imageReader.SetFileName(testfile1)
imageReader.Update()
# from vtk.util.numpy_support import numpy_to_vtk, vtk_to_numpy does not work for the data type issue
image = imageReader.GetOutput()
# List the dimensions of the image, for example
print image.GetDimensions()
pixelspace = imageReader.GetPixelSpacing()
Run Code Online (Sandbox Code Playgroud)
这里出现错误:
AttributeError: GetPixelSpacing
Run Code Online (Sandbox Code Playgroud)
我怎么能实现转换?
当我完成数据拆分时,我怎么能将它们保存回mhd(或原始数据会更好?)
在没有令人满意的第一个答案和无法解释的降票后进行编辑:
我需要绘制一个在3D网格中构造的标量字段,如下所示:
import numpy as np
from mayavi import mlab
dt = 10
X,Y,Z = np.mgrid[0:dt,0:dt,0:dt]
F = X**2+Y**2+Z**2
test = mlab.figure(size = (1024,768), bgcolor = (1,1,1), fgcolor = (0, 0, 0))
sf = mlab.pipeline.scalar_field(X,Y,Z,F)
vl = mlab.pipeline.volume(sf)
mlab.outline()
mlab.axes()
mlab.title('Can not change font size for this title')
mlab.xlabel('Only end ticks')
mlab.ylabel('No major ticks')
Run Code Online (Sandbox Code Playgroud)
我想在Python中这样做,因为我用这种语言模拟了许多数据集,并且我希望能够在对模拟参数执行敏感度时快速将其可视化。
Mayavi似乎为科学3d绘图提供了非常标准的例程。但是,在出版物中交流这些图时,没有非常基本的图自定义设置,例如轴上的主要和次要刻度线。此外,迄今为止,所支持的那些非常基本的功能甚至无法正常工作(例如,参见字体大小错误示例和此处)。
Python中是否有任何体面且易于使用的科学3D绘图库?我曾尝试学习vtk,但网站示例似乎已经过时了(例如,无法运行的体积渲染示例,我尝试编辑许多行代码以使其正常运行),而其他人似乎都同意缺少该文档。
体面的科学绘图库的意思是:
提前致谢!
这是我所拥有的:
/Library/Frameworks/Python.framework/
这是我所做的:
在本地构建一个 python 模块。就我而言,这是vtk。有关摘要,请参阅我配置 vtk 的 CMake 调用。
cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"
Run Code Online (Sandbox Code Playgroud)将 python 包安装在 python 可以找到的位置。就我而言,这是/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
请注意,我需要DYLD_LIBRARY_PATH
通过库所在的位置扩展/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/
.
如果我从终端启动python,我可以成功导入vtk。
import vtk
v = vtk.vtkVersion()
print v.GetVTKVersion()
Run Code Online (Sandbox Code Playgroud)如果我尝试在 PyCharm 的 python 控制台中导入 vtk,我会收到以下错误:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-b7e11aadda62>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)我试图使用vtk对象vtkVectorText渲染文本.它适用于单个3d位置.我需要的是在一些3d(vtkPoint)点上方放置一个3d文本.我尝试用vtkTextActor3d做这个,但是每个文本对象都需要一个单独的actor,我最终得到了10k演员,当我试图旋转场景时,这是非常糟糕和滞后的.
我还尝试应用一些appendFilter来创建一个vtkVectorText数组,从appendFilter的对象获取非结构化网格,然后将其转换为polydata,以便使用我想要的点位置渲染非结构化网格.它没有显示任何内容,因为我无法弄清楚执行此操作的最佳方法是什么.
有人可以帮我弄这个吗?
这是我上一部分的代码:
vtkSmartPointer<vtkAppendFilter> appendFilter = vtkSmartPointer<vtkAppendFilter>::New();
//for each point
for (int i = 0; i < N;i++) {
vtkSmartPointer<vtkVectorText> vecText = vtkSmartPointer<vtkVectorText>::New();
vecText->SetText("My text, needs to appear multiple times");
vecText->Update();
appendFilter->AddInputData(vecText->GetOutput());
appendFilter->Update();
}
vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = appendFilter->GetOutput();
unstructuredGrid->Allocate(N);
unstructuredGrid->SetPoints(points);
vtkSmartPointer<vtkGeometryFilter> geometryFilter = vtkSmartPointer<vtkGeometryFilter>::New();
geometryFilter->SetInputData(unstructuredGrid);
geometryFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> textMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
textMapper->SetInputConnection(geometryFilter->GetOutputPort());
vtkSmartPointer<vtkActor> textActor = vtkSmartPointer<vtkActor>::New();
textActor->SetMapper(textMapper);
textActor->GetProperty()->SetColor(0, 1, 0);
renderer->AddActor(textActor);
Run Code Online (Sandbox Code Playgroud)