Я следую сценарию, указанному на официальном сайте mayaVI (Пример нескольких моделей сцен mlab) и хотел бы использовать команду sync_camera
для синхронизации двух фигур вместе в графическом интерфейсе qt (как показано), чтобы любое вращение/масштабирование и т. д. на одной фигуре автоматически поворачивало/масштабировало и т. д. другую в точно таким же образом, в то же время.
Команда sync_camera
кратко описана на другой официальной странице mayaVI Функции обработки рисунков, но мне не удалось найти много информации о его правильном использовании для успешного использования в иерархии классов.
Есть ли у кого-нибудь опыт этой процедуры или совет?
import numpy as np
from traits.api import HasTraits, Instance, Button, \
on_trait_change
from traitsui.api import View, Item, HSplit, Group
from mayavi import mlab
from mayavi.core.ui.api import MlabSceneModel, SceneEditor
class MyDialog(HasTraits):
scene1 = Instance(MlabSceneModel, ())
scene2 = Instance(MlabSceneModel, ())
button1 = Button('Redraw')
button2 = Button('Redraw')
@on_trait_change('button1')
def redraw_scene1(self):
self.redraw_scene(self.scene1)
@on_trait_change('button2')
def redraw_scene2(self):
self.redraw_scene(self.scene2)
def redraw_scene(self, scene):
# Notice how each mlab call points explicitely to the figure it
# applies to.
mlab.clf(figure=scene.mayavi_scene)
x, y, z, s = np.random.random((4, 100))
mlab.points3d(x, y, z, s, figure=scene.mayavi_scene)
# The layout of the dialog created
view = View(HSplit(
Group(
Item('scene1',
editor=SceneEditor(), height=250,
width=300),
'button1',
show_labels=False,
),
Group(
Item('scene2',
editor=SceneEditor(), height=250,
width=300, show_label=False),
'button2',
show_labels=False,
),
),
resizable=True,
)
m = MyDialog()
m.configure_traits()