gpt4 book ai didi

javascript - Kinetic.js : Get MinX, 旋转 Kinetic.Label 的 MaxX、MinY 和 MaxY

转载 作者:行者123 更新时间:2023-11-28 20:30:16 24 4
gpt4 key购买 nike

我试图防止旋转的标签被拖离屏幕,但我无法弄清楚如何使对象的 MinX、MaxX、MinY 和 MaxY 处于旋转状态。 getHeight 和 getWidth 仅返回旋转之前的值。

这是说明问题的示例:

 var stage = new Kinetic.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});

var layer = new Kinetic.Layer();

var labelLeft = new Kinetic.Label({
x: 95,
y: 180,
opacity: 1.0,
listening: true,
draggable: true,
rotationDeg: -45,
text: {
text: 'Pointing Arrow',
fontFamily: 'Calibri',
fontSize: 20,
padding: 5,
fill: 'white'
},
rect: {
fill: 'blue',
pointerDirection: 'left',
pointerWidth: 20,
pointerHeight: 38,
stroke: 'black',
strokeWidth: 2
},
dragBoundFunc: function (pos) {
var newY = pos.y < 50 ? 50 : pos.y;
return {
x: pos.x,
y: newY
};
}
});

layer.add(labelLeft);

// add the layer to the stage
stage.add(layer);

http://jsfiddle.net/fSNnA/4/

在这个例子中,我使用dragBoundFunc来防止标签被拖动到y=50以上。但由于标签旋转,其实际最高点 (MinY) 已更改,因此您可以将其向上拖动并部分移出 View 。

我真正需要的是一个返回绝对当前 MinX、MaxX、MinY 和 MaxY 的函数 - 考虑到旋转 Angular 和文本长度并不总是相同。

有人可以帮忙吗?

最佳答案

以下是如何计算旋转矩形(标签)的边界框大小。

var w =    label.getWidth();
var h = label.getHeight();
var rads = label.getRotation();
var c = Math.abs(Math.cos(rads));
var s = Math.abs(Math.sin(rads));
var newWidth = h * s + w * c;
var newHeight = h * c + w * s;

然后假设您始终围绕中心旋转,则左/上边界为:

var centerX = label.getX()+label.getWidth()/2;
var centerY = label.getY()+label.getHeight()/2;

var MinX = centerX - newWidth/2;
var MinY = centerY - newHeight/2;

[免责声明:这只是我的想法——相应地进行审查! ]

关于javascript - Kinetic.js : Get MinX, 旋转 Kinetic.Label 的 MaxX、MinY 和 MaxY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com