Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 15/01/2013 at 04:36, xxxxxxxx wrote:
The API of C4D treat the controling via scripts and PlugIns. Is there a possibility to control C4D through an external program? For example I have a self-written tool, where I set a pathname, click on a button, C4D starts, loads the specified file, sets cameras and lighting, renders the picture, save the picture and close itself.
I hope I made myself understandable enough. Thank you!
On 15/01/2013 at 04:51, xxxxxxxx wrote:
yes it is. you can read command line parameters with a plugin. your plugin has to implement a static PluginMesage() method to read these command line parameters. this would be the easiest approach.
you could of course acutally let two programs talk with each other - your external python software and your python plugin, you should check os and subprocess for this.
from the c4d python SDK:
import c4d import sys def PluginMessage(id, data) : if id==c4d.C4DPL_COMMANDLINEARGS: print sys.argv #print arguments return True return False
On 20/01/2013 at 22:16, xxxxxxxx wrote:
I'm sorry for my late reply. Thank you for your comment! I'll try this as soon as possible. But how do I start the plugin in Cinema4D with an external program? I can start C4D with parameters, that's fine. But how to start the plugin in C4D to read the passed parameters?
Thanks in advance!
On 21/01/2013 at 00:54, xxxxxxxx wrote:
Originally posted by xxxxxxxx But how do I start the plugin in Cinema4D with an external program? I can start C4D with parameters, that's fine. But how to start the plugin in C4D to read the passed parameters?
Originally posted by xxxxxxxx
But how do I start the plugin in Cinema4D with an external program? I can start C4D with parameters, that's fine. But how to start the plugin in C4D to read the passed parameters?
All the plugins are automatically loaded at startup of CINEMA when executed via the command line. C4D then sends a C4DPL_COMMANDLINEARGS message to them.
On 21/01/2013 at 04:29, xxxxxxxx wrote:
Thank you for your reply. But I'm sorry, I don't get it.
I adapted LittleDevils code like this:
def PluginMessage(id, data) : if id == c4d.C4DPL_COMMANDLINEARGS: print sys.argv print 'Program started' main() return True return False def main() : gui.MessageDialog('Hello 3rd party program!') if __name__=='__main__': main()
I tried the following call in the windows link: "<path>\CINEMA 4D 64 Bit.exe" -Test This causes an exception on startup. So I searched for the allowed arguments and found this: http://www.maxoncomputer.com/faq_detail.asp?idnum=1977 I doubt that these are all allowed arguments, so I tried "<path>\CINEMA 4D 64 Bit.exe" -help what opens a Command window on startup which closes itself immediately with the Message "Warning: Unknown arguments: -help" In the list of arguments which -help gave me there was no argument I could use, which only triggers my plugin but not affect C4D in other means.
So what am I supposed to do?
On 21/01/2013 at 07:50, xxxxxxxx wrote:
Originally posted by xxxxxxxx I adapted LittleDevils code like this: def PluginMessage(id, data) : if id == c4d.C4DPL_COMMANDLINEARGS: print sys.argv print 'Program started' main() return True return False def main() : gui.MessageDialog('Hello 3rd party program!') if __name__=='__main__': main()
main() is executed twice. Do you really want that? Also implementing main() isn't necessary if you only want to parse the arguments from the command line.
Originally posted by xxxxxxxx I tried the following call in the windows link: "<path>\CINEMA 4D 64 Bit.exe" -Test This causes an exception on startup.
I tried the following call in the windows link: "<path>\CINEMA 4D 64 Bit.exe" -Test This causes an exception on startup.
Does CINEMA crashes? Or are you just getting "Warning: Unknown arguments: -Test"? Is 'Test' argument printed to the console?
Originally posted by xxxxxxxx So I searched for the allowed arguments and found this: http://www.maxoncomputer.com/faq_detail.asp?idnum=1977
So I searched for the allowed arguments and found this: http://www.maxoncomputer.com/faq_detail.asp?idnum=1977
This page was done for R9.5 so it's outdated. CINEMA 4D command line arguments are documented in CINEMA help manual (see "Starting CINEMA 4D via the Command Line").
Originally posted by xxxxxxxx I doubt that these are all allowed arguments, so I tried "<path>\CINEMA 4D 64 Bit.exe" -help what opens a Command window on startup which closes itself immediately with the Message "Warning: Unknown arguments: -help"
I doubt that these are all allowed arguments, so I tried "<path>\CINEMA 4D 64 Bit.exe" -help what opens a Command window on startup which closes itself immediately with the Message "Warning: Unknown arguments: -help"
You don't have to worry about this warning, ignore it.
On 22/01/2013 at 01:22, xxxxxxxx wrote:
Originally posted by xxxxxxxx main() is executed twice. Do you really want that? Also implementing main() isn't necessary if you only want to parse the arguments from the command line.
This code was a test to find out, how this argument parsing works. So no, it wasn't intended to start the main() twice. But sadly it isn't executed even once!
Originally posted by xxxxxxxx Does CINEMA crashes? Or are you just getting "Warning: Unknown arguments: -Test"? Is 'Test' argument printed to the console?
Yesterday C4D closes immediately after starting up. Today I tried it once more and this time it stays alive and writes "Warning: Unknown arguments: -Test" to the console. But my code isn't executed in any form.
Originally posted by xxxxxxxx This page was done for R9.5 so it's outdated. CINEMA 4D command line arguments are documented in CINEMA help manual (see "Starting CINEMA 4D via the Command Line").
I checked that but there aren't any new or useful arguments for me and my problem.
Originally posted by xxxxxxxx You don't have to worry about this warning, ignore it.
Ok.
On 22/01/2013 at 02:51, xxxxxxxx wrote:
Originally posted by xxxxxxxx This code was a test to find out, how this argument parsing works. So no, it wasn't intended to start the main() twice. But sadly it isn't executed even once!
Is your plugin file saved in your user plugins folder ( {USER_FOLDER}/plugins ) with .pyp extension?
Originally posted by xxxxxxxx Yesterday C4D closes immediately after starting up. Today I tried it once more and this time it stays alive and writes "Warning: Unknown arguments: -Test" to the console. But my code isn't executed in any form.
What version of CINEMA do you run?
On 22/01/2013 at 03:31, xxxxxxxx wrote:
note that you aren't actually tied to the PluginMessage method it is just the recommended way. you can access the command line value from everywhere in your code. my first posting has been a bit misleading on that. argv is just one of the global variables for the current instance of python. you could use it to filter a plugin registration for example. something like that.
import c4d, sys, string from c4d import documents, plugins class myCommandLinePluginData(plugins.CommandData) : def Execute(self, doc) : # check for sub arguments if 'doThis' in sys.argv: self.doThis() sys.argv.remove('doThis') if 'doThat' in sys.argv: self.doThat() sys.argv.remove('doThat') return True if __name__ == "__main__": # check the cl parameter if 'myMainCommand' in sys.argv: # instance of your pluin class mypluginInstance = myCommandLinePluginData() # register plugin c4d.plugins.RegisterCommandPlugin (blah, blah, blah, dat = mypluginInstance, blah) # consume the cl parameter to have everything nice and steady sys.argv.remove('myMainCommand') # call execute of your plugin, you could use any method of course # just took execute, as it would let the user execute it in manually. mypluginInstance.Execute(documents.GetActiveDoucment())
On 22/01/2013 at 04:45, xxxxxxxx wrote:
Oh my, I have to apologize! I was so used to develop with scripts (because they are easier to handle, you don't have to restart C4D again and again) that I don't thought of plugins. Sure in every post there is "plugin" in big letters but I overlooked it completly. As soon as I moved my script to the plugins folder and changed the ending it all works like a charm.
Thank you both for your kind replies!