void FxKeyframeNavigator::toggle() { TFx *fx = getFx(); if (!fx) return; int i, paramCount = fx->getParams()->getParamCount(); // determino in quale caso ci troviamo: // il frame corrente non e' keyframe di nessun parametro (isKeyframe=false), // di qualche parametro o di tutti i parametri (isFullKeyframe=true) bool isFullKeyframe = true; bool isKeyframe = false; int frame = getCurrentFrame(); for (i = 0; i < paramCount; i++) { TParamP param = fx->getParams()->getParam(i); if (!param->isAnimatable()) continue; if (param->isKeyframe(frame)) isKeyframe = true; else isFullKeyframe = false; } if (!isKeyframe) isFullKeyframe = false; // modifico lo stato: nokeyframe->full, full->no, partial->full bool on = !isKeyframe || isKeyframe && !isFullKeyframe; for (i = 0; i < fx->getParams()->getParamCount(); i++) { // TODO. spostare questo codice in TParam TParamP param = fx->getParams()->getParam(i); if (TDoubleParamP dp = param) { if (on) dp->setValue(frame, dp->getValue(frame)); else dp->deleteKeyframe(frame); } else if (TRangeParamP rp = param) { if (on) rp->setValue(frame, rp->getValue(frame)); else rp->deleteKeyframe(frame); } else if (TPointParamP pp = param) { if (on) pp->setValue(frame, pp->getValue(frame)); else pp->deleteKeyframe(frame); } else if (TPixelParamP pip = param) { if (on) pip->setValue(frame, pip->getValue(frame)); else pip->deleteKeyframe(frame); } else if (TSpectrumParamP sp = param) { if (on) sp->setValue(frame, sp->getValue(frame), false); else sp->deleteKeyframe(frame); } else if (TToneCurveParamP tcp = param) { if (on) tcp->setValue(frame, tcp->getValue(frame), false); else tcp->deleteKeyframe(frame); } } m_fxHandle->notifyFxChanged(); }
bool FxKeyframeNavigator::isKeyframe() const { TFx *fx = getFx(); if (!fx) return false; for (int i = 0; i < fx->getParams()->getParamCount(); i++) { TParamP param = fx->getParams()->getParam(i); if (param->isKeyframe(getCurrentFrame())) return true; } return false; }
bool FxKeyframeNavigator::isFullKeyframe() const { TFx *fx = getFx(); if (!fx) return false; int keyFrameCount = 0; int animatableParamCount = 0; for (int i = 0; i < fx->getParams()->getParamCount(); i++) { TParamP param = fx->getParams()->getParam(i); if (param->isAnimatable()) { animatableParamCount++; if (param->isKeyframe(getCurrentFrame())) keyFrameCount++; } } return animatableParamCount > 0 && keyFrameCount == animatableParamCount; }
void TXsheet::loadData(TIStream &is) { clearAll(); TStageObjectId cameraId = TStageObjectId::CameraId(0); TStageObject *firstCamera = getStageObject(cameraId); m_imp->m_pegTree->removeStageObject(cameraId); int col = 0; string tagName; while (is.openChild(tagName)) { if (tagName == "columns") { while (!is.eos()) { TPersist *p = 0; is >> p; TXshColumn *column = dynamic_cast<TXshColumn *>(p); if (!column) throw TException("expected xsheet column"); m_imp->m_columnSet.insertColumn(col++, column); column->setXsheet(this); if (TXshZeraryFxColumn *zc = dynamic_cast<TXshZeraryFxColumn *>(column)) { TFx *fx = zc->getZeraryColumnFx()->getZeraryFx(); int fxTypeCount = m_imp->m_fxDag->getFxTypeCount(fx); int maxFxTypeId = std::max(fxTypeCount, fx->getAttributes()->getId()); m_imp->m_fxDag->updateFxTypeTable(fx, maxFxTypeId); m_imp->m_fxDag->updateFxIdTable(fx); for (int j = 0; j < fx->getParams()->getParamCount(); j++) { TParam *param = fx->getParams()->getParam(j); if (TDoubleParam *dp = dynamic_cast<TDoubleParam *>(param)) getStageObjectTree()->setGrammar(dp); else if (dynamic_cast<TPointParam *>(param) || dynamic_cast<TRangeParam *>(param) || dynamic_cast<TPixelParam *>(param)) { TParamSet *paramSet = dynamic_cast<TParamSet *>(param); assert(paramSet); int f; for (f = 0; f < paramSet->getParamCount(); f++) { TDoubleParam *dp = dynamic_cast<TDoubleParam *>( paramSet->getParam(f).getPointer()); if (!dp) continue; getStageObjectTree()->setGrammar(dp); } } } } } } else if (tagName == "pegbars") { TPersist *p = m_imp->m_pegTree; is >> *p; } else if (tagName == "fxnodes") {