在 Paper.js 中调整矩形大小
Resize rectangle in Paper.js
我在 Paper.js 中创建了一个非常普通的矩形,我想调整它的大小,但我找不到任何明显的方法来做到这一点。
var rect = new Rectangle([0, 0],[width,height]);
rect.center = mousePoint;
var path = new Path.Rectangle(rect, 4);
path.fillColor = fillColor;
path.meta = fillColor;
有一种比例变换方法,但它并不是真正用于鼠标交互,我的目标是创建一个可以调整组件大小的句柄。
您可以通过将矩形的 intended width/height 除以 current width/height 来计算缩放比例你的矩形。
然后您可以使用该缩放 'coefficient' 来应用缩放。
根据您上面的代码,您可以使用以下方法获取矩形的当前 width/height:rect.bounds.width
和 rect.bounds.height
这是您可以使用的函数
var rectangle = new Shape.Rectangle({
from: [0, 0],
to: [100, 50],
fillColor: 'red'
});
function resizeDimensions(elem,width,height){
//calc scale coefficients and store current position
var scaleX = width/elem.bounds.width;
var scaleY = height/elem.bounds.height;
var prevPos = new Point(elem.bounds.x,elem.bounds.y);
//apply calc scaling
elem.scale(scaleX,scaleY);
//reposition the elem to previous pos(scaling moves the elem so we reset it's position);
var newPos = prevPos + new Point(elem.bounds.width/2,elem.bounds.height/2);
elem.position = newPos;
}
resizeDimensions(rectangle,300,200)
这里是 Sketch。
请注意,上述函数还将 重新定位 元素在其先前位置,但它将使用左上角定位。 Paper.js 使用元素的中心来定位它们,所以我对此进行澄清,以免造成混淆
请注意,PaperJS 有 三种 种不同的矩形:
Rectangle
— 这是定义矩形的基本类型(数据结构)。基本上,左上角点、宽度和高度。 (屏幕上不显示任何内容。) 这种矩形可以通过设置其大小属性来调整大小,例如:
let rect;
const originalSize = [50, 50];
const newSize = [100, 100];
rect = new Rectangle([10, 50], originalSize);
rect.size = newSize;
Path.Rectangle
— 这是一种生成构成矩形路径的段列表的方法。此 确实 得到显示,但 Path 缺少与矩形关联的方法。例如,Path.Rectangle
没有 size
属性(因此尝试修改它没有任何效果)。要调整路径的大小,您可以使用另一个答案建议的 scale()
方法,或修改其 Segments:
rect = new Path.Rectangle([210, 50], originalSize);
rect.strokeColor = "red";
rect.strokeWidth = 3;
rect.segments[0].point = rect.segments[0].point.add([-25, 25]); // lower left point
rect.segments[1].point = rect.segments[1].point.add([-25, -25]); // upper left point
rect.segments[2].point = rect.segments[2].point.add([25, -25]); // upper right point
rect.segments[3].point = rect.segments[3].point.add([25, 25]); // lower right point
Shape.Rectangle
— 显示这种矩形 并且 公开其形状的属性,例如作为 size
。要调整 Shape.Rectangle
的大小,您可以直接修改其 size
属性:
rect = new Shape.Rectangle([410, 50], originalSize)
rect.strokeColor = "blue"
rect.strokeWidth = 3
rect.size = newSize
很有可能,如果你想画一个矩形并且在事后修改它的属性,你要找的矩形是Shape.Rectangle
.
这里有一个 Sketch,可让您玩转不同种类的矩形。
我在 Paper.js 中创建了一个非常普通的矩形,我想调整它的大小,但我找不到任何明显的方法来做到这一点。
var rect = new Rectangle([0, 0],[width,height]);
rect.center = mousePoint;
var path = new Path.Rectangle(rect, 4);
path.fillColor = fillColor;
path.meta = fillColor;
有一种比例变换方法,但它并不是真正用于鼠标交互,我的目标是创建一个可以调整组件大小的句柄。
您可以通过将矩形的 intended width/height 除以 current width/height 来计算缩放比例你的矩形。
然后您可以使用该缩放 'coefficient' 来应用缩放。
根据您上面的代码,您可以使用以下方法获取矩形的当前 width/height:rect.bounds.width
和 rect.bounds.height
这是您可以使用的函数
var rectangle = new Shape.Rectangle({
from: [0, 0],
to: [100, 50],
fillColor: 'red'
});
function resizeDimensions(elem,width,height){
//calc scale coefficients and store current position
var scaleX = width/elem.bounds.width;
var scaleY = height/elem.bounds.height;
var prevPos = new Point(elem.bounds.x,elem.bounds.y);
//apply calc scaling
elem.scale(scaleX,scaleY);
//reposition the elem to previous pos(scaling moves the elem so we reset it's position);
var newPos = prevPos + new Point(elem.bounds.width/2,elem.bounds.height/2);
elem.position = newPos;
}
resizeDimensions(rectangle,300,200)
这里是 Sketch。
请注意,上述函数还将 重新定位 元素在其先前位置,但它将使用左上角定位。 Paper.js 使用元素的中心来定位它们,所以我对此进行澄清,以免造成混淆
请注意,PaperJS 有 三种 种不同的矩形:
Rectangle
— 这是定义矩形的基本类型(数据结构)。基本上,左上角点、宽度和高度。 (屏幕上不显示任何内容。) 这种矩形可以通过设置其大小属性来调整大小,例如:let rect; const originalSize = [50, 50]; const newSize = [100, 100]; rect = new Rectangle([10, 50], originalSize); rect.size = newSize;
Path.Rectangle
— 这是一种生成构成矩形路径的段列表的方法。此 确实 得到显示,但 Path 缺少与矩形关联的方法。例如,Path.Rectangle
没有size
属性(因此尝试修改它没有任何效果)。要调整路径的大小,您可以使用另一个答案建议的scale()
方法,或修改其 Segments:rect = new Path.Rectangle([210, 50], originalSize); rect.strokeColor = "red"; rect.strokeWidth = 3; rect.segments[0].point = rect.segments[0].point.add([-25, 25]); // lower left point rect.segments[1].point = rect.segments[1].point.add([-25, -25]); // upper left point rect.segments[2].point = rect.segments[2].point.add([25, -25]); // upper right point rect.segments[3].point = rect.segments[3].point.add([25, 25]); // lower right point
Shape.Rectangle
— 显示这种矩形 并且 公开其形状的属性,例如作为size
。要调整Shape.Rectangle
的大小,您可以直接修改其size
属性:rect = new Shape.Rectangle([410, 50], originalSize) rect.strokeColor = "blue" rect.strokeWidth = 3 rect.size = newSize
很有可能,如果你想画一个矩形并且在事后修改它的属性,你要找的矩形是Shape.Rectangle
.
这里有一个 Sketch,可让您玩转不同种类的矩形。