Mayavi задумал объемный рендеринг багги графический интерфейс

Я думаю, что обнаружил настоящую ошибку. Похоже, что с интерфейсом функции переноса цвета (CTF) происходит что-то очень странное и определенно не интуитивное.

Я опишу здесь то, что я показал в фильме, по следующей ссылке (5 МБ): https://drive.google.com/file/d/0B2DsQIFbCQmELTZzWVc1MDc1MGM/view?usp=sharing

Действие: mlab.pipeline.volume (что угодно). Неважно, как создается объемный рендеринг. Результат: источник громкости отображается красным цветом. Отлично.

Действие: пользователь просто нажимает на функцию передачи объема, не меняя ее сильно. Вы даже можете переместить его туда, где он был. Результат: объемный источник полностью меняет цвет с красного на зеленый: предложение CTF в окне «конвейер Mayavi» отличается от того, которое изначально использовалось в «Mayavi Scene 1».

Действие: Пользователь, щелкнув хотя бы один раз по функции передачи непрозрачности, щелкает прочь. Затем пользователь щелкает обратно. Результат: CTF полностью изменится на этот сине-красный переход вместо этого красивого трехцветного стиля ранее. Если пользователь еще раз испортит OTF, update CTF снова изменит громкость! от этого зеленого цвета к этому красно-пурпурному.

Примечание. Это странное изменение в CTF вызывает не просто "щелчок" и "щелчок назад". Первоначально я столкнулся с этой проблемой при смене источников данных. Я сказал 5 разностных объемов. Всякий раз, когда я говорил «array_src.scalar_values ​​= my_volumes.next ()», CTF менял бы цвет с rgb на сине-красный, если и только если бы я попытался вручную изменить ctf в графическом интерфейсе.

Я действительно надеюсь, что мы сможем решить эту проблему.

Спасибо, Крис Снайдер


person user3391229    schedule 19.08.2015    source источник


Ответы (1)


У меня есть обходной путь. Дело здесь в том, что когда вы переключаете данные на объемную визуализацию, ctf и otf остаются на своих местах вместо странного масштабирования и изменения цвета. Решение двоякое.

1) Убедитесь, что все объемы данных масштабированы до точно 0–255. Вы должны убедиться, что наименьшее и наибольшее значения равны 0 и 255 соответственно, а не только в диапазоне [0,255]. Это важно, потому что под капотом mayavi пытается изменить масштаб диапазонов ctf / otf в соответствии с вашими данными, когда вы выключаете array.scalar_data. Однако странным образом это не удается.

2) Вместо того, чтобы работать со встроенным редактором из SceneEditor (MayaviScene), выставьте непосредственно свойство Volume.view, связанное с вашими данными. Изменения в этом редакторе ctf / otf не переключают громкость из сине-зеленого-красного режима на это сине-красное затухание при изменении базовых данных. Вот как это сделать: (Критическая строка - Item ('vol_module', style = 'custom', show_label = False)

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()
person user3391229    schedule 25.08.2015