package com.clearlyspam23.GLE.GUI.util;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.SwingUtilities;
import org.piccolo2d.PNode;
import org.piccolo2d.extras.PFrame;
import org.piccolo2d.util.PPaintContext;
public class LineNode extends PNode {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
PFrame frame = new PFrame();
LineNode test = new LineNode(new BasicStroke(1));
test.setLines(Arrays.asList(new Line2D.Double(0, 0, 0, 50)));
LineNode test2 = new LineNode(new BasicStroke(1));
test2.setLines(Arrays.asList(new Line2D.Double(0, 0, 50, 0)));
frame.getCanvas().getLayer().addChild(test);
frame.getCanvas().getLayer().addChild(test2);
}
});
}
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Line2D> lines = new ArrayList<Line2D>();
private Line2D drawnLine = new Line2D.Double();
private Stroke stroke;
public LineNode(Stroke stroke){
this.stroke = stroke;
setPaint(Color.BLACK);
}
public LineNode(Stroke stroke, List<Line2D> lines){
this.stroke = stroke;
setPaint(Color.BLACK);
setLines(lines);
}
public Stroke getStroke(){
return stroke;
}
public void setStroke(Stroke stroke){
this.stroke = stroke;
}
public void setLines(List<Line2D> lines){
this.lines.clear();
if(lines==null||lines.isEmpty())
return;
// double minX = Double.MAX_VALUE;
// double minY = Double.MAX_VALUE;
double maxX = Double.MIN_VALUE;
double maxY = Double.MIN_VALUE;
for(Line2D l : lines){
// minX = Math.min(minX, Math.min(l.getX1(), l.getX2()));
// minY = Math.min(minY, Math.min(l.getY1(), l.getY2()));
maxX = Math.max(maxX, Math.max(l.getX1(), l.getX2()));
maxY = Math.max(maxY, Math.max(l.getY1(), l.getY2()));
}
for(Line2D l : lines){
this.lines.add(new Line2D.Double((l.getX1())/maxX, (l.getY1())/maxY, (l.getX2())/maxX, (l.getY2())/maxY));
}
this.repaint();
}
protected void paint(PPaintContext paintContext) {
//super.paint(paintContext);
Graphics2D g2 = paintContext.getGraphics();
g2.setPaint(this.getPaint());
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(stroke);
for(Line2D l : lines){
drawnLine.setLine(l.getX1()*getWidth()+getX(), l.getY1()*getHeight()+getY(), l.getX2()*getWidth()+getX(), l.getY2()*getHeight()+getY());
g2.draw(drawnLine);
}
}
}