package com.pixelmaid.dresscode.antlr.types.tree.functions; 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.Line; import com.pixelmaid.dresscode.events.CustomEvent; import com.pixelmaid.dresscode.drawing.primitive2d.DrawablePoint; public class LineNode extends DrawableNode implements DCNode { public LineNode(List<DCNode> ps, int l) { super(ps,l); } @Override public VarType evaluate() { Line e = null; if(params.size()==4 && params.get(0).evaluate().isNumber()&¶ms.get(1).evaluate().isNumber()&¶ms.get(2).evaluate().isNumber()&¶ms.get(3).evaluate().isNumber() ){ double x1 = params.get(0).evaluate().asDouble(); double y1 = params.get(1).evaluate().asDouble(); double x2 = params.get(2).evaluate().asDouble(); double y2 = params.get(3).evaluate().asDouble(); e = new Line(x1,y1,x2,y2); this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, e); e.setLine(line); return new VarType(e); } else if(params.size()==2 && params.get(0).evaluate().isDrawablePoint()&¶ms.get(1).evaluate().isDrawablePoint()){ Point start = params.get(0).evaluate().asDrawablePoint().getOrigin(); Point end = params.get(1).evaluate().asDrawablePoint().getOrigin(); e = new Line(start.getX(),start.getY(),end.getX(),end.getY()); this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, e); e.setLine(line); return new VarType(e); } else if(params.size()==3 && params.get(0).evaluate().isDrawablePoint()&¶ms.get(1).evaluate().isNumber()&¶ms.get(2).evaluate().isNumber()){ Point start = params.get(0).evaluate().asDrawablePoint().getOrigin(); double r = params.get(1).evaluate().asDouble(); double theta = params.get(2).evaluate().asDouble(); e = new Line(start,r,theta); this.fireDrawableEvent(CustomEvent.DRAWABLE_CREATED, e); e.setLine(line); return new VarType(e); } throw new RuntimeException("Illegal line function call: " + this); } /* public VarType evaluate() { Line e = null; if(params.get(0).evaluate().isNumber()){ System.out.println("first line param is number"); try{ ArrayList<Double> values = new ArrayList<Double>(); for(int i=0;i<params.size();i++){ VarType value = params.get(i).evaluate(); if(value.isNumber()){ values.add(value.asDouble()); } } e = new Line(values); } catch (ClassCastException err){ //Window.output.setText("incorrect parameters for line call at line:"+line); System.err.println("incorrect parameters for line call at line:"+line); } } else if(params.get(0).evaluate().isDrawable()){ try{ if(params.get(0).evaluate().isLine()&¶ms.get(0).evaluate().isLine()){ Line d1 = params.get(0).evaluate().asLine(); Line d2 = params.get(1).evaluate().asLine(); e = new Line(d1.getEnd(),d2.getStart()); } else{ Drawable d1 = params.get(0).evaluate().asDrawable(); Drawable d2 = params.get(1).evaluate().asDrawable(); e = new Line(d1.getOrigin(),d2.getOrigin()); } } catch (ClassCastException err){ //Window.output.setText("incorrect parameters for line call at line:"+line); System.err.println("incorrect parameters for line call at line:"+line); } } else if(params.get(0).evaluate().isPoint()){ if(params.get(1).evaluate().isPoint()){ e = new Line(params.get(0).evaluate().asPoint(),params.get(1).evaluate().asPoint()); } else{ Point origin = params.get(0).evaluate().asPoint(); double r = params.get(1).evaluate().asDouble(); double t = params.get(2).evaluate().asDouble(); e = new Line(origin,r,t); } } else{ // Window.output.setText("incorrect parameters for line call at line:"+line); System.err.println("incorrect parameters for line call at line:"+line); } this.drawableEvent(CustomEvent.DRAWABLE_CREATED, e); return new VarType(e); //throw new RuntimeException("Illegal function call: " + this); }*/ }