SDK example CommandLineRendering



  • I am a bit confused about the SDK example CommandLineRendering.
    I compiled it ok, using R20, Windows 10 and VC++ 2017.
    I can see that it is loaded / started.

    Bool PluginStart()
    {
    	GePrint("CommandLineRendering Start in PluginStart"_s);
    	return true;
    }
    

    But it looks as if it is not called.
    It gets the parameters ok: Command line arguments : "-nogui" "-sdk_render" "cube.c4d"
    But I get the message "Warning: Unknown arguments: -sdk_render"

    So it seems as if CommandLineRendering() is not called.

    Here the command I use to start.

    "C:\Program Files\Maxon\CINEMA 4D R20.026\CINEMA 4D.exe" -nogui -sdk_render cube.c4d" > "C:\Program Files\Maxon\CINEMA 4D R20.026\plugins\CommandLineRendering\report.txt" 
    

    I did not change anything in CommandLineRendering()
    Here main.cpp, that I changed a bit.

    
    #include "main.h"
    #include "c4d.h"
    
    Bool PluginStart()
    {
    	GePrint("CommandLineRendering Start in PluginStart"_s);
    	return true;
    }
    
    void PluginEnd()
    {
    	//FreeGLTestObject();
    	//FreeExampleSNHook();
    	//FreePaintAdvanced();
    }
    
    Bool PluginMessage(Int32 id, void* data)
    {
    	switch (id)
    	{
    		case C4DPL_INIT_SYS:
    		{
    			if (!g_resource.Init())
    				return false;		// don't start plugin without resource
    
    			// register example datatype. This is happening at the earliest possible time
    			// if (!RegisterExampleDataType())
    			//  	return false;
    
    			// serial hook example; if used must be registered before PluginStart(), best in C4DPL_INIT_SYS
    			// if (!RegisterExampleSNHook()) return false;
    
    			return true;
    		}
    
    		case C4DMSG_PRIORITY:
    			// react to this message to set a plugin priority (to determine in which order plugins are initialized or loaded
    			// SetPluginPriority(data, mypriority);
    			return true;
    
    		case C4DPL_BUILDMENU:
    			// react to this message to dynamically enhance the menu
    			// EnhanceMainMenu();
    			break;
    
    		case C4DPL_COMMANDLINEARGS:
    			// sample implementation of command line rendering:
    			// CommandLineRendering((C4DPL_CommandLineArgs*)data);
    
    			// react to this message to react to command line arguments on startup
    			/*
    			{
    				C4DPL_CommandLineArgs *args = (C4DPL_CommandLineArgs*)data;
    				Int32 i;
    
    				for (i = 0; i<args->argc; i++)
    				{
    					if (!args->argv[i]) continue;
    
    					if (!strcmp(args->argv[i],"--help") || !strcmp(args->argv[i],"-help"))
    					{
    						// do not clear the entry so that other plugins can make their output!!!
    						ApplicationOutput("\x01-SDK is here :-)");
    					}
    					else if (!strcmp(args->argv[i],"-SDK"))
    					{
    						args->argv[i] = nullptr;
    						ApplicationOutput("\x01-SDK executed:-)");
    					}
    					else if (!strcmp(args->argv[i],"-plugincrash"))
    					{
    						args->argv[i] = nullptr;
    						*((Int32*)0) = 1234;
    					}
    				}
    			}
    			*/
    			break;
    
    		case C4DPL_EDITIMAGE:
    			/*{
    				C4DPL_EditImage *editimage = (C4DPL_EditImage*)data;
    				if (!data) break;
    				if (editimage->return_processed) break;
    				ApplicationOutput("C4DSDK - Edit Image Hook: "+editimage->imagefn->GetString());
    				// editimage->return_processed = true; if image was processed
    			}*/
    			return false;
    	}
    
    	return false;
    }
    

    The plugin, is it a real plugin(?), is also not registered?



  • Hi @pim thanks for reaching out us.

    With regard to your request, well just having the "special" command-line args recognized is as easy as uncommenting this line.

    It's indeed a working plugin and it should not be registered since it's not a plugin but rather a behavior defined when a C4DPL_COMMANDLINEARGS is intercepted.

    Best, R



  • Ok, thank you.
    I should have spotted that myself.

    -Pim


Log in to reply