我玩了一些Mayavi
,尤其是玩了一些,tvtk
但我很难找到字形以与默认方向不同的方向放置在场景中的示例。
基于这个例子,我用两个圆柱体准备了以下场景,一个红色和一个蓝色,
import mayavi.mlab as mlab
from tvtk.api import tvtk
from tvtk.common import configure_input_data
v = mlab.figure()
# Create two cyllinders
cyl1 = tvtk.CylinderSource(center=(0, 0, 0), radius=1.0, height=0.5, capping=True, resolution=24)
cyl2 = tvtk.CylinderSource(center=(3, 0, 0), radius=1.0, height=0.5, capping=True, resolution=24)
# The mapper converts them into position in 3D
cylinder_mapper1 = tvtk.PolyDataMapper()
configure_input_data(cylinder_mapper1, cyl1.output)
cyl1.update()
cylinder_mapper2 = tvtk.PolyDataMapper()
configure_input_data(cylinder_mapper2, cyl2.output)
cyl2.update()
# Assign them differrent colors
p1 = tvtk.Property(opacity=1.0, color=(1, 0, 0))
p2 = tvtk.Property(opacity=1.0, color=(0, 0, 1))
# The actor is the actually object in the scene.
cyl1_actor = tvtk.Actor(mapper=cylinder_mapper1, property=p1)
v.scene.add_actor(cyl1_actor)
cyl2_actor = tvtk.Actor(mapper=cylinder_mapper2, property=p2)
v.scene.add_actor(cyl2_actor)
# Choose a view angle, and display the figure
mlab.view(90, 45, 7.5, [1.5, 0, 0])
mlab.savefig(filename='cylinders.png')
我在这里想要实现的是改变其中一个的方向。只要我能以某种方式独立旋转字形(而不仅仅是旋转整个场景),要么通过提供旋转矩阵,要么通过调用方法,都无关紧要。
上面的例子呈现
关于之前提出的其他问题,这个问题似乎很有用,但不是旋转演员,而是围绕 Y 轴旋转整个场景。scipy-cookbook中也有一个示例,但同样 - 仅具有默认方向。
tvtk 文档中的示例并不丰富,几乎很难相信没有涉及替代方向的示例。该文档仅说明类和方法与遵循某些约定的 C++ 对应项相对应。
- tvtk 类名本质上类似于 VTK 类,只是前面没有烦人的“vtk”。唯一的困难是以数字开头的课程。例如,“vtk3DSImporter”变为“3DSImporter”。这在 Python 中是非法的,因此使用的类名是“ThreeDSImporter”。因此,如果第一个字符是数字,则将其替换为等效的非数字字符串。像这样的课程很少,所以这没什么大不了的。
- tvtk 方法名称是经过深思熟虑的样式名称,而不是 CamelCase。也就是说,如果一个 VTK 方法被称为 AddItem,则等效的 tvtk 名称是 add_item。这样做是为了与 enthought 包中使用的名称保持一致。
- 许多 VTK 方法被方便的属性所取代。在上面的示例中,我们使用了 m.input = cs.output 和 p.representation = 'w' 而不是 m.SetInput(cs.GetOutput()) 和 p.SetRepresentationToWireframe() 等。其中一些属性是真正的特质。
- 与 VTK 对象不同,可以在初始化对象时设置 tvtk 对象的属性,方法是在类实例化时将对象的属性(特征)作为关键字参数传递。例如 cs = tvtk.ConeSource(radius=0.1, height=0.5)。
也许在 C++ 中广泛使用 VTK 的人会发现这很有用,但对我来说不是很有帮助。尽管如此,我还是尝试查找 VTK C++ 文档,它确实给了我一些线索。vtkActor类确实从vtkProp3D和vtkProp继承了一些类型。vtkProp3D
似乎确实承认与场景中面向对象相关的方法和属性,但我不清楚如何设置它们。该tvtk
库只是 C++ 之上的一个包装器,这使得不可能只inspect
接受哪些属性。
我认为为了互联网,也许我们应该准备一个合适的例子来渲染场景,Mayavi
并且tvtk
承认演员的位置和他们的方向。大多数示例忽略方向并使用球体,因此方向似乎无关紧要。
让我们总结一下。
- 如果有人提供指向使用 Mayavi 渲染场景的正确示例的链接,并且
tvtk
涉及具有不同位置和方向的多个字形,我将接受这样的答案。 - 为 (1) 制作一个自定义示例也将被接受。
- 也许有人还可以评论一下字形的位置和在场景中映射这个字形的演员之间的差异。正如您在创建时的示例中看到的那样,
CylinderSource
我明确指定了中心的位置。这很令人困惑,因为它应该是决定场景中字形位置的演员中心。
非常感谢!