|
@@ -129,10 +129,12 @@ public class Compaction implements AlgorithmStage{
|
|
|
if( sf.u == null )
|
|
|
{
|
|
|
int posW = graph.getContainedLayers().get( sf.w.getLayer() ).indexOf( sf.w );
|
|
|
- if( posW >= 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)) )
|
|
|
{
|
|
|
-
|
|
|
- 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 ) )
|
|
|
{
|
|
@@ -200,14 +202,17 @@ public class Compaction implements AlgorithmStage{
|
|
|
|
|
|
if( sf.v.getSink( layout ) == sf.v )
|
|
|
sf.v.setSink( sf.u.getSink( layout ), layout );
|
|
|
-
|
|
|
+ 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 ) )
|
|
|
sf.u.getSink( layout ).setShift(
|
|
|
Math.min( sf.u.getSink( layout ).getShift( layout ),
|
|
|
- sf.v.getX( layout ) - sf.u.getX( layout ) - calcSpacing() ), layout );
|
|
|
+ multiplyer * (Math.abs(sf.v.getX( layout )) - Math.abs(sf.u.getX( layout )) - calcSpacing()) ), layout );
|
|
|
else
|
|
|
|
|
|
- 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 );
|
|
|
|
|
|
|
|
|
|