从我所看到的情况来看,改变单个路径长度的唯一方法就是path.scale(x)
它。但是我想让线的长度在其原始长度附近略微振荡,这对于scale
是很难的,因为如果你给它提供随机值,你实际上最终得到它的长度随机游走,可能结束远离原来的长度。
是否可以明确设置行路径的长度,如path.length = 10
?根据文档,这似乎不可能。为什么不??什么是实现我预期结果的最佳方式?
答案 0 :(得分:3)
您可以通过注意paperjs中的路径不是几何形状来实现此目的,尽管它们可能已被指定为一个。它们是分段点阵列;这就是为什么不能直接设置直线长度的原因。一条线有两个分段点 - 一个用于开始,一个用于线的末尾。通过操纵第二个分段点,您可以调整线的长度。这个sketch(以下代码)说明了如何执行此操作。要调整原始行的长度,请取消注释最后一行代码。
line = new Path.Line([100,100], [200, 300]);
line.strokeColor = 'black';
line.strokeWidth = 5;
// paths in paper are arrays of segments, not instances of
// circle or line or rectangle. so find the vector that
// represents the delta between the first point and the
// second point.
vector = line.segments[0].point - line.segments[1].point;
// adjustment for the line - this would vary in your case
factor = 0.9;
// I'm drawing a new line here to make it easy to see
p0 = line.segments[0].point;
p1 = p0 - vector * factor;
newline = new Path.Line(p0, p1);
newline.strokeColor = 'red';
newline.strokeWidth = 2;
// but to adjust your original line just use the following
//line.segments[1].point = p1;
如果您选择这样做,您可以在属性line.data
中存储原始向量,该属性是纸张为用户所希望的任何内容创建的空对象。所以line.data.vector = vector;
允许你保留每一行的原始向量。您可以使用以下内容将行的长度设置为特定长度:
var v = line.data.vector.clone();
v.length = 10; // specific length
line.segments[1].point = p0 - v;