Создать перевернутый макет mxHierarchical в mxgraph

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

Мой график

мой график

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

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

мой график с mxhierarchicallayout

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

введите здесь описание изображения

Я обнаружил в mxHierarchicalLayout, что есть переменная-член orientation, которая по умолчанию имеет значение «СЕВЕР». Однако, когда я попытался сделать следующее

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

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

ПС

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


person NickAth    schedule 15.02.2019    source источник


Ответы (1)


РЕШЕНО

Я не знаю, почему у mxgraph такое ошибочное поведение с orientation = south в mxHierarchicalLayout, но мне удалось создать обходное решение для моей проблемы, поскольку я понял, что недавно сгенерированный макет помещает мои дочерние объекты 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;
    }

Сейчас график такой

перевернутое иерархическое дерево

person NickAth    schedule 15.02.2019