Mailing List
Home
Forum Home
Softimage
Carrara
trueSpace
Dir3d-l
Maya - a powerful 3D animation and visual effects software
Macromedia Flash Development
Subjects
Cameras
scaleDown command
black out solved
Aircraft Tutorial
Mathematical XYZ ?
Its done This vs That
Its done first week
recommendations for screen video captures?
3DExplorer "Oddity "
New Director
ProTeam renewals
Fuel 's new websites (X post)
Blue peter create a make toy
targeting groups question
XPost: Shockwave 3D game ( sort of )
RES: RES: RES: Fish Modeling
Emitting particles from object intersection
Fuel 's new websites (X post)
Texturing
Big Break Contest Videos
New Plugins
Models and Texture on my updated site
Error Installing Patch tS6 6
Plasma?
Looking for Inspiration
Weird EMail Q
It 's done first week ?
Cherry not cranberry
New game
Camera Animation Problem
Particle plugins?
 
<script >Python and the PPG global variable?

<script >Python and the PPG global variable?

2005-04-22       - By Nick

 Back
Reply:     1     2     3     4     5     6     7     8  

Cheers Bernard but I think I must have not explained myself properly...

I already have the whole ppg thing going (as you have it in your
example) in the main ppg declaration. I'm trying to get the PPG object
in the logic section of the ppg. For example, in jscript:

opset = ActiveSceneRoot.AddProperty( "CustomProperty", false,
"EasyCaptureSettings" );
var olayout = opset.PPGLayout;

opset.AddParameter3 ( "MachineName", siString, "Nick"  );
... etc

olayout.Language = "Jscript" ;
olayout.Logic = OnInit.toString() +  
      oIO_OnChanged.toString() +
      iIn_OnChanged.toString() +
      iOut_OnChanged.toString() +
      Bypass_OnChanged.toString() +
      Multi_OnChanged.toString() +
      Flip_OnClicked.toString() +
      FlipAll_OnClicked.toString() +
      OpFol_OnClicked.toString() +
      ZoomCam.toString() +
      foldername.toString() +
      SceneChecks.toString() +
      Cln_OnClicked.toString();

Then in the functions themselves you can get the ppg by simply calling
it using the PPG global variable...

function OnInit()
{
  var olayout = PPG.PPGLayout;
       etc...
}

I haven't declared this variable anywhere, it's an object that is
available by simply calling its global variable... from the docs:

PPG

Represents an instance of a Property Page. This object can be
manipulated within the event handling script code associated with a
PPGLayout. (This event handling code is often called "SPDL logic"
because in previous versions it could only be specified by putting
script code directly in a spdl file.) This object is available to
logic code as a global variable called "PPG". (For the purposes of
backward compatibility it is also available via the global variable
"PSet". It is also for reasons of backward compatibility that this
object does not derive from Context and is available as a global
variable rather than being passed as an argument to the callback
routines).

At the moment, I can create the ppg and the layout in python by hacking it:

opset = xsi.ActiveSceneRoot.AddProperty( "CustomProperty", False,
"ConstraintChanger" )
olayout = opset.PPGLayout

## Parameters
opset.AddParameter3 ( "Cons", c.siString, oCns.FullName  )
opset.AddParameter3 ( "Details", c.siString, "" )

olayout.AddRow()
## Constraint DropDown
oItem = olayout.AddEnumControl( "Cons", list(), "Which constraint?",
c.siControlCombo )
olayout.EndRow()

olayout.AddRow()
## Details
oItem = olayout.AddString( "Details", "Details", True, 100 )
olayout.EndRow()

olayout.Language = "PythonScript"
olayout.Logic = str(OnInit(opset)) + \
      str(Cons_OnChanged(opset))  

""" Now, passing the ppg object this way is dodgy as opset doesn't
exist anymore once the ppg has been created. At the moment it simply
allows me to create the ppg. """

def OnInit(opset):
  olayout = opset.PPGLayout
       # down here I populate the combo...

def Cons_OnChanged(opset):
       oCns = Application.Dictionary.GetObject( str(opset.Cons.Value) )
       # I use the ppg's combo value to get to an object and retrieve
the info I want and then print that info in a multi-line text box...

