- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 VTK 的新手。我正在尝试在 python 中使用 VTK 来使用 vtkBoxWidget
编辑 .STL
文件。我正在读取 .STL
文件,通过在窗口交互器中使用鼠标/拖动,使用 vtkBoxWidget
对其进行编辑,最后我想将新数据写入一个新的 .STL
当按下某个键时。
下面是演示问题的代码:
#!/usr/bin/env python
import vtk
import sys
import os
filename = "file.stl"
# render the data
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
stlMapper = vtk.vtkPolyDataMapper()
stlMapper.SetInputConnection(reader.GetOutputPort())
# create an actor for our scene
stlActor = vtk.vtkActor()
stlActor.SetMapper(stlMapper)
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# The box widget observes the events invoked by the render window
# interactor. These events come from user interaction in the render
# window.
boxWidget = vtk.vtkBoxWidget()
boxWidget.SetInteractor(iren)
boxWidget.SetPlaceFactor(1.25)
# Add the actors to the renderer, set the background and window size.
ren.AddActor(stlActor)
ren.SetBackground(0.1, 0.2, 0.4)
renWin.SetSize(300, 300)
# As the box widget is interacted with, it produces a transformation
# matrix that is set on the actor.
t = vtk.vtkTransform()
def TransformActor(obj, event):
global t, stlActor
obj.GetTransform(t)
stlActor.SetUserTransform(t)
def onKeyPressEvent(self, renderer):
key = self.GetKeyCode()
if(key=='l'):
print stlActor.GetBounds()
if(os.path.isfile("done.stl")==1):
os.remove("done.stl")
print stlActor.GetMapper().GetInput().GetBounds()
stlPolyData = stlActor.GetMapper().GetInput()
writer = vtk.vtkSTLWriter()
writer.SetFileName("done.stl")
writer.AddInputDataObject(stlPolyData)
writer.Write()
# Place the interactor initially. The actor is used to place and scale
# the interactor. An observer is added to the box widget to watch for
# interaction events. This event is captured and used to set the
# transformation matrix of the actor.
boxWidget.SetProp3D(stlActor)
boxWidget.PlaceWidget()
boxWidget.AddObserver("InteractionEvent", TransformActor)
iren.AddObserver('KeyPressEvent', onKeyPressEvent)
iren.Initialize()
renWin.Render()
iren.Start()
问题是我不知道如何更新 vtkPolyData
或将我应用于 vtkActor
的转换传递给 vtkPolyData
。在上面的代码中,我在两个打印函数中使用 .GetBounds() 对此进行了测试。最初对象有边界:
(-2.0, 2.0, 0.0, 1.625, -1.5, 1.8125)
更新后,actor Bounds 改变了,但我无法将所有这些属性传递给 vtkPolyData。
(-2.1331110248939638, 2.246371570191821, -1.5743578447908013, 2.5817210301577385, -2.1311284932847796, 2.0695034726591715)
(-2.0, 2.0, 0.0, 1.625, -1.5, 1.8125)
谢谢!
最佳答案
我想我想通了:
def transformPolyData(actor):
polyData = vtk.vtkPolyData()
polyData.DeepCopy(actor.GetMapper().GetInput())
transform = vtk.vtkTransform()
transform.SetMatrix(actor.GetMatrix())
fil = vtk.vtkTransformPolyDataFilter()
fil.SetTransform(transform)
fil.SetInputDataObject(polyData)
fil.Update()
polyData.DeepCopy(fil.GetOutput())
return polyData;
这会将 polyData 转换为我在保存之前需要的内容。
关于python - 从 vtkActor 更新 vtkPolyData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956983/
问题:有没有办法直接访问 vtkPolyData 结构中的特定单元格? 我正在使用 vtkPolyData 来存储行集,比如 L。 目前,我正在使用 GetLines() 来了解 L 中的行数。然后,
我已经设法从 vtk 中的设定点创建了一个曲面。现在我需要通过表面切割一个平面并制作一个 2D 轮廓,我可以将其输出为 vtkImageData。我制作的代码只能投影到平面上。谁能告诉我通过多数据获取
我的 VTK 程序使用 vtkCubeAxesActor 在坐标系中绘制一个 vtkPolyData 对象 surface1。我按以下方式定位立方体轴: cubeAxesActor->SetBound
我正在尝试通过使用 vtkTransform 来转换 vtkPolyData 对象。但是,我找到的教程使用的是管道,例如:http://www.vtk.org/Wiki/VTK/Examples/Cx
我正在尝试编辑 vtkPolyData 中的一个点。 我尝试了两种方法: 使用GetPoint 和SetPoint 方法直接修改点(可行) 使用 GetCell 访问单元格,然后使用 GetPoint
我有一组折线:oldData。我希望仅显示基于“过滤器”的这些折线中的一些:showLine: void myFunction(vtkSmartPointer oldData,
我是 VTK 的新手。我正在尝试在 python 中使用 VTK 来使用 vtkBoxWidget 编辑 .STL 文件。我正在读取 .STL 文件,通过在窗口交互器中使用鼠标/拖动,使用 vtkBo
我正在使用以下代码来填充点云:How to display point cloud in vtk in different colors? 这些点是新西兰现在地震的经度、纬度和深度。 我想更改点的大小
给定一个 vtk 图像: vtkSmartPointer VTKImage = vtkSmartPointer::New(); 这是一个包含分割结果作为二进制数据的 3D 图像(分割对象 = 1,背景
我使用 VTK 来显示点云并循环更新它。窗口可以通过鼠标进行交互第一次 我显示云,如果我想更新云,我必须按“q”,窗口将显示更新的云。然而,虽然云已更新并正确显示在窗口中,但我失去了对窗口的控制(即无
我正在尝试从 mlab.contour3d 图中获取三角化的 vtkPolyData。我使用 mayavi 因为它似乎是获取 minimal surfaces 的最快方法正确三角测量。我需要它作为 v
我想将 vtkPolyData 保存到数据库中,让我知道如何做我按照下面的示例(它创建了一些点,然后将它们导出到 vtp 文件) #include #include #include #incl
意图 我编写了一个 VTK 应用程序,它使用 vtkPoints > vtkPolyLine > vtkPolyData > vtkPolyDataMapper 生成螺旋并显示它。如果在程序初始化时静
我是一名优秀的程序员,十分优秀!