标签: vtk

使用XTK读取ASCII VTK

我正在尝试使用XTK在我的网页上显示3D CFD数据.我可以生成包含我的关注格式指南数据(网格点,速度,压力)ASCII VTK文件,在这里,我可以想像它,它访问.

当我尝试加载到XTK时,(通过更改头骨教程中的文件名)我收到错误:

TypeError : f is null
Run Code Online (Sandbox Code Playgroud)

在xtk.js中,没有显示任何内容.

有人有过类似的问题吗?

这是我的VTK文件示例.

PS我知道Paraview在阅读FieldData时遇到了麻烦,所以我尝试将其删除为XTK,但没有运气.

javascript vtk xtk

10
推荐指数
1
解决办法
231
查看次数

如何将使用EPnP计算的相机姿态变换应用于VTK相机?

对于我的增强现实项目,我使用VTK相机观看3D模型,并使用真实相机观看模型的真实对象.

我使用EPnP来估计真实相机的外在矩阵(这个相机已经预先校准,因此我知道内部参数),通过从真实相机图像和内部参数提供来自VTK及其相应2D点的3D点.用于EPnP算法的真实相机.

之后,我获得了一个旋转和平移矩阵,其元素为 - > R1,R2,R3,.....,R9和t1,t2和t3.

所以我的真实相机的外在矩阵看起来像这样(让我们称之为extrinsicReal)

R1 R2 R3 T1
R4 R5 R6 T2
R7 R8 R9 T3
 0  0  0  1
Run Code Online (Sandbox Code Playgroud)

在此之后,我使用以下代码估计我的VTK相机的外在矩阵:

vtkSmartPointer<vtkMatrix4x4> extrinsicVTK = vtkSmartPointer<vtkMatrix4x4>::New();
extrinsicVTK->DeepCopy(renderer->GetActiveCamera()->GetViewTransformMatrix());
Run Code Online (Sandbox Code Playgroud)

要将VTK摄像机3D模型与真实摄像机融合,VTK摄像机应设置在与真实摄像机位置相同的位置,并且VTK摄像机的焦距应与真实摄像机的焦距相同.另一个重要步骤是将真实相机的相同外在矩阵应用于VTK相机.我该怎么做?

我做的是我采用extrinsicReal的反转并将其与extrinsicVTK相乘得到一个新的4*4矩阵(让我们称之为newMatrix).我将此矩阵应用于VTK相机的转换.

vtkSmartPointer<vtkMatrix4x4> newMatrix = vtkSmartPointer<vtkMatrix4x4>::New();
vtkMatrix4x4::Multiply4x4(extrinsicRealInvert,extrinsicVTK,newMatrix);

vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
transform->SetMatrix(NewM); 
transform->Update();

renderer->GetActiveCamera()->ApplyTransform(transform);
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是正确的方法.但是我检查了真实的摄像机位置(我在EPnP之后得到的)和VTK摄像机位置(在应用上面的变换之后)并且它们都完全相同.此外,真实相机的方向和VTK相机的投影方向也是相同的.

问题是即使在上述参数匹配VTK和真实相机之后,3D VTK模型似乎也不能与真实相机视频完美对齐.有人可以指导我一步一步调试问题吗?

opencv computer-vision augmented-reality vtk

9
推荐指数
1
解决办法
2511
查看次数

在同一个UI中使用QVTKWidget和QOpenGLWidget?

我正在开发一个使用自定义子类QOpenGLWidget来显示一些渲染的项目.在paintGL()方法结束时,它调用窗口小部件的update()方法来触发重绘事件(如果它可见).现在我想为QVTKWidget我的Ui 添加一个额外的东西,我通过使用这样的东西:

QVBoxLayout* layout = findChild<QVBoxLayout*>("layout_simulation");
QVTKWidget* widget = new QVTKWidget();

// Setup arrow
vtkSmartPointer<vtkArrowSource> arrowSource = vtkSmartPointer<vtkArrowSource>::New();

[more VTK stuff...]

widget->GetRenderWindow()->AddRenderer(renderer);
renderer->AddActor(arrowActor);
renderer->ResetCamera();

// Add widget to ui
layout->addWidget(widget);
Run Code Online (Sandbox Code Playgroud)

VTK小部件已添加到ui并按预期工作.问题是,只要我使用该layout->addWidget()方法,我的所有其他QOpenGLWidget对象都会变黑并且不显示任何内容.另外这款黑色不是的背景色VTKRenderer,因为其他部件仍然是黑色的,即使我改变VTK构件的背景颜色.我检查了一下,然后paintGL()在循环中调用了静止但它只是没有显示任何内容.我很确定我没有在我的widget子类中使用任何不好的OpenGL代码,所以我猜它与QOpenGLWidgetand 的内部初始化有关QVTKWidget.如果省略所有VTK调用并添加新创建的,则会发生同样的情况QVTKWidget.

有趣的是,如果我省略了layout->addWidget()调用,VTK会在一个单独的窗口中打开渲染器,所有OpenGL小部件都可以正常工作.但我当然希望将渲染器嵌入到我的UI中.

有没有人有这方面的经验,或者你知道我可能遇到的任何陷阱,或者是否有任何可能导致此问题的常见问题?

BTW:我使用OpenGL 3.3核心配置文件和我的QOpenGLWidget子类的自定义着色器.

编辑:我删除了我对3.3核心配置文件的请求,现在它使用4.4兼容性配置文件.我猜它现在使用相同的配置文件,VTKRenderer所以这可以排除作为错误的来源.

c++ opengl user-interface qt vtk

9
推荐指数
1
解决办法
3454
查看次数

学习VTK库工具包有哪些推荐的资源和教程?

