#!/usr/bin/env python import vtk # 绘制通用方法 def myshow(linepolydata): # Now we'll look at it. lineMapper = vtk.vtkPolyDataMapper() if vtk.VTK_MAJOR_VERSION <= 5: lineMapper.SetInput(linepolydata) else: lineMapper.SetInputData(linepolydata) lineMapper.SetScalarRange(0, 2) lineActor = vtk.vtkActor() lineActor.SetMapper(lineMapper) # The usual rendering stuff. camera = vtk.vtkCamera() camera.SetPosition(1, 1, 1) camera.SetFocalPoint(0, 0, 0) renderer = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(renderer) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renderer.AddActor(lineActor) renderer.SetActiveCamera(camera) renderer.ResetCamera() renderer.SetBackground(0, 0, 0) renWin.SetSize(300, 300) # interact with data renWin.Render() iren.Start() del lineMapper del lineActor del camera del renderer del renWin del iren def main(): # 直线在三维坐标系中的2个顶点 x = [(0.0, 0.0, 0.0),(1.0, 0.0, 0.0), (0.0, 1.0, 0.0)] # We'll create the building blocks of polydata including data attributes. linepoly = vtk.vtkPolyData() points = vtk.vtkPoints() lines = vtk.vtkCellArray() scalars = vtk.vtkFloatArray() for i in range(3): points.InsertNextPoint(x[i]) linepoly.SetPoints(points) line0 = vtk.vtkLine() line0.GetPointIds().SetId(0, 0); # 第二个0表示pts中的origin点 line0.GetPointIds().SetId(1, 1); # 第二个1表示pts中的p0点 line1 = vtk.vtkLine() line1.GetPointIds().SetId(0, 0); line1.GetPointIds().SetId(1, 2); lines.InsertNextCell(line0) lines.InsertNextCell(line1) linepoly.SetLines(lines); colors = vtk.vtkUnsignedCharArray() colors.SetNumberOfComponents(3); red = [255, 0, 0] colors.InsertNextTypedTuple(red); green = [0, 255, 0] colors.InsertNextTypedTuple(green); linepoly.GetCellData().SetScalars(colors); del points del lines del scalars del colors myshow(linepoly) # Clean up del linepoly main()