初步了解VTK装配体

news2024/9/19 10:41:23

VTK还不太了解,根据资料,

vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。

import vtk
import math
from vtk.util.colors import *
 
filenames = ["cylinder.stl","sphere.stl","torus.stl"]
dt = 1.0
renWin = vtk.vtkRenderWindow()
actor  = list()
joint1 = vtk.vtkAssembly()  
joint2 = vtk.vtkAssembly()
joint3 = vtk.vtkAssembly()

class MyInteractor(vtk.vtkInteractorStyleTrackballCamera):
    def __init__(self,parent=None):
        self.AddObserver("CharEvent",self.OnCharEvent)
        self.AddObserver("KeyPressEvent",self.OnKeyPressEvent)

    def OnCharEvent(self,obj,event):
        pass
    
    def OnKeyPressEvent(self,obj,event):
        global angle
        key = self.GetInteractor().GetKeySym()
        if(key == "Left"):
            joint1.RotateY(-dt)      
        if(key == "Right"):
            joint1.RotateY(dt)
            
        if(key == "Up"):
            joint2.RotateY(-dt)           
        if(key == "Down"):
            joint2.RotateY(dt)
            
        if(key == "a"):
            joint3.RotateY(-dt)           
        if(key == "d"):
            joint3.RotateY(dt)

        renWin.Render()
        return
    

def LoadSTL(filename):
    reader = vtk.vtkSTLReader()
    reader.SetFileName(filename)
    mapper = vtk.vtkPolyDataMapper() 
    mapper.SetInputConnection(reader.GetOutputPort())
    actor = vtk.vtkLODActor() 
    actor.SetMapper(mapper)
    return actor  

        
def CreateScene():
    ren = vtk.vtkRenderer()
    renWin.AddRenderer(ren)
     
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)
    style = MyInteractor()
    style.SetDefaultRenderer(ren)
    iren.SetInteractorStyle(style)
    
    for id, file in enumerate(filenames):
            actor.append(LoadSTL(file))
            r = vtk.vtkMath.Random(.4, 1.0)
            g = vtk.vtkMath.Random(.4, 1.0)
            b = vtk.vtkMath.Random(.4, 1.0)
            actor[id].GetProperty().SetDiffuseColor(r, g, b)
            actor[id].GetProperty().SetDiffuse(.8)
            actor[id].GetProperty().SetSpecular(.5)
            actor[id].GetProperty().SetSpecularColor(1.0,1.0,1.0)
            actor[id].GetProperty().SetSpecularPower(30.0)

    joint1.AddPart(actor[0])
    joint1.AddPart(joint2)
    joint2.AddPart(actor[1])
    joint2.AddPart(joint3)
    joint3.AddPart(actor[2])

    joint2.SetOrigin(100, 0, 0)  # initial elbow joint position
    joint3.SetOrigin(200, 0, 0)  # initial wrist joint position

    ren.AddActor(joint1)
    ren.GradientBackgroundOn()
    ren.SetBackground(.1, .1, .1)
    ren.SetBackground2(0.8,0.8,0.8)

    renWin.SetSize(600, 600)

    iren.Initialize()
    iren.Start()
        
if __name__ == "__main__":
    CreateScene()

这是网上的代码,它可以对多个STL文件进行装配;我随便找的stl文件,先看一下初步效果;如果有正确的多个文件,就能装配自己的复杂模型,和模型动画;

开始它定义了3个变量,

joint1 = vtk.vtkAssembly()  
joint2 = vtk.vtkAssembly()
joint3 = vtk.vtkAssembly()

joint是关节的意思,定义了3个关节;

一开始出来是这样的,

打左右键三个会一起动,打上下键其中一个不动,另2个动,就变成如下;

 打a键其中一个动,另两个不动,就变为如下;

 

先了解一下装配体的概念; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++11 --- 智能指针

序言 在使用 C / C 进行编程时,许多场景都需要我们在堆上申请空间,堆内存的申请和释放都需要我们自己进行手动管理。这就存在容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题&#xf…

QML入门之创建可重用的组件(一)

