Стереть путь в paper.js?

В основном я хочу создать новый путь с холстом globalCompositeOperation, установленным на «назначение-выход». Это возможно? Если да, то как?

Я заметил, что у Item есть свойство blendMode: http://paperjs.org/reference/item#blendmode, но попытка разных значений не дает желаемого эффекта.


person TheOne    schedule 10.01.2013    source источник
comment
Вы можете создать jsfiddle?   -  person SoluableNonagon    schedule 11.01.2013
comment
@EliteOctagon, что бы вы хотели, чтобы jsfiddle содержал?   -  person TheOne    schedule 11.01.2013
comment
Немного рабочего кода. Чтобы поиграть с путем   -  person SoluableNonagon    schedule 11.01.2013
comment
@EliteOctagon, надеюсь, это поможет: jsfiddle.net/D8vMG/6   -  person TheOne    schedule 11.01.2013


Ответы (2)


http://jsfiddle.net/D8vMG/12/

В свете вашего недавнего комментария вам нужно будет создать слои, как описано здесь:

http://paperjs.org/tutorials/project-items/project-hierarchy/#removing-items-and-children

а затем вы можете добавить свои пути к слою и сделать что-то вроде этого:

 //add image to project as background
 // ... your code here ...

 var secondLayer = new Layer();

Всякий раз, когда вы создаете новый слой, он становится активным слоем проекта, и тогда вы можете рисовать поверх второго слоя все, что хотите.

если вам нужна простая кнопка «отменить», вы можете сделать:

 function onMouseDown(event) {
     if (window.mode == "drawing") {
        myPath = new Path();
        myPath.strokeColor = 'black';
     }
     else if (window.mode == "undo") {
        myPath.opacity = '0'; //this makes the last path used completely see through
        // or myPath.remove(); // this removes the path.
        //if you're intent on something that writes and erases, you could do 
     }
 }

Но то, что вы ищете, выглядит примерно так:

 function onMouseDrag(event) {
   if (window.mode == "drawing") {
     myPath.add(event.point);
   }
   else if (window.mode == "erasing") {
     myPath.removeSegment(0);
   }
 }

это стирает сегменты пути от начала до конца. Для полной функциональности вам нужно что-то, что идентифицирует путь при щелчке (layer.getChildren()? затем выберите дочерний элемент). Затем, используя точку при перемещении мыши, вам нужно определить индекс сегмента и удалить его с пути, используя .removeSegment(index).

http://paperjs.org/reference/path#removesegment-index

person SoluableNonagon    schedule 11.01.2013
comment
Еще нет сигары. :) Я смог реализовать это, используя низкоуровневый API Canvas для стирания путей и paper.js для всего остального. То, чего вы достигли, просто стирает сегменты с существующих путей. Что, если есть текст, прямоугольники и другие формы? Мне нужна возможность стирать пути поверх фигур (например, инструмент стирания в фотошопе). - person TheOne; 11.01.2013
comment
@TheOne: Я ищу аналогичную функциональность, где я могу выбрать элемент - прямоугольник/точку/круг и удалить... Как вы смогли это сделать... Спасибо. - person user1050619; 27.06.2018

Что ж, простым решением было бы просто создать белый путь. http://jsfiddle.net/D8vMG/11/

function onMouseDown(event) {
    if (window.mode == "drawing") {
       myPath = new Path();
       myPath.strokeColor = 'black';
     }
     else if (window.mode == "erasing") {
        myPath = new Path();
        myPath.strokeColor = 'white';
        myPath.strokeWidth =  10;
     }
}
person SoluableNonagon    schedule 11.01.2013
comment
таким образом, стирание больше, чем рисунок. - person SoluableNonagon; 11.01.2013
comment
Просто, но бесполезно :-) мой вариант использования имеет фоновое изображение. - person TheOne; 11.01.2013