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()
相关推荐
兔子小灰灰2 小时前
jetson安装pytorch
人工智能·pytorch·python
Swizard3 小时前
拒绝“裸奔”上线:FastAPI + Pytest 自动化测试实战指南
python
Ven%4 小时前
从单轮问答到连贯对话:RAG多轮对话技术详解
人工智能·python·深度学习·神经网络·算法
谈笑也风生4 小时前
经典算法题型之复数乘法(二)
开发语言·python·算法
先知后行。5 小时前
python的类
开发语言·python
dyxal5 小时前
Python包导入终极指南:子文件如何成功调用父目录模块
开发语言·python
nnerddboy5 小时前
解决传统特征波段选择的不可解释性:2. SHAP和LIME
python·机器学习
电商API&Tina5 小时前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
weixin_421585015 小时前
解释代码:val_pred = vxm_model.predict(val_input)--与tensor对比
python