Esempio n. 1
0
def __enumPresetValues(param):

    presets = IECore.StringVectorData()

    enum = arnold.AiParamGetEnum(param)
    while True:
        preset = arnold.AiEnumGetString(enum, len(presets))
        if not preset:
            break
        presets.append(preset)

    return presets
Esempio n. 2
0
			# arnold metadata entries.
			param = arnold.AiParamIteratorGetNext( paramIt )
			paramName = arnold.AiParamGetName( param )
			paramPath = nodeName + "." + paramName

			description = __aiMetadataGetStr( nodeEntry, paramName, "desc" )
			if description is not None :
				__metadata[paramPath]["description"] = description

			paramType = arnold.AiParamGetType( param )
			if paramType == arnold.AI_TYPE_ENUM :

				enum = arnold.AiParamGetEnum( param )
				presets = IECore.StringVectorData()
				while True :
					preset = arnold.AiEnumGetString( enum, len( presets ) )
					if not preset :
						break
					presets.append( preset )

				__metadata[paramPath]["plugValueWidget:type"] = "GafferUI.PresetsPlugValueWidget"
				__metadata[paramPath]["presetNames"] = presets
				__metadata[paramPath]["presetValues"] = presets

##########################################################################
# Gaffer Metadata queries. These are implemented using the preconstructed
# registry above.
##########################################################################

def __nodeDescription( node ) :
Esempio n. 3
0
def getParameterStr(paramType, paramValue=None, paramEntry=None):
    typeStr = ''
    valueStr = ''
    optionsStr = ''
    if paramType == ai.AI_TYPE_BYTE:
        typeStr = 'uchar'
        if paramValue:
            valueStr = str(paramValue.contents.BYTE)
    elif paramType == ai.AI_TYPE_INT:
        typeStr = 'int'
        if paramValue:
            valueStr = str(paramValue.contents.INT)
    elif paramType == ai.AI_TYPE_UINT:
        typeStr = 'uint'
        if paramValue:
            valueStr = str(paramValue.contents.UINT)
    elif paramType == ai.AI_TYPE_BOOLEAN:
        typeStr = 'bool'
        if paramValue:
            valueStr = 'true' if paramValue.contents.BOOL else 'false'
    elif paramType == ai.AI_TYPE_FLOAT:
        typeStr = 'float'
        if paramValue:
            valueStr = str(paramValue.contents.FLT)
    elif paramType == ai.AI_TYPE_RGB:
        typeStr = 'color3f'
        if paramValue:
            rgbVal = paramValue.contents.RGB
            valueStr = '({},{},{})'.format(str(rgbVal.r), str(rgbVal.g),
                                           str(rgbVal.b))
    elif paramType == ai.AI_TYPE_RGBA:
        typeStr = 'color4f'
        if paramValue:
            rgbaVal = paramValue.contents.RGBA
            valueStr = '({},{},{},{})'.format(str(rgbaVal.r), str(rgbaVal.g),
                                              str(rgbaVal.b), str(rgbaVal.a))
    elif paramType == ai.AI_TYPE_VECTOR:
        typeStr = 'vector3f'  # vector3f
        if paramValue:
            vecVal = paramValue.contents.VEC
            valueStr = '({},{},{})'.format(str(vecVal.x), str(vecVal.y),
                                           str(vecVal.z))
    elif paramType == ai.AI_TYPE_VECTOR2:
        typeStr = 'float2'
        if paramValue:
            vec2Val = paramValue.contents.VEC2
            valueStr = '({},{})'.format(str(vec2Val.x), str(vec2Val.y))
    elif paramType == ai.AI_TYPE_STRING:
        typeStr = 'string'
        if paramValue:
            strVal = str(paramValue.contents.STR)
            valueStr = '"{}"'.format(str(strVal))
    elif paramType == ai.AI_TYPE_NODE:
        typeStr = 'string'
        strVal = ''
        valueStr = '""'

    # FIXME: matrix parameter is an array
    elif paramType == ai.AI_TYPE_MATRIX:
        typeStr = 'matrix4d'
        if paramValue:
            if paramValue.contents.pMTX is None:
                return '', '', ''
            mtxVal = paramValue.contents.pMTX[0]
            valueStr = '(({},{},{},{}),({},{},{},{}),({},{},{},{}),({},{},{},{}))'.format(mtxVal[0][0], mtxVal[0][1], mtxVal[0][2], mtxVal[0][3], mtxVal[1][0],\
                mtxVal[1][1],mtxVal[1][2],mtxVal[1][3],\
                mtxVal[2][0], mtxVal[2][1], mtxVal[2][2],\
                mtxVal[2][3], mtxVal[3][0],mtxVal[3][1],\
                mtxVal[3][2],mtxVal[3][3])
    elif paramType == ai.AI_TYPE_ENUM:
        typeStr = 'token'
        paramEnum = ai.AiParamGetEnum(paramEntry)
        if paramValue:
            intVal = paramValue.contents.INT
            strVal = str(ai.AiEnumGetString(paramEnum, intVal))

            # FIXME we still have a problem with parameter "auto" as it creates a token that can't be parsed properly in the generated file tokens.h
            if strVal == 'auto':
                strVal = 'metric_auto'

            if strVal == 'linux':
                strVal = 'os_linux'

            valueStr = '"{}"'.format(strVal)
        optionsStr = '\n        allowedTokens = ['

        i = 0
        while True:
            t = ai.AiEnumGetString(paramEnum, i)
            if t is None:
                break

            if t == 'auto':
                t = "metric_auto"

            if t == 'linux':
                t = "os_linux"

            if i > 0:
                optionsStr += ','
            optionsStr += '"{}"'.format(t)
            i += 1
        optionsStr += ']'

    elif paramType == ai.AI_TYPE_CLOSURE:  # shouldn't be needed since closures are just for shaders
        typeStr = 'color4f'
        valueStr = '(0,0,0,0)'

    return typeStr, valueStr, optionsStr
