Inserting Description Elements via Code..



  • On 15/08/2014 at 04:40, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R14 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hi,

    Im trying to figure out how to insert a Description element to my objectdata plugin via code.  I already have various plugin options showing up via the res files etc and so am trying to basically grab the nodedatas Description container and insert a new Real parameter into it ( in such a way that it will show up in the attributes along with everything else when the plugin is launched ).

    At the moment i am using Description->SetParameter() to achieve this by inserting a new BaseContainer that has been given test values for DESC_NAME, DESC_SHORT_NAME and DESC_UNIT but it isn`t showing up in the attributes manager.

    I think it may be something to do with creating proper DESC_IDs or something.  Either that or i am going about this in completely the wrong way!  Which is possible as its a bit like wandering around in the dark trying to figure this stuff out without proper examples..

    Heres the code i have which although the if statement is returningit is done, it isnt displaying the parameters as mentioned:

    Bool MyPlugin::Init(GeListNode *node)
    {
    	AutoAlloc<Description> desc;
    	node->GetDescription(desc, DESCFLAGS_DESC_0);
    	BaseContainer *descBC = desc->GetParameterI(MYPLUGIN_OBJECTWIDTH, NULL); // This returns an existing parameter successfully
    	
    	BaseContainer newBC = BaseContainer();
    	newBC.SetString(DESC_NAME, "My Description Param");
    	newBC.SetString(DESC_SHORT_NAME, "My Description Param");
    	newBC.SetLong(DESC_UNIT, DESC_UNIT_REAL);
      
    	if (desc->SetParameter(MYPLUGIN_NEWPARAMETER, newBC, DESCID_ROOT))
    	{
    		GePrint("it is done");
    	}
    	else
    	{
    		GePrint("it is not done");
    	}
    	
    	return TRUE;
    }
    


  • On 15/08/2014 at 05:45, xxxxxxxx wrote:

    Howdy,

    You need to do that in the NodeData::GetDDescription() function. Do a search for GetDDescription here on plugin cafe and you'll find plenty of examples. 😉

    Adios,
    Cactus Dan



  • On 15/08/2014 at 06:09, xxxxxxxx wrote:

    Also, it is necessary that you include the Datatype ID in the Description ID you use for SetParameter().



  • On 15/08/2014 at 07:38, xxxxxxxx wrote:

    Very much appreciated guys, thank you.

    RE the Datatype ID Niklas - do you mean i`d create a DescID with my parameter ID, then insert the Datatype ID into that - using say DescID->PushId() ?

    Maybe like this?

    DescID MYPLUGIN_NEWPARAMETER = DescID(MYPLUGIN_NEWPARAMETER);
    MYPLUGIN_NEWPARAMETER.PushId(DESC_UNIT_REAL); desc->SetParameter(MYPLUGIN_NEWPARAMETER, newBC, DESCID_ROOT);
    

    I`m probably confusing things for myself :/



  • On 15/08/2014 at 07:55, xxxxxxxx wrote:

    Nope, like this

    DescID descId(DescLevel(MYPLUGIN_NEWPARAMETER, DA_REAL, 0));
    

    DESC_UNIT_REAL is not a datatype ID. If you create a Floating-point parameter, use DA_REAL,
    for an Integer parameter DA_LONG, for SplineData CUSTOMDATATYPE_SPLINE, etc.

    Best,
    -NIKLAS



  • On 15/08/2014 at 10:05, xxxxxxxx wrote:

    Okay - thanks for that, much appreciated.


Log in to reply