Tried your solution but could not get it to work :(
Found a way, but I would need to understand the internal mechanism to
reproduce it more cleanly.
from win32com.client import constants
> constants.__dicts__.append({'PLUGIN_GLOBAL_SCOPE': None,'project':
> {},'category': '','entities': []})
> container = [d for d in constants.__dicts__ if 'PLUGIN_GLOBAL_SCOPE' in
> d][0]
Far from being ideal ...
2012/5/11 Alok Gandhi <[email protected]>
> One last thing, I checked one plugin where this works, of course in
> windows, but in my code I do not use 'global ' keyword when accesing the
> global dict. Something like this:
> globalDict = {}
>
> def _setGlobalDict(inObj=None, meshData=None):
> if inObj:
> globalDict['obj'] = inObj # no use of 'global' here.
>
> if meshData:
> globalDict['data'] = meshData
>
> return True
>
> and then I call _setGlobalDict() wherever I need to.
>
>
> On Fri, May 11, 2012 at 9:37 PM, Xavier Lapointe <[email protected]
> > wrote:
>
>> I'll add some context:
>>
>> - everything lives in the same plugin
>> - I tried storing it in a container coming from an imported module
>> - tried accessing and setting the global variable directly in the
>> globals() dictionary
>> - Grumble Gumble.
>>
>>
>>
>>
>> 2012/5/11 Alok Gandhi <[email protected]>
>>
>>> Yes if PPG is not getting refreshed then this seems weird. The only
>>> thing that comes to mind is maybe the custom command execution is making
>>> things go wrong. What if you use a function declared inside the plugin
>>> instead of calling the custom command ? or maybe the custom command should
>>> be implemented in the same plugin as the PPG, this does not make sense but
>>> is worth a try.
>>>
>>>
>>> On Fri, May 11, 2012 at 9:24 PM, Xavier Lapointe <
>>> [email protected]> wrote:
>>>
>>>> Hm, yes I could store it in a parameter or another way ... just this
>>>> feels hacky to get something basic done (granted no refresh happend during
>>>> the plugin execution).
>>>>
>>>> This should work, like Matt mentioned :/
>>>>
>>>> Oh well.
>>>>
>>>>
>>>>
>>>>
>>>> 2012/5/11 Alok Gandhi <[email protected]>
>>>>
>>>>> I am not sure whether this works under windows as well, the plugin
>>>>> script can get refreshed and all your global variables will be
>>>>> re-initialized. The only good approaches that I have been using is to
>>>>> store
>>>>> the varaibles in UIITems lists. This works well for the 3D com objects as
>>>>> well. Another idea would be to pass on objects returning through a safe
>>>>> array from the commands itself.
>>>>>
>>>>>
>>>>> On Fri, May 11, 2012 at 9:13 PM, Xavier Lapointe <
>>>>> [email protected]> wrote:
>>>>>
>>>>>>
>>>>>> hit another PPG UI Item ***
>>>>>>
>>>>>> ... All happening under the same Property page.
>>>>>>
>>>>>> 2012/5/11 Xavier Lapointe <[email protected]>
>>>>>>
>>>>>>> Hey guys,
>>>>>>>
>>>>>>> This one really surprised me. I tend to avoid global variable in
>>>>>>> Softimage plugins as much as I can, but sometimes it might be
>>>>>>> convenient.
>>>>>>>
>>>>>>> So basically, I wanted to use a global variable ( simple Python
>>>>>>> Dictionary ) to keep some stuff in reference while interacting with a
>>>>>>> PPG.
>>>>>>> I remember clearly that it was working well under Windows, so
>>>>>>> I assume this is a python 2.5 Linux issue (if this is an issue -
>>>>>>> please tell me if this is normal under Soft with python 2.5).
>>>>>>>
>>>>>>> Here's basically what I was trying to do:
>>>>>>>
>>>>>>> [imports ....]
>>>>>>>>
>>>>>>>> # Global Scope
>>>>>>>
>>>>>>>> LAST_SELECTION = {
>>>>>>>> 'project': {},
>>>>>>>> 'category': '',
>>>>>>>> 'entities': [],
>>>>>>>> }
>>>>>>>>
>>>>>>>> def CustomCommand_Execute():
>>>>>>>> global LAST_SELECTION
>>>>>>>> [Do some modifications to LAST_SELECTION]
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Following this pattern:
>>>>>>>
>>>>>>> - Prompt the PPG
>>>>>>> - Interact with the UI
>>>>>>> - The custom command is fired - do some modifications to
>>>>>>> LAST_SELECTION
>>>>>>> - hit another PPG UI
>>>>>>> - Hell the LAST_SELECTION global is back to the inital value!
>>>>>>>
>>>>>>> I've been tracing the LAST_SELECTION variable with id(), and it's
>>>>>>> changing every time I interact with the UI; showing clearly that there
>>>>>>> is
>>>>>>> something nasty going on under the hood (?)
>>>>>>>
>>>>>>> Any idea to get this working?
>>>>>>>
>>>>>>> Alan mentioned the
>>>>>>> Application.SetGlobal/Application.GetGlobal functions ... but still,
>>>>>>> this
>>>>>>> should be working natively, isn't?
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>> --
>>>>>>> Xavier
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Xavier
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Xavier
>>>>
>>>
>>>
>>>
>>> --
>>>
>>>
>>
>>
>> --
>> Xavier
>>
>
>
>
> --
>
>
--
Xavier