一:主要的知识点
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()