Esempio n. 4
0
            # arnold metadata entries.
            param = arnold.AiParamIteratorGetNext(paramIt)
            paramName = arnold.AiParamGetName(param)
            paramPath = nodeName + "." + paramName

            description = __aiMetadataGetStr(nodeEntry, paramName, "desc")
            if description is not None:
                __descriptions[paramPath] = description

            paramType = arnold.AiParamGetType(param)
            if paramType == arnold.AI_TYPE_ENUM:

                enum = arnold.AiParamGetEnum(param)
                namesAndValues = []
                while True:
                    enumLabel = arnold.AiEnumGetString(enum,
                                                       len(namesAndValues))
                    if not enumLabel:
                        break
                    namesAndValues.append((enumLabel, enumLabel))

                __plugValueWidgetCreators[paramPath] = (
                    GafferUI.EnumPlugValueWidget, namesAndValues)

##########################################################################
# Gaffer Metadata queries. These are implemented using the preconstructed
# registry above.
##########################################################################


def __nodeDescription(node):
Esempio n. 5
0
def __translateNodeMetadata(nodeEntry):

    nodeName = arnold.AiNodeEntryGetName(nodeEntry)

    # Shader description. We support Arnold-style "desc" and
    # OSL style "help".

    description = __aiMetadataGetStr(nodeEntry,
                                     None,
                                     "desc",
                                     defaultValue=__aiMetadataGetStr(
                                         nodeEntry, None, "help"))
    if description is not None:
        __metadata[nodeName]["description"] = description

    # Documentation URL. We support OSL-style "URL"

    url = __aiMetadataGetStr(nodeEntry, None, "URL")
    if url is not None:
        __metadata[nodeName]["documentation:url"] = url

    havePages = False
    paramIt = arnold.AiNodeEntryGetParamIterator(nodeEntry)
    while not arnold.AiParamIteratorFinished(paramIt):

        ## \todo We could allow custom ui types to be specified using
        # arnold metadata entries.
        param = arnold.AiParamIteratorGetNext(paramIt)
        paramName = arnold.AiParamGetName(param)
        paramPath = nodeName + ".parameters." + paramName

        # Parameter description

        description = __aiMetadataGetStr(nodeEntry, paramName, "desc")
        if description is not None:
            __metadata[paramPath]["description"] = description

        # Parameter presets from enum values

        paramType = arnold.AiParamGetType(param)
        if paramType == arnold.AI_TYPE_ENUM:

            enum = arnold.AiParamGetEnum(param)
            presets = IECore.StringVectorData()
            while True:
                preset = arnold.AiEnumGetString(enum, len(presets))
                if not preset:
                    break
                presets.append(preset)

            __metadata[paramPath][
                "plugValueWidget:type"] = "GafferUI.PresetsPlugValueWidget"
            __metadata[paramPath]["presetNames"] = presets
            __metadata[paramPath]["presetValues"] = presets

        # Nodule type from linkable metadata and parameter type

        linkable = __aiMetadataGetBool(
            nodeEntry,
            paramName,
            "linkable",
            defaultValue=paramType
            not in (arnold.AI_TYPE_BYTE, arnold.AI_TYPE_INT,
                    arnold.AI_TYPE_UINT, arnold.AI_TYPE_BOOLEAN,
                    arnold.AI_TYPE_ENUM, arnold.AI_TYPE_STRING))
        __metadata[paramPath][
            "nodule:type"] = "GafferUI::StandardNodule" if linkable else ""

        # PlugValueWidget type from OSL "widget"
        widget = None
        widget = __aiMetadataGetStr(nodeEntry, paramName, "widget", widget)
        if widget is not None:
            __metadata[paramPath]["plugValueWidget:type"] = {
                "number": "GafferUI.NumericPlugValueWidget",
                "string": "GafferUI.StringPlugValueWidget",
                "boolean": "GafferUI.BoolPlugValueWidget",
                "checkBox": "GafferUI.BoolPlugValueWidget",
                "popup": "GafferUI.PresetsPlugValueWidget",
                "mapper": "GafferUI.PresetsPlugValueWidget",
                "filename": "GafferUI.PathPlugValueWidget",
                "null": "",
            }[widget]

        # Layout section from OSL "page".

        page = __aiMetadataGetStr(nodeEntry, paramName, "page")
        if page is not None:
            havePages = True
            __metadata[paramPath]["layout:section"] = page

        # Label from OSL "label"
        label = __aiMetadataGetStr(nodeEntry, paramName, "label")
        if label is not None:
            __metadata[paramPath]["label"] = label
        elif "_" in paramName:
            # Label from Arnold naming convention
            # Arnold uses snake_case rather than camelCase for naming, so translate this into
            # nice looking names
            __metadata[paramPath]["label"] = " ".join(
                [i.capitalize() for i in paramName.split("_")])

        # NodeGraph visibility from Gaffer-specific metadata

        visible = __aiMetadataGetBool(
            nodeEntry, None, "gaffer.nodeGraphLayout.defaultVisibility")
        visible = __aiMetadataGetBool(nodeEntry, paramName,
                                      "gaffer.nodeGraphLayout.visible",
                                      visible)
        if visible is not None:
            __metadata[paramPath]["noduleLayout:visible"] = visible
