文章目录
1.算法程序
- 1.算法程序
- 2.作者答疑
illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是拼版,开发一个自动拼版功能,源代码如下所示:
if (app.documents.length == 0) {
Mydoc = app.documents.add();
} else {
Mydoc = app.activeDocument;
}
function MyfistDialog() {
this.windowRef = null;
}
MyfistDialog.prototype.run = function() {
var MyDocSelected = app.activeDocument.selection;
if (MyDocSelected.length > 0) {
var AutoX = Math.round((app.activeDocument.selection[0].width * 25.4) / 72, 2).toString();
AutoY = Math.round((app.activeDocument.selection[0].height * 25.4) / 72, 2).toString();
AutoXQty = Math.floor((Mydoc.width - 5) / app.activeDocument.selection[0].width).toString();
AutoYQty = Math.floor((Mydoc.height - 5) / app.activeDocument.selection[0].height).toString();
} else {
AutoX = "0";
AutoY = "0";
AutoXQty = "1";
AutoYQty = "1";
}
res = "dialog { \n\t\ttext: '自动拼版工具', \n\t\tmypnl: Panel { orientation:'column', alignChildren:['right', 'top'],\n\t\t\ttext: '拼版信息:', \n\t\t\tmyX: Group { orientation: 'row', \n\t\t\t\tst: StaticText { text:'成品水平尺寸' }, \n\t\t\t\tmyXSize: EditText { characters: 5,text:" + AutoX + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'mm 水平共拼' }, \n\t\t\t\tmyXQty : EditText { characters: 3,text:" + AutoXQty + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'个' }, \n\t\t\t}, \n\t\t\tmyY: Group { orientation: 'row', \n\t\t\t\tst: StaticText { text:'成品垂直尺寸' }, \n\t\t\t\tmyYSize: EditText { characters: 5,text:" + AutoY + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'mm 垂直共拼' }, \n\t\t\t\tmyYQty : EditText { characters: 3,text:" + AutoYQty + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'个' }, \n\t\t\t}, \n\t\t}, \n\t\tmypnl2: Panel { orientation:'column', alignChildren:['right', 'top'],\n\t\t\ttext: '割线信息:(mm)', \n\t\t\tmyOther: Group { orientation: 'row', \n\t\t\tst: StaticText { text:'割线离成品' }, \n\t\t\tmyCropSpace : EditText { characters: 3,text:2, justify:'right' } \n\t\t\tst: StaticText { text:'割线长' }, \n\t\t\tmyCropLength : EditText { characters: 3,text:3, justify:'right' } \n\t\t\tst: StaticText { text:'成品间隙' }, \n\t\t\tmyBlood : EditText { characters: 3,text:0, justify:'right' } \n\t\t\t}, \n\t\t}, \n\t\tCheckboxs: Group { orientation: 'row', \n\t\t\tCheckContent: Checkbox { \n\t\t\t\torientation:'row', text:'带内容拼版 .', value:false \n\t\t\t}, \n\t\t\tCheckCutline: Checkbox { \n\t\t\t\torientation:'row', text:'自动加割线', value:true \n\t\t\t}, \n\t\t}, \n\t\tmypnl3: Group { orientation: 'row', \n\t\t\tst: StaticText { text:'注:水平与垂直尺寸需>0, 拼数需≥1,其它值需≥0' }, \n\t\t} \n\t\tbuttons: Group { orientation: 'row', \n\t\t\tcancelBtn: Button { text:'取消', properties:{name:'cancel'} } \n\t\t\tokBtn: Button { text:'确定', properties:{name:'ok'} }, \n\t\t} \n}";
myDialog = new Window(res);
this.windowRef = myDialog;
myDialog.buttons.okBtn.onClick = function() {
myXSizeV = (Number(myDialog.mypnl.myX.myXSize.text) * 72) / 25.4;
myXQtyV = Math.round(Number(myDialog.mypnl.myX.myXQty.text));
myYSizeV = (Number(myDialog.mypnl.myY.myYSize.text) * 72) / 25.4;
myYQtyV = Math.round(Number(myDialog.mypnl.myY.myYQty.text));
myCropSpaceV = (Number(myDialog.mypnl2.myOther.myCropSpace.text) * 72) / 25.4;
myCropLengthV = (Number(myDialog.mypnl2.myOther.myCropLength.text) * 72) / 25.4;
myBloodV = (Number(myDialog.mypnl2.myOther.myBlood.text) * 72) / 25.4;
StartpositionX = 0;
StartpositionY = 0;
if (app.activeDocument.selection.length > 0) {
StartpositionX = app.activeDocument.selection[0].position[0];
StartpositionY = (app.activeDocument.selection[0].position[1] - ((myYSizeV + myBloodV) * myYQtyV)) + myBloodV;
}
var isInputOk = false;
if (myXSizeV > 0 && myXQtyV >= 1 && myYSizeV > 0 && myYQtyV >= 1 && myCropSpaceV >= 0 && myCropLengthV >= 0 && myBloodV >= 0) {
isInputOk = true;
}
if ((myXQtyV * myYQtyV) > 5000) {
isInputOk = false;
}
if (isInputOk == true) {
myDialog.close();
if (myDialog.Checkboxs.CheckContent.value) {
AutoCopy(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myBloodV, StartpositionX, StartpositionY);
}
if (myDialog.Checkboxs.CheckCutline.value) {
AddCutline(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myCropSpaceV, myCropLengthV, myBloodV, StartpositionX, StartpositionY);
}
}
};
myDialog.buttons.cancelBtn.onClick = function() {
myDialog.close();
};
myDialog.show();
return true;
};
if (typeof MyfistDialog_unitTest == "undefined") {
new MyfistDialog().run();
}
function AutoCopy(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myBloodV, StartpositionX, StartpositionY) {
var MyDocSelected = app.activeDocument.selection;
if (MyDocSelected.length > 0) {
for (var v = 1; v 1) {
newItem = MyDocSelected[i].duplicate(app.activeDocument, ElementPlacement.PLACEATEND);
newItem.translate((myXSizeV + myBloodV) * (h - 1), -(myYSizeV + myBloodV) * (v - 1));
}
}
} else {
MyDocSelected.selected = false;
newItem = MyDocSelected.parent.duplicate(app.activeDocument, ElementPlacement.PLACEATEND);
newItem.left += ((myXSizeV + myBloodV) * (h - 1));
newItem.top += (-(myYSizeV + myBloodV) * (v - 1));
}
}
}
}
}
function AddCutline(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myCropSpaceV, myCropLengthV, myBloodV, StartpositionX, StartpositionY) {
var MyDocSelected = app.activeDocument.selection;
if (MyDocSelected.length > 0) {
for (var v = 1; v 1) {
}
}
} else {
MyDocSelected.selected = false;
}
}
}
}
var cmykColor = new CMYKColor();
cmykColor.cyan = 0;
cmykColor.yellow = 0;
cmykColor.magenta = 0;
cmykColor.black = 100;
var MyCutlineGroup = activeDocument.groupItems.add();
if (myBloodV != 0) {
for (var i = 0; i 0) {
var MyTestPathBottom1 = MyCutlineGroup.pathItems.add();
MyTestPathBottom1.setEntirePath(new Array(new Array((StartpositionX + ((myXSizeV + myBloodV) * i)) - myBloodV, StartpositionY - myCropSpaceV), new Array((StartpositionX + ((myXSizeV + myBloodV) * i)) - myBloodV, (StartpositionY - myCropSpaceV) - myCropLengthV)));
MyTestPathBottom1.strokeColor = cmykColor;
MyTestPathBottom1.stroked = true;
MyTestPathBottom1.filled = false;
MyTestPathBottom1.strokeWidth = 0.425196850393701;
MyTestPathBottom1.selected = true;
var MyTestPathUp1 = MyCutlineGroup.pathItems.add();
MyTestPathUp1 = MyTestPathBottom1.duplicate();
MyTestPathUp1.top += (((myYSizeV + myBloodV) * myYQtyV) - myBloodV) + (myCropSpaceV * 2) + myCropLengthV;
MyTestPathUp1.strokeColor = cmykColor;
MyTestPathUp1.stroked = true;
MyTestPathUp1.filled = false;
MyTestPathUp1.strokeWidth = 0.425196850393701;
MyTestPathUp1.selected = true;
}
if (i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?