обновите textScrollList в Maya с помощью Python - PullRequest
0 голосов
/ 10 мая 2018

У меня есть массив с источниками света, каждый раз, когда я создаю источник света, он хранит мой массив. У меня есть textScrollList, который отображает все источники света в моем массиве.

Когда я добавляю источники света, это не относится к textScrollList.

Может кто-нибудь сказать мне, как я могу это сделать, поэтому каждый раз, когда я делаю подсветку, она отображается в textScrollList. Или с кнопкой обновления.

Спасибо!

Код у меня сейчас:

import maya.cmds as cmds
lights=[]

myWindow = cmds.window(title='My Lights', wh=(200,400),sizeable =False )
cmds.columnLayout()
cmds.showWindow(myWindow)

 LightsButton = cmds.button(label='Make Lights', command = "makeLights()", width =200,height = 25,align='center')


def makeLights():
    lights.append(cmds.shadingNode('aiAreaLight', asLight=True))




LightSelector = cmds.textScrollList( numberOfRows=8, allowMultiSelection=True,append=(lights), showIndexedItem=4, selectCommand = 'selectInTextList()' )

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете добавить функцию, которая обновит список с подсветкой. Это можно вызвать после создания нового источника света, чтобы он добавлялся в список. Вы также можете добавить кнопку обновления для вызова этой же функции в случае, если вы добавляете / удаляете источники света в сцене, и она будет обновляться правильно.

Вам не нужно добавлять источники света в список и отслеживать его. Вместо этого вы можете использовать cmds.ls(), чтобы собрать все источники света в сцене. Если вам действительно не нужен список по какой-то причине, легко отредактировать приведенный ниже пример, чтобы использовать его:

import maya.cmds as cmds


# Clear the listview and display the current lights in the scene.
def refreshList():
    # Clear all items in list.
    cmds.textScrollList(lightSelector, e=True, removeAll=True)

    # Collect all lights in the scene.
    allLights = cmds.ls(type='aiAreaLight')

    # Add lights to the listview.
    for obj in allLights:
        cmds.textScrollList(lightSelector, e=True, append=obj)


# Create a new light and add it to the listview.
def makeLights():
    lights.append(cmds.shadingNode('aiAreaLight', asLight=True))

    refreshList()


def selectInTextList():
    # Collect a list of selected items.
    # 'or []' converts it to a list when nothing is selected to prevent errors.
    selectedItems = cmds.textScrollList(lightSelector, q=True, selectItem=True) or []

    # Use a list comprehension to remove all lights that no longer exist in the scene.
    newSelection = [obj for obj in selectedItems if cmds.objExists(obj)]

    cmds.select(newSelection)


# Create window.
myWindow = cmds.window(title='My Lights', wh=(200,400), sizeable=False)
cmds.columnLayout()
cmds.showWindow(myWindow)

# Create interface items.
addButton = cmds.button(label='Make Lights', command='makeLights()', width=200, height=25, align='center')
lightSelector = cmds.textScrollList(numberOfRows=8, allowMultiSelection=True, append=cmds.ls(type='aiAreaLight'), showIndexedItem=4, selectCommand='selectInTextList()')
refreshButton = cmds.button(label='Refresh list', command='refreshList()', width=200, height=25, align='center')

Надеюсь, это поможет.

...