| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- # coding:utf-8
- #!/usr/bin/python
- #
- # Copyright (c) Contributors to the Open 3D Engine Project.
- # For complete copyright and license terms please see the LICENSE at the root of this distribution.
- #
- # SPDX-License-Identifier: Apache-2.0 OR MIT
- #
- #
- # -- This line is 75 characters -------------------------------------------
- """
- Module Documentation:
- DccScriptingInterface:: SDK//maya//scripts//set_shelf.py
- This module manages a custom shelf in maya for the DCCsi
- Reference: https://gist.github.com/vshotarov/1c3176fe9e38dcaadd1e56c2f15c95d9
- """
- # -------------------------------------------------------------------------
- # -- Standard Python modules
- # none
- # -- External Python modules
- # none
- # -- DCCsi Extension Modules
- # none
- # -- Maya Extension Modules
- import maya.cmds as mc
- # -------------------------------------------------------------------------
- def _null(*args):
- pass
- # -------------------------------------------------------------------------
- class customShelf(_Custom_Shelf):
- '''This is an example shelf.'''
-
- def build(self):
- self.add_button(label="button1")
- self.add_button("button2")
- self.add_button("popup")
- p = mc.popupMenu(b=1)
- self.add_menu_item(p, "popupMenuItem1")
- self.add_menu_item(p, "popupMenuItem2")
- sub = self.add_submenu(p, "subMenuLevel1")
- self.add_menu_item(sub, "subMenuLevel1Item1")
- sub2 = self.add_submenu(sub, "subMenuLevel2")
- self.add_menu_item(sub2, "subMenuLevel2Item1")
- self.add_menu_item(sub2, "subMenuLevel2Item2")
- self.add_menu_item(sub, "subMenuLevel1Item2")
- self.add_menu_item(p, "popupMenuItem3")
- self.add_button("button3")
- # -------------------------------------------------------------------------
- class _Custom_Shelf():
- '''A simple class to build custom shelves in maya.
- The build method is empty and an inheriting class should override'''
- def __init__(self, name="DCCsi", icon_path=""):
- self._name = name
- self._icon_path = icon_path
- self._label_background_color = (0, 0, 0, 0)
- self._label_colour = (.9, .9, .9)
- self._clean_old_shlef()
-
- mc.setParent(self._name)
-
- self.build()
- def build(self):
- '''Override this method in custom class.
- Otherwise, nothing is added to the shelf.'''
- pass
- def add_button(self,
- label='<NotSet>',
- icon="commandButton.png",
- command=_null,
- doubleCommand=_null):
- '''Adds a shelf button with the specified label,
- command, double click command and image.'''
- mc.setParent(self._name)
- if icon:
- icon = self._icon_path + icon
- mc.shelfButton(width=37, height=37,
- image=icon,
- label=label,
- command=command,
- doubleClickCommand=doubleCommand,
- imageOverlayLabel=label,
- overlayLabelBackColor=self._label_background_color,
- overlayLabelColor=self._label_colour)
- def add_menu_item(self, parent, label, command=_null, icon=""):
- '''Adds a shelf button with the specified label,
- command, double click command and image.'''
- if icon:
- icon = self._icon_path + icon
- return mc.menuItem(p=parent, l=label, c=command, i="")
- def add_submenu(self, parent, label, icon=None):
- '''Adds a sub menu item with the specified label and icon
- to the specified parent popup menu.'''
- if icon:
- icon = self._icon_path + icon
- return mc.menuItem(p=parent, l=label, i=icon, subMenu=1)
- def _clean_old_shlef(self):
- '''Checks if the shelf exists and empties it if it does or
- creates it if it does not.'''
- if mc.shelfLayout(self._name, ex=1):
- if mc.shelfLayout(self._name, q=1, ca=1):
- for each in mc.shelfLayout(self._name, q=1, ca=1):
- mc.deleteUI(each)
- else:
- mc.shelfLayout(self._name, p="ShelfLayout")
- # ==========================================================================
- # Module Tests
- # ==========================================================================
- if __name__ == '__main__':
- customShelf()
- pass
|