У меня есть график с двумя типами вершин:JGraphX - как жить предварительный просмотр и применить более сложный график изменения
- основные вершины, которые представляют собой граф узлов
- порта вершины, которые являются потомками главных вершин и ребер связаны с ними.
(Ребра не могут быть непосредственно подключены к узлу, поскольку вершина порта моделирования реального объекта, который должен быть явно визуализируется.) Каждая вершина порта расположена таким образом, что он плотно прилегает своего родителя в направлении, противоположном узлу края, подключенного к Это. Это выполняется с помощью алгоритма компоновки. См. Изображение:
+------+ port +------+
| +-+ +-+ |
| node | |---------------| | |
| +-+ edge +-+ |
+------+ +------+
Однако, когда узел перетаскивается, его порты по-прежнему имеют свои старые относительные позиции против родителя. Что делать для обновления позиций портов в соответствии с новыми координатами узла? По крайней мере, после удаления узла, в идеале также во время предварительного просмотра (mxGraphHandler.isLivePreview() == true).
Текущий неправильный график:
+------+ port
| +-+
| node | |
| +-+
+------+ \
\
\ +------+
+-+ |
| | |
+-+ |
+------+
Ожидаемый правильный график:
+------+
| |
| node |
| | port
+------+-+
| |
+-+
\
\
\
+-+
| |
+-+------+
| |
| |
| |
+------+
Я выкопал в живой процесс предварительного просмотра и есть ключ и некоторые несортированные unclarities:
- кажется, что я буду должны реализовать собственное расширение mxMovePreview и переопределить метод start/getPreviewStates, поскольку их текущий имп ementation hardcodes набор затронутых узлов и, например, противоположный порт перетаскиваемого узла не включен
- Кажется, что я не смогу полностью использовать стратегию для позиционирования портов, потому что в то время как в макете она применяется к геометрии ячеек, в предварительном просмотре применяется к mxCellStates и mxCellStatePreview
- методы, которые принимают dx, dy, применяют линейные преобразования (сдвиг по постоянному вектору), сложная геометрия перерасчета потребует реконструкции координат?
- расположение портов аналогично обновлению граничных точек терминала в mxCellStatePreview.revalidateState - возможно, я должен реализовать собственное расширение mxCellStatePreview и переписать этот метод?
- Как реализовать обновление после удаления узла? Кажется иначе, чем просмотр в прямом эфире. У слушателя на mxEvent.STOP будет достаточно или потребуется перегрузка?
Я по достоинству оценит любую помощь установки в правильном направлении. Спасибо.