1.算法程序
illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是拼版,开发一个一键拼版功能,源代码如下所示:
function makeup(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft) {
var width = (docWidth - marginLeft) - marginRight;
var height = (docHeight - marginTop) - marginBottom;
var w = parseInt(width / objWidth);
var h = parseInt(height / objHeight);
var wd = (width - (w * objWidth)) / 2;
var hd = (height - (h * objHeight)) / 2;
return {
top: marginTop + hd,
left: marginLeft + wd,
landscape: w,
portrait: h
};
}
function makeup2(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft) {
var r1 = makeup(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft);
var r2 = makeup(docHeight, docWidth, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft);
var x1 = r1.landscape * r1.portrait;
var x2 = r2.landscape * r2.portrait;
var r = null;
if (x1 > x2) {
r = r1;
r.dir = 0;
} else {
r = r2;
r.dir = 1;
}
return r;
}
function getDocTopLeft(doc) {
var pos = doc.rulerOrigin;
if (pos[0] != 0 || pos[1] != 0) {
[doc.height + pos[1], pos[0]];
}
return [0, doc.height];
}
function drawLine(pObj, points) {
var line = pObj.pathItems.add();
line.stroked = true;
line.filled = false;
line.strokeWidth = 0.566929;
var color = new CMYKColor();
color.black = 100;
color.cyan = 0;
color.magenta = 0;
color.yellow = 0;
line.strokeColor = color;
line.setEntirePath(points);
}
function matrixmakeup() {
var doc = app.activeDocument;
var obj = doc.selection[0];
if (!obj) {
alert("请选择需要自动排版的对象!");
return;
}
var docWidth = doc.width;
var docHeight = doc.height;
var objWidth = obj.width;
var objHeight = obj.height;
var margin = 14.173225;
var madeup = makeup2(docWidth, docHeight, objWidth, objHeight, margin, margin, margin, margin);
var w = madeup.landscape;
var h = madeup.portrait;
var top = madeup.top;
var left = madeup.left;
var dir = madeup.dir;
if (dir == 1) {
}
var docPos = getDocTopLeft(doc);
var docLeft = docPos[0];
var docTop = docPos[1];
for (var widx = 0; widx < w; widx += 1) {
for (var hidx = 0; hidx < h; hidx += 1) {
var o = obj.duplicate(doc, ElementPlacement.PLACEATEND);
o.position = [docLeft + left + (widx * objWidth), (docTop - top) - (hidx * objHeight)];
}
}
var lines = doc.groupItems.add();
var mm2 = 5.66929;
var mm4 = 11.33858;
for (var hidx = 0; hidx <= h; hidx += 1) {
var a = (docLeft + left) - mm2;
var b = a - mm4;
var c = (docTop - top) - (hidx * objHeight);
drawLine(lines, [
[a, c],
[b, c]
]);
var a = docLeft + left + (w * objWidth) + mm2;
var b = a + mm4;
var c = (docTop - top) - (hidx * objHeight);
drawLine(lines, [
[a, c],
[b, c]
]);
}
for (var widx = 0; widx <= w; widx += 1) {
var a = (docTop - top) + mm2;
var b = a + mm4;
var c = docLeft + left + (widx * objWidth);
drawLine(lines, [
[c, a],
[c, b]
]);
var a = ((docTop - top) - (h * objHeight)) - mm2;
var b = a - mm4;
var c = docLeft + left + (widx * objWidth);
drawLine(lines, [
[c, a],
[c, b]
]);
}
obj.remove();
alert("横: " + w + " 纵: " + h + " 共计: " + (w * h));
}
matrixmakeup();
2.作者答疑
如有疑问,请留言。