Нарисуйте 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,

  1. Возьмите один ключ за раз с карты, и выберите этот узел в качестве источника PolylineConnection,
  2. Затем для того же источника (ключ в карте) извлекайте узел для значений один за другим в качестве целевого узла.
  3. Теперь, когда у нас есть и исходный узел, и целевой узел, мы можем нарисовать связь между Anchors

Логика для получения узла выглядит следующим образом:

  1. Получить все дети, нарисованные на холсте в одном списке, если дети имеют тип 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

Другие вопросы по тегам