Buttons: Apply, NewTransform,Reset

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 09/04/2012 at 07:47, xxxxxxxx wrote:

Maxon,
Please provide me(us) the python code to execute these buttons.
They are executed differently from the other buttons.

Here is a C++ example of executing the Apply button on the TransformTool:

    CallCommand(200000069);                                    //Launch the Transfer Tool  
  LONG tool_id = doc->GetAction();                           //Get the active tool  
  BasePlugin *tool = FindPlugin(tool_id, PLUGINTYPE_TOOL);   //Get the tools id  
  if (!tool) return FALSE;   
  
/////////// This section of code is used to execute the Apply button ///////////////      
  BaseContainer bc(BFM_ACTION);                     //Create a container with an action id  
  bc.SetLong(BFM_ACTION_ID, MDATA_TRANSFER_);       //Executes the transfer tool's apply button  
  bc.SetLong(BFM_ACTION_VALUE, TRUE);               //Not sure if this is actually needed or not  
  
  DescriptionCommand dc;  
  dc.id = DescID(DescLevel(MDATA_APPLY, DTYPE_BUTTON, tool->GetType()));  
  
  DescriptionCheckUpdate du;  
  du.doc = doc;  
  du.descid = &dc.id;  
  du.drawflags = 0;  
  
  tool->Message(MSG_DESCRIPTION_COMMAND, (void* )&dc);  
  tool->Message(MSG_DESCRIPTION_CHECKUPDATE, (void* )&du);  
  tool->Message(MSG_DESCRIPTION_USERINTERACTION_END);  
  tool->Message(MSG_TOOL_RESTART);  
  //////// End button code ///////////////////

Please provide me(us) with the python code version of this.

Thanks,
-ScottA

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/04/2012 at 03:23, xxxxxxxx wrote:

Hi,

The Python code is:

import c4d
from c4d import plugins
  
  
def main() :
    c4d.CallCommand(c4d.ID_MODELING_TRANSFER_TOOL)
    
    tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
    if tool is not None:
        c4d.CallButton(tool, c4d.MDATA_APPLY)
        c4d.EventAdd()
  
if __name__=='__main__':
    main()

EDIT: I finally found how to make it work; I just missed c4d.EventAdd(). It's also missing in your C++ code.

And this code does nothing and isn't necessary:

Originally posted by xxxxxxxx

/////////// This section of code is used to execute the Apply button ///////////////    
BaseContainer bc(BFM_ACTION);                 //Create a container with an action id
bc.SetLong(BFM_ACTION_ID, MDATA_TRANSFER_);   //Executes the transfer tool's apply button
bc.SetLong(BFM_ACTION_VALUE, TRUE);           //Not sure if this is actually needed or not

MDATA_TRANSFER_ marks the end of MDATA_TRANSFER's container entry enumeration; it's not a valid ID.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/04/2012 at 08:07, xxxxxxxx wrote:

Thank You sir.🍺

Please, please, please always include the button code to execute tools in the docs in the future.
Every time they add a new tool. I have to contact support to ask how to execute them.
I shouldn't have to bother you guys with such trivial questions.

BTW: This code also does not work in R12.

Keep up the good work Yannick,
-ScottA