【发布时间】:2020-05-21 01:30:27
【问题描述】:
好的,如果我有以下形状被旋转然后被选中,您将看到它们的边界框:
我正在尝试编写一些代码来使对象相互对齐。所以我想得到每个对象的“包含框”。
我知道getBoundingRect 但是,对于上述形状,这给了我以下信息:
因此,这些盒子对我来说不是那么有用。是否有一种标准方法可以获取所有形状的“包含框”?例如,我希望能够将以下盒子退回给我:
因此,对于任何给定的形状,我都希望能够获得红色边界矩形(没有旋转)。
显然,我可以在 fabricJS 中为每个可能的形状编写一个例程,但我不想重新发明轮子!有什么想法吗?
编辑这是一个显示当前边界框(红色)的交互式 sn-p:
$(function ()
{
canvas = new fabric.Canvas('c');
canvas.add(new fabric.Triangle({
left: 50,
top: 50,
fill: '#FF0000',
width: 50,
height: 50,
angle : 30
}));
canvas.add(new fabric.Circle({
left: 250,
top: 50,
fill: '#00ff00',
radius: 50,
angle : 30
}));
canvas.add(new fabric.Polygon([
{x: 185, y: 0},
{x: 250, y: 100},
{x: 385, y: 170},
{x: 0, y: 245} ], {
left: 450,
top: 50,
fill: '#0000ff',
angle : 30
}));
canvas.on("after:render", function(opt)
{
canvas.contextContainer.strokeStyle = '#FF0000';
canvas.forEachObject(function(obj)
{
var bound = obj.getBoundingRect();
canvas.contextContainer.strokeRect(
bound.left + 0.5,
bound.top + 0.5,
bound.width,
bound.height
);
});
});
canvas.renderAll();
});
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.6/fabric.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="c" width="800" height="600"></canvas><br/>
【问题讨论】:
-
实际的形状是 svg 吗?
标签: javascript fabricjs