Hi Manuel,
Thank you. I've been expecting this. Hope such support will be added sooner or later
Our app: finalmesh.com
Alex
Hi Manuel,
Thank you. I've been expecting this. Hope such support will be added sooner or later
Our app: finalmesh.com
Alex
Hello,
We are using Cineware SDK, 22.0_355130, C++, to read c4d files into our application.
Now we started to read take data in hope to read multiple animations assigned to objects.
File is simple - one object with two takes. Each has it's own set of animations.
We can get cineware::TakeData and can retrieve tree or BaseTake, with names. Exactly the same as in Cinema4D UI.
Now the problems:
cineware::MemAlloc(__int64 size) Line 24 C++
cineware::DescID::operator=(const cineware::DescID & src) Line 119 C++
cineware::DescID::DescID(const cineware::DescID & src) Line 21 C++
cineware::BaseOverrideData::Read(cineware::HyperFile * hf, int id, int level) Line 145 C++
cineware::PluginNode::HandleSubChunk(cineware::HyperFile * hf, int id, int level) Line 281 C++
cineware::PrivateChunk::ReadChunk(cineware::HyperFile * hf, bool keepin, bool noheader) Line 39 C++
This is the code to extract array of takes (it works as expected):
void C4Import::EnummTakesImp(cineware::BaseTake*take)
{
AnimationData*ad=(AnimationData*)m_mem->AllocZ(sizeof(AnimationData));
ad->take=take;
m_animations->Insert(ad);
const UInt16 *out_ptr;
const cineware::String&str=take->GetName();
UINT32 len=str.GetDataPtr(&out_ptr);
if(len)
{
ad->name=(wchar_t*)m_mem->AllocZ((len+1)*sizeof(wchar_t));
memcpy(ad->name,out_ptr,len*sizeof(wchar_t));
ad->name[len]=0;
}
BaseTake*takeDown=take->GetDown();
while(takeDown)
{
EnummTakesImp(takeDown);
takeDown=takeDown->GetNext();
}
};
void C4Import::EnummTakes()
{
BaseTake*bt=m_take->GetMainTake();
if(bt)
{
m_animations=Array::Create();
EnummTakesImp(bt);
}
};
This is the code to find overrides:
BaseList2D*base=(BaseList2D*)_node->object_c4d;
if(base && m_animations)
{
for(int i=0;i<m_animations->count;i++)
{
AnimationData*ad=(AnimationData*)m_animations->At(i);
BaseOverride*over= ad->take->FindOverride(m_take, base);
if(over)
{
int idbg=0;
idbg++;
}
}
}
Should I do something extra in order to enable reading of overrides? Or may be required functionality is disabled in this SDK?
Thank you in advance.
Alex