Esempio n. 6
0
def __translateNodeMetadata( nodeEntry ) :

	nodeName = arnold.AiNodeEntryGetName( nodeEntry )

	# Shader description. We support Arnold-style "desc" and
	# OSL style "help".

	description = __aiMetadataGetStr( nodeEntry, None, "desc",
		defaultValue = __aiMetadataGetStr( nodeEntry, None, "help" )
	)
	if description is not None :
		__metadata[nodeName]["description"] = description

	# Documentation URL. We support OSL-style "URL" and
	# Houdini-style "help_url".

	url = __aiMetadataGetStr( nodeEntry, None, "URL",
		defaultValue = __aiMetadataGetStr( nodeEntry, None, "houdini.help_url" )
	)
	if url is not None :
		__metadata[nodeName]["documentation:url"] = url

	havePages = False
	paramIt = arnold.AiNodeEntryGetParamIterator( nodeEntry )
	while not arnold.AiParamIteratorFinished( paramIt ) :

		## \todo We could allow custom ui types to be specified using
		# arnold metadata entries.
		param = arnold.AiParamIteratorGetNext( paramIt )
		paramName = arnold.AiParamGetName( param )
		paramPath = nodeName + ".parameters." + paramName

		# Parameter description

		description = __aiMetadataGetStr( nodeEntry, paramName, "desc" )
		if description is not None :
			__metadata[paramPath]["description"] = description

		# Parameter presets from enum values

		paramType = arnold.AiParamGetType( param )
		if paramType == arnold.AI_TYPE_ENUM :

			enum = arnold.AiParamGetEnum( param )
			presets = IECore.StringVectorData()
			while True :
				preset = arnold.AiEnumGetString( enum, len( presets ) )
				if not preset :
					break
				presets.append( preset )

			__metadata[paramPath]["plugValueWidget:type"] = "GafferUI.PresetsPlugValueWidget"
			__metadata[paramPath]["presetNames"] = presets
			__metadata[paramPath]["presetValues"] = presets

		# Nodule type from linkable metadata and parameter type

		linkable = __aiMetadataGetBool(
			nodeEntry, paramName, "linkable",
			defaultValue = paramType not in (
				arnold.AI_TYPE_BYTE, arnold.AI_TYPE_INT, arnold.AI_TYPE_UINT,
				arnold.AI_TYPE_BOOLEAN, arnold.AI_TYPE_ENUM, arnold.AI_TYPE_STRING
			)
		)
		__metadata[paramPath]["nodule:type"] = "GafferUI::StandardNodule" if linkable else ""

		# PlugValueWidget type from OSL "widget" or "houdini.type".

		widget = None
		if __aiMetadataGetStr( nodeEntry, paramName, "houdini.type" ) == "file:image" :
			widget = "filename"
		widget = __aiMetadataGetStr( nodeEntry, paramName, "widget", widget )
		if widget is not None :
			__metadata[paramPath]["plugValueWidget:type"] = {
				"number" : "GafferUI.NumericPlugValueWidget",
				"string" : "GafferUI.StringPlugValueWidget",
				"boolean" : "GafferUI.BoolPlugValueWidget",
				"checkBox" : "GafferUI.BoolPlugValueWidget",
				"popup" : "GafferUI.PresetsPlugValueWidget",
				"mapper" : "GafferUI.PresetsPlugValueWidget",
				"filename" : "GafferUI.PathPlugValueWidget",
				"null" : "",
			}[widget]

		# Layout section from OSL "page".

		page = __aiMetadataGetStr( nodeEntry, paramName, "page" )
		if page is not None :
			havePages = True
			__metadata[paramPath]["layout:section"] = page

		# Label from OSL "label" or "houdini.label".

		label = __aiMetadataGetStr( nodeEntry, paramName, "houdini.label" )
		label = __aiMetadataGetStr( nodeEntry, paramName, "label", label )
		if label is not None :
			__metadata[paramPath]["label"] = label

		# NodeGraph visibility from Gaffer-specific metadata

		visible = __aiMetadataGetBool( nodeEntry, None, "gaffer.nodeGraphLayout.defaultVisibility" )
		visible = __aiMetadataGetBool( nodeEntry, paramName, "gaffer.nodeGraphLayout.visible", visible )
		if visible is not None :
			__metadata[paramPath]["noduleLayout:visible"] = visible

	# If we haven't seen any nice sane OSL "page" metadata, then have
	# a go at translating the houdini layout metadata. Surely one of the
	# most tortured ways of defining a UI ever.
	if not havePages :
		__translateHoudiniLayout( nodeEntry )
