da847a
#pragma once
da847a
da847a
#ifndef MODIFIERCLONE_INCLUDED
da847a
#define MODIFIERCLONE_INCLUDED
da847a
da847a
// TnzTools includes
da847a
#include <tools inputmanager.h=""></tools>
da847a
da847a
#undef DVAPI
da847a
#undef DVVAR
da847a
#ifdef TNZTOOLS_EXPORTS
da847a
#define DVAPI DV_EXPORT_API
da847a
#define DVVAR DV_EXPORT_VAR
da847a
#else
da847a
#define DVAPI DV_IMPORT_API
da847a
#define DVVAR DV_IMPORT_VAR
da847a
#endif
da847a
da847a
//===================================================================
da847a
da847a
//*****************************************************************************************
da847a
//    TModifierClone definition
da847a
//*****************************************************************************************
da847a
da847a
class DVAPI TModifierClone : public TInputModifier {
da847a
public:
da847a
  class DVAPI Handler : public TMultiTrackHandler {
da847a
  public:
da847a
    TTrackP original;
da847a
    inline explicit Handler(const TTrackP &original = TTrackP()):
da847a
      original(original) { }
da847a
  };
da847a
da847a
  class DVAPI Interpolator : public TTrackInterpolator {
da847a
  public:
da847a
    const TTrackTransform transform;
da847a
    inline Interpolator(TTrack &track, const TTrackTransform &transform):
da847a
      TTrackInterpolator(track), transform(transform) { }
da847a
    TTrackPoint interpolateFromOriginal(double originalIndex);
da847a
    TTrackPoint interpolate(double index) override;
da847a
  };
da847a
da847a
da847a
public:
da847a
  bool keepOriginals;
da847a
  TTrackTransformList transforms;
da847a
da847a
  TModifierClone(bool keepOriginals = true);
da847a
da847a
  void modifyTrack(
da847a
    const TTrack &track,
da847a
    TTrackList &outTracks ) override;
da847a
};
da847a
da847a
#endif