選択したものを表のようにあつかうため?のクラス(多方向対応/インデザイン・イラストレーター対応版)
うまく説明できないけど、多分便利だと思います。
インデザイン・イラストレーター両方で動きま〜す。
/* #includepath 'path of lib' */ #include 'hvg.js'; i = 1; hvg(app.activeDocument.selection,1).each(function(a){ a.contents = i.toString(); i++; });
/* #includepath 'path of lib' */ #include 'hvg.js'; var x = i = 1; hvg(app.activeDocument.selection,0).each(function(a){ a.contents = i.toString(); i++; });
書き直したスクリプト本体はこちら。
// var hvg = function(sel,LN){ //sel object //LN 0:横,1:縦...... return new hvg.prototype.init(sel,LN); } hvg.fn = hvg.prototype = { 'init' : function (sel,LN){ if(typeof sel == 'undefined'){ sel = app.activeDocument.selection; } if(sel.length == 0){ alert ("please select something"); return {'getItems' : function(){}, 'next': function(){} ,'each': function(){}}; } this.group = []; //$.writeln(app.name); this.p_x = 0; this.p_y = 0; var slen = sel.length; var hl = new Number(); var grouping = new Array(); //layout pattern var LN = typeof LN == 'number' ? LN : 0; var getOrder = function(num){ switch(num){ case 0 : return function(a,b){return b.geometricBounds[1] - a.geometricBounds[1];} // ai sort top case 1 : return function(a,b){return a.geometricBounds[0] - b.geometricBounds[0];} // ai sort left case 2 : return function(a,b){return a.geometricBounds[1] - b.geometricBounds[1];} // ai sort bottom case 3 : return function(a,b){return b.geometricBounds[0] - a.geometricBounds[0];} // ai sort right case 4 : return function(a,b){return a.geometricBounds[0] - b.geometricBounds[0];} //indd sort top case 5 : return function(a,b){return a.geometricBounds[1] - b.geometricBounds[1];} //ind sort left case 6 : return function(a,b){return b.geometricBounds[0] - a.geometricBounds[0];} //indd sort bottom case 7 : return function(a,b){return b.geometricBounds[1] - a.geometricBounds[1];} //ind sort right default: switch(app.name){ case 'Adobe Illustrator' : return getOrder(0); case 'Adobe InDesign' : return getOrder(4); } }; }; var getgOrder = function(num){ switch(num){ case 0 : return function(a,b){return b['n'] - a['n'];} case 1 : return function(a,b){return a['n'] - b['n'];} } } var getHlx = function(num){ switch(num){ case 0 : return function(x){return Math.abs(x.geometricBounds[1]-x.geometricBounds[3]);} case 1 : return function(x){return Math.abs(x.geometricBounds[2]-x.geometricBounds[0]);} } } var getGetIC = function(num){ switch(num){ case 0 : return function(x){return (x.visibleBounds[3]+x.visibleBounds[1])/2;} case 1 : return function(x){return (x.visibleBounds[2]+x.visibleBounds[0])/2;} } } //LayOut Pattern //ここを増していろんな方向に対応。 // var layout = { 'Adobe Illustrator' : [ [1,0,0], //0:左上->右下 [0,0,1], //1:右上->左下 [3,0,0], [2,0,1], ], 'Adobe InDesign' : [ [5,1,1], //0:左上ー>右下 [4,0,0], //1:右上->左下 [7,1,1], [6,0,0], ] } switch(app.name){ case 'Adobe Illustrator' : var order = getOrder(layout[app.name][LN][0]); var gorder = getgOrder(layout[app.name][LN][1]); var hlx = getHlx(layout[app.name][LN][2]); var getIC = getGetIC(layout[app.name][LN][2]); break; case 'Adobe InDesign' : var order = getOrder(layout[app.name][LN][0]); var gorder = getgOrder(layout[app.name][LN][1]) var hlx = getHlx(layout[app.name][LN][2]); var getIC = getGetIC(layout[app.name][LN][2]); break; }; for(var i = 0; i <slen ; i++)hl += hlx(sel[i]); var hl = hl/slen; var test = function (x){ var ic = getIC(x); for(var j = 0; j < grouping.length ; j ++){ if(Math.abs(ic - grouping[j].n) < hl ){ grouping[j].item.push(sel[i]); return; } } grouping.push({n :ic , item : [sel[i]]}); return ; } for(var i = 0; i < slen ; i++)test(sel[i]); for(var i = 0; i < grouping.length; i++){ temp = new Array(); for(var j = 0; j < grouping[i].item.length;j++){temp.push(grouping[i].item[j])} grouping[i].item = temp.sort (order); } this.group = grouping.sort(gorder); return this; }, //get Item to X,Y position 'getItem' : function(y,x){ try{ return this.group[y].item[x]; }catch(e){ return false; } }, 'next' : function(){ if(this.group[this.p_y].item.length > this.p_x){ var get = this.getItem(this.p_y,this.p_x); this.p_x++; }else{ this.p_y++; this.p_x = 0; if(this.group.length > this.p_y){ var get = this.getItem(this.p_y,this.p_x); this.p_x++; }else{ return false; } } return get; }, 'each' : function(fnc,args){ var i; if(typeof fnc == 'function')while(i = this.next())fnc.call(i,i,args); this.p_x = 0; this.p_y = 0; return this; } } hvg.prototype.init.prototype = hvg.prototype; //