Добрый день
Псевдокод
C++ (Qt)
// импорт данных из одного формата в другой
void ReadFrame( SrcNode * src, DstNode * dst, int frame )
{
// читаем входное значение параметра Intensity если оно анимировано
SrcProperty<srcDouble> & srcIntensity = src->Intensity();
if (srcIntensity .IsAnimated()) {
srcDouble srcValue = srcIntensity.EvaluateValue(frame);
double currentValue = MaybeConvertValue(srcValue);
// если входное != имеющемуся дефаулту
// то устанавливаем выходное для данного фрейма
DstChannel & dstChannel = dst->GetChannel(ID_INTENSITY);
double defaultValue = dstChannel.GetDefault();
if (fabs(currentValue - defaultValue) > epsilon)
dstChannel.SetFrameValue(value, frame);
}
// все по новой для след параметра
SrcProperty<srcRGB> & srcColor = srcNode->Color();
...
}
Ну и так неск десятков раз, повторы/дубляж очевидны. По поводу MaybeConvertValue - там вариантов немного. 4-5. Для примера выше srcDouble это просто double (typedef). Для векторов double[3] <-> QVector3D, ну и в одном случае надо домножить на константу
Пытался с template, но как-то монструозно выходит. Что посоветуете?
Спасибо