Вы можете использовать cmds.listHistory
, чтобы получить все входные данные от объекта, затем cmds.ls
, чтобы отфильтровать результат, чтобы найти любые наборы цветов:
import maya.cmds as cmds
for obj in cmds.ls(sl=True): # Loop through the selection.
history = cmds.listHistory(obj) # Get a list of the object's history nodes, which may include a color set.
existing_color_sets = cmds.ls(history, type="createColorSet") # Filter history nodes to only color sets.
if existing_color_sets: # If a color set exists, delete it.
cmds.delete(existing_color_sets)
cmds.polyColorSet(obj, cr=True, colorSet="colorSet") # Create a new color set.
Ответ на Ваш вопрос является использованием InvalidateVisual
заставить OnRender быть названным снова
Однако я предложил бы вместо того, чтобы делать пользовательское привлечение OnRender самостоятельно для использования моделирования стандарта и визуальной шаблонной обработки дерева для создания фактического визуального из adorner. Это также означает, что можно выполнить стандартные анимации XAML в нем с раскадровками.
Если Вы хотите пойти с этим подходом, в Вашем adorner классе Вы должны:
base.AddVisualChild()
или создайте свой собственный набор зрительного ряда со зрительным рядом, который Вы хотите показать в adornerArrangeOverride(Size size)
для расположения дочерних элементов правильно;VisualChildrenCount
возвратить число детей в adorner визуальном дереве;GetCisualChild(int index)
возвратить конкретного ребенка.Можно смотреть на образец ResizingAdorner MSDN для большего количества информации.