AI JavaScripts 中心对齐替换,昨晚写的
AIJavaScripts 中心对齐替换,昨晚写的。
今早又改了一下,减少计算获取中心点的次数,感觉效率有提高
// 拼版中心对齐
function replace_align_center() {
var docRef = activeDocument;
// 判断选择物件2个以上
if (docRef.selection.length > 1) {
// 定义选择物件
mySelection = docRef.selection;
// 最上层物件为替换源
var sourceObj = docRef.selection;
// 定义数组用来保存选择物件的中心坐标 # 计算中心坐标
// x = (left + right) / 2 // y = (top + bottom) / 2
var alterObjectArray = new Array();
for (var i = 0; i < mySelection.length; i++) {
var bound = NO_CLIP_BOUNDS(mySelection);
var sel_xy = new Array((bound + bound) / 2, (bound + bound) / 2);
alterObjectArray.push(sel_xy);
}
// 删除用来定位的下层物件
for (var i = 1; i < mySelection.length; i++) {
mySelection.remove();
}
// 获得替换源物件中心坐标
var bound = NO_CLIP_BOUNDS(sourceObj);
var src_xy = new Array((bound + bound) / 2, (bound + bound) / 2);
// PageItem.duplicate 复制对象, 需要一个相对对象定位
var newGroup = sourceObj.parent.groupItems.add();
for (var i = 1; i < alterObjectArray.length; i++) {
var newobj = sourceObj.duplicate(newGroup, ElementPlacement.PLACEATEND);
var move_xy = new Array(alterObjectArray - src_xy, alterObjectArray - src_xy);
newobj.translate(move_xy, move_xy);
}
sourceObj.remove();
}
}
昨晚旧版,要每次计算中心点
// PageItem.duplicate 复制对象, 需要一个相对对象定位
var newGroup = sourceObj.parent.groupItems.add();
for (var i = 1; i < alterObjectArray.length; i++) {
var bound = NO_CLIP_BOUNDS(sourceObj);
var src_xy = new Array((bound + bound) / 2, (bound + bound) / 2);
var move_xy = new Array(alterObjectArray - src_xy, alterObjectArray - src_xy);
sourceObj.translate(move_xy, move_xy);// 移动到中心对齐位置
sourceObj.duplicate(newGroup, ElementPlacement.PLACEATEND);
}
caishikun12 发表于 2024-7-4 09:35
大神,支持多层蒙版对象对其吗,
目前测试支持蒙板的,速度也还挺不错的,比老外写的稳定
本帖最后由 landboy 于 2024-7-10 11:05 编辑
数码快印 发表于 2024-7-9 14:01
不清楚哪里有问题 AI 2018版本
因为还有一个边界处理的函数,本帖子里没补上来
XuanKaiser 发表于 2024-7-21 10:05
大佬,为啥你这个代码跑不动啊,我的2019点开来没反应。
之前发的源码,只是发我自己写的部分,蒙板支持算法是从老外的里面提取修改的,有网友直接使用没法运行。
所以现在发的这个是完整版的,直接下载就可以使用。
针对之前问没法使用的网友: 把下面这个NO_CLIP_BOUNDS 函数补全也就可以正常使用了
function NO_CLIP_BOUNDS(a){function c(h){if(IS_CLIP(h))b.push(h.pageItems);else if("GroupItem"==h.constructor.name)try{for(var l=h.pageItems.length,k=0;k<l;k+=1)c(h.pageItems)}catch(m){}else b.push(h)}var b=[];c(a);var d=[],e=[],g=[];a=[];for(var f=0;f<b.length;f+=1)d=b.geometricBounds,e=b.geometricBounds,g=b.geometricBounds,a=b.geometricBounds;d=MIN_IN_ARRAY(d);e=MAX_IN_ARRAY(e);g=MAX_IN_ARRAY(g);a=MIN_IN_ARRAY(a);return}
function IS_CLIP(a){try{if("GroupItem"==a.constructor.name&&a.clipped)return!0}catch(c){}return!1}function MAX_IN_ARRAY(a){for(var c=a,b=0;b<a.length;b+=1)a>c&&(c=a);return c}function MIN_IN_ARRAY(a){for(var c=a,b=0;b<a.length;b+=1)a<c&&(c=a);return c};
其实我之前很多回复里已经写清楚了,让你们自己去找NO_CLIP_BOUNDS 只是你们都是太懒了
大神,支持多层蒙版对象对其吗,
下面这个是论坛别人发的中心对齐替换,
下载试了一下,不支持蒙板物件中心对齐
还是自己写的中心对齐替换好
高效:提高效率 在illustrator中按需拼版
https://www.52cnp.com/thread-21818-1-1.html
复制上面的代码,保存为jsx,AI为什么没作用呢? turh123 发表于 2024-7-5 09:03
复制上面的代码,保存为jsx,AI为什么没作用呢?
因为这是代码片段,核心功能。
还有个函数 你自己搜索就可以找到了 landboy 发表于 2024-7-5 12:54
因为这是代码片段,核心功能。
还有个函数 你自己搜索就可以找到了
不会呀,大佬,你能给个直接能运行的那个吗,我这个有点笨, 牛人,功能非常好。 朱朱侠 发表于 2024-7-8 11:23
牛人,功能非常好。
谢谢夸奖,功能也是迭代了多次,然后从网上找到处理蒙板的代码,才逐渐完善的。 不清楚哪里有问题 AI 2018版本
页:
[1]
2