我正在使用fabric.js来创建一个canvas项目。我使用框架创建了一行。但是,有没有办法在线设置固定长度。线条的原因是可拖动并延伸。
line = makeLine([250,125,250,175]),
答案 0 :(得分:0)
评论中的内容相当复杂,所以让我们总结一些事情:
以下是针对简单案例的解决方案:
在你的http://jsfiddle.net/sprakashg/rbhhP/中,你的行数很少:
var p = e.target;
p.line1 && p.line1.set({ 'x2': p.left, 'y2': p.top });
此处,line1
是您的行,p
是您的圈子。
您可以计算线的初始长度并存储它。接下来,您可以计算当前行方向,即line.p1
到position of p
。现在,如果您将此方向标准化并乘以初始线长度,您将获得新方向,指向您的圆,但保持初始线长。将其添加到行开头,您可以将此值存储在p.line1.set()
中。
如果您有两个圆圈与一条线相连,这将有效,但如果您将几条线连接到单个圆圈,那么您将无法移动它。
更复杂案例的解决方案:
在Stickman
的情况下,您无法移动膝盖,因为只有另一个点可以满足您的线长限制。在这种情况下,我会在模型中添加一个简单的层次结构。
如果假设某些Circle
是模型的根,则所有其他对象都是某些模型树的叶子和分支。现在,当您移动某个圆圈时,您应该仅为该行进行上述计算,并将其与parent
连接。
然后,您可以在模型层次结构中取下面的所有圆圈,并将它们移动到您移动主Circle
的相同金额。
采用这种方法,当你试图移动膝盖时,你的骨盆膝关节线会随着你的鼠标移动但保持其长度(如你所愿)。但是在膝盖移动过程中,腿部的其余部分会移动相同的量,所以实际上你也会保持膝盖 - 脚踝线的长度。