blob: eafc2294c254d14bbbcf34cef57c324d6600c708 [file] [log] [blame]
var PropertyFactory = (function(){
var initFrame = -999999;
function getInterpolatedValue(frameNum){
this.mdf = false;
if(this.lastFrame !== initFrame && ((this.lastFrame >= this.keyframes[this.keyframes.length- 1].t-this.offsetTime && frameNum >= this.keyframes[this.keyframes.length- 1].t-this.offsetTime) || (this.lastFrame < this.keyframes[0].t-this.offsetTime && frameNum < this.keyframes[0].t-this.offsetTime))){
}else{
var i = 0,len = this.keyframes.length- 1,dir= 1,flag = true;
var keyData, nextKeyData;
while(flag){
keyData = this.keyframes[i];
nextKeyData = this.keyframes[i+1];
if(i == len-1 && frameNum >= nextKeyData.t - this.offsetTime){
break;
}
if((nextKeyData.t - this.offsetTime) > frameNum){
break;
}
if(i < len - 1){
i += dir;
}else{
flag = false;
}
}
var k, kLen,perc,jLen, j = 0, fnc;
if(keyData.to){
if(!keyData.bezierData){
bez.buildBezierData(keyData);
}
var bezierData = keyData.bezierData;
if(frameNum >= nextKeyData.t-this.offsetTime || frameNum < keyData.t-this.offsetTime){
var ind = frameNum >= nextKeyData.t-this.offsetTime ? bezierData.points.length - 1 : 0;
kLen = bezierData.points[ind].point.length;
for(k = 0; k < kLen; k += 1){
this.v[k] = this.mult ? bezierData.points[ind].point[k]*this.mult : bezierData.points[ind].point[k];
if(this.lastValue[k] !== this.v[k]) {
this.mdf = true;
this.lastValue[k] = this.v[k];
}
}
}else{
if(keyData.__fnct){
fnc = keyData.__fnct;
}else{
fnc = bez.getEasingCurve(keyData.o.x,keyData.o.y,keyData.i.x,keyData.i.y,keyData.n);
keyData.__fnct = fnc;
}
perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
var distanceInLine = bezierData.segmentLength*perc;
var segmentPerc;
var addedLength = 0;
dir = 1;
flag = true;
jLen = bezierData.points.length;
while(flag){
addedLength +=bezierData.points[j].partialLength*dir;
if(distanceInLine === 0 || perc === 0 || j == bezierData.points.length - 1){
kLen = bezierData.points[j].point.length;
for(k=0;k<kLen;k+=1){
this.v[k] = this.mult ? bezierData.points[j].point[k]*this.mult : bezierData.points[j].point[k];
if(this.lastValue[k] !== this.v[k]) {
this.mdf = true;
this.lastValue[k] = this.v[k];
}
}
break;
}else if(distanceInLine > addedLength && distanceInLine < addedLength + bezierData.points[j+1].partialLength){
segmentPerc = (distanceInLine-addedLength)/(bezierData.points[j+1].partialLength);
kLen = bezierData.points[j].point.length;
for(k=0;k<kLen;k+=1){
this.v[k] = this.mult ? (bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc)*this.mult : bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc;
if(this.lastValue[k] !== this.v[k]) {
this.mdf = true;
this.lastValue[k] = this.v[k];
}
}
break;
}
if(j < jLen - 1 && dir == 1 || j > 0 && dir == -1){
j += dir;
}else{
flag = false;
}
}
}
}else{
var outX,outY,inX,inY, isArray = false, keyValue;
len = keyData.s.length;
for(i=0;i<len;i+=1){
if(keyData.h !== 1){
if(keyData.o.x instanceof Array){
isArray = true;
if(!keyData.__fnct){
keyData.__fnct = [];
}
if(!keyData.__fnct[i]){
outX = keyData.o.x[i] ? keyData.o.x[i] : keyData.o.x[0];
outY = keyData.o.y[i] ? keyData.o.y[i] : keyData.o.y[0];
inX = keyData.i.x[i] ? keyData.i.x[i] : keyData.i.x[0];
inY = keyData.i.y[i] ? keyData.i.y[i] : keyData.i.y[0];
}
}else{
isArray = false;
if(!keyData.__fnct) {
outX = keyData.o.x;
outY = keyData.o.y;
inX = keyData.i.x;
inY = keyData.i.y;
}
}
if(isArray){
if(keyData.__fnct[i]){
fnc = keyData.__fnct[i];
}else{
fnc = bez.getEasingCurve(outX,outY,inX,inY);
keyData.__fnct[i] = fnc;
}
}else{
if(keyData.__fnct){
fnc = keyData.__fnct;
}else{
fnc = bez.getEasingCurve(outX,outY,inX,inY);
keyData.__fnct = fnc;
}
}
if(frameNum >= nextKeyData.t-this.offsetTime){
perc = 1;
}else if(frameNum < keyData.t-this.offsetTime){
perc = 0;
}else{
perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
}
}
keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i]+(keyData.e[i]-keyData.s[i])*perc;
if(len === 1){
this.v = this.mult ? keyValue*this.mult : keyValue;
if(this.lastValue != this.v){
this.mdf = true;
this.lastValue = this.v;
}
}else{
this.v[i] = this.mult ? keyValue*this.mult : keyValue;
if(this.lastValue[i] !== this.v[i]){
this.mdf = true;
this.lastValue[i] = this.v[i];
}
}
}
}
}
this.lastFrame = frameNum;
}
function interpolateShape(frameNum) {
this.mdf = false;
if(this.lastFrame !== initFrame && ((this.lastFrame < this.keyframes[0].t-this.offsetTime && frameNum < this.keyframes[0].t-this.offsetTime) || (this.lastFrame > this.keyframes[this.keyframes.length - 1].t-this.offsetTime && frameNum > this.keyframes[this.keyframes.length - 1].t-this.offsetTime))){
}else if(frameNum < this.keyframes[0].t-this.offsetTime){
this.mdf = true;
this.v = this.keyframes[0].s[0];
}else if(frameNum > this.keyframes[this.keyframes.length - 1].t-this.offsetTime){
this.mdf = true;
this.v = this.keyframes[this.keyframes.length - 2].h === 1 ? this.keyframes[this.keyframes.length - 2].s[0] : this.keyframes[this.keyframes.length - 2].e[0];
}else{
this.mdf = true;
var i = 0,len = this.keyframes.length- 1, dir = 1,flag = true,keyData,nextKeyData, j, jLen, k, kLen;
while(flag){
keyData = this.keyframes[i];
nextKeyData = this.keyframes[i+1];
if((nextKeyData.t - this.offsetTime) > frameNum && dir == 1){
break;
}
if(i < len - 1 && dir == 1 || i > 0 && dir == -1){
i += dir;
}else{
flag = false;
}
}
var perc;
if(keyData.h !== 1){
var fnc;
if(keyData.__fnct){
fnc = keyData.__fnct;
}else{
fnc = bez.getEasingCurve(keyData.o.x,keyData.o.y,keyData.i.x,keyData.i.y);
keyData.__fnct = fnc;
}
if(frameNum >= nextKeyData.t-this.offsetTime){
perc = 1;
}else if(frameNum < keyData.t-this.offsetTime){
perc = 0;
}else{
perc = fnc('',(frameNum)-(keyData.t-this.offsetTime),0,1,(nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime));
}
}
jLen = this.shapeData.i.length;
kLen = keyData.s[0].i[0].length;
for(j=0;j<jLen;j+=1){
for(k=0;k<kLen;k+=1){
if(keyData.h === 1){
this.shapeData.i[j][k] = keyData.s[0].i[j][k];
this.shapeData.o[j][k] = keyData.s[0].o[j][k];
this.shapeData.v[j][k] = keyData.s[0].v[j][k];
}else{
this.shapeData.i[j][k] = keyData.s[0].i[j][k]+(keyData.e[0].i[j][k]-keyData.s[0].i[j][k])*perc;
this.shapeData.o[j][k] = keyData.s[0].o[j][k]+(keyData.e[0].o[j][k]-keyData.s[0].o[j][k])*perc;
this.shapeData.v[j][k] = keyData.s[0].v[j][k]+(keyData.e[0].v[j][k]-keyData.s[0].v[j][k])*perc;
}
}
}
this.v = this.shapeData;
}
this.lastFrame = frameNum;
}
function ValueProperty(data, mult){
mult = mult ? mult : 1;
this.v = data * mult;
this.mdf = false;
this.k = false;
}
function MultiDimensionalProperty(data, mult){
if(mult){
var i, len = data.length;
for(i = 0;i<len;i+=1){
data[i] *= mult;
}
}
this.v = data;
this.mdf = false;
this.k = false;
}
function KeyframedValueProperty(elemData, data, mult){
this.keyframes = data;
this.offsetTime = elemData.st;
this.lastValue = -99999;
this.k = true;
this.mult = mult;
this.lastFrame = initFrame;
//this.lastFrame = data[data.length - 1].t;
//this.v = mult ? data[0].s[0]*mult : data[0].s[0];
this.getInterpolatedValue = getInterpolatedValue;
}
function KeyframedMultidimensionalProperty(elemData, data, mult){
this.keyframes = data;
this.offsetTime = elemData.st;
this.k = true;
this.mult = mult;
this.getInterpolatedValue = getInterpolatedValue;
this.v = new Array(data[0].s.length);
this.lastValue = new Array(data[0].s.length);
this.lastFrame = initFrame;
}
var TransformProperty = (function(){
function processKeys(frameNum){
var i, len = this.dynamicProperties.length;
this.mdf = false;
for(i=0;i<len;i+=1){
this.dynamicProperties[i].getInterpolatedValue(frameNum);
if(this.dynamicProperties[i].mdf){
this.mdf = true;
}
}
if(this.mdf){
this.v.reset().translate(this.p.v[0],this.p.v[1]).rotate(this.r.v).scale(this.s.v[0],this.s.v[1]).translate(-this.a.v[0],-this.a.v[1]);
}
}
return function(elemData,data,arr){
this.dynamicProperties = [];
this.mdf = false;
this.getInterpolatedValue = processKeys;
if(typeof(data.a[0]) === 'number'){
this.a = new MultiDimensionalProperty(data.a);
}else{
this.a = new KeyframedMultidimensionalProperty(elemData,data.a,0);
this.dynamicProperties.push(this.a);
}
if(typeof(data.p[0]) === 'number'){
this.p = new MultiDimensionalProperty(data.p);
}else{
this.p = new KeyframedMultidimensionalProperty(elemData,data.p,0);
this.dynamicProperties.push(this.p);
}
if(typeof(data.s[0]) === 'number'){
this.s = new MultiDimensionalProperty(data.s,0.01);
}else{
this.s = new KeyframedMultidimensionalProperty(elemData,data.s, 0.01);
this.dynamicProperties.push(this.s);
}
if(data.r.length){
this.r = new KeyframedValueProperty(elemData,data.r,degToRads);
this.dynamicProperties.push(this.r);
}else{
this.r = new ValueProperty(data.r,degToRads);
}
if(this.dynamicProperties.length){
arr.push(this);
this.v = new Matrix();
}else{
this.v = new Matrix().translate(this.p.v[0],this.p.v[1]).rotate(this.r.v).scale(this.s.v[0],this.s.v[1]).translate(-this.a.v[0],-this.a.v[1]);
}
}
}());
function getProp(elemData,data,type, mult, arr) {
if(type === 2){
return new TransformProperty(elemData, data, arr);
}else if(type === 7){
return new TrimProperty(elemData, data, arr);
}else if(!data.length){
return new ValueProperty(data, mult);
}else if(typeof(data[0]) === 'number'){
return new MultiDimensionalProperty(data, mult);
}else{
switch(type){
case 0:
arr.push(new KeyframedValueProperty(elemData,data,mult));
break;
case 1:
arr.push(new KeyframedMultidimensionalProperty(elemData,data,mult));
break;
}
return arr[arr.length - 1];
}
}
function ShapeProperty(data, type){
this.k = false;
this.mdf = false;
this.closed = type === 3 ? data.cl : data.closed;
this.shapeData = data.ks;
this.v = type === 3 ? data.pt : data.ks;
}
function KeyframedShapeProperty(elemData,data,arr,type){
this.offsetTime = elemData.st;
this.getInterpolatedValue = interpolateShape;
this.keyframes = type === 3 ? data.pt : data.ks;
this.k = true;
this.closed = type === 3 ? data.cl : data.closed;
var i, len = this.keyframes[0].s[0].i.length;
var jLen = this.keyframes[0].s[0].i[0].length;
this.shapeData = {
i: new Array(len),
o: new Array(len),
v: new Array(len)
}
for(i=0;i<len;i+=1){
this.shapeData.i[i] = new Array(jLen);
this.shapeData.o[i] = new Array(jLen);
this.shapeData.v[i] = new Array(jLen);
}
this.lastFrame = initFrame;
arr.push(this);
}
var EllShapeProperty = (function(){
var cPoint = 0.5519;
function convertEllToPath(){
var p0 = this.p.v[0], p1 = this.p.v[1], s0 = this.s.v[0]/2, s1 = this.s.v[1]/2;
if(this.d !== 2 && this.d !== 3){
this.v.v[0] = [p0,p1-s1];
this.v.i[0] = [p0 - s0*cPoint,p1 - s1];
this.v.o[0] = [p0 + s0*cPoint,p1 - s1];
this.v.v[1] = [p0 + s0,p1];
this.v.i[1] = [p0 + s0,p1 - s1*cPoint];
this.v.o[1] = [p0 + s0,p1 + s1*cPoint];
this.v.v[2] = [p0,p1+s1];
this.v.i[2] = [p0 + s0*cPoint,p1 + s1];
this.v.o[2] = [p0 - s0*cPoint,p1 + s1];
this.v.v[3] = [p0 - s0,p1];
this.v.i[3] = [p0 - s0,p1 + s1*cPoint];
this.v.o[3] = [p0 - s0,p1 - s1*cPoint];
}else{
this.v.v[0] = [p0,p1-s1];
this.v.o[0] = [p0 - s0*cPoint,p1 - s1];
this.v.i[0] = [p0 + s0*cPoint,p1 - s1];
this.v.v[1] = [p0 - s0,p1];
this.v.o[1] = [p0 - s0,p1 + s1*cPoint];
this.v.i[1] = [p0 - s0,p1 - s1*cPoint];
this.v.v[2] = [p0,p1+s1];
this.v.o[2] = [p0 + s0*cPoint,p1 + s1];
this.v.i[2] = [p0 - s0*cPoint,p1 + s1];
this.v.v[3] = [p0 + s0,p1];
this.v.o[3] = [p0 + s0,p1 - s1*cPoint];
this.v.i[3] = [p0 + s0,p1 + s1*cPoint];
}
}
function processKeys(frameNum){
var i, len = this.dynamicProperties.length;
this.mdf = false;
for(i=0;i<len;i+=1){
this.dynamicProperties[i].getInterpolatedValue(frameNum);
if(this.dynamicProperties[i].mdf){
this.mdf = true;
}
}
if(this.mdf){
this.convertEllToPath();
}
}
return function(elemData,data,arr) {
this.v = {
v: new Array(4),
i: new Array(4),
o: new Array(4),
c: true
};
this.d = data.d;
this.dynamicProperties = [];
data.closed = true;
this.closed = true;
this.mdf = false;
this.getInterpolatedValue = processKeys;
this.convertEllToPath = convertEllToPath;
if(typeof(data.p[0]) === 'number'){
this.p = new MultiDimensionalProperty(data.p);
}else{
this.p = new KeyframedMultidimensionalProperty(elemData,data.p,0);
this.dynamicProperties.push(this.p);
}
if(typeof(data.s[0]) === 'number'){
this.s = new MultiDimensionalProperty(data.s);
}else{
this.s = new KeyframedMultidimensionalProperty(elemData,data.s,0);
this.dynamicProperties.push(this.s);
}
if(this.dynamicProperties.length){
arr.push(this);
}else{
this.convertEllToPath();
}
}
}());
var RectShapeProperty = (function() {
function processKeys(frameNum){
var i, len = this.dynamicProperties.length;
this.mdf = false;
for(i=0;i<len;i+=1){
this.dynamicProperties[i].getInterpolatedValue(frameNum);
if(this.dynamicProperties[i].mdf){
this.mdf = true;
}
}
if(this.mdf){
this.convertRectToPath();
}
}
function convertRectToPath(){
var p0 = this.p.v[0], p1 = this.p.v[1], v0 = this.s.v[0]/2, v1 = this.s.v[1]/2;
var round = bm_min(v0,v1,this.r.v);
var cPoint = round*(1-0.5519);
if(this.d === 2 || this.d === 1) {
this.v.v[0] = [p0+v0,p1-v1+round];
this.v.o[0] = this.v.v[0];
this.v.i[0] = [p0+v0,p1-v1+cPoint];
this.v.v[1] = [p0+v0,p1+v1-round];
this.v.o[1] = [p0+v0,p1+v1-cPoint];
this.v.i[1] = this.v.v[1];
this.v.v[2] = [p0+v0-round,p1+v1];
this.v.o[2] = this.v.v[2];
this.v.i[2] = [p0+v0-cPoint,p1+v1];
this.v.v[3] = [p0-v0+round,p1+v1];
this.v.o[3] = [p0-v0+cPoint,p1+v1];
this.v.i[3] = this.v.v[3];
this.v.v[4] = [p0-v0,p1+v1-round];
this.v.o[4] = this.v.v[4];
this.v.i[4] = [p0-v0,p1+v1-cPoint];
this.v.v[5] = [p0-v0,p1-v1+round];
this.v.o[5] = [p0-v0,p1-v1+cPoint];
this.v.i[5] = this.v.v[5];
this.v.v[6] = [p0-v0+round,p1-v1];
this.v.o[6] = this.v.v[6];
this.v.i[6] = [p0-v0+cPoint,p1-v1];
this.v.v[7] = [p0+v0-round,p1-v1];
this.v.o[7] = [p0+v0-cPoint,p1-v1];
this.v.i[7] = this.v.v[7];
}else{
this.v.v[0] = [p0+v0,p1-v1+round];
this.v.o[0] = [p0+v0,p1-v1+cPoint];
this.v.i[0] = this.v.v[0];
this.v.v[1] = [p0+v0-round,p1-v1];
this.v.o[1] = this.v.v[1];
this.v.i[1] = [p0+v0-cPoint,p1-v1];
this.v.v[2] = [p0-v0+round,p1-v1];
this.v.o[2] = [p0-v0+cPoint,p1-v1];
this.v.i[2] = this.v.v[2];
this.v.v[3] = [p0-v0,p1-v1+round];
this.v.o[3] = this.v.v[3];
this.v.i[3] = [p0-v0,p1-v1+cPoint];
this.v.v[4] = [p0-v0,p1+v1-round];
this.v.o[4] = [p0-v0,p1+v1-cPoint];
this.v.i[4] = this.v.v[4];
this.v.v[5] = [p0-v0+round,p1+v1];
this.v.o[5] = this.v.v[5];
this.v.i[5] = [p0-v0+cPoint,p1+v1];
this.v.v[6] = [p0+v0-round,p1+v1];
this.v.o[6] = [p0+v0-cPoint,p1+v1];
this.v.i[6] = this.v.v[6];
this.v.v[7] = [p0+v0,p1+v1-round];
this.v.o[7] = this.v.v[7];
this.v.i[7] = [p0+v0,p1+v1-cPoint];
}
}
return function(elemData,data,arr) {
this.v = {
v: new Array(8),
i: new Array(8),
o: new Array(8),
c: true
};
this.d = data.d;
this.dynamicProperties = [];
this.mdf = false;
data.closed = true;
this.closed = true;
this.getInterpolatedValue = processKeys;
this.convertRectToPath = convertRectToPath;
if(typeof(data.p[0]) === 'number'){
this.p = new MultiDimensionalProperty(data.p);
}else{
this.p = new KeyframedMultidimensionalProperty(elemData,data.p,0);
this.dynamicProperties.push(this.p);
}
if(typeof(data.s[0]) === 'number'){
this.s = new MultiDimensionalProperty(data.s);
}else{
this.s = new KeyframedMultidimensionalProperty(elemData,data.s,0);
this.dynamicProperties.push(this.s);
}
if(data.r.length){
this.r = new KeyframedValueProperty(elemData,data.r,0);
this.dynamicProperties.push(this.r);
}else{
this.r = new ValueProperty(data.r,degToRads);
}
if(this.dynamicProperties.length){
arr.push(this);
}else{
this.convertRectToPath();
}
}
}());
var TrimProperty = (function(){
function processKeys(frameNum, forceRender){
var i, len = this.dynamicProperties.length;
this.mdf = false;
for(i=0;i<len;i+=1){
this.dynamicProperties[i].getInterpolatedValue(frameNum);
if(this.dynamicProperties[i].mdf){
this.mdf = true;
}
}
if(this.mdf || forceRender){
var o = (this.o.v%360)/360;
if(o === 0 && this.s.v === 0 && this.e.v == 1){
this.isTrimming = false;
return;
}
this.isTrimming = true;
if(o < 0){
o += 1;
}
var s = this.s.v + o;
var e = this.e.v + o;
if(s == e){
}
if(s>e){
var _s = s;
s = e;
e = _s;
}
this.sValue = s;
this.eValue = e;
this.oValue = o;
}
}
return function(elemData,data, arr){
this.dynamicProperties = [];
this.sValue = 0;
this.eValue = 0;
this.oValue = 0;
this.mdf = false;
this.getInterpolatedValue = processKeys;
this.k = false;
this.isTrimming = false;
if(data.s.length){
this.s = new KeyframedValueProperty(elemData,data.s,0.01);
this.dynamicProperties.push(this.s);
}else{
this.s = new ValueProperty(data.s,0.01);
}
if(data.e.length){
this.e = new KeyframedValueProperty(elemData,data.e,0.01);
this.dynamicProperties.push(this.e);
}else{
this.e = new ValueProperty(data.e,0.01);
}
if(data.o.length){
this.o = new KeyframedValueProperty(elemData,data.o,0);
this.dynamicProperties.push(this.o);
}else{
this.o = new ValueProperty(data.o,0);
}
if(this.dynamicProperties.length){
arr.push(this);
this.k = true;
}else{
this.getInterpolatedValue(0,true);
}
}
}());
var TrimTransformerProperty = (function(){
function getSegmentsLength(keyframes,closed){
this.totalLength = 0;
var pathV = keyframes.v;
var pathO = keyframes.o;
var pathI = keyframes.i;
var i, len = pathV.length;
for(i=0;i<len-1;i+=1){
this.lengths[i] = bez.getBezierLength(pathV[i],pathV[i+1],pathO[i],pathI[i+1]);
this.totalLength += this.lengths[i].addedLength;
}
if(closed){
this.lengths[i] = bez.getBezierLength(pathV[i],pathV[0],pathO[i],pathI[0]);
this.totalLength += this.lengths[i].addedLength;
}
}
function addSegment(pt1,pt2,pt3,pt4, lengthData){
this.nextO[this.segmentCount] = pt2;
this.nextI[this.segmentCount+1] = pt3;
this.nextV[this.segmentCount+1] = pt4;
if(!this.pathStarted){
this.pathStarted = true;
this.v.s[this.segmentCount] = pt1;
}else{
this.nextV[this.segmentCount] = pt1;
}
this.segmentCount+=1;
}
function processKeys(frameNum, forceRender){
this.mdf = forceRender ? true : false;
var i = 0, len = this.trims.length;
this.pathStarted = false;
while(i<len) {
if(this.trims[i].mdf){
this.mdf = true;
break;
}
i += 1;
}
this.mdf = this.prop.mdf ? true : this.mdf;
if(this.mdf) {
this.nextO.length = 0;
this.nextI.length = 0;
this.nextV.length = 0;
this.v.s.length = 0;
var closed = this.prop.closed;
this.getSegmentsLength(this.prop.v,closed);
var finalPaths = this.prop.v;
var j, jLen = this.trims.length, e, s, o, k, kLen;
for(j=0;j<jLen;j+=1){
if(!this.trims[j].isTrimming){
this.v.v = finalPaths.v;
this.v.o = finalPaths.o;
this.v.i = finalPaths.i;
continue;
}
e = this.trims[j].eValue;
s = this.trims[j].sValue;
o = this.trims[j].oValue;
if(e === s){
this.v.v = this.nextV;
this.v.o = this.nextO;
this.v.i = this.nextI;
return;
}
if(e <= 1){
this.segments[0].s = this.totalLength*s;
this.segments[0].e = this.totalLength*e;
this.segments[1].vl = false;
}else if(s >= 1){
this.segments[0].s = this.totalLength*(s-1);
this.segments[0].e = this.totalLength*(e-1);
this.segments[1].vl = false;
}else{
this.segments[0].s = this.totalLength*s;
this.segments[0].e = this.totalLength;
this.segments[1].s = 0;
this.segments[1].e = this.totalLength*(e-1);
this.segments[1].vl = true;
}
this.v.v = finalPaths.v;
this.v.o = finalPaths.o;
this.v.i = finalPaths.i;
kLen = this.v.v.length;
var addedLength = 0, segmentLength = 0;
len = this.segments[1].vl ? 2 : 1;
var segment;
this.segmentCount = 0;
for(i=0;i<len;i+=1){
addedLength = 0;
for(k=1;k<kLen;k++){
segmentLength = this.lengths[k-1].addedLength;
if(addedLength + segmentLength < this.segments[i].s){
addedLength += segmentLength;
continue;
}else if(addedLength > this.segments[i].e){
break;
}
if(this.segments[i].s <= addedLength && this.segments[i].e >= addedLength + segmentLength){
this.addSegment(this.v.v[k-1],this.v.o[k-1],this.v.i[k],this.v.v[k],this.lengths[k-1]);
}else{
segment = bez.getNewSegment(this.v.v[k-1],this.v.v[k],this.v.o[k-1],this.v.i[k], (this.segments[i].s - addedLength)/segmentLength,(this.segments[i].e - addedLength)/segmentLength, this.lengths[k-1]);
this.addSegment(segment.pt1,segment.pt3,segment.pt4,segment.pt2/*,bez.getBezierLength(segment.pt1,segment.pt4,segment.pt2,segment.pt3)*/);
}
addedLength += segmentLength;
}
if(closed !== false){
if(addedLength <= this.segments[i].e){
segmentLength = this.lengths[k-1].addedLength;
if(this.segments[i].s <= addedLength && this.segments[i].e >= addedLength + segmentLength){
this.addSegment(this.v.v[k-1],this.v.o[k-1],this.v.i[0],this.v.v[0],this.lengths[k-1]);
}else{
segment = bez.getNewSegment(this.v.v[k-1],this.v.v[0],this.v.o[k-1],this.v.i[0], (this.segments[i].s - addedLength)/segmentLength,(this.segments[i].e - addedLength)/segmentLength, this.lengths[k-1]);
this.addSegment(segment.pt1,segment.pt3,segment.pt4,segment.pt2/*,bez.getBezierLength(segment.pt1,segment.pt4,segment.pt2,segment.pt3)*/);
}
}
}else{
this.pathStarted = false;
}
}
closed = false;
}
if(!this.nextV.length){
this.v.s.length = 0;
}else{
this.v.v = this.nextV;
this.v.o = this.nextO;
this.v.i = this.nextI;
}
this.v.c = closed;
}
}
return function(prop,trims,arr) {
this.trims = [];
this.k = false;
this.mdf = false;
this.pathStarted = false;
this.segments = [
{s:0,e:0,vl:true},{s:0,e:0,vl:false}
];
this.nextO = [];
this.nextV = [];
this.nextI = [];
this.v = {
i: null,
o: null,
v: null,
s: [],
c: false
};
var i, len = trims.length;
for(i=0;i<len;i+=1){
if(!trims[i].closed){
this.k = trims[i].trimProp.k ? true : this.k;
this.trims.push(trims[i].trimProp);
}
}
this.prop = prop;
len = this.prop.shapeData.v.length - 1;
len += this.prop.closed ? 1:0;
this.lengths = new Array(len);
this.k = prop.k ? true : this.k;
this.totalLength = 0;
this.getInterpolatedValue = processKeys;
this.addSegment = addSegment;
this.getSegmentsLength = getSegmentsLength;
if(this.k){
arr.push(this);
}else{
this.getInterpolatedValue(0,true);
}
}
}());
function getShapeProp(elemData,data,type, arr, trims){
var prop;
if(type === 3 || type === 4){
var keys = type === 3 ? data.pt : data.ks;
if(keys.length){
prop = new KeyframedShapeProperty(elemData, data, arr, type);
}else{
prop = new ShapeProperty(data, type, arr);
}
}else if(type === 5){
prop = new RectShapeProperty(elemData, data, arr);
}else if(type === 6){
prop = new EllShapeProperty(elemData, data, arr);
}
var hasTrims = false;
if(trims){
var i = 0, len = trims.length;
while(i<len){
if(!trims[i].closed){
hasTrims = true;
break;
}
i += 1;
}
}
if(hasTrims){
return new TrimTransformerProperty(prop,trims, arr);
}else{
return prop;
}
}
var DashProperty = (function(){
function processKeys(frameNum, forceFlag){
var i = 0, len = this.dataProps.length;
this.mdf = forceFlag ? true : false;
while(i<len){
if(this.dataProps[i].p.mdf){
this.mdf = true;
break;
}
i+=1;
}
if(this.mdf){
if(this.renderer === 'svg') {
this.dasharray = '';
}
for(i=0;i<len;i+=1){
if(this.dataProps[i].n != 'o'){
if(this.renderer === 'svg') {
this.dasharray += ' ' + this.dataProps[i].p.v;
}else{
this.dasharray[i] = this.dataProps[i].p.v;
}
}else{
this.dashoffset = this.dataProps[i].p.v;
}
}
}
}
return function(elemData, data,renderer, dynamicProperties){
this.dataProps = new Array(data.length);
this.renderer = renderer;
this.mdf = false;
this.k = false;
if(this.renderer === 'svg'){
this.dasharray = '';
}else{
this.dasharray = new Array(data.length - 1);
}
this.dashoffset = 0;
var i, len = data.length, prop;
for(i=0;i<len;i+=1){
prop = getProp(elemData,data[i].v,0, 0, dynamicProperties);
this.k = prop.k ? true : this.k;
this.dataProps[i] = {n:data[i].n,p:prop};
}
this.getInterpolatedValue = processKeys;
if(this.k){
dynamicProperties.push(this);
}else{
this.getInterpolatedValue(0,true);
}
}
}());
function getDashProp(elemData, data, dynamicProperties) {
return new DashProperty(elemData, data, dynamicProperties);
};
var ob = {};
ob.getProp = getProp;
ob.getShapeProp = getShapeProp;
ob.getDashProp = getDashProp;
return ob;
}());