Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python VTK:奇怪的行为vtkContourFilter_Python_Vtk - Fatal编程技术网

Python VTK:奇怪的行为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

对于我的项目,我必须在三维空间中显示一维路径。为此,我使用vtkContourFilter和以下代码:

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()