VTK-Python 2. 绘制直线

时间:2021-05-13 10:06:09
 
#!/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()

VTK-Python 2. 绘制直线