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
andDESC_SHORT_NAME
(see Description Settings Manual).If you have issues using
GetParameter()
you can also useGetParameterI()
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