package com.pixelmaid.dresscode.antlr.types.tree.functions.transforms;
import java.util.List;
import com.pixelmaid.dresscode.antlr.types.Scope;
import com.pixelmaid.dresscode.antlr.types.VarType;
import com.pixelmaid.dresscode.antlr.types.tree.DCNode;
import com.pixelmaid.dresscode.antlr.types.tree.NodeEvent;
import com.pixelmaid.dresscode.drawing.math.Pattern;
import com.pixelmaid.dresscode.drawing.math.PolyBoolean;
import com.pixelmaid.dresscode.drawing.primitive2d.Drawable;
import com.pixelmaid.dresscode.events.CustomEvent;
public class ArcNode extends NodeEvent implements DCNode {
protected List<DCNode> params;
protected int line;
protected Scope scope;
private double width;
private double height;
public ArcNode(List<DCNode> ps, Scope s, int l, double w, double h) {
params = ps;
line = l;
scope = s;
width = w;
height = h;
//System.out.println("created new drawable node at line:"+line);
}
@Override
public VarType evaluate() {
Drawable d= null;
VarType v = null;
int dNum=0;
double wWidth=width;
double hHeight = height;
double degree =180;
double offset = 0;
double posX = width/2;
double posY = height/2;
boolean rotate = true;
try{
Drawable aP = params.get(0).evaluate().asDrawable();
aP.show();
dNum = params.get(1).evaluate().asDouble().intValue();
if(params.size()>=3){
wWidth = params.get(2).evaluate().asDouble();
hHeight = params.get(2).evaluate().asDouble();
}
if(params.size()>=4){
hHeight = params.get(3).evaluate().asDouble();
}
if(params.size()>=5){
degree = params.get(4).evaluate().asDouble();
}
if(params.size()>=6){
offset= params.get(5).evaluate().asDouble();
}
if(params.size()>=7){
rotate= params.get(6).evaluate().asBoolean();
}
if(params.size()==8){
posX = params.get(7).evaluate().asDouble();
}
if(params.size()==9){
posY= params.get(8).evaluate().asDouble();
}
//this.drawableEvent(CustomEvent.REMOVE_DRAWABLE, aP);
//this.drawableEvent(CustomEvent.REMOVE_DRAWABLE, bP);
d = Pattern.arc(aP, dNum, wWidth,hHeight,degree,offset,rotate,posX,posY);
//d = PolyBoolean.union(aP.copy(),bP.copy());
aP.hide();
aP.setLine(line);
// d.setIdentifier(aP.getIdentifier());
this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, d);
v= new VarType(d);
/*if(aP.getIdentifier()!=null){
scope.assign(aP.getIdentifier(), v);
}*/
d.setLine(line);
}
catch (ClassCastException e){
throw new RuntimeException("Illegal arc function call at line:"+ line+" : " + this);
}
return v;
}
}