我们在日常开发中都会封装一些组件以便于项目内重复利用。QML创建可重用组件一般有两种方法。 自定义Item使用Component创建自定义组件 自定义Item 以一个自定义按钮举例: import QtQuick 2.12Rectangle {id: root// 自定义属性property string btnDis: qsTr(&qu…

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速…

JavaSE-易错题集-002

1. 下面有关java基本类型的默认值和取值范围,说法错误的是? A 字节型的类型默认值是0,取值范围是-2^7—2^7-1 B boolean类型默认值是false,取值范围是true\false C 字符型类型默认是0,取值范围是-2^15 —2^15-1 D l…

iOS——retain和release底层原理

retain实现原理 retain的源码: //使用此方法等价于使用[this retain] inline id objc_object::retain() {//确保对象不是tagged pointerASSERT(!isTaggedPointer());return rootRetain(false, RRVariant::FastOrMsgSend); }ALWAYS_INLINE id objc_object::rootR…

关系代数 | 数据库SQL

文章目录 关系运算符笛卡尔积笛卡尔积应用 运算符符号含义集合运算符并∪交∩差-笛卡尔积专门的关系运算符选择σ投影π连接⋈除 关系运算符 笛卡尔积 集合运算符中,主要对笛卡尔积做解释: 在数学中,两个集合X和Y的笛卡儿积(英语…

【Linux】进程控制(一)

1. 进程创建 (一)认识fork函数 从已存在进程中创建一个新进程(新进程为子进程,而原进程为父进程) 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数…

Allegro PCB--报错

1。 走线上打孔 问题:在走线上打的Via,我通过"Assign net to Via", 给与网络。成功后。 跑Tools\Database check\ Update all DRC(including batch), Via 网络又没有了 原因& 解决方法: VIA没有和走线完全重合 换个方法&#x…

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽&a…

高精度加法,减法,乘法,除法

加法: 大整数该如何储存? 用数组储存: 把个位放在数下标为0的位置,十位放在数组下标为1的位置(也就是高位放在数组的后面) 因为这样,如果需要增加一位最高位,那我们就可以直接在…

C语言小游戏--贪吃蛇实现

C语言小游戏--贪吃蛇实现 1.游戏实现背景2.Win32 API介绍2.1什么是Win32 API2.2控制台程序(Console)2.3控制台屏幕的坐标COORD2.4GetStdHandle2.4.1函数语法2.4.2函数的使用 2.5GetConsoleCursorInfo2.5.1函数语法2.5.2函数的使用 2.6CONSOLE_CURSOR_INFO2.6.1结构体结构2.6.2结…

自制游戏手柄--电位器的使用

在前面的讨论中,我们考虑了使用陀螺仪来获取手柄的运动情况来进行瞄准, 自制实战吃鸡手柄原理-CSDN博客 也可以使用图像识别来实现,这里我们再考虑下使用电位器来获取运动状态,一个电位器可以获取到一个平面上的旋转情况&#x…

2025年25届新文出炉:如何打造Java SpringBoot Vue个性化课程推荐系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

根据NVeloDocx Word模板引擎生成Word(二)

前面讲到了根据“永久免费开放的E6低代码开发平台”的NVeloDocx Word模版引擎生成Word文件的基础取数方法,包括取本表单字段以及引用字段,详见《根据NVeloDocx Word模板引擎生成Word(一)》。 针对这种基本的取数方法,…

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。 a.定义的enu…

Ubuntu之源码编译安装nginx

参考:Ubuntu之源码编译安装nginx_ubuntu编译安装nginx-CSDN博客 1.下载源码后进入源码目录,如下: cd /home/jq/wf/nginx-1.26.1 2.下载相应依赖库: apt-get install libpcre3-dev apt-get install openssl libssl-dev apt-get…

互联网中的情绪价值

在互联网中,信息的传递和分享变得越来越便捷了,同时,「情绪价值」在虚拟世界中的作用也愈加凸显。 无论是在社交媒体、即时通讯工具、各类论坛社区以及短视频平台里,情绪价值已然成为一种无形但是至关重要的资产,在默默…

BaseCTF-[Week3] 出题人已疯-快坚持不下去的第六天

DIE 查,发现是 .NET,拖⼊ dnSpy 加密的代码 private void Btn_Submit_Click(object sender, RoutedEventArgs e) { char[] array this.Tb_Input.Text.ToCharArray(); char[] array2 string.Join("", this.sentences).ToCharArray(); for (i…

php、Java、python酒店预约与送餐系统 酒店管理系统 酒店预订入住系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

C++第四十七弹---深入理解异常机制:try, catch, throw全面解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1.C语言传统的处理错误的方式 2.C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 3.2 异常的重新抛出 3.3 异常安全 3.4 异常规范 4.自定义…