package com.pixelmaid.dresscode.antlr.types.tree.functions;
import java.util.ArrayList;
import java.util.List;
import com.pixelmaid.dresscode.antlr.types.VarType;
import com.pixelmaid.dresscode.antlr.types.tree.DCNode;
import com.pixelmaid.dresscode.drawing.datatype.Point;
import com.pixelmaid.dresscode.drawing.primitive2d.DrawablePoint;
import com.pixelmaid.dresscode.drawing.primitive2d.Polygon;
import com.pixelmaid.dresscode.events.CustomEvent;
public class PolygonNode extends DrawableNode implements DCNode {
public PolygonNode(List<DCNode> ps, int l) {
super(ps,l);
}
@Override
public VarType evaluate() {
Polygon e = null;
try{
if(params==null){
e= new Polygon();
}
else if(params.get(0).evaluate().isList()){
System.out.println("found list "+params.get(0).evaluate().isList());
List<VarType> l = params.get(0).evaluate().asList();
ArrayList<Point> pts = new ArrayList<Point>();
for(int i=0;i<l.size();i++){
DrawablePoint dp =l.get(i).asDrawablePoint();
Point p = new Point(dp.getX(),dp.getY());
pts.add(p);
System.out.println("creating point at: "+p.getX()+","+p.getY());
}
System.out.println("creating new polygon");
e = new Polygon(pts);
}
else if(params.get(0).evaluate().isDrawablePoint()){
e= new Polygon(params.get(0).evaluate().asDrawablePoint().getOrigin());
}
else if(params.get(0).evaluate().isNumber()&¶ms.get(1).evaluate().isNumber()){
if(params.size()==2){
int sides =params.get(0).evaluate().asDouble().intValue();
double length = params.get(1).evaluate().asDouble();
e = new Polygon(sides,length);
}
else if(params.size()==3){
double x = params.get(0).evaluate().asDouble();
double y = params.get(1).evaluate().asDouble();
int sides =params.get(2).evaluate().asDouble().intValue();
e = new Polygon(x,y,sides);
}
else if(params.size()==4){
double x = params.get(0).evaluate().asDouble();
double y = params.get(1).evaluate().asDouble();
int sides =params.get(2).evaluate().asDouble().intValue();
double length = params.get(3).evaluate().asDouble();
e= new Polygon(x,y,sides,length);
}
else{
//Window.output.setText("incorrect parameters for polygon call at line:"+line);
System.err.println("inccorect number of arguments for polygon at line:"+line);
}
}
else{
//Window.output.setText("incorrect parameters for polygon call at line:"+line);
System.err.println("inccorect arguments for polygon at line:"+line);
}
this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, e);
}
catch (ClassCastException err){
//Window.output.setText("incorrect parameters for polygon call at line:"+line);
System.err.println("incorrect parameters for polygon at line:"+line);
}
//set all code initialized polygons to closed
e.setClosed(true);
e.setLine(line);
return new VarType(e);
//throw new RuntimeException("Illegal function call: " + this);
}
}