Browse Source

Merge branch 'Ohne_Drag_and_Drop' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons into Ohne_Drag_and_Drop

Jessey Widhalm 8 years ago
parent
commit
c82a83075d

BIN
res/Images/home-2.png


BIN
res/Images/power-plant.png


BIN
res/Images/switch-off.png


BIN
res/Images/switch-on.png


BIN
res/Images/transformer-1.png


+ 1 - 0
src/classes/CpsNode.java

@@ -12,5 +12,6 @@ public class CpsNode extends CpsObject {
 		this.setImage("/Images/node.png");
 		this.setSav("Canvas");
 	}
+	
 
 }

+ 0 - 2
src/classes/HolonElement.java

@@ -41,8 +41,6 @@ public class HolonElement {
 	}
 
 	public HolonElement(HolonElement element) {
-	
-		
 		setEleName(element.getEleName());
 		setAmount(element.getAmount());
 		setEnergy(element.getEnergy());

+ 2 - 0
src/classes/HolonObject.java

@@ -2,6 +2,8 @@ package classes;
 
 import java.util.ArrayList;
 
+import ui.model.idCounter;
+
 public class HolonObject extends CpsObject {
 
 	/* Array of all consumers */

+ 8 - 25
src/ui/controller/CategoryController.java

@@ -24,34 +24,17 @@ public class CategoryController {
 	 * init default category and objects
 	 */
 	public void initCategories() {
-		Category energy = new Category("Energy");
-		Category building = new Category("Building");
-		Category component = new Category("Component");
 
-		HolonObject powerp = new HolonObject("Power Plant");
-		powerp.setImage("/Images/power-plant.png");
-		powerp.setSav("Energy");
 		
-		HolonObject house = new HolonObject("House");
-		house.setImage("/Images/home.png");
-		house.setSav("Building");
-
-		HolonTransformer transformer = new HolonTransformer("Transformer");
-		transformer.setImage("/Images/transformer.png");
-		transformer.setSav("Component");
+		addNewCategory("Energy");
+		addNewCategory("Building");
+		addNewCategory("Component");
+		
+		addNewHolonObject(searchCatNode("Energy"), "Power Plant", new ArrayList<>(), "/Images/power-plant.png");
+		addNewHolonObject(searchCatNode("Building"), "House", new ArrayList<>(), "/Images/home-2.png");
+		addNewHolonTransformer(searchCatNode("Component"), "Transformer", "/Images/transformer-1.png");
+		addNewHolonSwitch(searchCatNode("Component"), "Switch", "/Images/switch-on.png");
 		
-		HolonSwitch sw = new HolonSwitch("Switch");
-		sw.setImage("/Images/switch-on.png");
-		sw.setSav("Component");
-
-		addObject(energy, powerp);
-		addObject(building, house);
-		addObject(component, transformer);
-		addObject(component, sw);
-
-		addCategory(energy);
-		addCategory(building);
-		addCategory(component);
 	}
 
 	/**

+ 1 - 1
src/ui/controller/Control.java

@@ -51,7 +51,7 @@ public class Control {
 	// }
 
 	public void addTransformer(Category cat, String objName) {
-		categoryController.addNewHolonTransformer(cat, objName, "/Images/transformer.png");
+		categoryController.addNewHolonTransformer(cat, objName, "/Images/transformer-1.png");
 	}
 
 	public void addSwitch(Category cat, String objName) {

+ 72 - 82
src/ui/view/GUI.java

@@ -1,50 +1,54 @@
 package ui.view;
 
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
+import javax.swing.BoxLayout;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JComboBox;
+import javax.swing.JEditorPane;
+import javax.swing.JFileChooser;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
-import javax.swing.JMenuBar;
 import javax.swing.JMenu;
+import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
-import javax.swing.JSlider;
 import javax.swing.JOptionPane;
-import javax.swing.JTree;
-import javax.swing.border.LineBorder;
-import javax.swing.BoxLayout;
-import javax.swing.JSplitPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
+import javax.swing.JSlider;
+import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTable;
+import javax.swing.JToolBar;
+import javax.swing.JTree;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeCellRenderer;
 
-import ui.controller.Control;
-import ui.model.*;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
-import javax.swing.table.DefaultTableModel;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Toolkit;
-import java.awt.BorderLayout;
-
-import javax.swing.JPanel;
-import javax.swing.JToolBar;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.ImageIcon;
-
+import Interfaces.CategoryListener;
 import classes.Category;
 import classes.CpsEdge;
 import classes.CpsObject;
@@ -52,26 +56,8 @@ import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.HolonTransformer;
-import Interfaces.CategoryListener;
-
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.awt.event.ActionEvent;
-
-import javax.swing.JSlider;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.ChangeEvent;
-import javax.swing.JList;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.Box;
-import javax.swing.JPopupMenu;
-import javax.swing.JSeparator;
-import javax.swing.SwingConstants;
+import ui.controller.Control;
+import ui.model.Model;
 
 public class GUI<E> implements CategoryListener {
 
@@ -185,9 +171,8 @@ public class GUI<E> implements CategoryListener {
 		this.controller = control;
 		this.model = control.getModel();
 		this.canvas = new MyCanvas(model, control);
-		this.unitGraph = new UnitGraph(model, control); // for testing, remove
+		this.unitGraph = new UnitGraph(model, control);
 
-		// later
 		control.initListener(this);
 		initialize();
 		updateCategories(model.getCategories());
@@ -377,18 +362,20 @@ public class GUI<E> implements CategoryListener {
 			}
 		});
 
-		tableProperties.addMouseListener(new MouseAdapter() {
-			public void mousePressed(MouseEvent e) {
-				int selectedX = (int) Math
-						.floor(e.getX() / (tableProperties.getColumnModel().getTotalColumnWidth() / 2));
-				int selectedY = (int) Math.floor(e.getY() / 16);
-				if (tableModelProperties.isCellEditable(selectedY, selectedX) && e.getClickCount() == 2) {
+		tableProperties.addPropertyChangeListener(new PropertyChangeListener() {
+			@Override
+			public void propertyChange(PropertyChangeEvent evt) {
+				try {
 					if (getActualCps() != null) {
-						
-						tableModelProperties.fireTableCellUpdated(selectedY, selectedX);
+						String newName = tableModelProperties.getValueAt(0, 1).toString();
+						getActualCps().setName(newName);
 					} else {
-						System.out.println("Edge");
+						float newCap = (float) tableModelProperties.getValueAt(2, 1);
+						System.out.println(newCap);
+						model.getSelectedEdge().setCapacity(newCap);
 					}
+				} catch (Exception e) {
+
 				}
 			}
 		});
@@ -596,41 +583,42 @@ public class GUI<E> implements CategoryListener {
 					}
 				}
 				// Write new data
-				if (canvas.tempCps != null) {
-					Object[] tempName = { "Name", canvas.tempCps.getName() };
+				CpsObject temp = getActualCps();
+				if (temp != null) {
+					Object[] tempName = { "Name", temp.getName() };
 					tableModelProperties.addRow(tempName);
-					Object[] tempId = { "ID", canvas.tempCps.getID() };
+					Object[] tempId = { "ID", temp.getID() };
 					tableModelProperties.addRow(tempId);
-					if (canvas.tempCps.getClass() == HolonObject.class) {
-						Object[] tempEnergy = { "Total Energy", ((HolonObject) canvas.tempCps).getCurrentEnergy() };
+					if (temp.getClass() == HolonObject.class) {
+						Object[] tempEnergy = { "Total Energy", ((HolonObject) temp).getCurrentEnergy() };
 						tableModelProperties.addRow(tempEnergy);
 					}
 					tableModelProperties.setCellEditable(0, 1, true);
 					tableModelProperties.setCellEditable(2, 1, false);
-					ArrayList<CpsEdge> temp_array = canvas.tempCps.getConnectedTo();
+					ArrayList<CpsEdge> temp_array = temp.getConnectedTo();
 					if (!temp_array.isEmpty()) {
 						boolean first = true;
-						for (CpsEdge temp : temp_array) {
+						for (CpsEdge temp2 : temp_array) {
 							if (first) {
 								first = false;
-								if (canvas.tempCps.getName().compareTo(temp.getA().getCompareName()) == 0) {
-									Object[] tempConnection = { canvas.tempCps.getName() + " is connected to",
-											temp.getB().getName() + " with ID: " + temp.getB().getID() };
+								if (temp.getName().compareTo(temp2.getA().getCompareName()) == 0) {
+									Object[] tempConnection = { temp.getName() + " is connected to",
+											temp2.getB().getName() + " with ID: " + temp2.getB().getID() };
 									tableModelProperties.addRow(tempConnection);
 								} else {
-									Object[] tempConnection = { canvas.tempCps.getName() + " is connected to",
-											temp.getA().getName() + " with ID: " + temp.getA().getID() };
+									Object[] tempConnection = { temp.getName() + " is connected to",
+											temp2.getA().getName() + " with ID: " + temp2.getA().getID() };
 									tableModelProperties.addRow(tempConnection);
 								}
 
 							} else {
-								if (canvas.tempCps.getName().compareTo(temp.getA().getCompareName()) == 0) {
+								if (temp.getName().compareTo(temp2.getA().getCompareName()) == 0) {
 									Object[] tempConnection = { "",
-											temp.getB().getName() + " with ID: " + temp.getB().getID() };
+											temp2.getB().getName() + " with ID: " + temp2.getB().getID() };
 									tableModelProperties.addRow(tempConnection);
 								} else {
 									Object[] tempConnection = { "",
-											temp.getA().getName() + " with ID: " + temp.getA().getID() };
+											temp2.getA().getName() + " with ID: " + temp2.getA().getID() };
 									tableModelProperties.addRow(tempConnection);
 								}
 
@@ -743,7 +731,7 @@ public class GUI<E> implements CategoryListener {
 			@Override
 			public void actionPerformed(java.awt.event.ActionEvent evt) {
 				menuFileExitActionPerformed(evt);
-				
+
 			}
 
 			private void menuFileExitActionPerformed(java.awt.event.ActionEvent evt) {
@@ -751,7 +739,7 @@ public class GUI<E> implements CategoryListener {
 				JFrame test = new JFrame();
 				if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) {
 					File file = fileChooser.getSelectedFile();
-					
+
 					try {
 						controller.loadFile(file.getAbsolutePath());
 					} catch (IOException e) {
@@ -761,13 +749,13 @@ public class GUI<E> implements CategoryListener {
 				}
 			}
 		});
-		
+
 		mntmSave.addActionListener(new java.awt.event.ActionListener() {
 			@Override
 			public void actionPerformed(java.awt.event.ActionEvent evt) {
-				
+
 				menuSaveActionPerformed(evt);
-				
+
 			}
 
 			private void menuSaveActionPerformed(java.awt.event.ActionEvent evt) {
@@ -775,7 +763,7 @@ public class GUI<E> implements CategoryListener {
 				JFrame test = new JFrame();
 				if (fileChooser.showSaveDialog(test) == JFileChooser.APPROVE_OPTION) {
 					File file = fileChooser.getSelectedFile();
-					
+
 					try {
 						controller.saveFile(file.getAbsolutePath());
 					} catch (IOException e) {
@@ -973,6 +961,7 @@ public class GUI<E> implements CategoryListener {
 			tableModelProperties.insertRow(2, tempEnergy);
 		}
 	}
+
 	private static void addPopup(Component component, final JPopupMenu popup) {
 		component.addMouseListener(new MouseAdapter() {
 			public void mousePressed(MouseEvent e) {
@@ -990,4 +979,5 @@ public class GUI<E> implements CategoryListener {
 			}
 		});
 	}
+
 }

+ 0 - 1
src/ui/view/Main.java

@@ -31,7 +31,6 @@ public class Main {
 
 					VIEW.getFrmCyberPhysical().setVisible(true);
 
-					// CONTROL.writeFile();
 
 				} catch (Exception e) {
 					e.printStackTrace();

+ 1 - 0
src/ui/view/MyCanvas.java

@@ -414,6 +414,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		// ins leere Gedragged
 		if (node) {
 			CpsNode n = new CpsNode("Node");
+			n.setID(idCounter.nextId());
 			n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
 			controller.addObjectCanvas(n);
 

+ 60 - 41
src/ui/view/UnitGraph.java

@@ -11,6 +11,7 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.awt.geom.CubicCurve2D;
+import java.awt.geom.GeneralPath;
 import java.awt.geom.Line2D;
 import java.util.LinkedList;
 import java.awt.Point;
@@ -27,7 +28,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 
 	private static final long serialVersionUID = 1L;
 	private int ITERATIONS = 50;
-	private int MAXIMUM = 1;
+	private float MAXIMUM = 0;
 
 	private Point recSize = new Point(8, 8); // Point Size
 	private Graphics2D g2;
@@ -44,6 +45,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	private HolonElement tempElement;
 	private Model model;
 	private Control controller;
+	GeneralPath graphCurve = new GeneralPath();  
 
 	private boolean pointDrag = false;
 	private boolean init = false;
@@ -56,9 +58,9 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 		this.controller = control;
 		this.model = model;
 		this.ITERATIONS = model.getIterations();
-
+		
 		this.pointList = new LinkedList<>();
-
+		
 		this.addMouseListener(this);
 		this.addMouseMotionListener(this);
 		this.addComponentListener(this);
@@ -72,23 +74,23 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	 */
 	public void paintComponent(Graphics g) {
 		super.paintComponent(g);
-
-		if (arrayOfValue != null) {
-			for (int i = 0; i < arrayOfValue.length; i++) {
-				System.out.println(""+arrayOfValue[i]);
-				arrayOfValue[i] = getYValueAt((int) (i * width / (ITERATIONS - 1)));
-			}
-		}
-
 		g2 = (Graphics2D) g;
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		g2.setRenderingHints(rh);
 		g2.setStroke(new BasicStroke(1));
-
+		
+		graphCurve.reset();
+		
+		if (arrayOfValue != null) {
+			for (int i = 0; i < arrayOfValue.length; i++) {
+				arrayOfValue[i] = convertToValueY(getYValueAt((int) (i * width / (ITERATIONS - 1))));
+			}
+		}
+		
 		// Draw the Vertical Lines
 		g2.setColor(new Color(240, 240, 240));
 		for (int i = 0; i < ITERATIONS; i++) {
-			g2.drawLine((i) * this.getWidth() / (ITERATIONS - 1), MAXIMUM, (i) * this.getWidth() / (ITERATIONS - 1),
+			g2.drawLine((i) * this.getWidth() / (ITERATIONS - 1), 0, (i) * this.getWidth() / (ITERATIONS - 1),
 					this.getHeight());
 		}
 
@@ -96,14 +98,15 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			g2.drawLine(0, (i) * this.getHeight() / (ITERATIONS - 1), this.getWidth(),
 					(i) * this.getHeight() / (ITERATIONS - 1));
 		}
-
+		
 		// Draw the Lines
 		g2.setColor(Color.BLACK);
 		for (int i = 0; i < pointList.size() - 1; i++) {
 			c = buildCurve(pointList.get(i), pointList.get(i + 1));
-			g2.draw(c);
+			graphCurve.append(c, true);
 		}
-
+		g2.draw(graphCurve);
+		
 		// Draw the Points
 		g2.setColor(Color.BLUE);
 		for (int i = 0; i < pointList.size() - 0; i++) {
@@ -111,9 +114,21 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 					(int) (pointList.get(i).getY() * scaleY - recSize.getY() / 2), (int) recSize.getX(),
 					(int) recSize.getY());
 		}
-		g2.drawLine((model.getCurIteration()) * this.getWidth() / (ITERATIONS - 1), MAXIMUM,
+		g2.drawLine((model.getCurIteration()) * this.getWidth() / (ITERATIONS - 1), 0,
 				(model.getCurIteration()) * this.getWidth() / (ITERATIONS - 1), this.getHeight());
 
+		//Actual Iteration Point Visualization
+		/*
+		g2.setColor(Color.RED);
+		if (arrayOfValue != null) {
+			for (int i = 0; i < arrayOfValue.length; i++) {
+				g2.fillOval((int) (i * width / (ITERATIONS - 1) * scaleX - recSize.getX() / 2),
+						(int) (convertToCanvasY((int) arrayOfValue[i]) * scaleY - recSize.getY() / 2), (int) recSize.getX(),
+						(int) recSize.getY());
+			}
+		}
+		*/
+		
 	}
 
 	@Override
@@ -124,8 +139,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			x = e.getX() / scaleX;
 			y = e.getY() / scaleY;
 			// y
-			if (e.getY() <= MAXIMUM) {
-				y = MAXIMUM / scaleY;
+			if (e.getY() <= 0) {
+				y = 0 / scaleY;
 			} else if (this.getHeight() <= e.getY()) {
 				y = this.getHeight() / scaleY;
 			}
@@ -186,8 +201,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 				&& e.getX() != this.getWidth() / scaleX) {
 			for (int i = 0; i < pointList.size(); i++) {
 				if (x < pointList.get(i).getX() && !added) {
-					if (e.getY() <= MAXIMUM) {
-						pointList.add(i, new Point((int) (x), (int) (MAXIMUM / scaleY)));
+					if (e.getY() <= 0) {
+						pointList.add(i, new Point((int) (x), (int) (0 / scaleY)));
 					} else {
 						pointList.add(i, new Point((int) (x), (int) y));
 					}
@@ -215,7 +230,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 
 	public void componentResized(ComponentEvent e) {
 		if (init) {
-			MAXIMUM = (int) convertToCanvasY(MAXIMUM);
+			MAXIMUM = tempElement.getEnergy();
 			init = false;
 			// for scale
 			if (width == -1 && height == -1) {
@@ -227,8 +242,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			scaleY = this.getHeight() / height;
 
 			if (pointList.isEmpty()) {
-				pointList.addFirst(new Point(0, MAXIMUM));
-				pointList.addLast(new Point((int) (this.getWidth() / scaleX), MAXIMUM));
+				pointList.addFirst(new Point(0, 0));
+				pointList.addLast(new Point((int) (this.getWidth() / scaleX), 0));
 			}
 		}
 		scaleX = this.getWidth() / width;
@@ -254,8 +269,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	 */
 	public void reset() {
 		pointList.removeAll(pointList);
-		pointList.addFirst(new Point(0, (int) (MAXIMUM / scaleY)));
-		pointList.addLast(new Point((int) (this.getWidth() / scaleX), (int) (MAXIMUM / scaleY)));
+		pointList.addFirst(new Point(0,0));
+		pointList.addLast(new Point((int) (this.getWidth() / scaleX), 0));
 		repaint();
 	}
 
@@ -264,18 +279,26 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	 * 
 	 * @param double
 	 *            d, the number to convert
-	 * @return the convertet number
+	 * @return the converted number
 	 */
-	public double convertToCanvasY(int d) {
-		if ((this.getHeight() - (((((double) this.getHeight() * 3) / 4) / MAXIMUM) * d)) <= 0) {
-			return 1;
-		} else {
-			return (this.getHeight() - (((((double) this.getHeight())) / MAXIMUM) * d));
-		}
+	public double convertToCanvasY(float d) {
+		System.out.println(""+(height + (d*(height/MAXIMUM))));
+		return (height -(d*(height/MAXIMUM)));
+	}
+	
+	/**
+	 * converts the number to fit the value
+	 * 
+	 * @param double
+	 *            d, the number to convert
+	 * @return the converted number
+	 */
+	public float convertToValueY(double d){
+		return (float)((height - ( height * (d/height)))/(height/MAXIMUM));
 	}
 
 	/**
-	 * Viusalise the HolonElement on the Graph
+	 * Visualize the HolonElement on the Graph
 	 * 
 	 * @param HolonElement
 	 *            ele, which should be visualized
@@ -326,12 +349,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	public int getYValueAt(int xVal) {
 		for (int i = 0; i < pointList.size() - 1; i++) {
 			// get the Points
-			if (xVal > pointList.get(i + 1).getX()) {
-				x = pointList.get(i + 1).getX();
-				y = pointList.get(i).getX();
-
+			if (xVal < pointList.get(i + 1).getX()) {
 				// Curve erstellen
-				c = buildCurve(pointList.get(i), pointList.get(i + 1));
 				Line2D l1 = new Line2D.Double(pointList.get(i).getX(), pointList.get(i).getY(),
 						pointList.get(i + 1).getX(), pointList.get(i + 1).getY());
 				Line2D l2 = new Line2D.Double(xVal, 0, xVal, height);
@@ -353,8 +372,8 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			return null;
 		} else {
 			double z = (sx * (qy - py) + sy * (px - qx)) / det;
-			if (z == 0 || z == 1)
-				return null; // intersection at end point!
+			if (z < 0 || z > 1)
+				return new Point(0,0); // intersection at end point!
 			return new Point((int) (px + z * rx), (int) (py + z * ry));
 		}
 	} // end intersection line-line