Python VTK:奇怪的行为vtkContourFilter
对于我的项目,我必须在三维空间中显示一维路径。为此,我使用vtkContourFilter和以下代码:Python VTK:奇怪的行为vtkContourFilter,python,vtk,Python,Vtk,对于我的项目,我必须在三维空间中显示一维路径。为此,我使用vtkContourFilter和以下代码: import vtk class Maze(object): """Representation of maze""" def __init__(self, filename): # read source data self.reader = vtk.vtkStructuredPointsReader() self.read
import vtk
class Maze(object):
"""Representation of maze"""
def __init__(self, filename):
# read source data
self.reader = vtk.vtkStructuredPointsReader()
self.reader.SetFileName(filename)
self.reader.Update()
# map source data to object
self.mapper = vtk.vtkDataSetMapper()
self.mapper.SetInputConnection(self.reader.GetOutputPort())
# create actor for object
self.actor = vtk.vtkActor()
self.actor.SetMapper(self.mapper)
class Path(object):
"""Representation of a path through the maze"""
def __init__(self):
# Point list
self.points = []
# data source
self.vtk_points = vtk.vtkImageData()
self.vtk_points.SetDimensions(100,100,100)
info = self.vtk_points.GetInformation()
self.vtk_points.SetPointDataActiveScalarInfo(info,vtk.VTK_UNSIGNED_SHORT,1)
self.vtk_points.AllocateScalars()
self.vtk_points.SetSpacing(1,1,1)
self.vtk_points.SetOrigin(0,0,0)
# fill in data with 3D cube
for x in xrange(1,10):
for y in xrange(1,10):
for z in xrange(1,10):
self.vtk_points.SetScalarComponentFromFloat(x,y,z,0,1)
# fill in data with 1D line
for x in xrange(1,100):
self.vtk_points.SetScalarComponentFromFloat(x,x,x,0,1)
# add filter
self.contour_filter = vtk.vtkContourFilter()
self.contour_filter.SetInput( self.vtk_points )
self.contour_filter.SetValue( 10, 1 )
# map source data to object
self.mapper = vtk.vtkPolyDataMapper()
self.mapper.SetInput( self.contour_filter.GetOutput() )
# create actor for object
self.actor = vtk.vtkActor()
self.actor.SetMapper( self.mapper )
def create_renderer():
renderer = vtk.vtkRenderer()
renderer.SetBackground([0.5, 0.5, 0.5])
return renderer
def create_window():
window = vtk.vtkRenderWindow()
window.SetSize(1024, 768)
return window
def create_interactor():
interactor = vtk.vtkRenderWindowInteractor()
return interactor
def main():
# Create/Init data sources (maze, mouse, text, ...)
path = Path()
maze = Maze("maze_2_values.vtk")
# Request their actors
path_actor = path.actor
# Create renderer & add actors
renderer = create_renderer()
renderer.AddActor(path_actor)
# Create window & add renderer
window = create_window()
window.AddRenderer(renderer)
# Create interactor, add window & add observers
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(window)
# Start renderer & interactor
window.Render()
interactor.Initialize()
interactor.Start()
if __name__ == "__main__":
main()
这将生成我想要的行为:coutourfilter渲染立方体和对角线。但是,当我只交换2行代码时
path = Path()
maze = Maze("maze_2_values.vtk")
到
渲染结果完全不同:只显示立方体(而不是对角线),其颜色现在为蓝色,而不是读取。这怎么可能?这两个类彼此不依赖,也不共享任何资源。所以我不知道交换订单怎么会有这么奇怪的影响
maze = Maze("maze_2_values.vtk")
path = Path()