除了Kitware提供的书籍之外,我正在寻找一些可以帮助学习VTK库的资源的链接.优选地,使用示例代码和教程.谷歌的结果对我来说并不是非常有用.所以我在这里要求获得VTK资源的链接.

python vtk

8
推荐指数
1
解决办法
1436
查看次数

关闭VTK窗口(Python)

请考虑以下脚本

import vtk

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

an_actor = vtk....  # create an actor
ren.AddActor(an_actor)

iren.Initialize()
renWin.Render()
iren.Start()
Run Code Online (Sandbox Code Playgroud)

如果脚本在那里结束,一切都会正常,并且当手动关闭窗口(单击X)或按下退出键(Q或E)时,将关闭创建的窗口并释放资源.

但是,如果有更多的语句,你会注意到窗口仍然存在,这是可以理解的,因为我们没有调用任何东西来放弃它,只是结束了交互循环.

通过附加以下内容自行查看:

temp = raw_input('The window did not close, right? (press Enter)')
Run Code Online (Sandbox Code Playgroud)

根据VTK/Examples/Cxx/Visualization/CloseWindow,这个

iren.GetRenderWindow().Finalize()  # equivalent: renWin.Finalize()
iren.TerminateApp()
Run Code Online (Sandbox Code Playgroud)

应该完成工作,但事实并非如此.

我还需要做什么才能以编程方式关闭打开的窗口?

python vtk

8
推荐指数
1
解决办法
3280
查看次数

如何在支持Cocoa/XCode的情况下为OSX 10.8安装VTK 6.1?

http://www.vtk.org/Wiki/Cocoa_VTK上发布的非常有用的指南以及由VTK回购中的Sean McBride和Mike Jackson 发布的自述文件对于VTK 6.1来说已经过时了.所以,如果这有助于任何人,我发布了在OSX 10.8上安装VTK 6.1的说明,并支持SimpleCocoaVTK Xcode项目.

macos vtk

8
推荐指数
1
解决办法
1万
查看次数

使用vtk时导入的未定义变量

我使用与Ubuntu包管理器一起安装的python-vtk 6.2.0在python 2.7中编码.我使用eclipse + pydev作为IDE,我可以在shell和Eclipse中成功运行代码.

我唯一烦人的问题是代码分析器不断发布类型的错误:Undefined variable from import: vtkxxxxxx每当我这样做

import vtk

vtk.vtkTransformPolyDataFilter
vtk.vtkActor
vtk.vtkWhatever
Run Code Online (Sandbox Code Playgroud)

我试图重置解释器,我也尝试手动将库.so文件添加到PYTHONPATH,没有运气.

我也可以在系统库下的项目树中看到vtk包,我没有错误 import vtk

是否有一种特殊的方式在pydev中包含vtk库?我做了一些我看不到的傻事吗?

谢谢你们!

python eclipse code-analysis pydev vtk

8
推荐指数
1
解决办法
218
查看次数

使用Python从vtk文件中的数据绘制轮廓图

我有一组存储在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)

python vtk python-2.7

7
推荐指数
1
解决办法
4159
查看次数

VTK更新多个渲染窗口的位置

尝试在我写的Python VTK应用程序中运行多个渲染窗口时,我遇到了一些问题.该应用程序尝试在立体应用程序的两个单独视图中呈现3D模型(即左渲染和右渲染),但我遇到同时更新每个窗口的摄像机的问题.我现在有设置了两个几乎相同的管道,每个都有自己的vtkCamera,vtkRenderWindow,vtkRenderer,和vtkRenderWindowInteractor,在于右照相机在位置上的唯一区别移位30个单元沿X轴.

每个渲染窗口交互器都通过vtkRenderWindowInteractor.AddObserver()调用简单函数的方法进行更新,以将摄像机重置为其原始位置和方向.最大的问题是,这似乎只出现在一个窗口上,特别是当时关注的窗口.就好像交互器的计时器在交互器失去焦点时关闭一样.此外,当我按住鼠标(并因此移动相机)时,渲染的图像开始"漂移",重置为越来越不正确的位置,即使我已将坐标硬编码到函数中.

显然我对VTK很新,而且很多事情都是相当令人困惑的,因为后端隐藏了很多东西,所以在这个问题上获得一些帮助会很神奇.我的代码如下.多谢你们!

from vtk import*
from parse import *
import os
import time, signal, threading

def ParseSIG(signum, stack):
        print signum
        return

class vtkGyroCallback():
        def __init__(self):
                pass
        def execute(self, obj, event):
                #Modified segment to accept input for leftCam position 
                gyro = (raw_input())
                xyz = parse("{} {} {}", gyro)
                #This still prints every 100ms, but camera doesn't update!
                print xyz

                #These arguments are updated and the call is made.
                self.leftCam.SetPosition(float(xyz[0]), …
Run Code Online (Sandbox Code Playgroud)

python render stereo-3d vtk

7
推荐指数
1
解决办法
3328
查看次数

如何在nrrd加载器中更新具有相同silde的两个切片

我是新来的Javascript,并NRRD Loader在nrrd装载机,我们可以使用滑块更改切片的索引值

sliceY = volume.extractSlice('y', Math.floor(volume.RASDimensions[1]/2));
scene3.add(sliceY.mesh);

gui.add(sliceY, 'index', 0, volume.RASDimensions[1], 1).name('indexY').onChange(function () {
  sliceY.repaint.call(sliceY);
});
Run Code Online (Sandbox Code Playgroud)

考虑我需要使用相同的滑块同时更新slicesX的值

sliceX = volume.extractSlice('x', Math.floor(volume.RASDimensions[1]/2));
Run Code Online (Sandbox Code Playgroud)

javascript vtk

7
推荐指数
1
解决办法
86
查看次数