Esempio n. 7
0
def __translateNodeMetadata(nodeEntry):

    nodeName = arnold.AiNodeEntryGetName(nodeEntry)

    # Shader description. We support Arnold-style "desc" and
    # OSL style "help".

    description = __aiMetadataGetStr(nodeEntry,
                                     None,
                                     "desc",
                                     defaultValue=__aiMetadataGetStr(
                                         nodeEntry, None, "help"))
    if description is not None:
        __metadata[nodeName]["description"] = description

    # Documentation URL. We support OSL-style "URL"

    url = __aiMetadataGetStr(nodeEntry, None, "URL")
    if url is not None:
        __metadata[nodeName]["documentation:url"] = url

    paramIt = arnold.AiNodeEntryGetParamIterator(nodeEntry)
    while not arnold.AiParamIteratorFinished(paramIt):

        ## \todo We could allow custom ui types to be specified using
        # arnold metadata entries.
        param = arnold.AiParamIteratorGetNext(paramIt)
        paramName = arnold.AiParamGetName(param)
        paramPath = nodeName + ".parameters." + paramName

        # Parameter description

        description = __aiMetadataGetStr(nodeEntry, paramName, "desc")
        if description is not None:
            __metadata[paramPath]["description"] = description

        # Parameter presets from enum values

        paramType = arnold.AiParamGetType(param)
        if paramType == arnold.AI_TYPE_ENUM:

            enum = arnold.AiParamGetEnum(param)
            presets = IECore.StringVectorData()
            while True:
                preset = arnold.AiEnumGetString(enum, len(presets))
                if not preset:
                    break
                presets.append(preset)

            __metadata[paramPath][
                "plugValueWidget:type"] = "GafferUI.PresetsPlugValueWidget"
            __metadata[paramPath]["presetNames"] = presets
            __metadata[paramPath]["presetValues"] = presets

        # Nodule type from linkable metadata and parameter type

        linkable = __aiMetadataGetBool(
            nodeEntry,
            paramName,
            "linkable",
            defaultValue=paramType
            not in (arnold.AI_TYPE_BYTE, arnold.AI_TYPE_INT,
                    arnold.AI_TYPE_UINT, arnold.AI_TYPE_BOOLEAN,
                    arnold.AI_TYPE_ENUM, arnold.AI_TYPE_STRING))
        __metadata[paramPath]["nodule:type"] = None if linkable else ""

        # PlugValueWidget type from OSL "widget"
        widget = None
        widget = __aiMetadataGetStr(nodeEntry, paramName, "widget", widget)
        if widget is not None:
            __metadata[paramPath]["plugValueWidget:type"] = {
                "number": "GafferUI.NumericPlugValueWidget",
                "string": "GafferUI.StringPlugValueWidget",
                "boolean": "GafferUI.BoolPlugValueWidget",
                "checkBox": "GafferUI.BoolPlugValueWidget",
                "popup": "GafferUI.PresetsPlugValueWidget",
                "mapper": "GafferUI.PresetsPlugValueWidget",
                "filename": "GafferUI.PathPlugValueWidget",
                "null": "",
            }[widget]

        # Layout section from OSL "page".

        page = __aiMetadataGetStr(nodeEntry, paramName, "page")
        if page is not None:
            __metadata[paramPath]["layout:section"] = page

            # Uncollapse sections if desired

            collapsed = __aiMetadataGetBool(
                nodeEntry, None, "gaffer.layout.section.%s.collapsed" % page)
            if collapsed == False:
                parent = paramPath.rsplit('.', 1)[0]
                __metadata[parent]["layout:section:%s:collapsed" %
                                   page] = collapsed

        # Label from OSL "label"
        label = __aiMetadataGetStr(nodeEntry, paramName, "label")
        if label is None:
            # Label from Arnold naming convention
            # Arnold uses snake_case rather than camelCase for naming, so translate this into
            # nice looking names
            label = " ".join([i.capitalize() for i in paramName.split("_")])

        __metadata[paramPath]["label"] = label
        __metadata[paramPath]["noduleLayout:label"] = label

        childComponents = {
            arnold.AI_TYPE_VECTOR2: "xy",
            arnold.AI_TYPE_VECTOR: "xyz",
            arnold.AI_TYPE_RGB: "rgb",
            arnold.AI_TYPE_RGBA: "rgba",
        }.get(paramType)
        if childComponents is not None:
            for c in childComponents:
                __metadata["{}.{}".format(
                    paramPath,
                    c)]["noduleLayout:label"] = "{}.{}".format(label, c)

        # GraphEditor visibility from Gaffer-specific metadata

        visible = __aiMetadataGetBool(
            nodeEntry, None, "gaffer.graphEditorLayout.defaultVisibility")
        visible = __aiMetadataGetBool(nodeEntry, paramName,
                                      "gaffer.graphEditorLayout.visible",
                                      visible)
        if visible is not None:
            __metadata[paramPath]["noduleLayout:visible"] = visible

        userDefault = None
        if paramType in [
                arnold.AI_TYPE_BYTE, arnold.AI_TYPE_INT, arnold.AI_TYPE_UINT
        ]:
            userDefault = __aiMetadataGetInt(nodeEntry, paramName,
                                             "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_BOOLEAN:
            userDefault = __aiMetadataGetBool(nodeEntry, paramName,
                                              "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_FLOAT:
            userDefault = __aiMetadataGetFlt(nodeEntry, paramName,
                                             "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_RGB:
            userDefault = __aiMetadataGetRGB(nodeEntry, paramName,
                                             "gaffer.userDefault")
        #elif paramType == arnold.AI_TYPE_RGBA:
        #	userDefault = __aiMetadataGetRGBA( nodeEntry, paramName, "gaffer.userDefault" )
        elif paramType == arnold.AI_TYPE_VECTOR:
            userDefault = __aiMetadataGetVec(nodeEntry, paramName,
                                             "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_VECTOR2:
            userDefault = __aiMetadataGetVec2(nodeEntry, paramName,
                                              "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_STRING:
            userDefault = __aiMetadataGetStr(nodeEntry, paramName,
                                             "gaffer.userDefault")
        elif paramType == arnold.AI_TYPE_ENUM:
            userDefault = __aiMetadataGetStr(nodeEntry, paramName,
                                             "gaffer.userDefault")

        if userDefault:
            __metadata[paramPath]["userDefault"] = userDefault