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++  ;


    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.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:


    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:


    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.SetInt32(DESC_ANIMATE, DESC_ANIMATE_OFF);  
    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,

Log in to reply