Skip to content

Instantly share code, notes, and snippets.

@fwilleke80
Created July 18, 2019 10:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fwilleke80/6a7f30a74a02f966ff78ec82b3fcf581 to your computer and use it in GitHub Desktop.
Save fwilleke80/6a7f30a74a02f966ff78ec82b3fcf581 to your computer and use it in GitHub Desktop.
[C4D] A function that returns a string with the plugin flags for the BasePlugin of a BaseList2D
def GetPluginFlags(bl):
"""Return string with all plugin flags of a given BaseList2D element
@param bl The BaseList2D element (e.g. BaseObject, BaseTag,
BaseVideoPost, BaseMaterial, BaseShader, et cetera)
@return A string containing all the identified plugin flags
"""
if bl is None:
return ''
flagInfoDict = {
c4d.PLUGINTYPE_ANY : {
# General plugin flags
c4d.PLUGINFLAG_HIDE : 'PLUGINFLAG_HIDE',
c4d.PLUGINFLAG_SMALLNODE : 'PLUGINFLAG_SMALLNODE',
c4d.PLUGINFLAG_HIDEPLUGINMENU : 'PLUGINFLAG_HIDEPLUGINMENU',
c4d.PLUGINFLAG_REFRESHALWAYS : 'PLUGINFLAG_REFRESHALWAYS'
},
c4d.PLUGINTYPE_TAG : {
# TagData flags
c4d.TAG_VISIBLE : 'TAG_VISIBLE',
c4d.TAG_MULTIPLE : 'TAG_MULTIPLE',
c4d.TAG_HIERARCHICAL : 'TAG_HIERARCHICAL',
c4d.TAG_EXPRESSION : 'TAG_EXPRESSION',
c4d.TAG_TEMPORARY : 'TAG_TEMPORARY',
c4d.TAG_TEMPORARY : 'TAG_TEMPORARY',
c4d.TAG_ADDTOTAKEGROUP : 'TAG_ADDTOTAKEGROUP'
},
c4d.PLUGINTYPE_OBJECT : {
# ObjectData flags
c4d.OBJECT_MODIFIER : 'OBJECT_MODIFIER',
c4d.OBJECT_HIERARCHYMODIFIER : 'OBJECT_HIERARCHYMODIFIER',
c4d.OBJECT_GENERATOR : 'OBJECT_GENERATOR',
c4d.OBJECT_INPUT : 'OBJECT_INPUT',
c4d.OBJECT_PARTICLEMODIFIER : 'OBJECT_PARTICLEMODIFIER',
c4d.OBJECT_ISSPLINE : 'OBJECT_ISSPLINE',
c4d.OBJECT_USECACHECOLOR : 'OBJECT_USECACHECOLOR',
c4d.OBJECT_CAMERADEPENDENT : 'OBJECT_CAMERADEPENDENT',
c4d.OBJECT_POINTOBJECT : 'OBJECT_POINTOBJECT',
c4d.OBJECT_POLYGONOBJECT : 'OBJECT_POLYGONOBJECT',
c4d.OBJECT_NO_PLA : 'OBJECT_NO_PLA',
c4d.OBJECT_DONTFREECACHE : 'OBJECT_DONTFREECACHE',
c4d.OBJECT_CALL_ADDEXECUTION : 'OBJECT_CALL_ADDEXECUTION',
c4d.OBJECT_NOCHILDEXPRESSIONS : 'OBJECT_NOCHILDEXPRESSIONS',
c4d.OBJECT_FIELDOBJECT : 'OBJECT_FIELDOBJECT'
},
c4d.PLUGINTYPE_BITMAPLOADER : {
# SceneLoaderData / SceneSaverDataWriter
c4d.PLUGINFLAG_SCENELOADER_MERGEORIGINAL : 'PLUGINFLAG_SCENELOADER_MERGEORIGINAL',
c4d.PLUGINFLAG_SCENEFILTER_DIALOGCONTROL : 'PLUGINFLAG_SCENEFILTER_DIALOGCONTROL'
},
c4d.PLUGINTYPE_BITMAPSAVER : {
# SceneLoaderData / SceneSaverDataWriter
c4d.PLUGINFLAG_SCENELOADER_MERGEORIGINAL : 'PLUGINFLAG_SCENELOADER_MERGEORIGINAL',
c4d.PLUGINFLAG_SCENEFILTER_DIALOGCONTROL : 'PLUGINFLAG_SCENEFILTER_DIALOGCONTROL'
},
c4d.PLUGINTYPE_SCENEHOOK : {
# SceneHookData flags
c4d.PLUGINFLAG_SCENEHOOK_NOTDRAGGABLE : 'PLUGINFLAG_SCENEHOOK_NOTDRAGGABLE',
c4d.PLUGINFLAG_SCENEHOOK_SUPPORT_DOCUMENT_DESCRIPTION : 'PLUGINFLAG_SCENEHOOK_SUPPORT_DOCUMENT_DESCRIPTION',
c4d.PLUGINFLAG_SCENEHOOK_SUPPORT_ANIMATION : 'PLUGINFLAG_SCENEHOOK_SUPPORT_ANIMATION'
},
c4d.PLUGINTYPE_MATERIAL : {
# MaterialData flags
c4d.PLUGINFLAG_MATERIAL_GLIMAGE : 'PLUGINFLAG_MATERIAL_GLIMAGE',
c4d.PLUGINFLAG_MATERIAL_NO_MATERIALEDITOR : 'PLUGINFLAG_MATERIAL_NO_MATERIALEDITOR',
c4d.PLUGINFLAG_MATERIAL_HIDE_IN_MATERIALMANAGER : 'PLUGINFLAG_MATERIAL_HIDE_IN_MATERIALMANAGER',
c4d.PLUGINFLAG_MATERIAL_GLIMAGE_TIMECHANGE : 'PLUGINFLAG_MATERIAL_GLIMAGE_TIMECHANGE',
c4d.PLUGINFLAG_MATERIAL_GLIMAGE_WITH_ALPHA : 'PLUGINFLAG_MATERIAL_GLIMAGE_WITH_ALPHA'
},
c4d.PLUGINTYPE_SHADER : {
# MaterialData flags
c4d.PLUGINFLAG_MATERIAL_GLIMAGE : 'PLUGINFLAG_MATERIAL_GLIMAGE',
c4d.PLUGINFLAG_MATERIAL_NO_MATERIALEDITOR : 'PLUGINFLAG_MATERIAL_NO_MATERIALEDITOR',
c4d.PLUGINFLAG_MATERIAL_HIDE_IN_MATERIALMANAGER : 'PLUGINFLAG_MATERIAL_HIDE_IN_MATERIALMANAGER',
c4d.PLUGINFLAG_MATERIAL_GLIMAGE_TIMECHANGE : 'PLUGINFLAG_MATERIAL_GLIMAGE_TIMECHANGE',
c4d.PLUGINFLAG_MATERIAL_GLIMAGE_WITH_ALPHA : 'PLUGINFLAG_MATERIAL_GLIMAGE_WITH_ALPHA'
},
c4d.PLUGINTYPE_VIDEOPOST : {
# VideopostData flags
c4d.PLUGINFLAG_VIDEOPOST_MULTIPLE : 'PLUGINFLAG_VIDEOPOST_MULTIPLE',
c4d.PLUGINFLAG_VIDEOPOST_INHERENT : 'PLUGINFLAG_VIDEOPOST_INHERENT',
c4d.PLUGINFLAG_VIDEOPOST_GL : 'PLUGINFLAG_VIDEOPOST_GL',
c4d.PLUGINFLAG_VIDEOPOST_ISRENDERER : 'PLUGINFLAG_VIDEOPOST_ISRENDERER',
c4d.PLUGINFLAG_VIDEOPOST_STEREO_EDITOR : 'PLUGINFLAG_VIDEOPOST_STEREO_EDITOR',
c4d.PLUGINFLAG_VIDEOPOST_STEREO_RENDERING : 'PLUGINFLAG_VIDEOPOST_STEREO_RENDERING',
c4d.PLUGINFLAG_VIDEOPOST_STEREO : 'PLUGINFLAG_VIDEOPOST_STEREO',
c4d.PLUGINFLAG_VIDEOPOST_ISRENDERER_NET : 'PLUGINFLAG_VIDEOPOST_ISRENDERER_NET',
c4d.PLUGINFLAG_VIDEOPOST_MULTIPASS : 'PLUGINFLAG_VIDEOPOST_MULTIPASS'
},
c4d.PLUGINTYPE_SNAP : {
# SnapData flags
c4d.PLUGINFLAG_SNAP_INFERRED_POINT : 'PLUGINFLAG_SNAP_INFERRED_POINT',
c4d.PLUGINFLAG_SNAP_INFERRED_AXIS : 'PLUGINFLAG_SNAP_INFERRED_AXIS',
c4d.PLUGINFLAG_SNAP_MIDPOINT : 'PLUGINFLAG_SNAP_MIDPOINT'
}
}
# Get plugin type & info
foundPlugin = c4d.plugins.FindPlugin(bl.GetType())
if foundPlugin is not None:
blPluginType = foundPlugin.GetType()
else:
blPluginType = 0
blInfo = bl.GetInfo()
# General flags
flagList = []
for flag in sorted(flagInfoDict[c4d.PLUGINTYPE_ANY].keys()):
if blInfo&flag:
flagList.append(flagInfoDict[c4d.PLUGINTYPE_ANY][flag])
# Plugin type specific flags
for pluginType in flagInfoDict.keys():
if pluginType == blPluginType:
# Iterate dictionary to find out which flags are set
# Store set flags in list
for flag in sorted(flagInfoDict[blPluginType].keys()):
if blInfo&flag:
flagList.append(flagInfoDict[blPluginType][flag])
# Build result string
if len(flagList) == 0:
resultStr = 'NONE'
else:
resultStr = '|'.join(flagList)
return resultStr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment