Guest User

Untitled

a guest
Apr 16th, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.66 KB | None | 0 0
  1. from __future__ import print_function
  2. import logging
  3.  
  4.  
  5. import maya.api.OpenMaya as om
  6. from maya import cmds
  7.  
  8. logger = logging.getLogger(__name__)
  9.  
  10.  
  11. class BaseComponent(object):
  12.     def __init__(self, *args, **kwargs):
  13.         node = None
  14.         if args:
  15.             node = args[0]
  16.         elif 'node' in kwargs:
  17.             node = kwargs.get('node')
  18.  
  19.         self._mObject = self._convert_to_mObject(node)
  20.  
  21.         self.name = (
  22.             om.MFnDependencyNode(self._mObject).name()
  23.             if self._mObject is not None
  24.             else None
  25.         )
  26.  
  27.     @classmethod
  28.     def from_selection(cls):
  29.         """
  30.        Initiate BaseComponent from maya selection
  31.        Returns
  32.        -------
  33.        BaseComponent
  34.        """
  35.         return cls()
  36.  
  37.     @classmethod
  38.     def from_string(cls, node_name):
  39.         """
  40.        Initiate BaseComponent from str
  41.        Parameters
  42.        ----------
  43.        node_name : str
  44.            Node Name
  45.        Returns
  46.        -------
  47.        BaseComponent
  48.        """
  49.         if not isinstance(node_name, basestring):
  50.             msg = '`node_name` should be of type <str>, recieved {}'.format(
  51.                 type(node_name)
  52.             )
  53.             raise TypeError(msg)
  54.  
  55.         _mObject = cls._convert_to_mObject(node_name)
  56.         return cls(_mObject)
  57.  
  58.     @classmethod
  59.     def from_mobject_handle(cls, mob_hdl):
  60.         if not isinstance(mob_hdl, om.MObjectHandle):
  61.             msg = (
  62.                 '`mob_hdl` should be of type <om.MObjectHandle>, recieved {}'
  63.             ).format(type(mob_hdl))
  64.             raise TypeError(msg)
  65.  
  66.         _mObject = cls._convert_to_mObject(mob_hdl)
  67.         return cls(_mObject)
  68.  
  69.     @classmethod
  70.     def _obj_name_from_selection(cls):
  71.         try:
  72.             name = str(cmds.ls(sl=1)[0])
  73.         except IndexError:
  74.             logger.error('No node selected.')
  75.             return
  76.         else:
  77.             return name
  78.  
  79.     @classmethod
  80.     def _m_object_from_name(cls, name):
  81.         try:
  82.             sel_list = om.MSelectionList()
  83.             sel_list.add(name)
  84.             return sel_list.getDependNode(0)
  85.         except RuntimeError:
  86.             logger.error("Node does not exist. Component not created.")
  87.  
  88.     @classmethod
  89.     def _convert_to_mObject(cls, arg=None):
  90.         if arg is None:
  91.             object_name = cls._obj_name_from_selection()
  92.         elif isinstance(arg, basestring):
  93.             object_name = arg
  94.         elif isinstance(arg, om.MObjectHandle):
  95.             return arg.object()
  96.         elif isinstance(arg, om.MObject):
  97.             # We already recieved an MObject, let's just return it
  98.             return arg
  99.  
  100.         if object_name is not None:
  101.             return cls._m_object_from_name(object_name)
  102.  
  103.  
  104. def _setup():
  105.     cmds.file(new=True, f=1)
  106.     cmds.polySphere()
  107.     cmds.polySphere()
  108.     cmds.select('pSphere1', r=1)
  109.  
  110.  
  111. def main():
  112.     _setup()
  113.  
  114.     test = BaseComponent()
  115.     if test:
  116.         print("TEST1:SELECTION: {}{} \r\n".format(test, test.__dict__))
  117.  
  118.     test2 = BaseComponent(node='pSphere2')
  119.     if test2:
  120.         print("TEST2:STR: {}{} \r\n".format(test2, test2.__dict__))
  121.  
  122.     sel = om.MGlobal.getActiveSelectionList()
  123.     mob = sel.getDependNode(0)
  124.     mob_hdl = om.MObjectHandle(mob)
  125.     test3 = BaseComponent(node=mob_hdl)
  126.     if test3:
  127.         print("TEST3:MOBHANDLE: {}{} \r\n".format(test3, test3.__dict__))
  128.  
  129.     sel = om.MGlobal.getActiveSelectionList()
  130.     mob = sel.getDependNode(0)
  131.     test4 = BaseComponent(node=mob)
  132.     if test4:
  133.         print("TEST4:MOB: {}{} \r\n".format(test4, test4.__dict__))
  134.     else:
  135.         print("")
  136.  
  137.  
  138. if __name__ == '__main__':
  139.     main()
Add Comment
Please, Sign In to add comment