2016-07-07 2 views
0

Я пишу сценарий для Maya, где я пытаюсь сохранить снимок из последовательности только с собственной камерой.Пытается удалить изображение из Camera Sequencer

import maya.cmds as mc 

    list_of_shots_to_delete = mc.sequenceManager(listShots=True) 
    list_of_shots_to_delete.remove(my_shot) 

    for k in list_of_shots_to_delete: 

     cam = getShotsCamera(k) 

     if cam != None: 

      if cam == getShotsCamera(my_shot): 
       print cam + " is needed!" 

      else: 
       mc.delete(getShotsCamera(k)) 

      mc.lockNode(k, lock=False) 
      print "Shot "+ k +" deleted!" 
      mc.delete(k) 

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

Может ли кто-нибудь помочь?

+0

Похоже, при изменении размера списка во время итерации, но нет никакого определения 'mc',' 'mc.delete', list_of_shots_to_delete' и т.д., так что трудно сказать. –

+0

Прошу прощения, я забыл поставить «import maya.cmds as mc». – PSlayer

+0

Ну что такое 'list_of_shots_to_delete' - это, вероятно, самый важный бит информации, оставленный –

ответ

1

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

import maya.cmds as mc 

def getShotsCamera(shot): 
    for camera in mc.listConnections(my_shot + '.currentCamera') or ['']: 
     return camera 


my_shot = 'shot1' 
my_shot_camera = getShotsCamera(my_shot) 
list_of_shots_to_delete = mc.sequenceManager(listShots=True) 
list_of_shots_to_delete.remove(my_shot) 

for k in list_of_shots_to_delete: 
    cam = getShotsCamera(k) 

    if cam and cam != my_shot_camera: 
     mc.delete(cam) 

    mc.lockNode(k, lock=False) 
    print "Shot " + k + " deleted!" 
    mc.delete(k) 
Смежные вопросы