Python VTK 绘制等高线初步

代码,

import vtk
 
def create_data():

    points = vtk.vtkPoints()
 
    for x in range(0, 10):
        for y in range(0, 10):
            points.InsertNextPoint(x, y, x + y)
 
    polys = vtk.vtkCellArray()
    for x in range(0, 9):
        for y in range(0, 9 - x):
            polys.InsertNextCell(4)
            polys.InsertCellPoint(x * 10 + y)
            polys.InsertCellPoint(x * 10 + y + 1)
            polys.InsertCellPoint((x + 1) * 10 + y + 1)
            polys.InsertCellPoint((x + 1) * 10 + y)
 
    #dataset = vtk.vtkDataSet.GetData()
    dataset = vtk.vtkPolyData()
    #dataset = vtk.vtkImageData()
    dataset.SetPoints(points)
    #dataset.SetPolys(polys)
 
    return dataset
 
def create_contours(input_data, value):

    contourFilter = vtk.vtkContourFilter()
    contourFilter.SetInputData(input_data)
    contourFilter.SetValue(0, value) 

    contourFilter.Update()
 
    return contourFilter.GetOutput()
 
def render_contours(contours):

    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(contours)
 
    actor = vtk.vtkActor()
    actor.SetMapper(mapper)
 
    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(0, 0, 0)
 
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindow.SetSize(640, 480)
 
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderWindow.Render()
    renderWindowInteractor.Start()
 
if __name__ == '__main__':
    data = create_data()
    contours = create_contours(data, 50.0)
    render_contours(contours)

运行,没绘制出来,只出来一个空的屏幕;

先大概看一下代码;

它首先是生成示例数据;往数据集里面加了点和线; 

一开始它的代码是这样,dataset = vtk.vtkDataSet.GetData(),报错了;
   然后改成, dataset = vtk.vtkPolyData(),不会报错,但没绘制东西;
   如果是这样,dataset = vtk.vtkImageData(),也报错;

根据资料,vtk的python的数据集类型有如下几种,

vtkImageData,vtkPolyData,vtkRectilinearGrid,vtkStructuredGrid,vtkUnstructuredGrid,vtkUnstructuredPoints;

光有数据还不能绘制等高线,还要定义等值线过滤器,设置其数值,

    contourFilter.SetInputData(input_data)
    contourFilter.SetValue(0, value) 

把输入数据设置给等值线过滤器,设置过滤器的数值;

一开始value设置的是50,没有绘制出来,一开始设置的点的数值范围是在10左右,把value改为10, 或15,也不会绘制;

其他的代码就是基本的渲染流程;

先初步了解一下,有时间继续;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值