728x90
레이어 생성하기
안녕하세요, 레이어 생성하기 코드입니다. 레이어 계층을 관리할 수 있습니다.
from pymxs import runtime as rt
if __name__ == '__main__':
parent = rt.LayerManager.NewLayerFromName("C")
child = rt.LayerManager.NewLayerFromName("D")
child.setParent(parent)
레이어에 객체 넣기
레이어에 객체를 넣어볼려고 하니깐, 어떤 함수가 있는지를 몰라서 맥스스크립트 문서를 참고했습니다.
obj =rt.getNodeByName(target_name)
layer = rt.LayerManager.NewLayerFromName(new_name)
layer.addnode(obj)
전체 레이어 가져오기
전체 레이어의 수를 가져와서 index로 레이어를 하나 씩 불러옵니다.
from pymxs import runtime as rt
for i in range(rt.layerManager.count):
print (rt.layerManager.getLayer(i)).name
특정 레이어 이름으로 가져오기
C라는 레이어를 만들고 이름 'C'로 참조해서 레이어를 가져와 보겠습니다.
from pymxs import runtime as rt
rt.LayerManager.NewLayerFromName('C')
layer = rt.layerManager.getLayerFromName('C')
print layer.name
내가 맥스에서 선택한 레이어만 가져오기
맥스의 레이어창에서 shift, ctrl, 클릭을 이용해서 특정 레이어틀만 선택 후 그 값을 가져올 수 있습니다.
from pymxs import runtime as rt
tmp = rt.SceneExplorerManager.GetActiveExplorer()
layer = tmp.SelectedItems()
for l in layer:
print l.name
선택한 레이어에 속한 오브젝트들 가져오기
이게 제 생각과 문서에 따르면 레이어.nodes 하면 되야하는데, 안되서 찾아보니 아래와 같이해야합니다. Ref 에 대해서는 아직은 잘 모르겠습니다ㅜ
from pymxs import runtime as rt
tmp = rt.SceneExplorerManager.GetActiveExplorer()
layer = tmp.SelectedItems()
for l in layer:
# l.nodes # Not work!
# l.getChild(0) # Not work!
layer_nodes = rt.refs.dependents(l.layerAsRefTarg) # It works!
print layer_nodes
오브젝트의 레이어 확인하기
그냥 object.layer 로 가져올수 있습니다.
레이어 삭제하기
아래 처럼 True로 주면 레이어에 속한 노드들이 0 레이어로 빠지고 레이어는 삭제됩니다.
레이어가 있는지 확인하고 사용하면 좋을것 같습니다.
rt.LayerManager.deleteLayerHierarchy(new_name, forceDelete=True)
관련문서
레이어 프로퍼티 목록:
help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_78B79975_7BA5_4A03_8FEF_27E78D14B575_htm
레리어에 속한 오브젝트 논쟁;
forums.autodesk.com/t5/3ds-max-programming/pymxs-documentation/m-p/8690351#M23242
728x90