Довольно сложный: (* 1001 * РЕДАКТИРОВАТЬ: решение для удаления всех внизу )
если вы перейдете к этому файлу Python (я нашел этот модуль, включив echo all, при удаленииitem):
print(mash_repro_aetemplate.__file__)
Вы найдете скрипт месива и фрагменты, где они вызывают пользовательский интерфейс.
import maya.OpenMayaUI as mui
from shiboken2 import wrapInstance
usingPyside2 = False
try:
import PySide2
usingPyside2 = True
except:
pass
from flux.imports import *
from flux.core import pix
import flux.core as fx
import mash_repro_utils
from mash_repro_icons import MASH_REPRO_ICONS
from functools import partial
import MASH.undo as undo
def get_maya_window():
ptr = mui.MQtUtil.mainWindow()
if ptr is not None:
return wrapInstance(long(ptr), qt.QMainWindow)
def refresh_all_aetemplates(force=False):
""" Refresh all the repro aetemplates"""
widgets = get_maya_window().findChildren(AEMASH_ReproTemplate) or []
for widget in widgets:
global SCENE_OPENED
SCENE_OPENED = True
widget.update_data(widget.node, force=force)
SCENE_OPENED = False
вот способ найти узел repro:
widgets = get_maya_window().findChildren(qt.QWidget, 'AEMASH_ReproTemplate') or []
myRepro = widgets[0]
'myRepro' теперь является классом узла reph mash.
Qtreewidget, представляющий ваши узлы:
myRepro.objs_widget
, который вы можете использовать из этого другого класса, производного от qtree:
# work only on selection, if you want to modify this command, maybe create your own add_sel_bjects(self, objs=[])
myRepro.objs_widget.add_objects()
# work only on the selection in the qtree widget
myRepro.objs_widget.delete_item()
# you can use qtree functions instead :
# myRepro.objs_widget.clear()
items_count = myRepro.objs_widget.topLevelItemCount()
В методах delete_item есть это
mash_repro_utils.remove_mesh_group(myRepro.objs_widget.node, id)
mash_repro_utils.remove_proxy_group(self.node, self.instance_index, id)
Я не успел исследовать, но оттуда вы обнаружите:
print(mash_repro_utils.__file__)
# Result: 'maya_path/plug-ins/MASH/scripts/mash_repro_utils.py' #
Идите туда, и там есть все функции mash Mai Python:
def remove_proxy_group(mash_repro_node, instance_index, index):
"""
Remove a proxy object from the Repro node
:param mash_repro_node: MASH Repro node
:param instance_index: Object index
:param index: Proxy index
:return: None
"""
with ReproUpdating(mash_repro_node):
data = get_data_layout(mash_repro_node)
indices = data[instance_index]['proxies'].keys()
indices.sort()
if index in indices:
position = indices.index(index)
for i in range(position, len(indices)):
clean_proxy_index(mash_repro_node, instance_index, indices[i])
for i in range(position + 1, len(indices)):
if 'group' in data[instance_index]['proxies'][indices[i]]:
new_index = connect_proxy_group(mash_repro_node, data[instance_index]['proxies'][indices[i]]['group'], instance_index)
maya.cmds.setAttr("%s.instancedGroup[%d].proxyGroup[%d].proxyLod" % (mash_repro_node, instance_index, new_index), data[instance_index]['proxies'][indices[i]]['proxyLod'])
hasMASHFlag = maya.cmds.objExists('%s.mashOutFilter' % (data[instance_index]['proxies'][indices[i]]['group']))
if hasMASHFlag:
maya.cmds.deleteAttr( data[instance_index]['proxies'][indices[i]]['group'], at='mashOutFilter' )
Вы должны быть в состоянии исследовать оттуда.
Вы можете просто сделать свой собственный delete_all, например так:
items_count = myRepro.objs_widget.topLevelItemCount()
for id in sorted(range(items_count), reverse=True):
mash_repro_utils.remove_mesh_group(myRepro.objs_widget.node, id)
myRepro.objs_widget.obj_dropped.emit(None)