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()
相关推荐
我的xiaodoujiao3 分钟前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_4080996724 分钟前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing1 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉2 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀2 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
你驴我3 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
AC赳赳老秦5 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
huangdong_5 小时前
电商图片下载工具横向对比深度评测:固乔、FATKUN、图快、当图、淘蛙、存图宝七款工具全面解析
python
满怀冰雪5 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle
cui_ruicheng5 小时前
Python从入门到实战(十五):文件操作与目录管理
开发语言·python