Maya) Shelf UI 높이 조절
Maya에서 작업을 하다 보면, 자주 사용하는 도구들을 쉘프(Shelf)에 등록하여 빠르게 접근하게 된다.
나 역시 마찬가지로 작업에 필요한 툴을 쉘프에 하나둘 올려두면서 점점 아이콘의 수가 많아졌고, 어느 순간부터는 한 줄로는 다 표현되지 않아 아이콘이 잘리거나 스크롤이 생기는 불편함이 생기기 시작했다.
처음에는 쉘프 버튼의 크기를 줄이는 방식으로 해결을 시도했지만, 버튼의 시인성이 낮아지는 문제가 발생했다.
그래서 아이콘 수에 따라 쉘프 UI 자체의 높이를 동적으로 조절하는 방식이 더 합리적이라 판단했고, 이를 위한 간단한 코드를 작성하게 되었다.
기본 아이디어
쉘프는 내부적으로 tabLayout
→ shelfLayout
→ shelfButton
의 구조로 되어 있으며, 그 중 gShelfTopLevel
이라는 전역 변수는 상단 탭 전체를 포함하는 UI 요소를 가리킨다.
이를 이용하면 쉘프의 전체 UI 높이를 조정할 수 있다.
import maya.cmds as cmds
import maya.mel as mel
def resize_shelf_ui(height=80):
# gShelfTopLevel은 쉘프 UI 전체를 감싸는 tab layout
shelf_top_level = mel.eval('$tmpVar=$gShelfTopLevel')
# 쉘프 탭 영역의 높이 설정
if cmds.control(shelf_top_level, exists=True):
cmds.tabLayout(shelf_top_level, edit=True, height=height)
print(f"Shelf UI 높이를 {height}px로 설정했습니다.")
else:
print("Shelf UI를 찾을 수 없습니다.")
# 예시: 쉘프 높이를 100px로 설정
resize_shelf_ui(100)
아이콘 수에 따라 쉘프 높이를 자동으로 조절하기
다음은 내가 작성한 자동 쉘프 높이 조절 스크립트이다.
import maya.cmds as cmds
import maya.mel as mel
def auto_resize_shelf(base_height=40, row_height=40, max_per_row=10):
"""
쉘프에 등록된 아이콘 수를 기준으로 전체 쉘프 UI의 높이를 자동으로 계산해 설정한다.
"""
shelf_top_level = mel.eval('$tmpVar=$gShelfTopLevel')
shelves = cmds.tabLayout(shelf_top_level, query=True, ca=True)
if not shelves:
print("쉘프가 비어 있습니다.")
return
current_shelf = cmds.tabLayout(shelf_top_level, query=True, selectTab=True)
buttons = cmds.shelfLayout(current_shelf, query=True, ca=True)
icon_count = len(buttons) if buttons else 0
rows = (icon_count + max_per_row - 1) // max_per_row
new_height = base_height + row_height * rows
cmds.tabLayout(shelf_top_level, edit=True, height=new_height)
print(f"아이콘 수: {icon_count}, 행 수: {rows}, 쉘프 높이: {new_height}px")
댓글남기기