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()
相关推荐
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋3 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢5 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚6 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机6 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_7 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰7 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境7 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python
用户298698530148 小时前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
hhcgchpspk8 小时前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