MultiBlockDataSet 复合感知与非复合感知

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①vtkExtractEdges非复合感知过滤器的含义及作用

二:代码及注释

python 复制代码
from vtkmodules.vtkCommonColor import vtkNamedColors
import vtkmodules.vtkRenderingOpenGL2
import vtkmodules.vtkInteractionStyle
from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkRenderingCore import vtkRenderer, vtkActor, vtkRenderWindow, vtkRenderWindowInteractor, \
    vtkPolyDataMapper
from vtkmodules.vtkFiltersCore import vtkExtractEdges
from vtkmodules.vtkFiltersGeometry import vtkCompositeDataGeometryFilter


def main():
    colors = vtkNamedColors()

    leaf1 = vtkSphereSource()
    leaf1.SetCenter(0, 0, 0)
    leaf1.Update()

    leaf2 = vtkSphereSource()
    leaf2.SetCenter(1.75, 2.5, 0)
    leaf2.SetRadius(1.5)
    leaf2.Update()

    leaf3 = vtkSphereSource()
    leaf3.SetCenter(4, 0, 0)
    leaf3.SetRadius(2)
    leaf3.Update()


    branch = vtkMultiBlockDataSet()
    branch.SetBlock(0, leaf1.GetOutput())
    branch.SetBlock(1, leaf2.GetOutput())

    root = vtkMultiBlockDataSet()
    root.SetBlock(0, branch)
    root.SetBlock(1, leaf3.GetOutput())

    """
    vtkExtractEdges 是一个非复合感知的过滤器
    当它接收到一个 vtkMultiBlockDataSet 作为输入时,VTK 的管道机制会自动处理:
    它会遍历 MBDS 中的每一个非空块(即 leaf1, leaf2, leaf3),
    对每个块单独执行 vtkExtractEdges(提取球体表面的所有三角形边缘),
    然后将结果组织回一个新的 vtkMultiBlockDataSet 中
    """
    edges = vtkExtractEdges()
    edges.SetInputData(root)

    """
    vtkCompositeDataGeometryFilter
    一种过滤器,专门用于复合数据集,vtk中有一种数据结构叫做Composite Data,例如vtkMultiBlockDataSet、vtkHierarchicalBoxDataSet等。这些数据集其实是容器,内部可能有多个数据块,内部可能有多个数据块(每个块可能是不同类型的数据,比如体数据、网格数据)。
    该过滤器的作用就是是遍历这些复合数据集,把里面的数据逐一提取几何(geometry),最后合并成一个vtkPolyData输出
    
    这是一个复合感知的过滤器。它的作用是遍历输入 MBDS(来自 edges 过滤器),将其中所有块的几何数据(在这里是边缘线段)聚合到一个单一的 vtkPolyData 对象中
    """
    polydata = vtkCompositeDataGeometryFilter()
    polydata.SetInputConnection(edges.GetOutputPort())

    renderer = vtkRenderer()
    renderWindow = vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    mapper = vtkPolyDataMapper()
    mapper.SetInputConnection(0, polydata.GetOutputPort(0))
    actor = vtkActor()
    actor.GetProperty().SetColor(colors.GetColor3d('Yellow'))
    actor.GetProperty().SetLineWidth(2)
    actor.SetMapper(mapper)

    # Enable user interface interactor.
    renderer.AddActor(actor)
    renderer.SetBackground(colors.GetColor3d('CornflowerBlue'))
    renderWindow.SetWindowName('MultiBlockDataSet')
    renderWindow.Render()
    renderWindowInteractor.Start()


if __name__ == '__main__':
    main()
相关推荐
尼给路达哟11 分钟前
node(koa)和python(fastapi)面试
python·面试·fastapi
曲径海盗1 小时前
【Python 学习第 32 天】字符串基础
python·学习笔记·编程入门
田里的水稻2 小时前
PyTorch_torchvision---数据集下载\TensorBoard可视化
人工智能·pytorch·python·深度学习·机器学习
程序员正茂2 小时前
Win11使用自定义训练集训练ncnn模型
python·yolo·图像识别·移动端·ncnn
zwd20052 小时前
Manim 画布尺寸与像素换算详解:frame_width、frame_height、pixel_width 和画质参数(0.21.0 实测)
python·分辨率·manim·数学动画·frame_width·manim教程
最强小杰2 小时前
Claude Opus 4.8 调用报 529 怎么办?并发限制触发过载——退避策略与降级方案完整指南
运维·网络·python·ai
databook2 小时前
MinMax vs Standard vs Robust:三种特征缩放怎么选
python·机器学习·数据分析
在世修行2 小时前
智学文枢:实体模型层
python·orm·sqlalchemy
张张123y3 小时前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
CCblandy3 小时前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构