blob: 058fa185add7f1e2a4c4b2e5ba9746695a7c296b [file] [log] [blame]
function ShapeItemElement(data,parentElement){
this.stylesList = [];
this.currentMatrix = new Matrix();
this.shape = parentElement;
this.data = data;
this.searchShapes(this.data);
styleUnselectableDiv(this.shape);
}
ShapeItemElement.prototype.searchShapes = function(arr){
var i, len = arr.length - 1;
var j, jLen;
var pathNode;
var ownArrays = [];
for(i=len;i>=0;i-=1){
if(arr[i].ty == 'fl' || arr[i].ty == 'st'){
this.stylesList.push({
elements: [],
type: arr[i].ty,
d: ''
});
arr[i].style = this.stylesList[this.stylesList.length - 1];
ownArrays.push(arr[i].style);
}else if(arr[i].ty == 'gr'){
this.searchShapes(arr[i].it);
}else if(arr[i].ty == 'tr'){
arr[i].matrix = new Matrix();
}else if(arr[i].ty == 'sh'){
arr[i].elements = [];
jLen = this.stylesList.length;
for(j=0;j<jLen;j+=1){
if(!this.stylesList[j].closed){
pathNode = document.createElementNS(svgNS, "path");
arr[i].elements.push(pathNode);
this.shape.appendChild(pathNode);
this.stylesList[j].elements.push(pathNode);
}
}
}else if(arr[i].ty == 'rc'){
arr[i].elements = [];
jLen = this.stylesList.length;
for(j=0;j<jLen;j+=1){
if(!this.stylesList[j].closed){
pathNode = document.createElementNS(svgNS, "rect");
arr[i].elements.push(pathNode);
this.shape.appendChild(pathNode);
this.stylesList[j].elements.push(pathNode);
}
}
}else if(arr[i].ty == 'el'){
arr[i].elements = [];
jLen = this.stylesList.length;
for(j=0;j<jLen;j+=1){
if(!this.stylesList[j].closed){
pathNode = document.createElementNS(svgNS, "ellipse");
arr[i].elements.push(pathNode);
this.shape.appendChild(pathNode);
this.stylesList[j].elements.push(pathNode);
}
}
}
}
len = ownArrays.length;
for(i=0;i<len;i+=1){
ownArrays[i].closed = true;
console.log('ownArrays[i]: ',ownArrays[i]);
}
};
ShapeItemElement.prototype.getElement = function(){
return this.shape;
};
ShapeItemElement.prototype.renderShape = function(num,matrix,items){
if(!items){
items = this.data;
}
this.posCount = 0;
this.frameNum = num;
var i, len;
var j, jLen;
var styleElem;
len = items.length - 1;
var groupMatrix;
for(i=len;i>=0;i-=1){
if(items[i].ty == 'tr'){
var props = matrix.props;
var mtArr = items[i].renderedData[num].mtArr;
groupMatrix = items[i].matrix;
groupMatrix.reset().transform(props[0],props[1],props[2],props[3],props[4],props[5]).transform(mtArr[0],mtArr[1],mtArr[2],mtArr[3],mtArr[4],mtArr[5]).translate(-items[i].renderedData[num].a[0],-items[i].renderedData[num].a[1]);
}else if(items[i].ty == 'sh'){
this.renderPath(items[i],num,groupMatrix);
}else if(items[i].ty == 'el'){
this.renderEllipse(items[i],num,groupMatrix);
}else if(items[i].ty == 'rc'){
this.renderRect(items[i],num,groupMatrix);
}else if(items[i].ty == 'fl'){
styleElem = items[i].style;
jLen = styleElem.elements.length;
for(j=0;j<jLen;j+=1){
styleElem.elements[j].setAttribute('fill',items[i].renderedData[num].color);
styleElem.elements[j].setAttribute('fill-opacity',items[i].renderedData[num].opacity);
}
}else if(items[i].ty == 'st'){
styleElem = items[i].style;
jLen = styleElem.elements.length;
for(j=0;j<jLen;j+=1){
styleElem.elements[j].setAttribute('stroke-width',items[i].renderedData[num].width);
styleElem.elements[j].setAttribute('stroke',items[i].renderedData[num].color);
styleElem.elements[j].setAttribute('stroke-opacity',items[i].renderedData[num].opacity);
styleElem.elements[j].setAttribute('fill-opacity',0);
}
}else if(items[i].ty == 'gr'){
this.renderShape(num,this.currentMatrix,items[i].it);
}
}
};
ShapeItemElement.prototype.renderPath = function(pathData,num,matrix){
if(!pathData.renderedFrames){
pathData.renderedFrames = [];
}
var pathString = '';
if(pathData.renderedFrames[num]){
pathString = pathData.renderedFrames[num];
}else{
pathString = pathData.renderedData[num].path.pathString;
pathData.renderedFrames[num] = pathString;
}
var elements = pathData.elements;
var i, len = elements.length;
for(i=0;i<len;i+=1){
//this.stylesList[i].d += pathData.path.pathString;
elements[i].setAttribute('d',pathString);
elements[i].setAttribute('transform','matrix('+matrix.props.join(',')+')');
}
};
ShapeItemElement.prototype.renderEllipse = function(ellipseData,num,matrix){
// cx="40" cy="40" rx="30" ry="15"
var elements = ellipseData.elements;
var ellipseAttrs = ellipseData.renderedData[num];
console.log(ellipseAttrs);
var i, len = elements.length;
for(i=0;i<len;i+=1){
elements[i].setAttribute('cx',ellipseAttrs.p[0]);
elements[i].setAttribute('cy',ellipseAttrs.p[1]);
elements[i].setAttribute('rx',ellipseAttrs.size[0]/2);
elements[i].setAttribute('ry',ellipseAttrs.size[1]/2);
//elements[i].setAttribute('transform','matrix('+matrix.props.join(',')+')');
}
};
ShapeItemElement.prototype.renderRect = function(rectData,num,matrix){
var elements = rectData.elements;
var ellipseAttrs = rectData.renderedData[num];
var animData = this.currentData;
var i, len = elements.length;
for(i=0;i<len;i+=1){
elements[i].setAttribute('rx',ellipseAttrs.roundness);
elements[i].setAttribute('ry',ellipseAttrs.roundness);
elements[i].setAttribute('width',ellipseAttrs.size[0]);
elements[i].setAttribute('height',ellipseAttrs.size[1]);
elements[i].setAttribute('x',ellipseAttrs.position[0] - ellipseAttrs.size[0]/2);
elements[i].setAttribute('y',ellipseAttrs.position[1] - ellipseAttrs.size[1]/2);
//elements[i].setAttribute('transform','matrix('+matrix.props.join(',')+')');
}
};
ShapeItemElement.prototype.renderFill = function(num){
var animData = this.currentData;
if(animData.fill){
var fill = animData.fill;
if(this.renderedFrame.fill.color !== fill.color){
this.shape.setAttribute('fill',fill.color);
this.renderedFrame.fill.color = fill.color;
}
if(this.data.fillEnabled!==false){
if(this.renderedFrame.fill.opacity !== fill.opacity){
this.shape.setAttribute('fill-opacity',fill.opacity);
this.renderedFrame.fill.opacity = fill.opacity;
}
}else{
if(this.renderedFrame.fill.opacity !== 0){
this.shape.setAttribute('fill-opacity',0);
this.renderedFrame.fill.opacity = 0;
}
}
}else{
if(this.renderedFrame.fill.opacity !== 0){
this.shape.setAttribute('fill-opacity',0);
this.renderedFrame.fill.opacity = 0;
}
}
};
ShapeItemElement.prototype.renderStroke = function(num){
var animData = this.currentData;
if(animData.stroke){
var stroke = animData.stroke;
if(this.renderedFrame.stroke.color !== stroke.color){
this.renderedFrame.stroke.color = stroke.color;
this.shape.setAttribute('stroke',stroke.color);
}
if(this.renderedFrame.stroke.width !== stroke.width){
this.renderedFrame.stroke.width = stroke.width;
this.shape.setAttribute('stroke-width',stroke.width);
}
if(this.data.strokeEnabled!==false){
if(this.renderedFrame.stroke.opacity !== stroke.opacity){
this.renderedFrame.stroke.opacity = stroke.opacity;
this.shape.setAttribute('stroke-opacity',stroke.opacity);
}
}else{
if(this.renderedFrame.stroke.opacity !== 0){
this.renderedFrame.stroke.opacity = 0;
this.shape.setAttribute('stroke-opacity',0);
}
}
}
};
ShapeItemElement.prototype.renderTransform = function(num){
var animData = this.currentData;
if(animData.tr){
var tr = animData.tr;
if(this.renderedFrame.tr.o !== tr.o){
this.renderedFrame.tr.o = tr.o;
this.shapeG.setAttribute('opacity',tr.o);
}
if(this.renderedFrame.tr.mt !== tr.mt){
this.renderedFrame.tr.mt = tr.mt;
this.shapeG.setAttribute('transform',tr.mt);
}
if(this.renderedFrame.tr.a[0] !== tr.a[0] || this.renderedFrame.tr.a[1] !== tr.a[1]){
this.renderedFrame.tr.a[0] = tr.a[0];
this.renderedFrame.tr.a[1] = tr.a[1];
this.shape.setAttribute('transform', 'translate('+(-tr.a[0])+', '+(-tr.a[1])+')');
}
}
};
ShapeItemElement.prototype.adjustTrim = function(){
var trimData = this.data.trim;
var i, len = trimData.length;
for(i=0;i<len;i+=1){
if(trimData[i].o){
trimData[i].o -= 90;
}
}
};
ShapeItemElement.prototype.renderTrim = function(num){
var trimData = this.currentData.trim;
if(this.pathLength === 0){
this.shape.setAttribute('stroke-opacity',0);
}else{
if(this.renderedFrame.trim.e == trimData.e && this.renderedFrame.trim.s == trimData.s && this.renderedFrame.trim.o == trimData.o){
//return;
}
this.renderedFrame.trim.e = trimData.e;
this.renderedFrame.trim.s = trimData.s;
this.renderedFrame.trim.o = trimData.o;
var dashLength = this.pathLength*(trimData.e - trimData.s)/100;
var dashSpace = this.pathLength - dashLength;
var dashOffset = this.pathLength*(trimData.s)/100+(this.pathLength*(trimData.o))/360;
var strokeDashArray = dashLength+" , "+dashSpace;
this.shape.setAttribute('stroke-dasharray',strokeDashArray);
this.shape.setAttribute('stroke-dashoffset',this.pathLength - dashOffset);
if(trimData.e == trimData.s){
this.shape.setAttribute('stroke-opacity',0);
}else{
if(this.currentData.stroke){
if(this.data.strokeEnabled!==false){
this.shape.setAttribute('stroke-opacity',this.currentData.stroke.opacity);
}else{
this.shape.setAttribute('stroke-opacity',0);
}
}
}
}
};