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>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> 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>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> wrote: >>> >>>> Or just use the preset manager :) >>>> >>>> >>>> On Wed, Jan 9, 2013 at 2:33 PM, Arvid Björn <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> 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 >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >>> >> > >