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?
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
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;
parameterSettings = layerDescription->GetParameter(FIELDLAYER_SOLID_VALUE, temp, atomArray);
const String parameterName = parameterSettings->GetString(DESC_NAME, ""_s);
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.
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?
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);
plainEffector->GetParameter(fieldsID, effectorData, DESCFLAGS_GET::NONE);
CustomDataType* const customData = effectorData.GetCustomDataType(CUSTOMDATATYPE_FIELDLIST);
FieldList* const fieldList = static_cast<FieldList*>(customData);
if (fieldList == nullptr)
// get first
GeListHead* const head = fieldList->GetLayersRoot();
if (head == nullptr)
GeListNode* const node = head->GetFirst();
if (node == nullptr)
FieldLayer* const layer = static_cast<FieldLayer*>(node);
See FieldList Manual.
Thank you so much, that's exactly what I needed!