如何使用Python中的Mayavi在tvtk渲染场景中旋转演员?

如何使用Python中的Mayavi在tvtk渲染场景中旋转演员?,python,vtk,mayavi,mayavi.mlab,Python,Vtk,Mayavi,Mayavi.mlab,我玩了一点Mayavi,尤其是tvtk,但我很难找到一些示例,其中glyph放置在场景中的方向与默认方向不同 在此基础上,我准备了两个赛林德,一个红色,一个蓝色 将mayavi.mlab导入为mlab 从tvtk.api导入tvtk 从tvtk.common导入配置输入数据 v=mlab.图() #创建两个圆柱体 cyl1=tvtk.CylinderSource(中心=(0,0,0),半径=1.0,高度=0.5,封顶=True,分辨率=24) cyl2=tvtk.CylinderSource(中

我玩了一点
Mayavi
,尤其是
tvtk
,但我很难找到一些示例,其中glyph放置在场景中的方向与默认方向不同

在此基础上,我准备了两个赛林德,一个红色,一个蓝色

将mayavi.mlab导入为mlab
从tvtk.api导入tvtk
从tvtk.common导入配置输入数据
v=mlab.图()
#创建两个圆柱体
cyl1=tvtk.CylinderSource(中心=(0,0,0),半径=1.0,高度=0.5,封顶=True,分辨率=24)
cyl2=tvtk.CylinderSource(中心=(3,0,0),半径=1.0,高度=0.5,封顶=真,分辨率=24)
#映射器将它们转换为三维位置
圆柱体_映射器1=tvtk.PolyDataMapper()
配置输入数据(气缸映射器1,气缸1.输出)
cyl1.update()
圆柱体映射器2=tvtk.PolyDataMapper()
配置输入数据(气缸映射器2,气缸2.输出)
cyl2.update()
#给他们分配不同的颜色
p1=tvtk.Property(不透明度=1.0,颜色=(1,0,0))
p2=tvtk.Property(不透明度=1.0,颜色=(0,0,1))
#演员实际上是场景中的对象。
cyl1\u actor=tvtk.actor(映射器=cylinder\u映射器1,属性=p1)
v、 场景。添加演员(cyl1演员)
cyl2\u actor=tvtk.actor(映射器=cylinder\u映射器2,属性=p2)
v、 场景。添加演员(cyl2演员)
#选择视图角度,然后显示地物
视图(90,45,7.5[1.5,0,0])
mlab.savefig(filename='classicles.png')
我想在这里实现的是改变其中一个的方向。无论是通过提供旋转矩阵,还是通过调用方法,只要我能够以某种方式独立地旋转轮廓(而不仅仅是旋转整个场景),这都无关紧要

上面的示例显示

关于之前提出的其他问题,它似乎很有用,但它并没有旋转演员,而是围绕Y轴旋转整个场景。在中也有一个示例,但同样-仅使用默认方向

这个例子并不多,几乎很难相信没有一个例子涉及到交替方向。文档仅说明类和方法遵循它们的C++对应的一些约定。

  • tvtk类名称基本上与VTK类相似,只是前面没有令人讨厌的“VTK”。唯一的困难是以数字开头的类。例如,“vtk3DSImporter”变为“3DSImporter”。这在Python中是非法的,因此使用的类名是“ThreeDSImporter”。因此,如果第一个字符是数字,它将替换为等效的非数字字符串。像这样的课程很少,所以这没什么大不了的
  • tvtk方法名称是ENTHOUND样式名称,而不是CamelCase。也就是说,如果VTK方法称为AddItem,则等效的tvtk名称为add_item。这样做是为了与Enthound包中使用的名称保持一致
  • 许多VTK方法被方便的属性所取代。在上面的示例中,我们使用了m.input=cs.output和p.representation='w',而不是m.SetInput(cs.GetOutput())和p.SetRepresentationToWireframe()等。其中一些属性实际上是特性
  • 与VTK对象不同,在初始化对象时,可以通过在类实例化时将对象的属性(traits)作为关键字参数传递来设置tvtk对象的属性。例如cs=tvtk.ConeSource(半径=0.1,高度=0.5)
  • 也许有人广泛使用VTK C++可以找到有用的东西,但对我来说并不是很有用。尽管如此,我还是试图查找VTK C++文档,它确实给了我一些线索。确实从和继承了一些类型。
    vtkProp3D
    似乎允许在场景中使用与对象方向相关的方法和属性,但我不清楚如何设置它们。<代码> TVTK< /COD>库只是C++的一个包装器,它使得不可能只是<代码>检查< /C>什么属性被接受。 我认为,为了互联网的缘故,也许我们应该准备一个合适的例子,用
    Mayavi
    tvtk
    渲染一个场景,该场景同时允许演员的位置和方向。大多数示例忽略方向并使用球体,因此方向似乎不相关

    让我们总结一下

  • 如果有人提供了一个链接,指向使用Mayavi和
    tvtk
    渲染场景的适当示例,该示例涉及多个具有不同位置和方向的图示符,我将接受这样的答案
  • 为(1)制作一个自定义示例也符合要求
  • 也许有人也可以对字形的位置和在场景中映射此字形的演员之间的差异进行一些评论。正如您在创建
    CylinderSource
    的示例中所看到的,我明确指定了中心位置。这是令人困惑的,因为它应该是确定场景中轮廓位置的演员中心

  • 非常感谢

    好的,原来
    Actor
    接受
    orientation
    以度(而不是弧度)为单位的参数。此外,必须在创建角色时指定角色的位置,而不是在创建glyph时指定角色的位置

    cyl1\u actor=tvtk.actor(位置=(0,0,0),映射器=cyl\u映射器1,属性=p1,方向=(0,0,90))
    
    呈现

    我通过反复试验找到了它。。。Mayavi包中的
    tvtk
    代码非常复杂,因此,通过研究GitHub存储库来找出哪些属性是可以接受的是毫无意义的。此外,您可能会混淆没有方向属性的
    tvtk
    Actor
    。哦,实际上有一个属性名为“property”,所以尝试搜索它,并获得数千个结果,因为单词
    property
    在任何地方都被广泛使用

    编辑:

    我注意到我已经在字形中心指定了演员的位置