SOLVED Field Layer Description Names

Hello, I'm trying to retrieve the names of the parameters on Field Objects. The following could works when I use it on most other objects, with the ID changed of course. Using it on a Solid Field Layer in the following example it doesn't return a name though. Is there a special way to access descriptions on Field Layers?

Dan

   AutoAlloc<Description> senderdesc; 
   op->GetDescription(senderdesc, DESCFLAGS_DESC::NONE))
   const BaseContainer *desccontainer = NULL;
   //checking  [c4d.FIELDS,12,1000] the "Value" parameter on a Solid Field Layer 
   desccontainer = senderdesc->GetParameter(parameterID, *testcontainer, descarray);
   String parametername = desccontainer->GetString(DESC_NAME, "" );//trying to get its name, should be returning "Value", bit is instead empty

Hello,

just to be sure: do you want to access the names of parameters of a Field Object or the names of parameters of a Field Layer in a Field List?

I presume that op is a pointer to such a Field Layer?

Using this code it seems to work fine:

const BaseContainer* parameterSettings = nullptr;

BaseContainer temp;
AutoAlloc<AtomArray> atomArray;

parameterSettings = layerDescription->GetParameter(FIELDLAYER_SOLID_VALUE, temp, atomArray);
if (parameterSettings)
{
	const String parameterName = parameterSettings->GetString(DESC_NAME, ""_s);
	ApplicationOutput(parameterName);
}

Notice that in some cases an object might store different values for DESC_NAME and DESC_SHORT_NAME (see Description Settings Manual).

If you have issues using GetParameter() you can also use GetParameterI() which might be a bit easier to use. There are also additional functions to iterate over all parameter descriptions stored in a Description object (see Description Manual).

For posting questions please use the Q&A system.

best wishes,
Sebastian

Hi! Thank you for the response, I'm sorry about the late reply and sorry about posting in the incorrect place.

I'm trying to get the names of parameters of a Field Layer in a Field List. So Value in a Solid Field Layer, and Shape, Rate, Offset in a Time Field Layer for example.

Yes, op would be a Field Layer, but I'm actually having a bit of trouble figuring out how to get the Field Layer itself. I'm sure it's something simple but I'm having trouble getting it.

So if I have a Delay effector, and a Solid Field Layer inside of the Field. How would I get the Field Layer for the Solid Field Layer if I only have the Delay effector and the id [c4d.FIELDS,12] to retrieve it?

Thanks again,
Dan

Hello,

you can obtain the field list from the FIELDS parameter.

This field list stores a list of layers. You can access the head of that list using GetLayersRoot() (see GeListHead Manual).

From the head you can obtain the child elements: the Field layer objects.

Something like this:

const DescID fieldsID(FIELDS);

GeData effectorData;
plainEffector->GetParameter(fieldsID, effectorData, DESCFLAGS_GET::NONE);

CustomDataType* const customData = effectorData.GetCustomDataType(CUSTOMDATATYPE_FIELDLIST);
FieldList* const      fieldList  = static_cast<FieldList*>(customData);
if (fieldList == nullptr)
  return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);

// get first

GeListHead* const head = fieldList->GetLayersRoot();
if (head == nullptr)
  return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);

GeListNode* const node = head->GetFirst();
if (node == nullptr)
  return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);

FieldLayer* const layer = static_cast<FieldLayer*>(node);

See FieldList Manual.

best wishes,
Sebastian

Thank you so much, that's exactly what I needed!

Dan