Векторная операция Paper.js

Я новичок в paper.js и столкнулся с некоторыми проблемами.

<script type="text/paperscript" canvas="canvas">
        function onMouseDrag(event) {
            // The radius is the distance between the position
            // where the user clicked and the current position
            // of the mouse.
            var path = new Path.Circle({
                center: event.downPoint,
                radius: (event.downPoint - event.point).length,
                fillColor: 'white',
                strokeColor: 'black'
            });

            // Remove this path on the next drag event:
            path.removeOnDrag();
        };
</script>

В этом коде (event.downPoint - event.point).length работает хорошо, но я хочу напрямую использовать javascript, поэтому я сделал:

<script type="text/javascript">
paper.install(window);
// Keep global references to both tools, so the HTML
// links below can access them.
var line_tool, circle_tool;

window.onload = function() {
    paper.setup('myCanvas');

    line_tool = new Tool();
    line_tool.onMouseDrag = function (event) {
                var path = new Path.Line({
                    from: event.downPoint,
                    to: event.point,
                    strokeColor: 'black'
                });

            path.removeOnDrag();

        };

    circle_tool = new Tool();
    circle_tool.onMouseDrag = function (event) {
            var path = new Path.Circle({                        
                center: event.downPoint,                        
                radius: (event.downPoint - event.point).length,                     
                fillColor: 'white',                     
                strokeColor: 'black'
            });                         
            path.removeOnDrag();                


        };  
    }
   </script>

«Инструмент линии» работает, как и ожидалось, но здесь, в «инструменте круга» (event.downPoint — event.point), возвращается NaN. Я предполагаю, что он пытается сделать «{ x: 110, y: 200 }-{ x: 100, y: 300 }» и терпит неудачу, потому что, очевидно, он ожидает два числа, но в документации Paper.js говорится, что он может обрабатывать векторы в этом формате (и это действительно работает в первом фрагменте кода). Должен ли я каким-то образом вызывать paper.js для расчета операций такого типа? Наверное, это глупо, но я ничего не мог найти о такой ситуации. Есть ли что-то вроде бумаги (//сделайте этот фрагмент кода так, как будто он был частью сценария 'text/paperscript')? Спасибо!


person Adam Gaszt    schedule 10.02.2014    source источник


Ответы (1)


Paper.js перегрузка оператора для векторных операций работает, только если вы включаете библиотеку с type="text/paperscript". В противном случае вы должны использовать: add, subtract, multiply, divide, modulo, equals вместо +, -, *, /, % and ==.

вот так:

point1.add([ 200, -50 ]);

или для вашего примера:

radius: event.downPoint.subtract(event.point).length,

Вот ваш пример с вычитанием и вот еще некоторые .

person Christoph    schedule 10.02.2014