Предотвратить перекрытие узлов в JGraphX

Я использую компоненты значительного размера для вершин (путем переопределения mxGraphComponent.createComponents), а использование mxOrganicLayout или mxFastOrganicLayout делает их перекрывающимися. mxHierarchicalLayout не работает с моими текущими графиками, но я не уверен, что это гарантировано.

Могу ли я 1) избежать дублирования в любом из органических макетов? 2) быть уверенным, что mxHierarchicalLayout узлов никогда не перекроются?


person Alexey Romanov    schedule 26.05.2017    source источник


Ответы (1)


Не уверен, что вы все еще ищете здесь решение, но я нашел ваш вопрос, пытаясь избежать дублирования.

Если вы не знали, вы можете поэкспериментировать с некоторыми атрибутами органических макетов. Например, вы можете сделать следующее:

mxFastOrganicLayout layout = new mxFastOrganicLayout(adapter);
layout.setForceConstant(150);

Силовая постоянная имеет следующее описание в документах:

Постоянная силы, на которую делятся силы притяжения и силы отталкивания, кратна квадрату.

Что касается меня, я играл с силовой константой, пока не получил макет с гораздо меньшим количеством перекрытий. Существует ряд других атрибутов, с которыми вы также можете поиграть, чтобы увидеть, поможет ли это решить ваши проблемы с перекрытием. Те, которые имели наибольшее значение для меня, следующие:

layout.setMinDistanceLimit(5);

Увеличение minDistanceLimit должно позволить вашим вершинам расшириться.

Так как fastOrganicLayout также работает через имитацию отжига, вы можете фактически указать максимальное количество итераций для запуска макета. Если ваша карта особенно сложна (с большим количеством вершин), это также может помочь увеличить это значение.

layout.getMaxIterations(2000);

Для меня изменение постоянной силы имело наибольшее значение, но ваш пробег может отличаться.

Раньше я не использовал иерархическую компоновку, но, похоже, есть похожие атрибуты, которые вы можете изменить, что может уменьшить вероятность совпадения.

Если вы придумали более надежное решение, чем это, было бы здорово, если бы вы могли поделиться им.

person Tom    schedule 26.10.2017
comment
There are a number of other attributes that you can play around with as well - Можно уточнить, какие атрибуты здесь важны? - person Vsevolod Golovanov; 26.10.2017
comment
@VsevolodGolovanov Спасибо за совет. Я добавил еще несколько соответствующих атрибутов. - person Tom; 26.10.2017