Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 26/05/2013 at 07:06, xxxxxxxx wrote:
Hi,
can anyone point me to the correct BFM_MESSAGE id to call a toggle BitmapButton click in a GeDialog / toggle its state ? I have that code which does work in general (it does disable the button, but i want to toggle it as described).
def Execute(self, doc) : fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) if isinstance(tool, plugins.BasePlugin) : data = tool.GetNodeData() if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) : if isinstance(data.Dialog, gui.GeDialog) : print data.Dialog.SendMessage(id = fhPolyTools.IDC_BASE_FREEZE_BTN, msg = c4d.BaseContainer(c4d.BFM_DISABLE)) return True
Thank you for your help and happy rendering,
Ferdinand
On 26/05/2013 at 07:37, xxxxxxxx wrote:
hm,
that is how i thonk it should work, but it does not .
def Execute(self, doc) : fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) if isinstance(tool, plugins.BasePlugin) : data = tool.GetNodeData() if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) : if isinstance(data.Dialog, gui.GeDialog) : msg, bc = c4d.BaseContainer(c4d.BFM_VALUECHNG), c4d.BaseContainer(c4d.BFM_ACTION) bc.SetLong(c4d.BFM_ACTION_ID, fhPolyTools.IDC_BASE_FREEZE_BTN) bc.SetBool(c4d.BFM_ACTION_VALUE, fhPolyTools.ID_ISFROZEN) msg.SetContainer(c4d.BFM_ACTION, bc) data.Dialog.SendMessage(id = fhPolyTools.IDC_BASE_FREEZE_BTN, msg = msg) return True
On 26/05/2013 at 07:48, xxxxxxxx wrote:
Never tried it with Python. My C++ notes say to use it like this:
BaseContainer msg(BFM_ACTION); msg.SetLong(BFM_ACTION_ID, YOUR_ID); msg.SetLong(BFM_ACTION_VALUE, TRUE);
-ScottA
On 26/05/2013 at 07:56, xxxxxxxx wrote:
Hi scott,
thanks for your answer. I tried that too, using SetLong for BFM_ACTION_VALUE and sending the BMF_ACTION container directly, but that did not work either for me.
On 26/05/2013 at 08:27, xxxxxxxx wrote:
You're asking about GeDialog. Yet the code you posted is for a Tool Data plugin? Are you trying to send a message from a tool plugin to a GeDialog plugin?
Also. BitmapButtons have their own settings to do things like TOGGLE: _ customgui_bitmapbutton.h_ Enable() is sort of a generic way to grey things out in dialogs.
On 26/05/2013 at 08:59, xxxxxxxx wrote:
ToolData plugins have in contrast to ToolDescriptionData plugins a GeDialog attached to it. I am accessing the dialog attached to the tool. Check the example code. The code itself is from a CommandData plugin.
I am aware about the nature of bfm_disable. I have posted it just as a demonstration that the general approach works and that i can alter the gadget attached to id that way. I am only missing the correct id(s).
On 26/05/2013 at 11:58, xxxxxxxx wrote:
hey,
for the record and others who might search on this, i made it just to complicated. I thought BitmapButton is not wrapped for python but it actually is. So you can keep it pretty straight forward.
# --- Toggle the freeze state and toggle the freeze button of the active fhBaseToolData # ----------------------------------------------------------------------------------------------- def Execute(self, doc) : tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) if (isinstance(tool, plugins.BasePlugin) and isinstance(tool.GetNodeData(), fhBaseToolData.fhBaseToolData) and isinstance(tool.GetNodeData().Dialog, fhBaseToolDialog.fhBaseToolDialog) and tool.GetNodeData().Dialog.CanFreeze) : btn = tool.GetNodeData().Dialog.FindCustomGui(id = fhPolyTools.IDC_BASE_FREEZE_BTN, pluginid = c4d.CUSTOMGUI_BITMAPBUTTON) if isinstance(btn, c4d.gui.BitmapButtonCustomGui) : fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN btn.SetToggleState(fhPolyTools.ID_ISFROZEN) c4d.SpecialEventAdd(messageid = fhPolyTools.PID_FHFREEZETOOL) return True