maya renderSetupでコレクションの中身にnamespaceを足す

renderSetup
renderLayerよりはシーンが壊れにくくなりましたね

カットシーン毎にテンプレートのrenderSetupを読み込んで・・・・

ここで問題になるのが
テンプレートのrenderSetupのコレクションにノード名を指定しておいても、シーンに合わせてネームスペースをコレクションの中身に追加してあげないとならんのですよね

ネームスペースを全て対象とする　書き方もありますが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/bf4c2812-e041-0524-9bb5-bed8955bb3be.png)

こんな感じで各レイヤー毎に別のネームスペースを指定したい
って場面に出会って、手動でやるの面倒だなぁと

collectionを集める
-
まずは各レイヤーに所属するcollectionを収集したい。

参考
https://kiwamiden.com/rendersetup-for-python-part2

まずはcollectionを・・・・
```python
from maya.app.renderSetup.model import renderSetup

layerName = "renderSetupLayer1"
rs = renderSetup.instance()
layer = rs.getRenderLayer(layerName)
collections = layer.getCollections()

for collection in collections:
    print(collection.name())

#collection1
```

お　取れてますね。

更にcollectionを集める
-
ちょっと複雑な感じにしてみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/0a0ee416-200c-bd12-d650-5dd7962f0125.png)

```
#collection1
```
うーん・・・1個しか取れませんね・・・

-getCollectionsなのでグループはリストされない
-レイヤーの直下のcollectionはリストされるが、それ以下はリストされない

あ、面倒な奴だ！（の予感

- ノードの種類に関わらず子をリスト ( getChildren
- 子ノードを個別に評価して、種類がcollecitonならリストに追加
- 子ノードにさらに子ノードがある場合には↑に戻る

的なぐーるぐーる回るやつ

雑実装
-

こういう時pythonは便利

```python
from maya.app.renderSetup.model import renderSetup

def getRSCollectionsHierarchy(taregtNode,collections):
    #対象のノードが collectionか否か
    if taregtNode.isCollection():
        #名前を取りたい場合は .name()
        collections.append(taregtNode)
    
    #対象のノードが　hasChildren　アトリビュートを持つか否か
    if "hasChildren" in dir(taregtNode):
        
        #対象のノードが子ノードを持つか否か
        if taregtNode.hasChildren():
            
            #対象のノードの子ノードをリスト
            chNodes = taregtNode.getChildren()

            #ぐーるぐーる
            for node in chNodes:
                collections = getRSCollectionsHierarchy(node,collections)

    return collections

def getRSCollections(layerName):
    rs = renderSetup.instance()
    layer = rs.getRenderLayer(layerName)
    chNodes  = layer.getChildren()
    collections = []
    
    #layer直下の子ノード
    for taregtNode in layer.getChildren():    
        getRSCollectionsHierarchy(taregtNode,collections)

    #layer直下のグループノード
    for taregtNode in layer.getGroups():    
        getRSCollectionsHierarchy(taregtNode,collections)
    
    print(collections)

getRSCollections("renderSetupLayer1")

#[<maya.app.renderSetup.model.collection.Collection object at 0x00000136A08F0EA8>, 
#<maya.app.renderSetup.model.collection.Collection object at 0x0000013665F37818>, 
#<maya.app.renderSetup.model.collection.Collection object at 0x00000136164564F8>]

```

取れてるのか判らんので、一旦名前収集で実行

```python
from maya.app.renderSetup.model import renderSetup

def getRSCollectionsHierarchy(taregtNode,collections):
    #対象のノードが collectionか否か
    if taregtNode.isCollection():
        #名前を取りたいので .name()を一旦ついか
        collections.append(taregtNode.name())
    
    #対象のノードが　hasChildren　アトリビュートを持つか否か
    if "hasChildren" in dir(taregtNode):
        
        #対象のノードが子ノードを持つか否か
        if taregtNode.hasChildren():
            
            #対象のノードの子ノードをリスト
            chNodes = taregtNode.getChildren()

            #ぐーるぐーる
            for node in chNodes:
                collections = getRSCollectionsHierarchy(node,collections)

    return collections

def getRSCollections(layerName):
    rs = renderSetup.instance()
    layer = rs.getRenderLayer(layerName)
    chNodes  = layer.getChildren()
    collections = []
    
    #layer直下の子ノード
    for taregtNode in layer.getChildren():    
        getRSCollectionsHierarchy(taregtNode,collections)

    #layer直下のグループノード
    for taregtNode in layer.getGroups():    
        getRSCollectionsHierarchy(taregtNode,collections)
    
    print(collections)

getRSCollections("renderSetupLayer1")

#['collection1', 'collection3', 'collection4']

```

はい　取れました。
つづきます