Render.ru

Восстановить материал после отключения Display Filter

Владислав Бодюл

Активный участник
Рейтинг
13
#1
Речь идёт об этой менюшке:

Когда отключаю фильтр, объект появляется без материала во вьюпорте, но рендере всё ок. Восстановить материал можно только кликнув два раза на чекбокс Geometry.

Вот пример кода который создаёт фильтр скрывающий объекты типа Plane, и плоскость серого цвета с красным материалом. Затем включает и выключает фильтр.
В 2012 максе всё ок, плоскость остаётся красная, а в 2018 и 19 - серая.

Код:
fn setDisplayFilterByName name state =
(
    for i = 1 to getNumberDisplayFilters() do
    (
        if (getDisplayFilterName i) == name then
            setDisplayFilter i state
    )
)

fn displayFilterCallback n =
    return isKindOf n Plane;

registerDisplayFilterCallback displayFilterCallback "Plane"

-------------------------------

delete geometry

plane wirecolor:gray material:(standard diffusecolor:red)

setDisplayFilterByName "Plane" true
max views redraw
setDisplayFilterByName "Plane" false
Для восстановления материала использую такой костыль, но он кажется иногда вызывает падение макса.
Код:
fn updateMaterialDisplay =
(
    for i = 1 to 2 do
    (
         hidebycategory.geometry = not hidebycategory.geometry
         hidebycategory.shapes = not hidebycategory.shapes
         hidebycategory.particles = not hidebycategory.particles
     )
)
Есть ли другой способ вернуть материал?
 
Последнее редактирование:

Владислав Бодюл

Активный участник
Рейтинг
13
#2
Похоже нашёл решение. Думаю вопрос закрыт.
Код:
(
    local REFMSG_NODE_DISPLAY_PROP_CHANGED = 0x00000241

    for i in objects where not i.ishiddenInVpt do
        notifyDependents i partID:#display msg:REFMSG_NODE_DISPLAY_PROP_CHANGED
)
Кому интересно, этот код можно выполнять в коллбэке #customDisplayFilterChanged, и он будет восстанавливать материал при каждом переключении фильтров.
 
Сверху