我一直试图弄清楚如何使用onMouseDrag和paperjs中的onMouseDown进行平移/缩放。
我见过的唯一参考是coffescript,并没有使用paperjs工具。
答案 0 :(得分:3)
这比我应该弄清楚的时间要长。
var toolZoomIn = new paper.Tool();
toolZoomIn.onMouseDrag = function (event) {
var a = event.downPoint.subtract(event.point);
a = a.add(paper.view.center);
paper.view.center = a;
}
答案 1 :(得分:1)
你可以更多地简化Sam P的方法:
#include <stdio.h>
#include <stdlib.h>
static char* copy_and_reverse(char* a);
static int strlen(char *c); // self-implemented
int main(void) {
char *a = "some string";
char *b = copy_and_reverse(a);
printf("%s", b);
free(b);
return 0;
}
static char* copy_and_reverse(char* a) {
int n = strlen(a);
char *b = new char[n * 2 + 1]; // get twice the length of a and one more for \0
for (int i = 0; i < n; ++i) { // does copying and reversing
b[i] = a[i];
b[i+n] = a[n-i-1];
}
b[2 * n] = '\0'; // null out last one
return b;
}
static int strlen(char *c) {
char *s = c;
while( *s++ );
return s-c-1;
}
事件对象已经有一个名为downPoint
的起点的变量。
我已经快速组合sketch进行测试。
答案 2 :(得分:0)
不幸的是,当您更改视图变换时,您不能依靠 event.downPoint
来获得前一点。您必须自己将其保存在视图坐标中(如 Paper.js 开发人员 Jürg Lehni here 所指出的那样)。
这是一个有效的版本(也在 this sketch 中):
let oldPointViewCoords;
function onMouseDown(e) {
oldPointViewCoords = view.projectToView(e.point);
}
function onMouseDrag(e) {
const delta = e.point.subtract(view.viewToProject(oldPointViewCoords));
oldPointViewCoords = view.projectToView(e.point);
view.translate(delta);
}
view.translate(view.center);
new Path.Circle({radius: 100, fillColor: 'red'});