두 목록이 있습니다.Nuke Python 다른 목록을 기반으로하는 개체 순서
passOrder = [
'direct_diffuse',
'direct_specular',
'direct_specular_2',
'indirect_diffuse',
'indirect_specular',
'indirect_specular_2',
'refraction',
'reflection',
'emission',
'sss'
]
을하고 다른 하나는 객체의 목록입니다 -이 경우 핵무기 노드 : 첫 번째는 다음과 같습니다
nodes = nuke.selectedNodes()
내가 passOrder 목록과 각 노드의 이름 매개 변수를 비교하기 위해 노력하고있어 passOrder에 주어진 순서대로 정렬하십시오. 명시 적으로 orderedNodes 인덱스를 설정하려했지만 시작시 목록이 비어 있으면 불가능하다고 생각합니다.
orderedNodes = []
for n in nodes:
for index, p in enumerate(passOrder):
if n['name'].value() == p:
orderedNodes.insert(index, n)
나는 또한 두 목록을 압축하고 정렬하려고 시도했다. 기본적으로 정렬 할 때 n['name'].value()
구성 요소를 반복하는 방법을 알지 못합니다.
'nodes '에'passOrder'에 이름이없는 Nuke가 포함될 가능성이있는 경우이 방법이 내 솔루션보다 바람직합니다. 좋은 방어 코딩. – Kevin
@ 케빈 고마워! 사실 내가 게시 한 후에 귀하의 솔루션을 보았습니다. –
@S. de Melo 그런 우아한 해결책에 감사드립니다. 나는 예를 들면, passOrder에 주어진 문자열로 시작하는 레이어 이름과 일치하도록이 기능으로 정규식을 주입하기 위해 노력하고있어 'direct_diffuse_layerName_2 '. –