Interactive/SidedCustom.py

# (C) Copyright 2010 Autodesk, Inc.  All rights reserved.
#
# Use of this software is subject to the terms of the Autodesk license
# agreement provided at the time of installation or download, or which
# otherwise accompanies this software in either electronic or hard copy
# form.

#           module = __import__(custom)
#           instance = module.instantiate()
#           self.__myCustoms.append(instance)

__all__ = ['SidedCustom', 'instantiate']

# Make selected object display as single or double (default) sided.
#

from awSupportApi        import ApplicationMode
from MessageInterpreter  import MessageInterpreter
from MessageRegistry     import theMessageRegistry
from ParameterConstant   import ParameterConstant
from RTFapi              import Appearance, Parameter
from UserCustomization   import UserCustomBase, CustomInfo

import ModelIO


SET_SIDED_Doc = \
[(
"""
Set single or double sided when display the model.
"""
),
[[("objects"),("The model which to be displayed in single or doubel sided.")],
 [("sided"),("Single or double.")]
 ]
]

theMessageRegistry.register("SET_SIDED",
    (tuple,unicode), 0, SET_SIDED_Doc)

class SidedCustom (UserCustomBase):
    def __init__(self):
        self.__mySingleId = None
        self.__myDoubleId = None
        self.__myInterpreter = LocalInterpreter()

    def getInterpreter(self,isInteractive):
        if isInteractive:
            return self.__myInterpreter
        return None

    def appendMenuItems(self,id,menu):
        if "Appearance" == id:
            self.__mySingleId = menu.appendItem(_( 'Set Single Sided' ),
                                                self.__onSingle )
            self.__myDoubleId = menu.appendItem(_( 'Set Double Sided' ),
                                                self.__onDouble )

    def enableMenuStates(self,id,enableStates):
        if "Appearance" == id:
            if self.__myInterpreter:
                enabled = self.__myInterpreter.Enabled()
            else:
                enabled = False
            enableStates[self.__mySingleId] = enabled
            enableStates[self.__myDoubleId] = enabled

    # ------------------------------------------------
    def __onSingle( self, event ):
        if self.__myInterpreter:
            self.__myInterpreter.Single()

    def __onDouble( self, event ):
        if self.__myInterpreter:
            self.__myInterpreter.Double()

# -----------------------------------------------------------------------

class LocalInterpreter( MessageInterpreter ):

    def __init__( self ):
        MessageInterpreter.__init__( self )
        self.__myModels = None

    def APPLICATION_CLOSE_SCENE( self, message ):
        self.__myModels = None

    def SET_DOCUMENT( self, message ):
        document, = message.data
        self.__myModels = document.get( ModelIO.id )

    def Single( self ):
        if self.__myModels is not None:
            self.Sided( self.__myModels.selected, ParameterConstant.kSingle )

    def Double( self ):
        if self.__myModels is not None:
            self.Sided( self.__myModels.selected, "double" )

    def Enabled( self ):
        return ApplicationMode.instance().isAuthoringMode() \
           and self.__myModels is not None \
           and not self.__myModels.selected.empty()

    def Sided( self, objects, sided ):
        print "%s on %s" % (sided,objects)
        self.sendMessage( "APPEARANCE_PARAMETER_CHANGE",
                          (tuple(objects), Appearance.kParameterCategoryObject, ParameterConstant.kSided, sided, True, Parameter.kString) )

    def SET_SIDED( self, message ):
        ( objects, sided ) = message.data
        self.Sided( objects, sided )

# --------------------------------------------------------------------

def instantiate():
    # Are the relevant files elsewhere?
    # sys.path.append( "where the files are" )
    return SidedCustom()


def info():
    customInfo = CustomInfo()
    customInfo.vendor = 'Autodesk'
    customInfo.version = '2.0'
    customInfo.api = '2010'
    customInfo.shortInfo = "Make objects single/double sided."
    customInfo.longInfo = \
"""Add "Set Single Sided" and "Set Double Sided" menu items under "Material" menu to make objects \
single/double sided.
"""
    return customInfo