On 11/08/2017 at 02:38, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 18
Platform: Windows ;
Language(s) : C++ ;
---------
Hi there,
I'm trying to copy some Overrides to another object (they are not of the same type, but base properties are still the same, as they derive from Obase)
The following code actually works to some extent, but not for all takes.
I'm pretty sure that I made a mistake here. Also, I don't fully understand the sub-takes yet. Just started with them. :)
inline void TransferTakeOverrides(BaseObject* srcObj, BaseObject* tgtObj, BaseDocument* doc)
{
// Get doc's take data
TakeData* takeData = doc->GetTakeData();
if (!takeData)
return;
// Get main take to start from
BaseTake* currentTake = takeData->GetMainTake();
// Set main take active as we need the parameters in "backup state"
//takeData->SetCurrentTake(takeData->GetMainTake());
// TODO: Disable Auto-Take / Set Mode to manual
// Iterate over all other takes
while (currentTake)
{
// skip main take
// ...
// Check all overrides for object in current take
BaseOverride* srcOverride = currentTake->FindOverride(takeData, srcObj);
while (srcOverride)
{
maxon::BaseArray<DescID> srcDescIDs;
srcOverride->GetAllOverrideDescID(srcDescIDs);
for (auto descID : srcDescIDs)
{
GeData overrideValue;
srcOverride->GetParameter(descID, overrideValue, DESCFLAGS_GET_0);
BaseOverride* tgtOverride = currentTake->FindOrAddOverrideParam(takeData, tgtObj, descID, overrideValue);
tgtOverride->UpdateSceneNode(takeData, descID);
}
srcOverride = static_cast<BaseOverride*>(GetNextNode(static_cast<GeListNode*>(srcOverride)));
}
currentTake = static_cast<BaseTake*>(GetNextNode(static_cast<GeListNode*>(currentTake)));
}
}