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()
相关推荐
X56611 天前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
ZhengEnCi1 天前
03ab-PyTorch安装教程 📚
python
狐狐生风1 天前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风1 天前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
老前端的功夫1 天前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin5211231 天前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai1 天前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw01 天前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据1 天前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
风之所往_1 天前
Python 3.0 新特性全面总结
python