Tutorial_Step6 vtkBoxWidget的交互与控制

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①如何在ui界面操作一个立方体框,并控制大小

二:代码及注释

python 复制代码
import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkInteractionWidgets import vtkBoxWidget
from vtkmodules.vtkCommonTransforms import vtkTransform
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)

class vtkMyCallback(object):
    """
    Callback for the interaction.
    """

    def __call__(self, caller, ev):
        t = vtkTransform()
        widget = caller
        widget.GetTransform(t)
        widget.GetProp3D().SetUserTransform(t)

def main():
    colors = vtkNamedColors()

    cone = vtkConeSource()
    cone.SetHeight(3)
    cone.SetRadius(1)
    cone.SetResolution(10)

    coneMapper = vtkPolyDataMapper()
    coneMapper.SetInputConnection(cone.GetOutputPort())

    coneActor = vtkActor()
    coneActor.SetMapper(coneMapper)
    coneActor.GetProperty().SetColor(colors.GetColor3d('Bisque'))

    ren1 = vtkRenderer()
    ren1.AddActor(coneActor)
    ren1.SetBackground(colors.GetColor3d('MidnightBlue'))

    renWin = vtkRenderWindow()
    renWin.AddRenderer(ren1)
    renWin.SetSize(300, 300)
    renWin.SetWindowName('Tutorial_Step6')

    iren = vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)

    style = vtkInteractorStyleTrackballCamera()
    iren.SetInteractorStyle(style)

    """
    boxWidget 是一个交互式三维小部件,允许用户通过鼠标在场景中操作一个立方体框(box)
    """
    boxWidget = vtkBoxWidget()
    boxWidget.SetInteractor(iren)
    """
    SetProp3D 定义了控件操作的目标对象,建立了控件和实体之间的联系
    """
    boxWidget.SetProp3D(coneActor)
    """
    SetPlaceFactor  设置放置系数或缩放因子
    在 VTK 中,当调用 boxWidget.PlaceWidget() 时,控件会自动计算它所附着的对象(这里是 coneActor)的边界框(Bounding Box),并使用这个边界框来确定自身初始的大小和位置
    """
    boxWidget.SetPlaceFactor(1.25)
    boxWidget.GetOutlineProperty().SetColor(colors.GetColor3d('Gold'))
    boxWidget.PlaceWidget() # 初始化和确定空间在3D空间的初始位置、大小和方向

    callback = vtkMyCallback()
    boxWidget.AddObserver('InteractionEvent', callback)

    boxWidget.On()  # 激活交互式控件,使其在渲染窗口中可见并开始响应用户的鼠标和键盘输入
    iren.Initialize()
    iren.Start()


if __name__ == '__main__':
    main()
相关推荐
骑士雄师16 小时前
课程导航LangGraph核心概念
python
SilentSamsara16 小时前
DuckDB + Python:嵌入式 OLAP 数据库的轻量分析实战
开发语言·数据库·python·微服务
爱上纯净的蓝天16 小时前
30 分钟上手 AtomCode:用它写一个 Python 批量整理文件/改名/生成报告小工具(新手教程)
python·开源·自动化脚本·atomcode·ai 编码助手
郝学胜-神的一滴16 小时前
力扣 662 :二叉树最大宽度
java·数据结构·c++·python·算法·leetcode·职场和发展
2301_7644413316 小时前
基于Stackelberg博弈的分散式库存模型
python·算法·数学建模
是Dream呀16 小时前
通道注意力机制|Channel Attention Neural Network
人工智能·python·深度学习
yaoxin52112316 小时前
430. Java 日期时间 API - 时间计算 Temporal 包
java·前端·python
RSTJ_162516 小时前
PYTHON+AI LLM DAY SEVENTY
人工智能·python·深度学习
财经资讯数据_灵砚智能16 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月8日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
m沐沐16 小时前
数据集的六种填充方法——下(使用众数填充+使用逻辑回归填充+使用随机森林填充)
python·随机森林·机器学习·pycharm·逻辑回归