как я могу добавить пользовательские формы в mxgraph

Как я могу добавить пользовательские формы mxgraph?

Фигуры как изображение

формы ударов в минуту


person dumpman    schedule 07.03.2019    source источник
comment
Используете ли вы шаблон графического редактора?   -  person Okeano    schedule 08.03.2019
comment
На самом деле, я не использовал шаблон...   -  person dumpman    schedule 13.03.2019


Ответы (2)


// Подборка фигуры

function CollateShape()
{
    mxEllipse.call(this);
};
mxUtils.extend(CollateShape, mxEllipse);
CollateShape.prototype.paintVertexShape = function(c, x, y, w, h)
{
    c.begin();
    c.moveTo(x, y);
    c.lineTo(x + w, y);
    c.lineTo(x + w / 2, y + h / 2);
    c.close();
    c.fillAndStroke();

    c.begin();
    c.moveTo(x, y + h);
    c.lineTo(x + w, y + h);
    c.lineTo(x + w / 2, y + h / 2);
    c.close();
    c.fillAndStroke();
};

mxCellRenderer.registerShape('collate', CollateShape);
person dumpman    schedule 13.03.2019

Вы можете добавить новые фигуры, создав новую палитру боковой панели или добавив пользовательские фигуры в существующую.

Вот пример:

Допустим, вы хотите добавить новые фигуры в палитру Basic, перейдите в свой Sidebar.js и найдите функцию Sidebar.prototype.addBasicPalette, здесь вы можете добавить любую фигуру:

/**
 * Adds the general palette to the sidebar.
 */
Sidebar.prototype.addBasicPalette = function(dir)
{
    this.addStencilPalette('basic', mxResources.get('basic'), dir + '/basic.xml',
        ';whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#000000;strokeWidth=2',
        null, null, null, null, [
            this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;bottom=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
            this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;right=0;top=0;bottom=0;fillColor=none;routingCenterX=-0.5;', 120, 60, '', 'Partial Rectangle'),
            this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;bottom=0;right=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
            this.createVertexTemplateEntry('shape=partialRectangle;whiteSpace=wrap;html=1;top=0;left=0;fillColor=none;', 120, 60, '', 'Partial Rectangle'),
            this.createEdgeTemplateEntry('html=1;verticalAlign=bottom;endArrow=block;', 80, 0, 'is_a', 'Is_A', null, 'uml sequence message call invoke dispatch'),
           // on the line above i created a new arrow with 'is_a' on the top

    ]);
};
person Piazzi    schedule 12.03.2019
comment
Есть ли способ внедрить новую палитру при загрузке пользовательского плагина? Я попытался просто настроить палитру, как указано выше, и вызвать ее в своем плагине, но, похоже, она не срабатывает и не добавляет ее на боковую панель. Это позволит привязать плагин к набору фигур. - person ioneyed; 30.07.2020
comment
Что вы подразумеваете под «индивидуальным плагином»? ' У вас могут быть любые палитры, которые вы хотите, но вам также нужно вызвать эту функцию в начале файла. - person Piazzi; 30.07.2020
comment
Я попытался вызвать это через структуру плагина, и, похоже, он не вызывает и не перемещает создание фигур на боковой панели. Под пользовательским плагином я подразумеваю это — desk.draw .io/support/solutions/articles/ - person ioneyed; 31.07.2020
comment
извините, но у меня нет опыта работы с draw.io. Я работаю только с mxgraph, я знаю, что draw.io построен на основе mxgraph, но я думаю, что структура немного отличается. Может быть, вы можете разместить вопрос здесь, в этом теге, чтобы я (или другие) могли вам помочь. - person Piazzi; 31.07.2020