Hi Arvid

Yes, I noticed that yesterday too.
The menu command loads a preset, and in that case, the defaults come from the preset.


On 11/01/2013 3:35 AM, Arvid Björn wrote:

Thanks, that was very helpful!

It's working fine when you create shader nodes in the render tree, but it doesn't apply to Get->Material->Architectural, the node you get from that still uses the old defaults. Is it a different callback?

Anyway, here's what I came up.


------8<---------------

import win32com.client
from win32com.client import constants

from siutils import si        # Application
from siutils import log        # LogMessage
from siutils import disp    # win32com.client.Dispatch
from siutils import C        # win32com.client.constants

null = None
false = 0
true = 1

def XSILoadPlugin( in_reg ):
    in_reg.Author = "blairs"
    in_reg.Name = "ShaderDef Plug-in"
    in_reg.Major = 1
    in_reg.Minor = 0

in_reg.RegisterEvent("CreateShaderDef",constants.siOnCreateShaderDef)

    return true

def XSIUnloadPlugin( in_reg ):
    strPluginName = in_reg.Name
    return true



def dispFix( badDispatch ):
    import win32com.client.dynamic
    # Re-Wraps a bad dispatch into a working one:
    return win32com.client.dynamic.Dispatch(badDispatch)

def setColorP(oDef, param, r, g, b):
    oB = oDef.InputParamDefs.GetParamDefByName( param )
    x = dispFix(oB).SubParamDefs
    oRed = x.GetParamDefByName( "red" )
    oGreen = x.GetParamDefByName( "green" )
    oBlue = x.GetParamDefByName( "blue" )
    oRed.DefaultValue = r
    oGreen.DefaultValue = g
    oBlue.DefaultValue = b
    return

def setValueP(oDef, param, v):
    oB = oDef.InputParamDefs.GetParamDefByName( param )
    oB.DefaultValue = v
    return

def setBoolP(oDef, param, b):
    oB = oDef.InputParamDefs.GetParamDefByName( param )
    oB.DefaultValue = b
    return


# Callback for the CreateShaderDef event.
def CreateShaderDef_OnEvent( in_ctxt ):
    oD = in_ctxt.GetAttribute("ShaderDef")
    sProgID = str(in_ctxt.GetAttribute("ProgID"))

    if "Softimage.mia_material_phen.1.0" in sProgID:
        setValueP(oD, "reflectivity", 0)
        setBoolP(oD, "ao_on", True)
        setValueP(oD, "ao_samples", 1)
        setValueP(oD, "refl_gloss_samples", 1)
        setValueP(oD, "refr_gloss_samples", 1)
        setValueP(oD, "refl_base_gloss_samples", 1)
        setColorP(oD, "ao_dark", 0,0,0)
        setColorP(oD, "diffuse", 0.75,0.75,0.75)
        setColorP(oD, "refl_base_color", 0,0,0)


#     Return value is ignored as this event can not be aborted.
    return true



------8<---------------




On Thu, Jan 10, 2013 at 3:02 PM, Stephen Blair <stephenrbl...@gmail.com <mailto:stephenrbl...@gmail.com>> wrote:

    Here's a hint:
    oRefl_Color = oDef.InputParamDefs.GetParamDefByName( "refl_color" )
    print si.ClassName( oRefl_Color )

    also, I had to use dispFix on oRefl_Color



    On 10/01/2013 3:38 AM, Arvid Björn wrote:
    Trying it again directly in the script editor, this line actually
    does work, just not in the context of the plugin for some reason:

    oDef.InputParamDefs.GetParamDefByName("reflectivity").DefaultValue =
    0.3

    Either way, it's working now, but I can't figure out how to
    change a color value such as the diffuse color and possibly other
    more complex properties. I really can't find any reference to
    these objects in the SDK. The only thing that works is assigning
    single numbers, how do you assign a color to "DefaultValue"?

    Sorry if this is obvious ;)


    On Wed, Jan 9, 2013 at 3:50 PM, Arvid Björn <arvidbj...@gmail.com
    <mailto:arvidbj...@gmail.com>> wrote:

        Great! I was a bit confused by the example as it did it all
        on one line of code. This wouldn't work:

        oDef.InputParamDefs.GetParamDefByName( "reflectivity"
        ).DefaultValue = 0.3

        I'll try yours, thanks!



        On Wed, Jan 9, 2013 at 3:32 PM, Stephen Blair
        <stephenrbl...@gmail.com <mailto:stephenrbl...@gmail.com>> wrote:

            Hi

            If you wanted to change the default value, you do
            something like this:


            from siutils import si        # Application
            from siutils import log        # LogMessage
            from siutils import disp    # win32com.client.Dispatch
            from siutils import C        # win32com.client.constants

            # Get ShaderDef for the Environment shader
            sProgID = "Softimage.mia_material_phen.1.0"
            oDef = si.GetShaderDef( sProgID )

            # Get ShaderParamDef for the Tranformation parameter
            oReflectivity = oDef.InputParamDefs.GetParamDefByName(
            "reflectivity" )

            # Change the default value
            oReflectivity.DefaultValue = 0.333









            On 09/01/2013 8:58 AM, Arvid Björn wrote:

            Honestly didn't know that existed, but I'd rather have
            it as a plugin on the workgroup so I can keep it general
            across our workstations and future versions, thanks
            though. =)




            On Wed, Jan 9, 2013 at 2:39 PM, César Sáez
            <cesa...@gmail.com <mailto:cesa...@gmail.com>> wrote:

                Or just use the preset manager :)


                On Wed, Jan 9, 2013 at 2:33 PM, Arvid Björn
                <arvidbj...@gmail.com <mailto:arvidbj...@gmail.com>>
                wrote:

                    Thanks, sounds good! A default scene takes care
                    of everything except default shader definitions.

                    Can't get it to work though, I'm using the
                    example in that article to try and change the
                    architectural shader, but using the examples and
                    looking through the SDK I can't figure out how
                    to actually set the values, which method or
                    syntax should I use?

                        if "Softimage.mia_material_phen.1.0" in sProgID:
                    oDef.InputParamDefs.GetParamDefByName(
                    "reflectivity" ) --> ???




                    On Wed, Jan 9, 2013 at 12:02 PM, Stephen Blair
                    <stephenrbl...@gmail.com
                    <mailto:stephenrbl...@gmail.com>> wrote:

                        You could use events eg OnNewScene.
                        Or create your own presets?

                        I'd avoid editing the factory SPDLs and
                        presets (I think you can probably find a
                        number of posts from Luc-Eric about defaults
                        and spdls and the factory location)

                        For shaders, you can use events to override
                        SPDL defaults with a OnCreateShaderDef
                        
http://xsisupport.com/2012/02/27/overriding-spdl-defaults/






                        On 09/01/2013 5:20 AM, Arvid Björn wrote:

                            Hi,

                            Is it possible to change default
                            settings of the rendering ppg,
                            architectural shader settings, geo
                            approx, lights etc?

                            There are so many things that I
                            constantly edit because the default
                            settings isn't really up to date. I've
                            made a few script buttons for it, but
                            I'd rather just have different default
                            settings.

                            I'd be interested in hearing how you all
                            solve this on a daily basis. Can you dig
                            up the SPDLs and just edit those? Could
                            it even be put in a workgroup so it
                            works globally?


                            Cheers











Reply via email to