【发布时间】:2020-05-26 23:07:53
【问题描述】:
使用 svg.js,我绘制了一个(游戏)板,它本质上是一组六边形路径。添加完所有六边形后,我想将整个组旋转 -60 度,然后读出一个包含生成的(视觉)形状的最小矩形框。
我想要的板子和盒子的外观(红色手绘):
但我不知道如何获得红色盒子;我所得到的似乎都是蓝色形状周围的盒子(当然是整个组的 bbox,本身旋转):
我发现的一些提示是使用外部组(依次包含收集字段的组);旋转内组,从外组得到 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)
}
有什么方法可以解决这个问题吗?
【问题讨论】:
-
将形状放入
元素中并获取包含 的边界框
标签: javascript svg svg.js