Calling a Tool (Naming Tool) and Modify the Parameters
-
Hi,
I want to rename a joint chain using the naming tool. Here is the script:
import c4d nTool = c4d.CallCommand(1019952) nTool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" nTool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH] = "_R_"
However, it gives me an error of:
Traceback (most recent call last): File "scriptmanager", line 4, in <module> TypeError: 'NoneType' object does not support item assignment
From the previous topics, I think the reason is CallCommand actually returns a NoneType. My problem is how do I modify naming tool after or store it in a variable so I can modify it accordingly.
Thank you for looking at my problem.
-
@bentraje said in Calling a Tool (Naming Tool) and Modify the Parameters:
CallCommand
This method didn't returns any value.
-
Hi @mikeudin
Thanks for the response. I'm not sure I get your response.Yes, it returns none. Is there a way to modify the settings of the naming tool?
I also tried the following:
import c4d nTool = c4d.GetCommandName(1019952) nTool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" nTool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH] = "_R_"
or
import c4d nTool =1019952 nTool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" nTool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH] = "_R_"
However, it still gives me an error.
-
You need to obtain the tool's data in order to be able to modify/set it.
The callcommand just activates the tool.import c4d def main(): # activate the command c4d.CallCommand(1019952) # change its settings nTool = c4d.plugins.GetToolData(doc, 1019952) nTool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" nTool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH] = "_R_" # Execute main() if __name__=='__main__': main()
-
Thanks for the response. The GetToolData was new to me.
Forgive me for asking again but is there a way to also script theReplace Name
ButtonHere is the code is far
import c4d def main(): # activate the command c4d.CallCommand(1019952) # change its settings nTool = c4d.plugins.GetToolData(doc, 1019952) nTool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" nTool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH] = "_R_" c4d.CallButton(nTool, c4d.ID_CA_JOINT_NAMING_REPLACE_APPLY) # This line errors out. # Execute main() if __name__=='__main__': main()
It gives an error of
TypeError: argument 1 must be c4d.BaseList2D, not c4d.BaseContainer
Under the the Script log, whenever I click the button it returns this line
c4d.CallButton(tool(), c4d.ID_CA_JOINT_NAMING_REPLACE_APPLY)
So I was just thinking to replace the
tool()
with jus the variablenTool
but I guess I was wrongIs there a way around this?
Thank you
-
In the above code "nTool" is a BaseContainer, that won't work.
I also found the following in the legacy forum
import c4d def main(): toolID = 1019952 c4d.CallCommand(toolID) tool=c4d.plugins.FindPlugin(toolID, c4d.PLUGINTYPE_TOOL) tool[c4d.ID_CA_JOINT_NAMING_REPLACE] = "_L_" tool[c4d.ID_CA_JOINT_NAMING_REPLACE_WITH]= "_R_" c4d.CallButton(tool, c4d.ID_CA_JOINT_NAMING_REPLACE_APPLY) c4d.EventAdd()
Another take on modifying the settings, since the "tool" returned from
FindPlugin
is aBasePlugin
which is derived fromBaseList2D
, exactly what we need for theCallButton
-
Works as expected. Phew! I never knew it is this complicated.
Thanks again. Have a great day ahead!