JGraphX ​​— только ребра Autolayout

Могу ли я запустить автоматическую компоновку только на краях графа? У меня есть много фиксированных вершин, которые я не хочу перемещать/переставлять, но я хочу исправить ребра, которые перекрывают мои ячейки/вершины. Есть какой-либо способ сделать это?


person MarkNL    schedule 13.01.2016    source источник


Ответы (1)


Макеты, а именно mxIGraphLayout реализации, касаются только видимых ячеек и получают к ним доступ через mxGraph объектный API. Таким образом, правильным решением является создание подкласса mxGraph и переопределение метода isCellVisible(Object cell) в соответствии с вашими потребностями. Таким образом, вы создадите альтернативный вид вашего графика.

Конечно, вы также можете изменить фактическую видимость ячеек в модели (graph.getModel().setVisible(cell, false)) и восстановить ее обратно после выполнения макета. Но это похоже на взлом.

В качестве альтернативы вы можете создать подкласс самого класса макета и переопределить эти методы:

public boolean isVertexMovable(Object vertex)
{
    return graph.isCellMovable(vertex);
}

public boolean isVertexIgnored(Object vertex)
{
    return !graph.getModel().isVertex(vertex)
            || !graph.isCellVisible(vertex);
}

public boolean isEdgeIgnored(Object edge)
{
    mxIGraphModel model = graph.getModel();

    return !model.isEdge(edge) || !graph.isCellVisible(edge)
            || model.getTerminal(edge, true) == null
            || model.getTerminal(edge, false) == null;
}
person Vsevolod Golovanov    schedule 15.02.2019