WarpTo 对 3D 几何体进行形变(Warping操作,使其顶点朝着一个指定的空间点移动

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①几何模型的变形vtkWarpTo

二:代码及注释

python 复制代码
import vtkmodules.vtkRenderingOpenGL2
import vtkmodules.vtkInteractionStyle
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersCore import vtkTubeFilter
from vtkmodules.vtkFiltersSources import vtkLineSource
from vtkmodules.vtkFiltersGeneral import vtkWarpTo
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkDataSetMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)

def main():
    colors = vtkNamedColors()

    lineSource = vtkLineSource()
    lineSource.SetPoint1(0, 0, 0)
    lineSource.SetPoint2(0, 1, 0)
    lineSource.SetResolution(20)
    lineSource.Update()

    tubeFilter = vtkTubeFilter()
    tubeFilter.SetInputConnection(lineSource.GetOutputPort())
    tubeFilter.SetRadius(0.01)  # 设置生成的圆柱体/管子的横截面半径是0.01个单位长度
    tubeFilter.SetNumberOfSides(50)
    tubeFilter.Update()

    """
    vtkWarpTo  是vtk中一个几何变换的过滤器
    它可以把输入的点云或模型**"拉向"一个指定的点或方向**,相当于对整个几何体做收缩、伸展或弯曲形变
    它可以模拟一种"磁性吸引"或"拉伸到目标点"的效果
    主要有两种模式:
    ①它可以模拟一种"磁性吸引"或"拉伸到目标点"的效果
    ②沿着指定方向移动(DirectionMode)
    """
    warpTo = vtkWarpTo()
    warpTo.SetInputConnection(tubeFilter.GetOutputPort())
    warpTo.SetPosition(10, 1, 0)  # 指定"目标点"的坐标(即你要拉向的点)
    warpTo.SetScaleFactor(5)  # 设置形变强度,值越大,拉得越"狠"
    warpTo.AbsoluteOn()  # 位移相对于数据集的原点进行,所有的点都会向同一个方向偏移
    #warpTo.AbsoluteOff()  # 位移相对于该点的当前位置进行计算,会导致每个点偏移到不同的方向

    mapper = vtkDataSetMapper()
    mapper.SetInputConnection(warpTo.GetOutputPort())
    mapper.ScalarVisibilityOff()

    actor = vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().SetColor(colors.GetColor3d('Gold'))
    renderer = vtkRenderer()
    renderWindow = vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    renderer.SetBackground(colors.GetColor3d('Green'))
    renderer.AddActor(actor)

    renderWindow.SetWindowName('WarpTo')
    renderWindow.Render()

    renderWindowInteractor.Initialize()
    renderWindowInteractor.Start()

if __name__ == '__main__':
    main()
相关推荐
小白学大数据31 分钟前
深度探索:Python 爬虫实现豆瓣音乐全站采集
开发语言·爬虫·python·数据分析
用户67570498850232 分钟前
Celery 太重了?这可能是你一直在找的 asyncio 任务队列
后端·python·消息队列
Cloud_Shy61833 分钟前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十一章 Python 包跟踪器 下篇)
前端·后端·python·数据分析·excel
程序员榴莲34 分钟前
网络编程入门 Python Socket 实现一个简单的用户认证系统
服务器·网络·python
知识分享小能手43 分钟前
Flask入门学习教程,从入门到精通, 认识Flask路由 — 知识点详解 (2)
python·学习·flask
AI棒棒牛43 分钟前
YOLO26改进创新 | 全网首发!VECA弹性核心注意力重塑全局建模,线性复杂度增强检测骨干,嘎嘎创新!
python·yolo·目标检测·yolo26·主干改进
DFT计算杂谈1 小时前
VASP新手入门: IVDW 色散修正参数
linux·运维·服务器·python·算法
庚昀◟1 小时前
ClaudeCode安装教程,基础使用、进阶推荐
人工智能·python·ai
deephub1 小时前
告别脆弱的单体应用,用多智能体网络构建稳定的生产力工具
人工智能·python·大语言模型·多智能体
烟雨江南aabb1 小时前
Python第六弹:python爬虫篇:什么是爬虫
开发语言·爬虫·python