Explorar el Código

problem mit den klassen behoben

Kolja Strohm hace 7 años
padre
commit
0b9d3399bd
Se han modificado 2 ficheros con 12 adiciones y 6 borrados
  1. 11 6
      src/bk/Compaction.java
  2. 1 0
      src/main/Main.java

+ 11 - 6
src/bk/Compaction.java

@@ -129,10 +129,12 @@ public class Compaction implements AlgorithmStage{
 				if( sf.u == null ) // zu beginn der placeblock methode
 				{
                     int posW = graph.getContainedLayers().get( sf.w.getLayer() ).indexOf( sf.w );
-					if( posW >= 1 ) // if pos[w] > 1"
+					if( (posW >= 1 && (layout == LayoutType.BOTTOM_TOP_LEFT || layout == LayoutType.TOP_BOTTOM_LEFT)) || (posW < graph.getContainedLayers().get( sf.w.getLayer() ).size() - 1 && (layout == LayoutType.BOTTOM_TOP_RIGHT || layout == LayoutType.TOP_BOTTOM_RIGHT)) ) // if pos[w] > 1"
 					{
-
-                        sf.u = graph.getContainedLayers().get( sf.w.getLayer() ).get( posW - 1 ).getRoot( layout );
+					    int offset = -1;
+					    if( layout == LayoutType.BOTTOM_TOP_RIGHT || layout == LayoutType.TOP_BOTTOM_RIGHT )
+					        offset = 1;
+                        sf.u = graph.getContainedLayers().get( sf.w.getLayer() ).get( posW + offset ).getRoot( layout );
 						
 						if( sf.u.isXUndefined( layout ) ) // nötig placeblock aufzurufen?
 						{// ja
@@ -200,14 +202,17 @@ public class Compaction implements AlgorithmStage{
                     
                     if( sf.v.getSink( layout ) == sf.v ) // sink[v] = v?
                         sf.v.setSink( sf.u.getSink( layout ), layout ); // sink[v] := sink[u]
-
+                    int multiplyer = 1;
+                    if( layout == LayoutType.BOTTOM_TOP_RIGHT || layout == LayoutType.TOP_BOTTOM_RIGHT )
+                        multiplyer = -1;
+                    
 					if( sf.v.getSink( layout ) != sf.u.getSink( layout ) ) // sink[v] != sink [u]?
 						sf.u.getSink( layout ).setShift( // shift[sink[u]] =
 						  Math.min( sf.u.getSink( layout ).getShift( layout ),  // min(shift[sink[u]]
-						          sf.v.getX( layout ) - sf.u.getX( layout ) - calcSpacing() ), layout ); // y_v - y_u - s
+						          multiplyer * (Math.abs(sf.v.getX( layout )) - Math.abs(sf.u.getX( layout )) - calcSpacing()) ), layout ); // y_v - y_u - s
 					else
 					    // y_v = max {y_v, y_u + s}
-						sf.v.setX( Math.max( sf.v.getX( layout ), sf.u.getX( layout ) + calcSpacing() ), true, layout );
+						sf.v.setX( multiplyer * Math.max( Math.abs( sf.v.getX( layout ) ), Math.abs( sf.u.getX( layout ) ) + calcSpacing() ), true, layout );
 					
 
                     // alte Werte merken für undo

+ 1 - 0
src/main/Main.java

@@ -6,6 +6,7 @@ import graph.io.Reader;
 import lib.SweepCrossingMinimizer;
 import view.MainView;
 
+
 /**
  * The main executable class. Starts the application.
  * @author kolja