|
@@ -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
|