如何在vtk中创建具有可重复性的管道模型
how to create a pipe model in vtk with repeatability
我通过旋转一堆圆柱体创建了一个管道模型,但我不知道如何过滤公共部分,我是 运行 一个 for 循环来创建圆柱体并在 circle.This 上旋转它们我需要在循环中设置位置的问题,我想将所有圆柱体附加到一个多数据对象然后使用它
这是我的代码
import vtk
import math
import wx
# create a rendering window and renderer
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
# create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
i=0
sourc=[]
mapper=[]
actor=[]
for i in range(0,360):
sourc.append(vtk.vtkCylinderSource())
sourc[i].SetRadius(0.3)
sourc[i].SetHeight(6)
sourc[i].SetCenter(2*math.cos(i),0,2*math.sin(i))
sourc[i].SetResolution(100.0)
sourc[i].Update()
mapper.append(vtk.vtkPolyDataMapper())
mapper[i].SetInput(sourc[i].GetOutput())
actor.append(vtk.vtkActor())
actor[i].SetMapper(mapper[i])
#actor[i].SetPosition(0,2*math.cos(j),2*math.sin(j))
#actor[i].RotateZ(j)
actor[i].GetProperty().SetOpacity(1)
#actor[i].SetPosition(2*cos(i),2*sin(i),0)
ren.AddActor(actor[i])
i=i+1
# create source
#
transform = vtk.vtkTransform()
transform.Translate(0.0, 0.0,0)
axes = vtk.vtkAxesActor()
# The axes are positioned with a user transform
axes.SetUserTransform(transform)
ren.AddActor(axes)
# enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()
要将多个 PolyData
对象添加到一个对象中,请使用 vtkAppendPolyData
对象:
import vtk
append = vtk.vtkAppendPolyData()
for i in range(0, 360):
(...)
append.SetInputData(sourc[i].GetOutput())
append.Update()
然后您可以添加演员并在循环外渲染。
我通过旋转一堆圆柱体创建了一个管道模型,但我不知道如何过滤公共部分,我是 运行 一个 for 循环来创建圆柱体并在 circle.This 上旋转它们我需要在循环中设置位置的问题,我想将所有圆柱体附加到一个多数据对象然后使用它 这是我的代码
import vtk
import math
import wx
# create a rendering window and renderer
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
# create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
i=0
sourc=[]
mapper=[]
actor=[]
for i in range(0,360):
sourc.append(vtk.vtkCylinderSource())
sourc[i].SetRadius(0.3)
sourc[i].SetHeight(6)
sourc[i].SetCenter(2*math.cos(i),0,2*math.sin(i))
sourc[i].SetResolution(100.0)
sourc[i].Update()
mapper.append(vtk.vtkPolyDataMapper())
mapper[i].SetInput(sourc[i].GetOutput())
actor.append(vtk.vtkActor())
actor[i].SetMapper(mapper[i])
#actor[i].SetPosition(0,2*math.cos(j),2*math.sin(j))
#actor[i].RotateZ(j)
actor[i].GetProperty().SetOpacity(1)
#actor[i].SetPosition(2*cos(i),2*sin(i),0)
ren.AddActor(actor[i])
i=i+1
# create source
#
transform = vtk.vtkTransform()
transform.Translate(0.0, 0.0,0)
axes = vtk.vtkAxesActor()
# The axes are positioned with a user transform
axes.SetUserTransform(transform)
ren.AddActor(axes)
# enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()
要将多个 PolyData
对象添加到一个对象中,请使用 vtkAppendPolyData
对象:
import vtk
append = vtk.vtkAppendPolyData()
for i in range(0, 360):
(...)
append.SetInputData(sourc[i].GetOutput())
append.Update()
然后您可以添加演员并在循环外渲染。