Нарисуйте PolylineConnection между существующими узлами на FigureCanvas
У меня есть список узлов для рисования. Здесь Node означает RectangleFigure
, Итак, все эти узлы сначала наносятся на холст (FigureCanvas
Затем у меня есть карта, поддерживающая отношения зависимости между узлами, нарисованными ранее. На карте ключи - это узлы, а значения - это не что иное, как список поддерживаемых узлов.
Например, есть 3 узла, [ClassA, ClassB, InterfaceC]
Я нарисовал их на холсте. И моя карта, как показано ниже:
[ClassA=[ClassB], ClassB=[InterfaceC]] Итак, это означает ClassA extends ClassB
а также ClassB implements InterfaceC
,
Теперь я хочу нарисовать PolylineConnection
между уже нарисованными узлами, используя поддерживаемую карту. Итак, как я могу приступить к этому?
Любые указатели действительно ценятся, заранее спасибо!
2 ответа
Пробовал пути решения проблемы, и это сработало. Итак, добавив ответ на свой вопрос.
Шаги, как показано ниже:-
1. Рассмотрим пример в самом вопросе. Есть 3 узла, [ClassA, ClassB, InterfaceC], и у нас есть карта отношений в этих узлах, как [ClassA=[ClassB], ClassB=[InterfaceC]] означает ClassA extends ClassB
а также ClassB implements InterfaceC
,
- Возьмите один ключ за раз с карты, и выберите этот узел в качестве источника
PolylineConnection
, - Затем для того же источника (ключ в карте) извлекайте узел для значений один за другим в качестве целевого узла.
- Теперь, когда у нас есть и исходный узел, и целевой узел, мы можем нарисовать связь между
Anchors
Логика для получения узла выглядит следующим образом:
- Получить все дети, нарисованные на холсте в одном списке, если дети имеют тип
RectangleFigure
(узел), затем сравнивая данную метку, мы можем получить требуемый узел.
Фрагмент кода для большей ясности
private RectangleFigure fetchNode(String node_label) {
RectangleFigure emptyNode = new RectangleFigure();
// get the list of nodes drawn on canvas
@SuppressWarnings("rawtypes")
List childrens = panel.getChildren(); //private IFigure panel;
for (int count = 0; count < childrens.size(); count++) {
if (childrens.get(count) instanceof RectangleFigure) {
RectangleFigure node = (RectangleFigure) childrens.get(count);
@SuppressWarnings("rawtypes")
List node_children = node.getChildren();
for (int count2 = 0; count2 < node_children.size(); count2++) {
if (node_children.get(count2) instanceof Label) {
Label lbl = (Label) node_children.get(count2);
if (lbl.getText().equals(node_label)) {
return node;
}
}
}
}
}
return emptyNode;
}
Есть много примеров в рамках проекта draw2d. Проверьте детали здесь: http://nyssen.blogspot.de/2010/12/draw2d-examples-hidden-treasure.html