Используя svg. js, я нарисовал (игровую) доску, которая по сути представляет собой группу шестиугольных дорожек. После того, как все гексы добавлены, я хотел бы повернуть всю группу на -60 градусов, а затем прочитать минимальную прямоугольную рамку angular, которая включает в себя результирующую (визуальную) форму.
Внешний вид доски и коробку (нарисованную от руки красным), я хочу:
Но я не могу понять, как получить красную коробку; все, что я когда-либо получаю, похоже на прямоугольники вокруг синей фигуры (которая, конечно же, вращается вокруг всей группы, сама вращается):
Некоторые подсказки, которые я нашел, заключались в использовании внешней группы (содержащей в свою очередь группу, которая собирает поля); поверните внутреннюю группу и получите bbox () из внешней группы; к сожалению, это ничего не изменило. В качестве альтернативы, некоторые источники в Интернете предложили вместо этого использовать rbox (), но это опять ничего не изменило, и даже в документации svg. js 3.0.
Для полноты кода, который выполняет связанные вещи, хотя этот вопрос, кажется, является более общей проблемой. Я понимаю, что мог бы обойти проблему, в первую очередь избежав поворота, но я бы хотел найти решение, которое позволило бы адресовать серию подобных случаев без ручной настройки.
draw_board() {
let grp = this.canvas.group();
for (let field of this.fields) {
field.hex_display = grp.use(hexsym).size(this.w*this.hex_scale,this.h*this.hex_scale)
.center(field.cx,field.cy)
.addClass("hex_field")
.addClass(this.color);
}
let count = this.field.length;
let clipper = this.canvas.clip().path()
.M(...this.center(0,0))
.L(...this.center(0,count-1))
.L(...this.center(count-1,count-1))
.L(...this.center(count-1,0))
.Z();
grp.clipWith(clipper);
grp.rotate(-60);
let bb = grp.bbox();
this.canvas.viewbox(bb.x,bb.y,bb.w,bb.h)
}
Любые указатели, как подойти к этому?