Могу ли я запустить автоматическую компоновку только на краях графа? У меня есть много фиксированных вершин, которые я не хочу перемещать/переставлять, но я хочу исправить ребра, которые перекрывают мои ячейки/вершины. Есть какой-либо способ сделать это?
JGraphX — только ребра Autolayout
Ответы (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