首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mayavi认为体积渲染buggy gui

mayavi认为体积渲染buggy gui
EN

Stack Overflow用户
提问于 2015-08-20 01:45:12
回答 1查看 306关注 0票数 0

我想我遇到了一个真正的bug。似乎在colortransferfunction(CTF)接口上发生了一些非常奇怪和不直观的事情。

我将在这里描述我在电影中展示的内容,链接如下(5MB):https://drive.google.com/file/d/0B2DsQIFbCQmELTZzWVc1MDc1MGM/view?usp=sharing

动作:mlab.pipeline.volume(随便什么)。体积渲染是如何创建的并不重要。结果:卷源显示为红色。很好。

操作:用户只需单击音量传输功能,而无需对其进行太多更改。您甚至可以将它移回原来的位置。结果:体积源完全从红色变为绿色:这表明"Mayavi pipeline“窗口中的CTF与"Mayavi Scene 1”中最初使用的CTF不同。

动作:用户在不透明度传递函数上至少点击了一次,然后点击离开。然后,用户单击back。结果: CTF完全变成了这种蓝红色的淡入淡出,而不是以前漂亮的三色风格。如果用户再次弄乱OTF,更新CTF将再次更改音量!从这个绿色变成这个红紫色。

注意:不仅仅是“点击离开”和“后退”导致了CTF中的这种奇怪的变化。我最初在更改数据源时遇到了这个问题。我说有5个不同的卷。每当我说"array_src.scalar_values=my_volumes.next()“时,如果且仅当我试图在图形用户界面中手动更改CTF时,ctf就会从rgb变为蓝红色淡出。

我真的希望我们能解决这个问题。

谢谢,克里斯·斯奈德

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 10:04:19

我有一个变通办法。这里的要点是,当您将数据切换为体绘制时,ctf和otf会留在原地,而不是进行奇怪的重新缩放和颜色更改。解决方案有两个方面。

1)确保您的所有数据量都精确扩展到0-255。您必须确保最小值和最大值分别恰好为0和255,而不仅仅是在0,255范围内。这一点很重要,因为在幕后,当您关闭array.scalar_data时,mayavi会根据您的数据重新调整ctf/otf范围。然而,它以奇怪的方式失败了。

2)不使用SceneEditor的内置编辑器(MayaviScene),而是直接公开与数据关联的Volume.view特征。对此ctf/otf编辑器的更改不会在基础数据更改时将卷从蓝-绿-红模式切换到此蓝-红淡出模式。下面是如何做的:(关键的一行是Item('vol_module',style='custom',show_label=False)

代码语言:javascript
复制
B=io.imread(bad)
G=io.imread(good)
B=B-B.min();B/=B.max();B*=255
G=G-G.min();G/=G.max();G*=255
class Vis(HasTraits):
    query=Str()
    scene     = Instance(MlabSceneModel,())    

    switch_data=Button()

    #You have to put vol_module here (or call add_trait later in init) for View() to see it
    vol_module=Instance(Volume(),())
    editor=SceneEditor(scene_class=MayaviScene)
    def __init__(self,G,B):
        self.G=G
        self.B=B
        HasTraits.__init__(self)
        self.array_src=ArraySource()
        self.array_src.scalar_data=G
        self.G_active=True
        self.scene.mayavi_scene.add_child(self.array_src)
        self.volume=self.array_src.add_module(self.vol_module)


    def _switch_data_fired(self):
        if self.G_active:
            self.array_src.scalar_data=self.B
            self.G_active=False
        else:
            self.array_src.scalar_data=self.G
            self.G_active=True

    traits_view = View( 
            HGroup(
                    Item('scene',editor=editor,height=250, width=300, show_label=False),

                    Item('vol_module',style='custom',show_label=False),#critical
                  )
                     )

vis=Vis(G,B)
#vis=Vis(B,G)
vis.configure_traits()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32102213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档