On 03/04/2013 at 15:42, xxxxxxxx wrote:
I'm going to post an example of one of my GetDDescription() methods. It is a bit cumbersome but far less than others that I have used previously. Unfortunately, I don't have a very simple one to provide. Maybe there is something more basic in the SDK examples.
// NodeData.GetDDescription - Descriptions and Parameters
//*---------------------------------------------------------------------------*
Bool UnfurlTag::GetDDescription(GeListNode* node, Description* description, DESCFLAGS_DESC& flags)
//*---------------------------------------------------------------------------*
{
// Initial validity checks
if (CheckIsRunning(CHECKISRUNNING_EXTERNALRENDERING) || CheckIsRunning(CHECKISRUNNING_EDITORRENDERING))
{
flags |= DESCFLAGS_DESC_LOADED|DESCFLAGS_DESC_RECURSIONLOCK;
return SUPER::GetDDescription(node,description,flags);
}
if (!(node && description)) return FALSE;
if (!description->LoadDescription(node->GetType())) return FALSE;
flags |= DESCFLAGS_DESC_LOADED|DESCFLAGS_DESC_RECURSIONLOCK;
// Get necessary pointers
BaseDocument* baseDoc = node->GetDocument();
if (!baseDoc) return SUPER::GetDDescription(node,description,flags);
BaseTag* tag = static_cast<BaseTag*>(node);
if (!tag) return SUPER::GetDDescription(node,description,flags);
BaseContainer* opBC = tag->GetDataInstance();
if (!opBC) return SUPER::GetDDescription(node,description,flags);
// *************************
// Add Dynamic Descriptions
// *************************
// Control Polygon List
BaseContainer cp_id = GetCustomDataTypeDefault(DTYPE_STATICTEXT);
cp_id.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_id.SetBool(DESC_SCALEH, FALSE);
cp_id.SetBool(DESC_REMOVEABLE, FALSE);
BaseContainer cp_value = GetCustomDataTypeDefault(DTYPE_REAL);
cp_value.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_value.SetBool(DESC_HIDE, FALSE);
cp_value.SetBool(DESC_SCALEH, FALSE);
cp_value.SetBool(DESC_REMOVEABLE, FALSE);
cp_value.SetReal(DESC_MIN, 0.0);
cp_value.SetReal(DESC_MAX, 1.0);
cp_value.SetReal(DESC_STEP, 0.01);
cp_value.SetLong(DESC_UNIT, DESC_UNIT_PERCENT);
cp_value.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_REAL);
cp_value.SetString(DESC_SHORT_NAME, "Unfurled at");
BaseContainer cp_show = GetCustomDataTypeDefault(DTYPE_BOOL);
cp_show.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_show.SetBool(DESC_HIDE, FALSE);
cp_show.SetBool(DESC_SCALEH, FALSE);
cp_show.SetBool(DESC_REMOVEABLE, FALSE);
cp_show.SetString(DESC_SHORT_NAME, "Show");
BaseContainer cp_remove = GetCustomDataTypeDefault(DTYPE_BUTTON);
cp_remove.SetString(DESC_SHORT_NAME, "Remove");
cp_remove.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_BUTTON);
cp_remove.SetLong(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_remove.SetBool(DESC_REMOVEABLE, FALSE);
cp_remove.SetBool(DESC_SCALEH, FALSE);
BaseContainer cp_index = GetCustomDataTypeDefault(DTYPE_LONG);
cp_index.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_index.SetBool(DESC_HIDE, TRUE);
cp_index.SetBool(DESC_SCALEH, FALSE);
cp_index.SetBool(DESC_REMOVEABLE, FALSE);
cp_index.SetString(DESC_SHORT_NAME, "Gradient Index");
LONG c = 0L;
LONG gcnt = opBC->GetLong(TUNFURL_POLYGON_COUNT);
// Count controls to see if we hide "Gradient Dir" or not
for (LONG i = 0L; i != gcnt; ++i)
{
if (gradients[i].control) ++c;
}
if (c > 1L)
{
BaseContainer cp_mix = GetCustomDataTypeDefault(DTYPE_STATICTEXT);
cp_mix.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_mix.SetBool(DESC_HIDE, FALSE);
cp_mix.SetBool(DESC_SCALEH, FALSE);
cp_mix.SetBool(DESC_REMOVEABLE, FALSE);
cp_mix.SetString(DESC_SHORT_NAME, ".");
NeighborPoly* g = NULL;
c = 0L;
for (LONG i = 0L; i != gcnt; ++i)
{
g = &gradients[i];
if (!g->control) continue;
if (c >= 2048L) break;
// Control Polygon ID - Static Text
cp_id.SetString(DESC_SHORT_NAME, LongToString(c+1L)+" ("+LongToString(i)+")");
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_ID+c, DTYPE_STATICTEXT,0L), cp_id, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Gradation Direction - Static Text (see below)
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_MIX+c, DTYPE_STATICTEXT,0L), cp_mix, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Value - Real
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_VALUE+c, DTYPE_REAL,0L), cp_value, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Highlight - Bool
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_SHOW+c, DTYPE_BOOL,0L), cp_show, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Remove - Button
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_REMOVE+c, DTYPE_BUTTON,0L), cp_remove, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Index - LONG
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_INDEX+c, DTYPE_LONG,0L), cp_index, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
opBC->SetLong(TUNFURL_CONTROL_INDEX+c, i);
opBC->SetReal(TUNFURL_CONTROL_VALUE+c, g->ctrlValue);
opBC->SetBool(TUNFURL_CONTROL_SHOW+c, g->show);
++c;
}
}
else
{
BaseContainer cp_mix_sub;
cp_mix_sub.SetString(0L, "0->1");
cp_mix_sub.SetString(1L, "1->0");
BaseContainer cp_mix = GetCustomDataTypeDefault(DTYPE_LONG);
cp_mix.SetContainer(DESC_CYCLE, cp_mix_sub);
cp_mix.SetBool(DESC_ANIMATE, DESC_ANIMATE_OFF);
cp_mix.SetBool(DESC_HIDE, FALSE);
cp_mix.SetBool(DESC_SCALEH, FALSE);
cp_mix.SetBool(DESC_REMOVEABLE, FALSE);
cp_mix.SetString(DESC_SHORT_NAME, "Gradient Dir");
NeighborPoly* g = NULL;
c = 0L;
for (LONG i = 0L; i != gcnt; ++i)
{
g = &gradients[i];
if (!g->control) continue;
// Control Polygon ID - Static Text
cp_id.SetString(DESC_SHORT_NAME, LongToString(c+1L)+" ("+LongToString(i)+")");
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_ID+c, DTYPE_STATICTEXT,0L), cp_id, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Gradation Direction - LONG
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_MIX+c, DTYPE_LONG,0L), cp_mix, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Value - Real
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_VALUE+c, DTYPE_REAL,0L), cp_value, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Highlight - Bool
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_SHOW+c, DTYPE_BOOL,0L), cp_show, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Remove - Button
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_REMOVE+c, DTYPE_BUTTON,0L), cp_remove, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
// Control Polygon Index - LONG
if (!description->SetParameter(DescLevel(TUNFURL_CONTROL_INDEX+c, DTYPE_LONG,0L), cp_index, DescLevel(TUNFURL_GROUP_CONTROLS)))
return SUPER::GetDDescription(node,description,flags);
opBC->SetLong(TUNFURL_CONTROL_INDEX+c, i);
opBC->SetReal(TUNFURL_CONTROL_VALUE+c, g->ctrlValue);
opBC->SetBool(TUNFURL_CONTROL_SHOW+c, g->show);
opBC->SetLong(TUNFURL_CONTROL_MIX+c, g->direction);
++c;
}
}
return SUPER::GetDDescription(node,description,flags);
}