vtkPlaneSource()感悟

VTK , Notes 220 字 64 阅

vtk中绘制平面,需要用到vtkPlaneSource(),vtkPlane只能用于切割或者计算,准确来说算是个平面函数,画图有感。


截屏2021-04-29 下午4.20.15
截屏2021-04-29 下午4.20.15

import vtk
import math
colors = vtk.vtkNamedColors()

old_origin = [10, 10, 10]
old_normal = [3, 4, 5]
old_center = [3, 4, 5]

# 平面01,利用方法一
plane01 = vtk.vtkPlaneSource()
plane01.SetNormal(old_normal)
plane01.SetCenter(old_center)

# 平面02,利用方法二
plane02 = vtk.vtkPlaneSource()
plane02.SetOrigin(old_origin)
plane02.SetPoint1(0, 5, 0)
plane02.SetPoint2(5, 0, 0)

plane01Mapper = vtk.vtkPolyDataMapper()
plane01Mapper.SetInputConnection(plane01.GetOutputPort())
plane01Actor = vtk.vtkActor()
plane01Actor.SetMapper(plane01Mapper)
plane01Actor.GetProperty().SetColor(colors.GetColor3d('Gold'))

plane02Mapper = vtk.vtkPolyDataMapper()
plane02Mapper.SetInputConnection(plane02.GetOutputPort())
plane02Actor = vtk.vtkActor()
plane02Actor.SetMapper(plane02Mapper)
plane02Actor.GetProperty().SetColor(colors.GetColor3d('Blue'))

#三维坐标轴
axes = vtk.vtkAxesActor()
axes.SetTotalLength(10, 10, 10)
axes.SetShaftType(0)
axes.SetAxisLabels(0)
axes.SetCylinderRadius(0.02)

#create renderers and add actors of plane and cube
ren = vtk.vtkRenderer()
ren.AddActor(plane01Actor)
ren.AddActor(plane02Actor)
ren.AddActor(axes)

#Add renderer to renderwindow and render
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetSize(600, 600)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
style = vtk.vtkInteractorStyleTrackballCamera()
style.SetDefaultRenderer(ren)
iren.SetInteractorStyle(style)
iren.Initialize()
ren.SetBackground(0, 0, 0)
renWin.Render()
iren.Start()

plane有两种绘制方式:
1、SetNormal()、SetCenter(),分别设置法向量以及中心点,优点是方便控制,参数简单,缺点是平面面积大小、以及边界难以控制(配合push()函数控制平移),画出来的平面只能为单位面积。(图中金色平面)

2、SetOrigin() SetPoint1() 和SetPoint2()确定不在一条直线上的三个点,决定一个四边形平面,画图中要注意,主视图方向(蓝色坐标轴)为Z,右手放心(红色)为X,纵向(浅绿色)为Y。三点画面,画出矩形。优点是可控参数,大小以及位置,缺点是参数难以控制,需要提前计算。

- THE END -
打赏 0 分享
评论 ( 1 )
OωO
  1. 山卜方

    11236548开机

    5月4日 回复
感谢打赏
    • 最亲的人 - 岳云鹏
    • 小镇英雄青年 - 王贰浪
    • 纸短情长 - 王贰浪
    • 南京 - 李小糖
    • 我的姑娘 她在远方 - 隔壁老樊