Создать перевернутую иерархическую структуру mxgraph - PullRequest
0 голосов
/ 15 февраля 2019

Приветствую сообщество!В настоящее время я создаю собственный редактор mxgraph и конвертирую графики, используя разные макеты.Я хотел бы преобразовать макет моего графика в mxHierarchicalLayout, но в обратном порядке (вместо top-to-down я бы хотел, чтобы оно было down-to-top).Пример того, что я делаю и что я хотел бы сделать.

Мой график

my graph

Мой график преобразован с помощью mxHierarchicalLayout Фрагмент кода:

let layout = new mxHierarchicalLayout(graph); layout.execute(graph.getDefaultParent());

my graph with mxhierarchicallayout

Как я хочу преобразоватьграфик

enter image description here

Я обнаружил в mxHierarchicalLayout, что существует переменная-член orientation, которая по умолчанию 'NORTH'.Однако, когда я попытался сделать следующее

 let layout = new mxHierarchicalLayout(graph);
 layout.orientation=mxConstants.DIRECTION_SOUTH;
 layout.execute(graph.getDefaultParent());

График вышел из моего «холста» и не может быть замечен, чтобы проверить, является ли это ответственным параметром для «реверса» дерева.Может ли кто-нибудь помочь?Заранее спасибо.

PS

Когда я использую layout.orientation = mxConstants.DIRECTION_SOUTH;, кажется, что раскладка преобразуется, как я хочу, но не может быть видно, потому что координаты SVGэлементы имеют type x=-10, y=-5 (negatives), какой обходной путь для этого?

1 Ответ

0 голосов
/ 15 февраля 2019

решено

Я не знаю, почему mxgraph имеет такое ошибочное поведение с orientation = south в mxHierarchicalLayout, но мне удалось создать обходное решение для моей проблемы, так как я понял, что вновь сгенерированныйlayout поместил мои дочерние объекты mxCell на север (отрицательная координата y).Итак, что я сделал после того, как layout.execute(graph.getDefaultParent()); я получил все дочерние элементы графа и получил наиболее отрицательную координату y, а затем переместил все ячейки графика из их новых координат в новую, увеличенную на абсолютное значение наиболее отрицательного значения.координированный по y элемент.

код

 function convertGraphToInverseHorizontalTree(){
        let layout = new mxHierarchicalLayout(graph);
        layout.orientation = mxConstants.DIRECTION_SOUTH;
        layout.execute(graph.getDefaultParent());
        graph.model.beginUpdate();
        //get the most negative y
        let mostNegativeY = getMostNegativeCoordinateY(graph);
        let children = graph.getChildCells();
        graph.moveCells(children, undefined , Math.abs(mostNegativeY));
        graph.model.endUpdate();
    }

    function getMostNegativeCoordinateY(graph){
        let children = graph.getChildCells();
        let mostNegative = 10000;
        for(let i = 0; i < children.length; i++){
           if(children[i].geometry != undefined){
               if(children[i].geometry.y < mostNegative){
                   mostNegative = children[i].geometry.y;
                   }
           }
        }
        return mostNegative;
    }

Теперь график выглядит так:

inversed hierarchical tree

...