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()
相关推荐
xsc6996751 分钟前
从零搭建大模型与智能体平台 - 完整技术详解
python
无风听海1 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
charlie1145141912 小时前
通用GUI编程技术——图形渲染实战(四十八)——Owner-Draw控件:让标准控件焕然一新
图形渲染
CTA终结者2 小时前
期货量化主力换月程序怎么移仓:天勤 underlying_symbol 与任务切换
python·区块链
马士兵教育2 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
KaMeidebaby2 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
天佑木枫3 小时前
15天Python入门系列 · 序
开发语言·python
happylifetree3 小时前
Python017-第二章15.数据容器-dict常用操作
python
装不满的克莱因瓶3 小时前
了解 LangChain 中的 LLM 与 ChatModel 的差异
人工智能·python·ai·langchain·llm·agent·chatmodel