Search in sources :

Example 1 with ElkGraphImporter

use of org.eclipse.elk.alg.force.ElkGraphImporter in project elk by eclipse.

the class ForceImportTest method createTwoComponentsGraph.

private FGraph createTwoComponentsGraph() {
    ElkNode g1 = createElkGraph();
    ElkNode g2 = createElkGraph();
    ElkNode graph = ElkGraphUtil.createGraph();
    graph.getChildren().addAll(g1.getChildren());
    graph.getChildren().addAll(g2.getChildren());
    ElkGraphImporter importer = new ElkGraphImporter();
    return importer.importGraph(graph);
}
Also used : ElkNode(org.eclipse.elk.graph.ElkNode) ElkGraphImporter(org.eclipse.elk.alg.force.ElkGraphImporter)

Example 2 with ElkGraphImporter

use of org.eclipse.elk.alg.force.ElkGraphImporter in project elk by eclipse.

the class StressLayoutProvider method layout.

@Override
public void layout(final ElkNode layoutGraph, final IElkProgressMonitor progressMonitor) {
    progressMonitor.begin("ELK Stress", 1);
    // calculate initial coordinates
    if (!layoutGraph.getProperty(StressOptions.INTERACTIVE)) {
        new ForceLayoutProvider().layout(layoutGraph, progressMonitor.subTask(1));
    } else {
        // Note that for the non-interactive case (above) this will be taken care of by the force layout provider
        if (!layoutGraph.getProperty(StressOptions.OMIT_NODE_MICRO_LAYOUT)) {
            NodeMicroLayout.forGraph(layoutGraph).execute();
        }
    }
    // transform the input graph
    IGraphImporter<ElkNode> graphImporter = new ElkGraphImporter();
    FGraph fgraph = graphImporter.importGraph(layoutGraph);
    // split the input graph into components
    List<FGraph> components = componentsProcessor.split(fgraph);
    // perform the actual layout
    for (FGraph subGraph : components) {
        if (subGraph.getNodes().size() <= 1) {
            continue;
        }
        stressMajorization.initialize(subGraph);
        stressMajorization.execute();
        // Note that contrary to force itself, labels are not considered during stress layout.
        // Hence, all we can do here is to place the labels at reasonable positions after layout has finished.
        subGraph.getLabels().forEach(label -> label.refreshPosition());
    }
    // pack the components back into one graph
    fgraph = componentsProcessor.recombine(components);
    // apply the layout results to the original graph
    graphImporter.applyLayout(fgraph);
    progressMonitor.done();
}
Also used : ForceLayoutProvider(org.eclipse.elk.alg.force.ForceLayoutProvider) ElkNode(org.eclipse.elk.graph.ElkNode) ElkGraphImporter(org.eclipse.elk.alg.force.ElkGraphImporter) FGraph(org.eclipse.elk.alg.force.graph.FGraph)

Aggregations

ElkGraphImporter (org.eclipse.elk.alg.force.ElkGraphImporter)2 ElkNode (org.eclipse.elk.graph.ElkNode)2 ForceLayoutProvider (org.eclipse.elk.alg.force.ForceLayoutProvider)1 FGraph (org.eclipse.elk.alg.force.graph.FGraph)1