论坛帮助 |
社区圈子 |
日历事件 |
2017-05-03, 09:27 | 只看该作者 #4 | ||
|
|||
正式会员
等级: 三袋长老
|
var doc=app.activeDocument.selection; var m=doc.length; var x=[]; var temx=[]; var temy=[]; var y=[]; var xarr=[]; var yarr=[]; var l=3*2.834546; function positonArr(obj){ // 得到各个选择点的坐标 var m=obj.length; while(m--){ var n=obj[m].selectedPathPoints.length; while(n--){ temx.push(obj[m].pathPoints[n].anchor[0]);// .toFixed(1) temy.push(obj[m].pathPoints[n].anchor[1]); } } } positonArr(doc); x=unique2(temx);// 去重 x.sort(sortNumber);//排序,在原数组的基础上进行排序 //~ alert(x); y=unique2(temy); y.sort(sortNumber);//排序 //~ alert(y); xarr=[x[0],x[x.length-1]]; yarr=[y[0],y[y.length-1]]; function sortNumber(a,b){ return a - b } function unique2(array){ var r = []; for(var i = 0, l = array.length; i < l; i++) { for(var j = i + 1; j < l; j++) if (array[i] === array[j]) j = ++i; r.push(array[i]); } return r; } var newLayer= app.activeDocument.layers.add();//~ 建立图层 newLayer.name='刀线'; //命名图层名字 var LINEGROUP=newLayer.groupItems.add();// 添加一个组 function line(){ for(var i=0,yl=y.length;i<yl;i++){ // 横线 drowLine(xarr[0]-l,y[i],xarr[1]+l,y[i]); }; for(var w=0,xl=x.length;w<xl;w++){ // 竖线 drowLine(x[w],yarr[0]-l,x[w],yarr[1]+l); }; //~ alert(x.length); } line(); function drowLine(x1,y1,x2,y2){ var myLine=LINEGROUP.pathItems.add(); myLine.filled=false; myLine.stroked=true; myLine.strokeWidth=0.3*2.834546; myLine.setEntirePath (Array( Array(x1,y1), Array(x2,y2), ) ) ; return myLine } |
||
2017-05-04, 23:46 | 只看该作者 #5 | ||
|
|||
正式会员
等级: 四袋长老
|
可优化的地方: - 不需要记录矩形所有锚点坐标,只需要左上+右下,也即geometricBounds。 - 去重函数可以选用更高效的,搜索可得。 - 绘制线段时颜色及粗细属性可以仅设置一次,利用AI里新建对象沿袭最后属性的特点即可。或者直接duplicate也行。 另外,如果矩形大小、水平/垂直间距总是均等的话,可以通过计算直接得到相应坐标。供参考: PHP 代码:
|
||
右列 3 位会员因为此帖价值甚高向 animalia 表示感谢: |
2017-05-05, 13:57 | 只看该作者 #7 | ||
|
|||
正式会员
等级: 六袋长老
|
var tg = app.selection; for (var i=0;i<tg.length;i++){ if (tg[i].typename!="PathItem") continue; var ln = app.activeDocument.pathItems.add(); ln.filled = false; ln.strokeColor = tg[i].fillColor; if (tg[i].width>tg[i].height){ addPoint(ln, [tg[i].geometricBounds[0], tg[i].geometricBounds[1] - tg[i].height / 2]); addPoint(ln, [tg[i].geometricBounds[2], tg[i].geometricBounds[1] - tg[i].height / 2]); ln.strokeWidth = tg[i].height; } else{ addPoint(ln, [tg[i].geometricBounds[0] + tg[i].width / 2, tg[i].geometricBounds[1]]); addPoint(ln, [tg[i].geometricBounds[0] + tg[i].width / 2, tg[i].geometricBounds[3]]); ln.strokeWidth = tg[i].width; } tg[i].remove(); } function addPoint(tgt, pos){ var pt = tgt.pathPoints.add(); pt.anchor = pos; pt.leftDirection = pos; pt.rightDirection = pos; } } )(); //代码可矩形转线,转发 |
||