2015-12-30 8 views
1

Из того, что я вижу, похоже, что единственный способ изменить длину одного пути - path.scale(x). Однако я хочу, чтобы длина линии колебалась немного вокруг ее первоначальной длины, что сложно сделать с scale, потому что, если вы будете кормить ее случайными значениями, вы фактически окажетесь в своей длине с случайным ходом, потенциально заканчивающимся далеко от его первоначальная длина.В PaperJS можно задать длину прямой линии явно?

Можно ли указать длину строки пути явно, что-то вроде path.length = 10? Согласно документации, похоже, что это невозможно. Почему нет?? И какой был бы лучший способ достичь желаемого результата?

ответ

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; 
+0

Если это ответ на ваш вопрос, я был бы признателен за принятие. Если это не даст мне знать. Благодаря! – bmacnaughton

+0

Извините, что не принимал это. Я думаю, что меня сначала смутили все шаги, но поскольку он ответил на мой вопрос, я принял его. Благодаря! – Aron