import c4d import os, sys, time #------------- # Specify these parameters ARNOLD_OPERATORS_OBJECT_NAME = "Arnold Operators" OUTPUT_PATH = "/path/to/myops.ass" #------------- # from c4dtoa_symols.h ARNOLD_OPERATOR = 1040497 ARNOLD_OPERATOR_EXPORT_COMMAND = 1041536 ARNOLD_OPERATOR_IMPORT_COMMAND = 1041537 C4DAI_OPEXP_PATH = 0 C4DAI_OPEXP_OBJECT = 1 C4DAI_OPEXP_RESULT = 1000 C4DAI_OPIMP_PATH = 0 C4DAI_OPIMP_OBJECT = 1 C4DAI_OPIMP_RESULT = 1000 def exportOperators(op, path): # setup the settings settings = c4d.BaseContainer() settings.SetFilename(C4DAI_OPEXP_PATH, path) settings.SetLink(C4DAI_OPEXP_OBJECT, op) doc.GetSettingsInstance(c4d.DOCUMENTSETTINGS_DOCUMENT).SetContainer(ARNOLD_OPERATOR_EXPORT_COMMAND, settings) # execute export print "Export operators to %s" % settings.GetFilename(C4DAI_OPEXP_PATH) c4d.CallCommand(ARNOLD_OPERATOR_EXPORT_COMMAND) # check the result resultData = doc.GetSettingsInstance(c4d.DOCUMENTSETTINGS_DOCUMENT).GetContainer(ARNOLD_OPERATOR_EXPORT_COMMAND) res = resultData.GetInt32(C4DAI_OPEXP_RESULT) if res != 0: raise Exception("[ERROR] Operator export failed: %d" % res) print "Operator export done" def importOperators(path): # create an Arnold Operators object where the operators will be imported op = c4d.BaseObject(ARNOLD_OPERATOR) doc.InsertObject(op) # setup the settings settings = c4d.BaseContainer() settings.SetFilename(C4DAI_OPIMP_PATH, path) settings.SetLink(C4DAI_OPIMP_OBJECT, op) doc.GetSettingsInstance(c4d.DOCUMENTSETTINGS_DOCUMENT).SetContainer(ARNOLD_OPERATOR_IMPORT_COMMAND, settings) # execute import print "Import operators from %s" % settings.GetFilename(C4DAI_OPIMP_PATH) c4d.CallCommand(ARNOLD_OPERATOR_IMPORT_COMMAND) # check the result resultData = doc.GetSettingsInstance(c4d.DOCUMENTSETTINGS_DOCUMENT).GetContainer(ARNOLD_OPERATOR_EXPORT_COMMAND) res = resultData.GetInt32(C4DAI_OPEXP_RESULT) if res != 0: raise Exception("[ERROR] Operator import failed: %d" % res) op.SetName("%s import" % ARNOLD_OPERATORS_OBJECT_NAME) c4d.EventAdd() print "Operator import done" def main(): # find the operator object we want to export op = doc.SearchObject(ARNOLD_OPERATORS_OBJECT_NAME) if op is None: raise Exception("Arnold Operators object is not found: %s" % ARNOLD_OPERATORS_OBJECT_NAME) # export exportOperators(op, OUTPUT_PATH) # import importOperators(OUTPUT_PATH) if __name__=='__main__': main()