CommandLineRendering example in SDK
-
On 25/05/2015 at 06:33, xxxxxxxx wrote:
User Information:
Cinema 4D Version:
Platform:
Language(s) :---------
Hi
I'm just starting out with c++ (coming from Python) so bare with me
I'm trying to get the CommandLineRendering part of the SDK to work. In "main.ccp" theres a section under "PluginMessage" with code for command line rendering:case C4DPL_COMMANDLINEARGS: //sample implementation of command line rendering: //void CommandLineRendering(C4DPL_CommandLineArgs* args); //CommandLineRendering((C4DPL_CommandLineArgs* )data); ..........
If i uncomment this like this, add "Bool RegisterCommandLineRendering();" to "main.h" and Build it:
case C4DPL_COMMANDLINEARGS: //sample implementation of command line rendering: void CommandLineRendering(C4DPL_CommandLineArgs* args); CommandLineRendering((C4DPL_CommandLineArgs* )data); ..........
I get theese errors:
Undefined symbols for architecture x86_64: "CommandLineRendering(C4DPL_CommandLineArgs* )", referenced from: PluginMessage(int, void* ) in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
What am i doing wrong?
Cheers
Bonsak -
On 25/05/2015 at 08:22, xxxxxxxx wrote:
Hi,
Originally posted by xxxxxxxx
case C4DPL_COMMANDLINEARGS: //sample implementation of command line rendering: //void CommandLineRendering(C4DPL_CommandLineArgs* args); //CommandLineRendering((C4DPL_CommandLineArgs* )data); ..........
If i uncomment this like this, add "Bool RegisterCommandLineRendering();" to "main.h" and Build it:
case C4DPL_COMMANDLINEARGS: //sample implementation of command line rendering: void CommandLineRendering(C4DPL_CommandLineArgs* args); CommandLineRendering((C4DPL_CommandLineArgs* )data); ..........
You've uncommented the line
//void CommandLineRendering(C4DPL_CommandLineArgs* args);
and you shouldn't. It's there in the comment to show the prototype of the function to call for the CommandLineRender example in commandlinerender.cpp.
-
On 25/05/2015 at 11:44, xxxxxxxx wrote:
Hm, i must be doing something else wrong because only uncommenting "CommandLineRendering((C4DPL_CommandLineArgs* )data);" in main.ccp gives the same error on compile.
Cheers
Bonsak -
On 26/05/2015 at 08:19, xxxxxxxx wrote:
Hi Bonsak,
The code in the SDK for the CommandLineRendering example needs some fixes and has to be changed.
I'll try to explain the changes:In commandlinerender.cpp remove the "#if 0" macro at the beginning and its respective "#endif" at the end of the file:
~~#if 0~~ #include "c4d.h" #include <string.h> #include <ctype.h>
~~#endif~~
In the same file change the definition of CommandLineRendering() function from
static void CommandLineRendering(C4DPL_CommandLineArgs* args)
to
void CommandLineRendering(C4DPL_CommandLineArgs* args)
Add its declaration in main.h :
Bool RegisterCustomDatatypeCustomGUI(); void CommandLineRendering(C4DPL_CommandLineArgs* args); #endif // MAIN_H__
And include "main.h" in commandlinerender.cpp:
#include "main.h" Float lastProgressValue = -1.0; RENDERPROGRESSTYPE lastProgressType = RENDERPROGRESSTYPE_AFTERRENDERING;
The SDK example for CommandLineRendering will be fixed and updated online soon in its GitHub PluginCafe repository.
-
On 26/05/2015 at 10:04, xxxxxxxx wrote:
Thanks a alot! It's pretty intimidating starting out with C++ so your help is very much appreciated.
I'm still getting an error on compile after changing what you suggested:commandlinerender.cpp:243:22: No viable conversion from 'Char *' (aka 'char *') to 'AutoGeFree<char>'
But i just commented out the whole block from here (commandlinerender.cpp) :
else if (!strcmp(args->argv[i], "-sdk_oformat"))
This compiles fine and is perfectly ok for now.
Cheers
Bonsak -
On 26/05/2015 at 11:50, xxxxxxxx wrote:
In "main.h" i think it needs to be something like:
CommandLineRendering((C4DPL_CommandLineArgs* )data);
to actually call the function in "commandline.ccp" not:
void CommandLineRendering(C4DPL_CommandLineArgs* args);
as that is the same as the declaration?
Cheers
Bonsak -
On 26/05/2015 at 23:49, xxxxxxxx wrote:
Originally posted by xxxxxxxx
In "main.h" i think it needs to be something like:
CommandLineRendering((C4DPL_CommandLineArgs* )data);
to actually call the function in "commandline.ccp" not:
void CommandLineRendering(C4DPL_CommandLineArgs* args);
as that is the same as the declaration?
Yes in main.cpp you can remove the line with the function prototype for CommandLineRendering() and just keep the line calling it.
-
On 27/05/2015 at 00:57, xxxxxxxx wrote:
Thanks! It works fine on the command line now. But it crashes cinema when i start c4d in gui mode with commandlinerender plugin in the plugin dir. I'll investigate more.
Cheers
Bonsak