Set initial state in a bitmap button
-
On 16/10/2017 at 06:54, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R17
Platform: Windows ;
Language(s) : C++ ;---------
Hello.I add a BitmapButton parameter in a NodeData's GetDDescription(....).
Here is the code:
const DescID* single_id = description->GetSingleDescID(); DescID custom_button = DescLevel(param_id, CUSTOMDATATYPE_BITMAPBUTTON, 0); if (!single_id || custom_button.IsPartOf(*single_id, NULL)) { BaseContainer cont = GetCustomDataTypeDefault(CUSTOMDATATYPE_BITMAPBUTTON); cont.SetInt32(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBUTTON); cont.SetBool(BITMAPBUTTON_BUTTON, true); cont.SetBool(BITMAPBUTTON_TOGGLE, true); if (resource_image_on > 0) cont.SetInt32(BITMAPBUTTON_ICONID1, resource_image_on); if (resource_image_off > 0) cont.SetInt32(BITMAPBUTTON_ICONID2, resource_image_off); description->SetParameter(custom_button, cont, group_id ); }
How can I set the initial state of that bitmap button ?
Thank you.
-
On 16/10/2017 at 14:59, xxxxxxxx wrote:
node->SetParameter(DescID(param_id), GeData(TRUE), DESCFLAGS_SET_0);
or GeData(FALSE) for the other state. Best to do this in Init() and not in GetDDescription().
-
On 17/10/2017 at 00:42, xxxxxxxx wrote:
Hello.
I can't use SetParameter in GetDDescription due to stack overflow issue (It is called again and again).
Also, using BaseContainer to set the toggle button as bool causes a breakpoint in Cinema 4D.Thank you.
-
On 17/10/2017 at 07:26, xxxxxxxx wrote:
Hello,
as discussed here (get toggle state of BitmapButton) the toggle state is not part of the data type. So I guess one cannot set a default value.
A toggle button is typically created by using a Boolean parameter with a CUSTOMGUI_BITMAPBOOL.
const DescID booleanButtonID = DescID(DescLevel(9999, DTYPE_BOOL, 0)); BaseContainer settings = GetCustomDataTypeDefault(DTYPE_BOOL); settings.SetBool(BITMAPBUTTON_BUTTON, true); settings.SetBool(BITMAPBUTTON_TOGGLE, true); settings.SetBool(BITMAPBUTTON_BORDER, BORDER_NONE); settings.SetInt32(DESC_ANIMATE, DESC_ANIMATE_OFF); settings.SetInt32(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBOOL); settings.SetInt32(BITMAPBOOL_ACTIVE, 300000231); settings.SetInt32(BITMAPBOOL_INACTIVE, 300000230); desc->SetParameter(booleanButtonID, settings, ID_OBJECTPROPERTIES);
As Robert already said, the default value of a parameter should be set in the Init() function.
best wishes,
Sebastian