Glyph2D 同一个图形根据点云的输入产生不同位置的输出

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①同时生成多个坐标的相同模型,②Glyph2D和Glyph3D的区别

二:代码及注释

python 复制代码
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonDataModel import vtkPolyData
from vtkmodules.vtkCommonCore import vtkPoints
from vtkmodules.vtkFiltersCore import vtkGlyph2D
from vtkmodules.vtkFiltersSources import vtkRegularPolygonSource
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)


def main():
    colors = vtkNamedColors()
    points = vtkPoints()
    points.InsertNextPoint(0, 0, 0)
    points.InsertNextPoint(1, 1, 0)
    points.InsertNextPoint(2, 2, 0)

    polyData = vtkPolyData()
    polyData.SetPoints(points)

    polygonSource = vtkRegularPolygonSource()

    glyph2D = vtkGlyph2D()
    """
    SetSourceConnection  设置 glyph 的形状来源,指定glyph长什么样子
    SetInputData 直接把一个 vtkDataSet(点云、polydata 等)对象作为输入传进去 常用来指定 在这些点上放置 glyph
    """
    glyph2D.SetSourceConnection(polygonSource.GetOutputPort())
    glyph2D.SetInputData(polyData)
    glyph2D.Update()

    mapper = vtkPolyDataMapper()
    mapper.SetInputConnection(glyph2D.GetOutputPort())
    mapper.Update()

    actor = vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().SetColor(colors.GetColor3d('Salmon'))

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

    renderer.AddActor(actor)
    renderer.SetBackground(colors.GetColor3d('SlateGray'))

    # style = vtkInteractorStyleImage()
    # renderWindowInteractor.SetInteractorStyle(style)

    renderWindow.SetWindowName('Glyph2D')
    renderWindow.Render()
    renderWindowInteractor.Start()

    """
    vtkGlyph2D 与vtkGlyph3D的异同
    共同点:
    需要 输入点集(glyph 的放置位置)
    都需要源几何体(source)(glyph 的形状,例如箭头、球、方块)
    都可以根据 标量或向量数据 决定缩放、旋转、方向
    
    区别:
    vtkGlyph2D  专门针对 2D 场景(平面)
    输入点的 X、Y 用来放置 glyph,Z 坐标忽略或设为 0 
    Glyph 始终渲染在 屏幕二维坐标系下,不会随 3D 透视发生旋转、深度变化,更适合用来在 2D 图里加符号
    
    vtkGlyph3D  针对 三维场景
    输入点的 (X, Y, Z) 都会用来放置 glyph, Glyph 会真正处在 3D 空间里,受相机透视、深度遮挡等影响
    支持用向量数据控制 方向(箭头指向)、标量数据控制 缩放
    """

if __name__ == '__main__':
    main()
相关推荐
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧11 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
C^h14 小时前
python函数学习
人工智能·python·机器学习
Fanta丶15 小时前
4.Python set()集合、dict(字典、映射)、 数据容器的通用功能
python
决战灬15 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
兜客互动15 小时前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_5386019715 小时前
智能体测开Day30pytest测试框架
python
MC皮蛋侠客15 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
邪神与厨二病15 小时前
牛客周赛 Round 153
python·算法
yaoxin52112316 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python