mxCellHighlight
может выделять только одну ячейку. Вы можете просто проверить его исходный код, это довольно маленький (связанные строки)
Итак, я мог бы подумать о следующих вариантах:
Создайте несколько бликов, например:
var h1 = new mxCellHighlight(graph, '#ff0000', 2);
h1.highlight(graph.view.getState(cell1)));
var h2 = new mxCellHighlight(graph, '#ff0000', 2);
h2.highlight(graph.view.getState(cell2)));
Вы можете сохранить их в массиве, чтобы сбросить позже, если это необходимо. Совершенно неэффективно, но просто. Или вы можете изменить класс для поддержки нескольких форм. Но это было бы, вероятно, сложнее, в основном это похоже на написание с нуля.
В качестве альтернативы вы можете попробовать выбрать фигуры и изменить стиль выделения, чтобы он выглядел как выделение, изменив некоторые константы. Это может работать, если вы не заботитесь о выборе. Ознакомьтесь со списком констант, которые вы можете переопределить здесь. В общем, я имею в виду что-то вроде этого:
mxConstants.HANDLE_SIZE = 0;
mxConstants.VERTEX_SELECTION_COLOR = '#00ff0080';
mxConstants.EDGE_SELECTION_COLOR = '#00ff0080';
mxConstants.EDGE_SELECTION_STROKEWIDTH = 2;
mxConstants.VERTEX_SELECTION_STROKEWIDTH = 2;
mxConstants.VERTEX_SELECTION_DASHED = false;
mxConstants.EDGE_SELECTION_DASHED = false;
graph.getSelectionModel().setCells([cell1, cell2]);
В качестве альтернативы вы можете не обманывать и изменить средство визуализации ячеек (mxSvgCanvas2D.prototype.rect
Я думаю, в вашем случае), это, в зависимости от вашей формы, сделает выделение. Это, вероятно, немного сложный способ, но таким образом вы сможете управлять своей формой, например, с помощью стиля (выделено), поэтому вы можете просто установить это значение в коде для стиля, а затем прочитать из средства визуализации и добавить svg фильтр, например (с реальным эффектом свечения а>, если хотите).
person
Nikolay
schedule
27.12.2020