illustrator插件-画板功能开发-全部页面加矩形-垂直两分-水平两分-AI插件

发布于:2023-01-04 ⋅ 阅读:(313) ⋅ 点赞:(0)

1.illustrator

  脚本由JavaScript语言形式表达,包括一系列表示illustrator内部对象的属性和方法。通过调用这些对象,来实现illustrator内部功能的自动化处理和批处理。脚本分为两部分,一部分是常规的ExtendScript,另一部分是illustrator内置对象。学习如何开发illustrator脚本插件,必须对涉及到的这两块内容有充分的了解,前者作者推荐,JavaScript Tools Guide CC这个文档来学习,下载地址:https://download.csdn.net/download/m0_67316550/86502055,后者推荐,Illustrator_JavaScript_Scripting_Reference_2017,这个文档来了解illustrator软件常用的对象,掌握其调用方式,编写作业功能。下载地址:https://download.csdn.net/download/m0_67316550/86502072

1.1.app.activeDocument

  app是脚本运行环境的内置对象,代表整个应用程序。在Illustrator_JavaScript_Scripting_Reference_2017这个文档中可以查到。如下所示:

app是Adobe®Illustrator®应用程序对象,使用预定义的全局应用程序对象引用,其中包含所有其他Illustrator对象。

  activeDocument是一个Document对象。表示当前AI文档。文档包含在Application对象中。

那些以单词“default”开头的属性是默认的文档设置。 确保只在文档打开时修改这些默认属性。 注意,如果在创建新对象之前将默认属性设置为所需的值,就可以简化脚本,消除了指定具有默认属性的特定属性(如fillColor和stroke)的需要。 文档的颜色空间、高度和宽度只能在创建文档时设置。 不能在现有文档中修改这些属性。

1.2.artboards

当前文档画板集合。画板对象表示文档中的单个画板。 在一个文档中可以有1到100个画板。 画板属性如下图所示:
在这里插入图片描述

2.程序算法

  illustrator是矢量编辑软件,画板是绘制处理的重要容器,开发一个全部页加矩形、垂直两分和水平两分的功能

2.1.全部页加矩形

  源代码如下所示:

//全部页加矩形
function allArtboard() {
	bt=new BridgeTalk();
	bt.target="illustrator-21.064";
	bt.body="{\n" +
		"var docRef = app.activeDocument;\n" + 
		"var artboardRef= docRef.artboards;\n" +
		"for(i=0;i<artboardRef.length;i++){\n" +
			"var top=artboardRef[i].artboardRect[1] ;\n" + 
			"var left=artboardRef[i].artboardRect[0];\n" + 
			"var width=artboardRef[i].artboardRect[2]-artboardRef[i].artboardRect[0];\n" + 
			"var height=artboardRef[i].artboardRect[1]-artboardRef[i].artboardRect[3];\n" + 
			"var rect = docRef.pathItems.rectangle (top, left, width, height);\n" + 
			"var noColor = new NoColor();\n"+
			"rect.fillColor=noColor;\n"+
			"var rectColor = new CMYKColor();\n" + 
			"rectColor.cyan = 0;\n" + 
			"rectColor.magenta = 100;\n" + 
			"rectColor.yellow = 0;\n" + 
			"rectColor.black = 0;\n" + 
			"rect.strokeColor = rectColor;\n" + 
		"}\n" + 
		"docRef.selection=null;\n" + 
		"rect.selected=true;\n"+
	"}\n";
	bt.send();
}

2.2.垂直两分

  源代码如下所示:

//垂直两分
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var isVer = parseFloat(app.version);
var artboardnumber = artboardRef.getActiveArtboardIndex();

function art_Rect() {
    return artboardRef[artboardnumber].artboardRect;
}
var art_left = art_Rect();
var art_right = art_Rect();
art_left[2] += art_left[0];
art_left[2] /= 2;
artboardRef[artboardnumber].artboardRect = art_left;
art_right[0] += art_right[2];
art_right[0] /= 2;
isVer >= 15 ? artboardRef.insert(art_right, artboardnumber + 1) : myInsert(art_right, artboardnumber);

function myInsert(rect, myIndex) {
    var temp_Arr = [];
    var art_Length = artboardRef.length;
    for (var i = 0; i < art_Length; i += 1) {
        temp_Arr.push(artboardRef[i].artboardRect);
    }
    temp_Arr.splice(myIndex + 1, 0, rect);
    artboardRef.add(rect);
    var new_Art_Length = artboardRef.length;
    for (var i = 0; i < new_Art_Length; i += 1) {
        temp_Arr.push(artboardRef[i].artboardRect = temp_Arr[i]);
    }
    docRef.artboards.setActiveArtboardIndex(myIndex + 1);
}

2.3.水平两分

  源代码如下所示:

//水平两分
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var isVer = parseFloat(app.version);
var artboardnumber = artboardRef.getActiveArtboardIndex();

function art_Rect() {
    return artboardRef[artboardnumber].artboardRect;
}
var art_top = art_Rect();
var art_bottom = art_Rect();
art_top[3] += art_top[1];
art_top[3] /= 2;
artboardRef[artboardnumber].artboardRect = art_top;
art_bottom[1] += art_bottom[3];
art_bottom[1] /= 2;
isVer >= 15 ? artboardRef.insert(art_bottom, artboardnumber + 1) : myInsert(art_bottom, artboardnumber);

function myInsert(rect, myIndex) {
    var temp_Arr = [];
    var art_Length = artboardRef.length;
    for (var i = 0; i < art_Length; i += 1) {
        temp_Arr.push(artboardRef[i].artboardRect);
    }
    temp_Arr.splice(myIndex + 1, 0, rect);
    artboardRef.add(rect);
    var new_Art_Length = artboardRef.length;
    for (var i = 0; i < new_Art_Length; i += 1) {
        temp_Arr.push(artboardRef[i].artboardRect = temp_Arr[i]);
    }
    docRef.artboards.setActiveArtboardIndex(myIndex + 1);
}

3.作者答疑

  如有疑问,敬请留言。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到