Paper.js — получить первый «выбранный элемент» из selectedItems

Я пытаюсь создать графический редактор с помощью Paper.js.

Я хочу выбрать первый (1-й) элемент, который был выбран с помощью инструмента выделения(либо Shift+щелчок, либо перетаскивание поля выбора ). Обнаружение прямого клика выполняется с помощью проверки нажатия, а поле выбора - с помощью getIntersection

  • Если это Shift+щелчок, это первый выбранный элемент. Какой элемент был нажат, определяется с помощью HitResult.
  • Если это selectionBox, первое пересечение? результат окна выбора.

Можно ли получить это?

Я выполняю цикл FOR, чтобы получить все элементы в Paper.js selectedItems< /strong> массив, который возвращает все выбранные элементы на холсте.

Я пробовал это:

var selected = paper.project.selectedItems;
var firstSelected = selected[0];

но это не возвращает то, что мне нужно.

Приведенный выше фрагмент кода извлекает массив, который не зависит от того, какой элемент был выбран первым. Он просто упорядочивает selectedItems в массиве, начиная с ''самого старого нарисованный путь''.

Что мне нужно, так это способ узнать, какой элемент был выбран первым.

  • Либо первый, который получает ''трогал (пересекался) '' с прямоугольником выбора
  • Или первый, который был нажат при использовании функций Shift+Click (выберите более одного элемента щелчком).

Причина этого в том, что я хотел бы добавить в свой редактор функцию выравнивания относительно.

Чтобы иметь правильный UX, пользователь должен иметь возможность выровнять элемент относительно другого, который он устанавливает как «элемент ссылки». Поэтому мне нужно знать 1-й элемент, выбранный относительно других, чтобы использовать его в качестве «элемента ссылки».

Любые идеи ?


person nicholaswmin    schedule 28.02.2014    source источник


Ответы (1)


Вот рабочий пример того, чего, как я понял, вы хотите добиться для выбор (без функции выравнивания относительно). А вот код (под SelectPaperJS) https://c9.io/arthursw/oiio/

Не должно быть слишком сложно сделать что-то подобное на Stylii (поскольку вы его используете).

У вас может быть массив для отслеживания порядка выбора ваших элементов. Например, в функции mousedown инструмента прямого выбора (из строки 789 editor.js) вы можете добавить вновь выбранный элемент в этот массив (строка 800). То же самое, когда вы выбираете прямоугольным инструментом выделения.

person arthur.sw    schedule 01.03.2014
comment
Артур, что делает эта строка кода?: if(newSegments.indexOf(selectionItems[i])›=0) continue; - person nicholaswmin; 22.05.2014
comment
Он проверяет, находится ли выбранный элемент с индексом i в массиве newSegments. Если это так, он продолжает итерацию цикла, не продвигаясь дальше на этой итерации. (Это все, что я могу вам сказать, не зная контекста, где вы нашли эту строчку?) - person arthur.sw; 22.05.2014