All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object | +----tesc2.GraphOptimizer
Erklärung der Algorithmen:
Das Layout erfolgt rekursiv über den Aufbau der abstrakten Syntax.
Die Größe von Basic-States wird entsprechend ihres Namens
durchgeführt. Bei AND-States wird zuerst das Layout der
Unterzustände bestimmt und diese dann so angeordnet, daß
der Raum möglichst optimal ausgenutzt wird. Bei OR-States wird
das Layout der Unterzustände bestimmt und diese dann nach
einem bestimmten Verfahren im Zustand angeordnet. Diese Verfahren
unterscheiden sich für die verschiedenen Algorithmen, der Rest ist
gleich.
SugiyamaBCM: Die Knoten (Unterzustände) werden so in Ebenen angeordnet, daß in einer Ebene keine Transitionen verlaufen. Transitionen verlaufen nur von einer Ebene zur nächsten, wobei für Transitionen, die eigentlich über mehrere Ebenen verlaufen, Dummy-Knoten in den Zwischenebenen eingefügt werden. Dann werden die Knoten in den Ebenen so permutiert, daß möglichst wenige Kantenüberschneidungen vorkommen (heuristisch). Ausgehend von dieser Darstellung, die die Größe der Unterzustände nicht berücksichtigt, werden die Unterzustände dann endgültig plaziert.
CircleLayoutAlgorithm: Die Knoten werden in einem Kreis angeordnet.
Zuerst werden für jeden Knoten ein umgebender Kreis berechnet,
dann diese Kreise um einen Transitionskreis so angeordnet, daß
sich je zwei berühren und alle den Transitionskreis berühren.
Die Transitionen von einem State zu einem anderen verlaufen dann
vom Startstate zu einem Punkt auf dem Transitionskreis, zu einem
zweiten Punkt auf dem Transitionskreis und von da zum Endstate.
Dadurch ist gewährleistet, daß Transitionen keine States
schneiden.
Bei diesem Algorithmus entstehen große Statecharts, er
empfiehlt sich also nur für kleinere Beispiele.
Vorbedingungen:
Das beim Konstruktor übergebene Statechart muß folgende
Korrektheitsbedingungen erfüllen:
-keine Interlevel-Transitionen
-keine Schleifen im State-Baum
-bis auf die Instanzvariablen für Koordinaten (und Listen usw.)
dürfen keine null-Pointer vorkommen
Nachbedingungen: Es wird ein Clone des Statecharts mit Koordinaten zurückgegeben.
public static final String LIST_OF_ALGORITHMS[]
public GraphOptimizer()
public GraphOptimizer(Statechart _sc, FontMetrics _fm)
public Statechart start(int _algorithm) throws AlgorithmException
public Statechart start() throws AlgorithmException
public void setStatechart(Statechart _sc)
public void setFontMetrics(FontMetrics _fm)
public void setAlgorithm(int _algorithm)
All Packages Class Hierarchy This Package Previous Next Index