Vol 建一个 3D 隐式函数体积数据

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①创建一个vtkStructuredPoints数据并进行渲染展示

二:代码及注释

python 复制代码
import vtkmodules.vtkRenderingOpenGL2
import vtkmodules.vtkInteractionStyle
from vtkmodules.vtkCommonDataModel import vtkStructuredPoints
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkDoubleArray
from vtkmodules.vtkFiltersCore import vtkContourFilter
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)


def main():
    colors = vtkNamedColors()

    """
    vtkStructuredPoints 是 VTK 中最基础、最经典的规则体数据结构之一。在体数据(volume data)处理、医学影像(CT、MRI)、流场分析中用得非常多。
    它和 vtkImageData 非常接近(后者是它的现代替代版本)。常用于医学图像,距离场、密度场,三维纹理数据
    基本定义:
    vtkStructuredPoints 表示一个**在三维空间中均匀分布(uniform spacing)**的点阵数据。
    也就是说:网格点是规则排列的;每个点在空间中的位置是通过原点 + 坐标间距计算出来的;
    每个点都可以有标量(scalar)、向量(vector)等数据。
    它是一个"结构化、规则间距的点网格","非结构化"网格(如 vtkUnstructuredGrid)不同
    数据组织方式:
    属性             | 含义                       |
    Dimensions | 网格点的数量,例如 `(nx, ny, nz)` |
    Origin     | 起始点(左下角/原点坐标)            |
    Spacing    | 各轴方向的网格间距 `(dx, dy, dz)` |
    """
    vol = vtkStructuredPoints()
    vol.SetOrigin(-0.5, -0.5, -0.5)
    vol.SetDimensions(26, 26, 26)
    sp = 1.0 / 25.0
    vol.SetSpacing(sp, sp, sp)

    scalars = vtkDoubleArray()
    scalars.SetNumberOfComponents(1)
    scalars.SetNumberOfTuples(26 * 26 * 26)
    for k in range(0, 26):
        z = -0.5 + k * sp
        kOffset = k * 26 * 26
        for j in range(0, 26):
            y = -0.5 + j * sp
            jOffset = j * 26
            for i in range(0, 26):
                x = -0.5 + i * sp
                s = x * x + y * y + z * z - (0.4 * 0.4)
                offset = i + jOffset + kOffset
                scalars.InsertTuple1(offset, s) # offset 索引, s具体的标量值
                # scalars.InsertNextTuple1(s)  # 等价替代
    vol.GetPointData().SetScalars(scalars)

    # 等值面提取
    contour = vtkContourFilter()
    contour.SetInputData(vol)
    contour.SetValue(0, 0.0)


    volMapper = vtkPolyDataMapper()
    volMapper.SetInputConnection(contour.GetOutputPort())
    volMapper.ScalarVisibilityOff()
    volActor = vtkActor()
    volActor.SetMapper(volMapper)
    volActor.GetProperty().EdgeVisibilityOn()
    volActor.GetProperty().SetColor(colors.GetColor3d('Salmon'))
    renderer = vtkRenderer()
    renWin = vtkRenderWindow()
    renWin.AddRenderer(renderer)
    iren = vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    renderer.AddActor(volActor)
    renderer.SetBackground(colors.GetColor3d('SlateGray'))
    renWin.SetSize(512, 512)
    renWin.SetWindowName('Vol')

    # Interact with the data.
    renWin.Render()

    iren.Start()

if __name__ == '__main__':
    main()
相关推荐
庚昀◟1 分钟前
ClaudeCode安装教程,基础使用、进阶推荐
人工智能·python·ai
deephub12 分钟前
告别脆弱的单体应用,用多智能体网络构建稳定的生产力工具
人工智能·python·大语言模型·多智能体
烟雨江南aabb14 分钟前
Python第六弹:python爬虫篇:什么是爬虫
开发语言·爬虫·python
MomentYY18 分钟前
第 1 篇:Agent 到底是什么?别被概念唬住了
人工智能·python·agent
Python大数据分析@25 分钟前
对你而言, Vibe Coding 的乐趣是什么?
python
WL_Aurora25 分钟前
Python 算法基础篇之排序算法(一):冒泡、选择、插入
python·算法·排序算法
龙腾AI白云26 分钟前
中国人工智能培训网—AI系列录播课
python·beautifulsoup
AI算法沐枫28 分钟前
大一学生如何入门机器学习,深度学习,学习顺序如何?
人工智能·python·深度学习·学习·线性代数·算法·机器学习
用户67570498850232 分钟前
Python 统一大业:uv 如何整合 Pip、Pyenv 和 Venv?
后端·python
SilentSamsara43 分钟前
运算符重载:让自定义对象支持 +、[]、in 操作
开发语言·python·算法·青少年编程·pycharm