当前位置: 首页 > news >正文

初步了解VTK装配体

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):passdef OnKeyPressEvent(self,obj,event):global anglekey = 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()returndef 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 positionjoint3.SetOrigin(200, 0, 0)  # initial wrist joint positionren.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.mrgr.cn/news/21863.html

相关文章:

  • c语言 #define 详解
  • c++ 链表详细介绍
  • Java | Leetcode Java题解之第391题完美矩形
  • 华为-2017-测试工程师笔试试卷
  • Linux网络测试和故障排查命令
  • World of Warcraft [Warrior Freeblue][Hunter Grandel]
  • C# System.Linq提供类似SQL语法的高效查询操作
  • MySQL面试题大全和详解,含SQL例子
  • RISC-V (十二)系统调用
  • [Git使用] 实战技巧
  • C++ | Leetcode C++题解之第392题判断子序列
  • 模具要不要建设3D打印中心
  • C语言 | Leetcode C语言题解之第391题完美矩形
  • windows版本mysql8.2忘记密码
  • C/C++ 网络聊天室在线聊天系统(整理重传)
  • PromQL 语法
  • UML的图及其他图补充
  • App Store最低版本要求汇总
  • Nacos Config 配置中心支持配置共享
  • 代码编译过程详细解释