""" this is where is all fails... str(opset.Cons.Value). It works when
I first create the ppg, but since opset is no longer available after
the ppg has been created, this throws an error.
You normally would do this by simply using the "PPG" global variable
that self references the ppg object, however I can't seem to get to
it... I could do it with a Dictionary.GetObject
and then using the name of the ppg but that is unreliable...

I must be missing something but I have no idea what...

Cheers!
Nick.

On 4/23/05, Bernard Lebel <3dbernard@(protected)> wrote:
> Hi Nick,
>
> Here is an example of a ppg item in Python:
>
> # Create custom pset
> oProp = xsi.activesceneroot.addproperty( 'CustomProperty', False,
> 'ColorPicker' )
>
> # Create color parameters
> oProp.addparameter3( 'red', c.siDouble )
> oProp.addparameter3( 'green', c.siDouble )
> oProp.addparameter3( 'blue', c.siDouble )
> oProp.addparameter3( 'alpha', c.siDouble )
>
> # Provide layout to pset
> oLayout = oProp.ppglayout
>
> # Add widget
> oColor = oLayout.addcolor( 'red', 'red', True )
> oColor.setattribute( 'NoLabel', True )
>
> Hope this helps
> Bernard
>
>
> Bernard Lebel wrote:
>
> >Is PPG indeed defined somewhere? If so, where?
> >
> >Perhaps you are running into a scope problem, wich is critical in
> >Python. Keep in mind that a name assigned on the wrong scope will
> >prevent it from being usable in other scopes.
> >For instance, if you run a command that assigns a name a the top level
> >(a global for the entire script), this global will not be accessible
> >outside this file unless you import the file as a module and then
> >fetch the variable by name qualification (ie: myvariable =
> >modulename.variablename).
> >
> >Normally functions inside a module can access all global names from
> >that same module, but not from other functions, unless all these
> >functions are nested into another function and the name is assigned in
> >that one. The only way to make a name global from a function is to
> >declare it first as global with the global statement), then assign it
> >to a value.
> >
> >
> >Cheers
> >Bernard
> >
> >
> >On 4/22/05, Nick <nick.petit@(protected)> wrote:
> >
> >
> >>I haven't seen any docs or examples of creating dynamic ppgs done in
> >>Python but I'm sure it must be feasable... so far I can't seem to get
> >>the PPG global variable to work with the OnChange callback... I'm
> >>probably doing this entirely wrong as I'm still fumbling around in the
> >>dark, but this works in jscript and in vbs but I can't seem to make it
> >>work in python...
> >>
> >>olayout.Logic = str(OnInit()) + \
> >>                        str(Cons_OnChanged())
> >>
> >># then I define my functions
> >>
> >>def OnInit(opset):
> >>        olayout = PPG.PPGLayout
> >>
> >>This keeps on returning this error:
> >>
> >>#ERROR : Traceback (most recent call last):
> >>#  File "<Script Block >", line 100, in ?
> >>#    PPGCreator()
> >>#  File "<Script Block >", line 38, in PPGCreator
> >>#    olayout.Logic = str(OnInit(opset)) + str(Cons_OnChanged(opset))
> >>#  File "<Script Block >", line 41, in OnInit
> >>#    olayout = PPG.PPGLayout
> >>#NameError: global name 'PPG' is not defined
> >># - [line 41]
> >>
> >>I can hack it in a very fugly way so it will work on init by passing
> >>the functions the actual custom prop object as a variable, but after
> >>it's been created this variable no longer exists in the logic section
> >>and I'd rather not get it using a Dictionary.GetObject as it's just
> >>not reliable enough. If someone could shed some light on where I've
> >>gone wrong that would be really appreciated... :)
> >>
> >>Cheers!
> >>Nick.
> >>
> >>---
> >>Unsubscribe? Mail Majordomo@(protected) with the following text in body:
> >>unsubscribe xsi
> >>
> >>
> >>
> >
> >
> >
>
> ---
> Unsubscribe? Mail Majordomo@(protected) with the following text in body:
> unsubscribe xsi
>

---
Unsubscribe? Mail Majordomo@(protected) with the following text in body:
unsubscribe xsi