23 #ifndef QGLVIEWER_KEY_FRAME_INTERPOLATOR_H
24 #define QGLVIEWER_KEY_FRAME_INTERPOLATOR_H
132 KeyFrameInterpolator(Frame* fr=NULL);
133 virtual ~KeyFrameInterpolator();
162 void addKeyFrame(
const Frame& frame);
163 void addKeyFrame(
const Frame& frame, qreal time);
165 void addKeyFrame(
const Frame*
const frame);
166 void addKeyFrame(
const Frame*
const frame, qreal time);
180 Frame* frame()
const {
return frame_; }
183 void setFrame(Frame*
const frame);
189 Frame keyFrame(
int index)
const;
190 qreal keyFrameTime(
int index)
const;
192 int numberOfKeyFrames()
const {
return keyFrame_.count(); }
193 qreal duration()
const;
194 qreal firstTime()
const;
195 qreal lastTime()
const;
205 qreal interpolationTime()
const {
return interpolationTime_; }
213 qreal interpolationSpeed()
const {
return interpolationSpeed_; }
222 int interpolationPeriod()
const {
return period_; }
232 bool loopInterpolation()
const {
return loopInterpolation_; }
239 bool closedPath()
const {
return closedPath_; }
247 void setInterpolationTime(qreal time) { interpolationTime_ = time; }
249 void setInterpolationSpeed(qreal speed) { interpolationSpeed_ = speed; }
251 void setInterpolationPeriod(
int period) { period_ = period; }
253 void setLoopInterpolation(
bool loop=
true) { loopInterpolation_ = loop; }
256 void setClosedPath(
bool closed=
true) { closedPath_ = closed; }
266 bool interpolationIsStarted()
const {
return interpolationStarted_; }
268 void startInterpolation(
int period = -1);
269 void stopInterpolation();
270 void resetInterpolation();
272 void toggleInterpolation() {
if (interpolationIsStarted()) stopInterpolation();
else startInterpolation(); }
273 virtual void interpolateAtTime(qreal time);
279 virtual void drawPath(
int mask=1,
int nbFrames=6, qreal scale=1.0);
285 virtual QDomElement domElement(
const QString& name, QDomDocument& document)
const;
286 virtual void initFromDOMElement(
const QDomElement& element);
290 virtual void update();
291 virtual void invalidateValues() { valuesAreValid_ =
false; pathIsValid_ =
false; splineCacheIsValid_ =
false; }
299 void updateCurrentKeyFrameForTime(qreal time);
300 void updateModifiedFrameValues();
301 void updateSplineCache();
311 Vec position()
const {
return p_; }
313 Vec tgP()
const {
return tgP_; }
314 Quaternion tgQ()
const {
return tgQ_; }
315 qreal time()
const {
return time_; }
316 const Frame* frame()
const {
return frame_; }
317 void updateValuesFromPointer();
318 void flipOrientationIfNeeded(
const Quaternion& prev);
319 void computeTangent(
const KeyFrame*
const prev,
const KeyFrame*
const next);
324 const Frame*
const frame_;
329 mutable QList<KeyFrame*> keyFrame_;
330 QMutableListIterator<KeyFrame*>* currentFrame_[4];
339 qreal interpolationTime_;
340 qreal interpolationSpeed_;
341 bool interpolationStarted_;
345 bool loopInterpolation_;
349 bool valuesAreValid_;
350 bool currentFrameValid_;
351 bool splineCacheIsValid_;
357 #endif // QGLVIEWER_KEY_FRAME_INTERPOLATOR_H