我试图在mayavi中的两个不同场景中同时绘制两个图像平面小部件。但是这两架飞机都显示在第一个场景中。有人知道如何解决这个问题吗?
以下是我的代码示例:
import numpy as np
from mayavi import mlab
from mayavi.mlab import axes, outline
from traitsui.api import View, Item, Group, HGroup
from mayavi.core.pipeline_base import PipelineBase
from mayavi.core.ui.api import MayaviScene, SceneEditor, MlabSceneModel
class myclass():
p='somedata[20][20][20]' #I can't give you the data here because it's too big
scene = Instance(MlabSceneModel, ())
sx = Instance(MlabSceneModel, ())
plot = Instance(PipelineBase)
def function(self):
self.src = mlab.pipeline.scalar_field(self.p)
self.plot2 = self.scene.mlab.pipeline.image_plane_widget(self.src,
plane_orientation='x_axes',
slice_index=0,
#vmin=0, vmax=140,
colormap='hot')
self.sx.scene.parallel_projection = True
side_src = self.plot.ipw._get_reslice_output() #gets the data for the 2d planes
self.ipw = self.sx.mlab.pipeline.image_plane_widget( #creates the 2d views
side_src,
plane_orientation='z_axes',
#vmin=self.data.min(),
#vmax=self.data.max(),
#figure=self.sx.mayavi_scene,
name='Cut view X',
colormap='hot',
)
mlab.colorbar(title='Wert', orientation='vertical', nb_labels=5, label_fmt='%.3f') #adds a colorbar at the left side of the screen
mlab.view(azimuth=50,elevation=50,distance=80,focalpoint=(10,15,10)) #defines the starting view of the camera
mlab.roll(110)
self.scene.scene_editor.background = (0, 0, 0)
view = View(HGroup(Item('scene', editor=SceneEditor(scene_class=MayaviScene),
height=400, width=500, show_label=False),
Item('sx',editor=SceneEditor(scene_class=MayaviScene),
height=400, width=500, show_label=False),),
resizable=True,
)
myclass()
我无法在网络上找到解决方案,有多个场景的示例,但我无法弄清楚为什么它在那里工作而不是在我的代码中。任何帮助都会很好。
当我尝试使用figure
中的image_plane_widget
kwarg时,就像这样
self.plot = mlab.pipeline.image_plane_widget(self.src,
plane_orientation='x_axes',
slice_index=0,
#vmin=0, vmax=140,
figure=self.sx,
colormap='hot')
它返回以下错误:
TraitError:'数字' ImagePlaneWidgetFactory实例的特征 必须是场景或无,但值为 被指定了。
答案 0 :(得分:0)
要指定管道中定向的场景,请调用@Bean
kwarg和类似内容,例如RequestMappingHandlerMapping
。否则,如果未指定figure
,则管道调用将转到mlab.pipeline.image_plane_widget(*args, figure=self.scene)
,这通常是最后创建的数字。