如何在Illustrator CS5.1 +中创建画板对象的add方法所需的Rectangle对象?

时间:2014-12-03 09:50:01

标签: javascript adobe-illustrator

我试图在java脚本的帮助下添加新的画板。我无法找到解决方案。 adobe的脚本指南很差(不要使用更强的词)。

我尝试过它会返回错误:

  

错误1242:非法参数 - 参数1 - 预期的矩形值

当我从其他画板使用artboard.artboardRect的值时,它会在同一个地方创建画板,但我无法修改它(调整大小),这使得此选项无用。

artboards.add(artboards[0].artboardRect);//works
artboards.add([0,0,200,50]);//Error 1200: an Illustrator error coccurred: 1346458189('PARAM')
var rect = artboards[0].artboardRect;
rect[0] = 0;
rect[1] = 0;
rect[2] = 200;
rect[3] = 50;
artboards.add(rect);//Error 1242: Illegal argument - argument 1 - Rectangle value expected

3 个答案:

答案 0 :(得分:6)

经过广泛搜索后,我发现了这个解决方法:

var newRect = function(x, y, width, height) {
    var l = 0;
    var t = 1;
    var r = 2;
    var b = 3;

    var rect = [];

    rect[l] = x;
    rect[t] = -y;
    rect[r] = width + x;
    rect[b] = -(height - rect[t]);

    return rect;
};

artboard = artboards.add(artboards[0].artboardRect);
artboard.name = "new name";
artboard.artboardRect = newRect(0, 0, 200, 50);

答案 1 :(得分:2)

Illustrator Scripting PDFs rectsomeOtherPropRect的多个位置定义为“4个数字的数组”。例如,

var document = app.documents.add();
$.writeln(document.artboards[0].artboardRect); // 0,792,612,0

返回的值对应topLeftX, topLeftY, bottomRightX, bottomRightY

为了理解这些值,我们需要看一下Illustrator的协调系统。 Illustrator的用户界面使用的是modified coordinate system,而不是实际的cartesian one。换句话说,屏幕的左上角是原点,而不是左下角。但是在编写脚本时,会使用实际的笛卡尔坐标系。

由于坐标系的这种差异,Y轴上输入的值应该是负值的。因此,如果我想重新定位并调整画板大小,请将其移至(200,50)并将其调整为(400,300),我需要做的是:

var document = app.activeDocument;
var artboard = document.artboards[0];

var x = 200;
var y = 50;
var w = 400;
var h = 300;

artboard.artboardRect = [x, -y, (x + w), -(y + h)];

$.writeln(document.artboards[0].artboardRect); // 200, -50, 600, -350

此解决方案可以包含在函数中:

function rect(x, y, w, h) {
    return [x, -y, (x + w), -(y + h)];
}

artboard.artboardRect = rect(200, 50, 400, 300);

YH都应为否定,否则您会收到错误

  

错误1200:发生了Illustrator错误:1346458189('PARM')

或错误的重新定位/调整大小。

答案 2 :(得分:1)

以防其他人遇到Error: an Illustrator error occurred: 1346458189 ('PARM')

在CS6中,如果height 为负,或者width 为负,则至少会发生这种情况。这适用于rect类型的所有值。

xy可以是正面的,也可以是负面的,这无关紧要。

所以工作:

app.activeDocument.artboards.add([0 , 0, 200, -50]);
app.activeDocument.artboards.add([-10 , -10, 200, -50]);
app.activeDocument.artboards.add([10 , 10, 200, -50]);

不会工作:

app.activeDocument.artboards.add([0 , 0, 200, 50])
app.activeDocument.artboards.add([0 , 0, -200, -50])
app.activeDocument.artboards.add([0 , 0, -200, 50])