Ver código fonte

fixed edge positioning problem

Kolja Strohm 6 anos atrás
pai
commit
313247650c

+ 5 - 2
src/graph/LayeredEdge.java

@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import org.eclipse.elk.graph.ElkEdge;
 
 import bk.ExtremalLayoutCalc.LayoutType;
+import view.NodeView;
 
 /**
  * Die Implementation einer Kante aus einem Layered Graphen.
@@ -180,13 +181,15 @@ public class LayeredEdge implements LayeredGraphEdge {
     @Override
     public ArrayList<Point> getLinePoints( LayoutType layout )
     {
+        NodeView sourceView = ((LayeredNode)sources.get( 0 )).getView( layout );
+        NodeView targetView = ((LayeredNode)targets.get( 0 )).getView( layout );
         //if( bindPoints.get( 0 ) == null && sources.size() > 0 )
         //{
-            setStartPoint( (int)sources.get( 0 ).getX( layout ) + (int)sources.get( 0 ).getWidth( layout ) / 2, (int)sources.get( 0 ).getY( layout ) + (int)sources.get( 0 ).getHeight( layout ), layout );
+            setStartPoint( (int)sources.get( 0 ).getX( layout ) + sourceView.getScaledX( (int)sources.get( 0 ).getWidth( layout ) / 2 ), (int)sources.get( 0 ).getY( layout ) + sourceView.getPreferredSize().height - sourceView.getScaledY( 0 ), layout );
         //}
         //if( bindPoints.get( bindPoints.size() - 1 ) == null && targets.size() > 0 )
         //{
-            setEndPoint( (int)targets.get( 0 ).getX( layout ) + (int)targets.get( 0 ).getWidth( layout ) / 2, (int)targets.get( 0 ).getY( layout ), layout );
+            setEndPoint( (int)targets.get( 0 ).getX( layout ) + targetView.getScaledX( (int)targets.get( 0 ).getWidth( layout ) / 2 ) , (int)targets.get( 0 ).getY( layout ) + targetView.getScaledY( 0 ), layout );
         //}
         if( layout == LayoutType.TOP_BOTTOM_LEFT )
             return bindPoints[ 0 ];

+ 34 - 2
src/graph/LayeredNode.java

@@ -9,6 +9,7 @@ import org.eclipse.elk.graph.ElkNode;
 import org.eclipse.emf.common.util.EList;
 
 import bk.ExtremalLayoutCalc.LayoutType;
+import view.NodeView;
 
 /**
  * Die Implementation eines Knotens in einem Layered Graph.
@@ -38,6 +39,7 @@ public class LayeredNode implements LayeredGraphNode {
         // Compaction
         public LayeredGraphNode sink;
         public double shift;
+        private NodeView view;
     }
     
     private class CombinedLayoutInfo
@@ -48,6 +50,7 @@ public class LayeredNode implements LayeredGraphNode {
         public double h;
         public Color color;
         public boolean selected;
+        private NodeView view;
     }
     
     private LayoutInfo[] layouts;
@@ -60,9 +63,9 @@ public class LayeredNode implements LayeredGraphNode {
     private ArrayList< ArrayList< LayeredGraphNode > > layers;
     
     /**
-     * Konvertiert einen Graph aus dem Elk format in einen Graph, der mehr Informationen enthält
+     * Konvertiert einen Graph aus dem Elk format in einen Graph, der mehr Informationen enth�lt
      * @param n Der Graph, welcher konvertiert werden soll
-     * @return Ein layered Graph, welcher im wesentlichen ein Wrapper für den ursprünglichen Graphen ist
+     * @return Ein layered Graph, welcher im wesentlichen ein Wrapper f�r den urspr�nglichen Graphen ist
      */
     public static LayeredGraphNode convertToLayeredGraph( ElkNode n )
     {
@@ -124,6 +127,35 @@ public class LayeredNode implements LayeredGraphNode {
         combined.selected = false;
     }
     
+    public void setView( NodeView view, LayoutType layout )
+    {
+        if( layout == LayoutType.TOP_BOTTOM_LEFT )
+            this.layouts[ 0 ].view = view;
+        if( layout == LayoutType.TOP_BOTTOM_RIGHT )
+            this.layouts[ 1 ].view = view;
+        if( layout == LayoutType.BOTTOM_TOP_LEFT )
+            this.layouts[ 2 ].view = view;
+        if( layout == LayoutType.BOTTOM_TOP_RIGHT )
+            this.layouts[ 3 ].view = view;
+        if( layout == LayoutType.COMBINED )
+            this.combined.view = view;
+    }
+    
+    public NodeView getView( LayoutType layout )
+    {
+        if( layout == LayoutType.TOP_BOTTOM_LEFT )
+            return layouts[ 0 ].view;
+        if( layout == LayoutType.TOP_BOTTOM_RIGHT )
+            return layouts[ 1 ].view;
+        if( layout == LayoutType.BOTTOM_TOP_LEFT )
+            return layouts[ 2 ].view;
+        if( layout == LayoutType.BOTTOM_TOP_RIGHT )
+            return layouts[ 3 ].view;
+        if( layout == LayoutType.COMBINED )
+            return combined.view;
+        return null;
+    }
+    
     @Override
     public void setDummyNode( boolean dummy )
     {

+ 1 - 0
src/view/MainView.java

@@ -807,6 +807,7 @@ public class MainView {
     private NodeView createNodeView( LayeredGraphNode gNode, LayoutType lt )
     {
         NodeView graphView = new NodeView( gNode, lt );
+        ((LayeredNode)gNode).setView( graphView, lt );
         graphView.setLayout( null );
         graphView.setOpaque( true );
         for( LayeredGraphNode n : gNode.getContainedNodes() )

+ 18 - 0
src/view/NodeView.java

@@ -43,6 +43,24 @@ public class NodeView extends JPanel {
         return new Dimension( (int)model.getWidth( layout ), (int)model.getHeight( layout ) );
     }
     
+    public int getScaledX( int x )
+    {
+        double scale = Math.min( (double)super.getWidth() / (int)model.getWidth( layout ), (double)super.getHeight() / (int)model.getHeight( layout ));
+        x *= scale;
+        if( scale == (double)super.getHeight() / (int)model.getHeight( layout ) )
+            x += (super.getWidth() - (model.getWidth( layout ) * scale )) / 2;
+        return x;
+    }
+    
+    public int getScaledY( int y )
+    {
+        double scale = Math.min( (double)super.getWidth() / (int)model.getWidth( layout ), (double)super.getHeight() / (int)model.getHeight( layout ));
+        y *= scale;
+        if( scale == (double)super.getWidth() / (int)model.getWidth( layout ) )
+            y += (super.getHeight() - (model.getHeight( layout ) * scale )) / 2;
+        return y;
+    }
+    
     @Override
     public void paint( Graphics g )
     {