2013-08-24 4 views
2

У меня есть график с двумя типами вершин: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 будет достаточно или потребуется перегрузка?

Я по достоинству оценит любую помощь установки в правильном направлении. Спасибо.

ответ

2

Установили ли вы геометрию порта относительно родителя? (<); geo.setRelative (true);

 Смежные вопросы

  • Нет связанных вопросов^_^