TVTK数据集和数据加载

版权声明:学习时的觉得有必要记录下来的知识点,与君共勉 https://blog.csdn.net/sinat_27421407/article/details/78885323

Python科学计算三维可视化
黄天羽嵩天


数据集(Data Set)

  • 点(Point)和数据(Data)
  • 点之间:连接 vs 非连接
  • 多个相关的点组成单元(Cell)
  • 点的连接:显式 vs 隐式
  • 数据:标量(Scalar)vs 矢量(Vector)

Imagedata

  • 二维或三维图像的数据结构
    imagedata

  • 简单理解为二维或三维数组

  • 点之间的距离由数组中的间隔决定

  • from tvtk.api import tvtk
    
    img = tvtk.ImageData(spacing=(1,1,1), origin=(0,0,0), dimensions=(2,3,4))
    '''
    spacing 三维网格数据在X、 Y、 Z轴上的间距
    origin 三维网格数据的起点坐标
    dimensions 在X、 Y、 Z轴上的网格数
    '''
    
    for i in range(9):
      print('%d, %d, %d' %img.get_point(i))
  • 输出结果
    result

RectilinearGrid

  • 间距不均匀的网格,所有点都在正交的网格上
    RectilinearGrid

  • from tvtk.api import tvtk
    import numpy as np
    
    x = np.array([0, 3, 9, 15])
    y = np.array([0, 1, 5])
    z = np.array([0, 2, 3])     #表示交点
    r = tvtk.RectilinearGrid()
    r.x_coordinates = x
    r.y_coordinates = y
    r.z_coordinates = z
    r.dimensions = len(x), len(y), len(z)
    
    for i in range(6):
      print('%d, %d, %d' %r.get_point(i))
  • 输出结果
    result

StructuredGrid

  • 创建任意形状的网格,需要指定点的坐标
    StructuredGrid
  • 需要对 points、dimensions、point_data.scalars 等属性进行初始化

Polydata

  • 由一系列的点、点之间的联系以及由点构成的多边形组成
  • 一般不用直接给出点的坐标的方法来创建

UnstructuredGrid

TVTK数据加载

TVTK模型读取

三种文件

  • s=tvtk.STLReader(file_name = “stl文件名”)

  • from tvtk.api import tvtk
    from tvtkfunc import ivtk_scene, event_loop
    
    s = tvtk.STLReader(file_name="python.stl")
    m = tvtk.PolyDataMapper(input_connection=s.output_port)
    a = tvtk.Actor(mapper=m)
    
    win = ivtk_scene(a)
    win.scene.isometric_view()
    event_loop()
  • 结果图
    python

TVTK MultiBlock数据读取

  • Plot3D 文件

    • 网格 (XYZ 文件)
    • 空气动力学结果 (Q 文件)
    • 通用结果
  • from tvtk.api import tvtk
    
    def read_data():  # 读入数据
      plot3d = tvtk.MultiBlockPLOT3DReader(
          xyz_file_name = "combxyz.bin",  # 网格文件
          q_file_name = "combq.bin",  # 空气动力学结果文件
          scalar_function_number = 100,  # 设置标量数据数量
          vector_function_number = 200  # 设置矢量数据数量
      )
      plot3d.update()
      return plot3d
    
    plot3d = read_data()
    grid = plot3d.output.get_block(0)
    
    print(type(plot3d.output))
    print(type(grid))
    print(grid.dimensions)
    print(grid.points.to_array())
    print(grid.point_data.number_of_arrays)
  • 输出结果
    result

展开阅读全文

没有更多推荐了,返回首页