当前位置: 首页 > article >正文

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,也不会绘制;

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

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


http://www.kler.cn/a/299254.html

相关文章:

  • Linux学习-ELK(一)
  • VMware-Ubuntu Server安装教程
  • hive表格统计信息不准确
  • ISP面试准备2
  • HarmonyOS---应用测试概述
  • Linux 上安装 PostgreSQL
  • 初学者指南:掌握 Vue 路由(Router)
  • Redis协议与异步方式
  • HTML5( HTML5 、CSS3) 第一天
  • pytest 生成allure测试报告
  • PHP函数如何接收回调参数?
  • LCD彩条显示——FPGA学习笔记10
  • 在Spring中,相同类型不同ID的bean,与相同ID多次获取bean的区别和联系
  • 高光谱图像处理,使其适用于深度学习任务
  • 鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
  • Ajax和XMLHttpRequest之间的关系
  • 数据集 CrowdPose 多人姿态估计 深度学习 >> DataBall
  • vue2 二次封装el-tooltip
  • 基于STC12C5A60S2单片机的LED汉字显示系统的设计
  • HTML5中`<span>`标签深入解析