Kaynağa Gözat

kanten werden ungerichtet gezeichnet

Kolja Strohm 7 yıl önce
ebeveyn
işleme
364308f6ff

BIN
bin/Model/LayeredNode.class


BIN
bin/View/MainView.class


BIN
bin/View/NodeView.class


BIN
bin/inputReader/Reader.class


+ 37 - 0
src/Model/LayeredEdge.java

@@ -1,5 +1,6 @@
 package Model;
 
+import java.awt.Point;
 import java.util.ArrayList;
 
 import org.eclipse.elk.graph.ElkEdge;
@@ -18,6 +19,7 @@ public class LayeredEdge implements LayeredGraphEdge {
     LayeredGraphNode graph;
     boolean reversed;
     boolean dummy;
+    ArrayList< Point > bindPoints;
     
     public LayeredEdge( ElkEdge original, ArrayList< LayeredGraphNode > sources, ArrayList< LayeredGraphNode > targets, LayeredGraphNode graph )
     {
@@ -27,6 +29,41 @@ public class LayeredEdge implements LayeredGraphEdge {
         this.graph = graph;
         reversed = false;
         dummy = false;
+        bindPoints = new ArrayList<>();
+        bindPoints.add( null );
+        bindPoints.add( null );
+    }
+
+    @Override
+    public void setStartPoint( int x, int y )
+    {
+        bindPoints.set( 0, new Point( x, y ) );
+    }
+    
+    @Override
+    public void addBindPoint( int x, int y )
+    {
+        bindPoints.add( bindPoints.size() - 1, new Point( x, y ) );
+    }
+    
+    @Override
+    public void setEndPoint( int x, int y )
+    {
+        bindPoints.set( bindPoints.size() - 1, new Point( x, y ) );
+    }
+
+    @Override
+    public ArrayList<Point> getLinePoints()
+    {
+        if( bindPoints.get( 0 ) == null && sources.size() > 0 )
+        {
+            setStartPoint( (int)sources.get( 0 ).getX() + (int)sources.get( 0 ).getWidth() / 2, (int)sources.get( 0 ).getY() + (int)sources.get( 0 ).getHeight() );
+        }
+        if( bindPoints.get( bindPoints.size() - 1 ) == null && targets.size() > 0 )
+        {
+            setEndPoint( (int)targets.get( 0 ).getX() + (int)targets.get( 0 ).getWidth() / 2, (int)targets.get( 0 ).getY() );
+        }
+        return bindPoints;
     }
     
     @Override

+ 18 - 12
src/Model/LayeredGraphEdge.java

@@ -1,5 +1,6 @@
  package Model;
 
+import java.awt.Point;
 import java.util.ArrayList;
 
 import org.eclipse.elk.graph.ElkEdge;
@@ -12,7 +13,7 @@ import org.eclipse.elk.graph.ElkEdge;
 public interface LayeredGraphEdge {
 
     /**
-     * @return Gibt die originale Kante des Elk Graphen zurück
+     * @return Gibt die originale Kante des Elk Graphen zur�ck
      */
     ElkEdge getOriginalEdge();
     
@@ -21,22 +22,22 @@ public interface LayeredGraphEdge {
      */
     void remove();
     /**
-     * Gibt eine Liste mit Knoten zurück, von welchen die Kante beginnt
+     * Gibt eine Liste mit Knoten zur�ck, von welchen die Kante beginnt
      * @return Liste mit Startknoten
      */
     ArrayList< LayeredGraphNode > getSources();
     /**
-     * Gibt eine Liste mit Knoten zurück, bei welchen die Kante endet
+     * Gibt eine Liste mit Knoten zur�ck, bei welchen die Kante endet
      * @return Liste mit Endknoten
      */
     ArrayList< LayeredGraphNode > getTargets();
     /**
-     * Prüft, ob die Kante über mehrere Layer hinweg geht
-     * @return true, falls die Kante über mehrere Layer hinweg geht
+     * Pr�ft, ob die Kante �ber mehrere Layer hinweg geht
+     * @return true, falls die Kante �ber mehrere Layer hinweg geht
      */
     boolean isCrossLayerEdge();
     /**
-     * Für jeden Layer über den die Kante geht wird ein Dummy Node erzeugt.
+     * F�r jeden Layer �ber den die Kante geht wird ein Dummy Node erzeugt.
      * Diese werden durch Dummy Kanten verbunden, welche diese Kante ersetzen.
      * Die Kante wird automatisch aus dem Graphen entfernt
      */
@@ -45,19 +46,24 @@ public interface LayeredGraphEdge {
      * Dreht die Kante um, indem die Startknoten mit den Endknoten getauscht werden
      */
     void reverse();
+    
+    void setStartPoint( int x, int y );
+    void setEndPoint( int x, int y );
+    void addBindPoint( int x, int y );
+    ArrayList<Point> getLinePoints();
     /**
-     * Prüft, ob die Kante umgedreht wurde
+     * Pr�ft, ob die Kante umgedreht wurde
      * @return true, falls die Kante umgedreht wurde
      */
     boolean isReversedEdge();
     /**
-     * Prüft, ob die Kante eine Dummy Kante ist (also ob sie von einem Dummy Knoten startet oder zu einem DummyKnoten hinführt)
+     * Pr�ft, ob die Kante eine Dummy Kante ist (also ob sie von einem Dummy Knoten startet oder zu einem DummyKnoten hinf�hrt)
      * @return true, falls die Kante eine Dummy Kante ist
      */
     boolean isDummyEdge();
     /**
-     * Ermittelt, welche für welche originale Kante diese Kante als Dummykante eingesetzt wurd
-     * und entfernt all die Dummynodes und Dummykanten wieder. Anschließend wird die alte Kante wieder zum Graphen hinzugefügt
+     * Ermittelt, welche f�r welche originale Kante diese Kante als Dummykante eingesetzt wurd
+     * und entfernt all die Dummynodes und Dummykanten wieder. Anschlie�end wird die alte Kante wieder zum Graphen hinzugef�gt
      */
     void removeDummyNodes();
     /**
@@ -69,8 +75,8 @@ public interface LayeredGraphEdge {
      */
     void setReversedEdge();
     /**
-     * Legt den Graphen fest, zu dem diese Kante gehört
-     * @param graph Der Graph, zu dem die Kante gehört
+     * Legt den Graphen fest, zu dem diese Kante geh�rt
+     * @param graph Der Graph, zu dem die Kante geh�rt
      */
     void setGraph( LayeredGraphNode graph );
 }

+ 1 - 1
src/Model/LayeredNode.java

@@ -303,7 +303,7 @@ public class LayeredNode implements LayeredGraphNode {
     {
     	for( LayeredGraphNode n : nodes )
         {
-            if( n.getName() == name )
+            if( n.getName() != null && name != null && n.getName().equals( name ) )
                 return n;
         }
         return null;	

+ 90 - 0
src/View/EdgeView.java

@@ -0,0 +1,90 @@
+package View;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.util.ArrayList;
+
+import javax.swing.JPanel;
+
+import Model.LayeredGraphEdge;
+
+public class EdgeView extends JPanel {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    private LayeredGraphEdge model;
+    
+    public EdgeView( LayeredGraphEdge model ) {
+        this.model = model;
+    }
+    
+    @Override
+    public int getX()
+    {
+        ArrayList<Point> bps = model.getLinePoints();
+        double min = bps.get( 0 ).getX();
+        for( Point p : bps )
+            min = Math.min( min, p.getX() );
+        return (int)min - 5;
+    }
+    
+    @Override
+    public int getY()
+    {
+        ArrayList<Point> bps = model.getLinePoints();
+        double min = bps.get( 0 ).getY();
+        for( Point p : bps )
+            min =  Math.min( min, p.getY() );
+        return (int)min - 5;
+    }
+    
+    @Override
+    public int getWidth()
+    {
+        ArrayList<Point> bps = model.getLinePoints();
+        double max = bps.get( 0 ).getX();
+        for( Point p : bps )
+            max =  Math.max( max, p.getX() );
+        return (int)max + 10;
+    }
+    
+    @Override
+    public int getHeight()
+    {
+        ArrayList<Point> bps = model.getLinePoints();
+        double max = bps.get( 0 ).getY();
+        for( Point p : bps )
+            max =  Math.max( max, p.getY() );
+        return (int)max + 10;
+    }
+    
+    @Override
+    public void paint( Graphics g )
+    {
+        paintComponent( g );
+        for( Component c : getComponents() )
+            c.paint( g.create( 
+                    c.getX() + 10, 
+                    c.getY() + 10, 
+                    Math.min( getWidth() - 10, c.getWidth() + c.getX() + 10 ), 
+                    Math.min( getHeight() - 10, c.getHeight() + c.getY() + 10 ) ) );
+    }
+
+    @Override
+    public void paintComponent( Graphics g )
+    {
+        System.out.println( "Clipping: x:" + g.getClip().getBounds().getX() + " y:" + g.getClip().getBounds().getY() + " w:" + g.getClip().getBounds().getWidth() + " h:" + g.getClip().getBounds().getHeight() );
+        g.setColor( Color.GREEN );
+        ArrayList<Point> bps = model.getLinePoints();
+        for( int i = 1; i < bps.size(); i++ )
+        {
+            System.out.println( "Draw a Line from (" + (int)bps.get( i - 1 ).getX() + "," + (int)bps.get( i - 1 ).getY() + ") to (" + (int)bps.get( i ).getX() + "," + (int)bps.get( i ).getY() + ")" );
+            g.drawLine( (int)bps.get( i - 1 ).getX() - getX(), (int)bps.get( i - 1 ).getY() - getY(), (int)bps.get( i ).getX() - getX(), (int)bps.get( i ).getY() - getY() );
+        }
+    }
+}

+ 8 - 0
src/View/MainView.java

@@ -2,6 +2,7 @@ package View;
 
 import javax.swing.JFrame;
 
+import Model.LayeredGraphEdge;
 import Model.LayeredGraphNode;
 
 public class MainView {
@@ -27,6 +28,13 @@ public class MainView {
 	private NodeView createNodeView( LayeredGraphNode gNode )
 	{
 		NodeView graphView = new NodeView( gNode );
+		graphView.setOpaque( true );
+        for( LayeredGraphEdge e : gNode.getContainedEdges() )
+        {
+            EdgeView ev = new EdgeView( e );
+            ev.setOpaque( true );
+            graphView.add( ev );
+        }
 		for( LayeredGraphNode n : gNode.getContainedNodes() )
 			graphView.add( createNodeView( n ) );
 		return graphView;

+ 0 - 3
src/View/NodeView.java

@@ -44,7 +44,6 @@ public class NodeView extends JPanel {
         return (int)model.getHeight();
     }
     
-    
     @Override
     public void paint( Graphics g )
     {
@@ -60,8 +59,6 @@ public class NodeView extends JPanel {
 	@Override
 	public void paintComponent( Graphics g )
 	{
-	    super.paintComponent(g);
-		System.out.print( "Drawing: Node " + model.getName() + " Position (" + model.getX() + "," + model.getY() + ") Size (" + model.getWidth() + "," + model.getHeight() + ")\n" );
 		g.setColor( Color.RED );
 		g.drawRect( 0, 0, getWidth()-1, getHeight()-1 );
 	}

+ 18 - 14
src/inputReader/Reader.java

@@ -46,6 +46,20 @@ public class Reader {
 		LayeredGraphNode newNode = new LayeredNode( null, null );
 		if( parent != null )
 			newNode = parent.createNode( null );
+        if( node.has( "name" ) )
+        {
+            if( parent != null && parent.findNodeByName( node.getString( "name" ) ) != null )
+                throw new JSONException( "Node " + node.getString( "name" ) + " is already known" );
+            newNode.setName( node.getString( "name" ) );
+        }
+        if( node.has( "width" ) )
+            newNode.setWidth( node.getInt( "width" ) );
+        if( node.has( "height" ) )
+            newNode.setHeight( node.getInt( "height" ) );
+        if( node.has( "x" ) )
+            newNode.setX( node.getInt( "x" ) );
+        if( node.has( "y" ) )
+            newNode.setY( node.getInt( "y" ) );
 		if( node.has( "layers" ) )
 		{
 			JSONArray layers = node.getJSONArray( "layers" );
@@ -64,20 +78,6 @@ public class Reader {
 				newNode.addEdge( parseEdge( edge, newNode ) );
 			}
 		}
-		if( node.has( "name" ) )
-		{
-		    if( parent != null && parent.findNodeByName( node.getString( "name" ) ) != null )
-		        throw new JSONException( "Node " + node.getString( "name" ) + " is already known" );
-			newNode.setName( node.getString( "name" ) );
-		}
-        if( node.has( "width" ) )
-            newNode.setWidth( node.getInt( "width" ) );
-        if( node.has( "height" ) )
-            newNode.setHeight( node.getInt( "height" ) );
-        if( node.has( "x" ) )
-            newNode.setX( node.getInt( "x" ) );
-        if( node.has( "y" ) )
-            newNode.setY( node.getInt( "y" ) );
 		return newNode;
 	}
 	
@@ -85,6 +85,10 @@ public class Reader {
 	{
 		if( !edge.has( "source" ) || !edge.has( "target" ) )
 			throw new JSONException( edge + " is no valid Layered Graph Edge." );
+		if( parent.findNodeByName( edge.getString( "source" ) ) == null )
+            throw new JSONException( edge + " is no valid Layered Graph Edge." );
+        if( parent.findNodeByName( edge.getString( "target" ) ) == null )
+            throw new JSONException( edge + " is no valid Layered Graph Edge." );
 		return parent.createSimpleEdge( null, parent.findNodeByName( edge.getString( "source" ) ), parent.findNodeByName( edge.getString( "target" ) ) );
 	}
 	

+ 1 - 1
test.graph

@@ -1 +1 @@
-{"layers": [[{"name": "n1","width":10,"height":10,"x":0,"y":0},{"name":"n2","width":10,"height":10,"x":20,"y":0}],[{"name":"n3","width":10,"height":10,"x":0,"y":20},{"layers": [[{"name": "n1","width":10,"height":10,"x":0,"y":0},{"name":"n2","width":10,"height":10,"x":20,"y":0}],[{"name":"n3","width":10,"height":10,"x":0,"y":20}]],"edges":[{"source":"n1","target":"n3"},{"source":"n2","target":"n3"}],"name":"n0","x":20,"y":20,"width":10,"height":10}]],"edges":[{"source":"n1","target":"n3"},{"source":"n2","target":"n3"}],"name":"n0"}
+{"layers": [[{"name": "n1","width":10,"height":10,"x":0,"y":0},{"name":"n2","width":10,"height":10,"x":20,"y":0}],[{"name":"n3","width":10,"height":10,"x":0,"y":20},{"layers": [[{"name": "n1","width":10,"height":10,"x":0,"y":0},{"name":"n2","width":10,"height":10,"x":20,"y":0}],[{"name":"n3","width":10,"height":10,"x":0,"y":20}]],"edges":[{"source":"n1","target":"n3"},{"source":"n2","target":"n3"}],"name":"n0","x":20,"y":20,"width":10,"height":10}]],"edges":[{"source":"n1","target":"n3"},{"source":"n2","target":"n0"},{"source":"n2","target":"n3"}],"name":"n0"}