NodeData::GetDParameter() Manual
NodeData based classic plugin classes can implement NodeData::GetDParameter() . This allows to define the values of parameters accessed with C4DAtom::GetParameter() . This is done to handle data that is not stored in the object's BaseContainer . It is also used to create parameters that depend on the value of other parameters or element properties.
NodeData::GetDParameter() corresponds to C4DAtom::GetParameter() .
NodeData::GetDParameter() is called when the value of a parameter is accessed with C4DAtom::GetParameter() . It is possible to define or change the returned value.
Bool GetDParameter( GeListNode * node, const DescID & id , GeData & t_data, DESCFLAGS_GET & flags) { if (node == nullptr ) return false ;// check parameter ID switch ( id [0]. id ) { // This parameter is not stored in the BaseContainer case EXAMPLE_GENERATOR_PARAMETER_NOT_BC: { // set the value from a member variable t_data. SetInt32 (_value);
// Parameter retrieved. flags |= DESCFLAGS_GET::PARAM_GET ;
The arguments of the function are:
Certain cases have to be handled with special functions:
// check parameter ID switch ( id [0]. id ) { case EXAMPLE_TAG_VOLUME: { Float volume = 0.0; GeData data; BaseTag * const tag = static_cast< BaseTag * > (node); if (tag != nullptr ) { BaseObject * const hostObject = tag-> GetObject (); if (hostObject != nullptr ) { // check the object type switch (hostObject-> GetType ()) { // calculate volume of sphere primitive case Osphere : { hostObject-> GetParameter ( PRIM_SPHERE_RAD , data, DESCFLAGS_GET::NONE ); const Float radius = data. GetFloat (); volume = (4.0 / 3.0) * maxon::PI * radius * radius * radius; break ; } // calculate volume of cylinder primitive case Ocylinder : { hostObject-> GetParameter ( PRIM_CYLINDER_RADIUS , data, DESCFLAGS_GET::NONE ); const Float radius = data. GetFloat (); hostObject-> GetParameter ( PRIM_CYLINDER_HEIGHT , data, DESCFLAGS_GET::NONE ); const Float height = data. GetFloat (); volume = maxon::PI * radius * radius * height; break ; } // etc. default : break ; } } } t_data. SetFloat (volume); flags |= DESCFLAGS_GET::PARAM_GET ; // don't forget to set this flag
return true ; } } return SUPER::GetDParameter(node, id , t_data, flags); }