Procedura tworzenia algorytmu losowego rozkładu elementów

Poniżej opisana jest krok po kroku procedura tworzenia i dodawania do CASTa losowego algorytmu rozkładu.

  • Do pakietu pl.edu.agh.cast.schema.layout.algorithm dodajemy nową klasę RandomLayoutAlgorithm rozszerzającą AbstractLayoutAlgorithm (nie używamy AbstractGroupingLayoutAlgorithm, bo nie potrzebujemy funkcjonalności grupowania węzłów wokół węzłów głównych)
  • W klasie RandomLayoutAlgorithm implementujemy metodę setNodesPositions w następujący sposób:
    private final static int AREA_WIDTH = 800;
    private final static int AREA_HEIGHT = 500;
    
    @Override
    protected void setNodesPositions(Collection<PositionedNode> positionNodes) {
        Random rand = new Random(new Date().getTime());
        for (PositionedNode node : positionNodes) {
            // whole node must fit in rectangle [0,0] - [AREA_WIDTH,AREA_HEIGHT]
            // that's why we need to consider node's dimensions  
            int x = rand.nextInt(AREA_WIDTH - node.getDimension().width);
            int y = rand.nextInt(AREA_HEIGHT - node.getDimension().height);
            node.setLocation(new Point(x, y));
        }
    }
    
  • W pakiecie pl.edu.agh.cast.schema.action.layout tworzymy nową klasę SetRandomLayoutAction, rozszerzającą SetLayoutAction z tego samego pakietu
  • W klasie SetRandomLayoutAction implementujemy metodę getAlgorithm, zwracającą instancję RandomLayoutAlgorithm:
    @Override
    protected ILayoutAlgorithm getAlgorithm() {
        return new RandomLayoutAlgorithm();
    }
    
  • W pliku plugin.properties dodajemy angielską etykietę dla przycisku:
    action.label.16   = Random
    
  • W pliku plugin_pl.properties dodajemy polską etykietę dla przycisku:
    action.label.16   = Rozk\u0142ad losowy
    

    (polskie znaki w plikach *.properties naleąy wpisywać przy użyciu Unicode escape codes... jest do tego dobre narzędzie (coś z nazwy podobnego do "resource editor"), ale nie pamiętam gdzie można je dostać)

  • W pliku plugin.xml do tagu <editorContribution id="pl.edu.agh.cast.schema.setlayout" targetID="pl.edu.agh.cast.diagrams.schema.SchemaDiagramEditor"> dodajemy nową akcję:
     <action
           class="pl.edu.agh.cast.schema.action.layout.SetRandomLayoutAction"
           icon="icons/pl/edu/agh/cast/icons/menu/diagram/x.gif"
           id="pl.edu.agh.cast.menu.diagram.randomlayout.action"
           label="%action.label.16"  
           menubarPath="diagram/schema"             
           style="push"
           toolbarPath="diagram/schema"/>
    
  • Uruchamiamy CASTa, otwieramy diagram schematyczny (schema diagram) i wciskamy przycisk "układ losowy"

    Efekt:

    Efekt działania algorytmu losowego rozkładu węzłów