interpPlugins/interpHalf.cpp
         
    
#include <stdio.h>
#include <maya/MFnAnimCurve.h>
#include <maya/MObject.h>
#include <maya/MPxAnimCurveInterpolator.h>
#include <maya/MTime.h> 
#include <maya/MTypeId.h>
#include "interpHalf.h"
 
interpHalf::interpHalf()
{
    sTime = 0.0;
    range = 0.0;
}
interpHalf::~interpHalf() {}
void* interpHalf::creator()
{
    return new interpHalf();
}
void interpHalf::initialize(
const MObject &animCurve, 
unsigned int interval)
 
{
    
    
    
    
    
    
    bool isBeforeHalf = false;
    int beforeInd = interval - 1;
    if (beforeInd < 0)
        beforeInd = 0;
    else
    {
        
        if (beforeType == MFnAnimCurve::kTangentShared1)
            isBeforeHalf = true;
    }
    if (isBeforeHalf)
        beforeVal = 0.5 * curveFn.value(beforeInd) + 0.5 * curveFn.value(interval);
    else
        beforeVal = curveFn.value(interval);
    
    
    int afterInd = interval + 1;
    if (afterType == MFnAnimCurve::kTangentShared1)
        afterVal = 0.5 * curveFn.value(interval) + 0.5 * curveFn.value(afterInd);
    else
        afterVal = curveFn.value(afterInd);
    
}
double interpHalf::evaluate(
const MTime &val)
 
{
    
    double alpha = (sec-sTime) / range;
    return (1.0 - alpha) * beforeVal + alpha * afterVal;
}