BridgeTalkにスクリプトを渡すにはuneval()を使うといいみたい。
先日のエントリーでBridgeTalkでbodyにスクリプトを渡すには
uneval(hoge)したらいいよというアドバイスを頂きさっそく試してみました。
(function(){ var CropImage = function(X){ alert(typeof X); } var bt=new BridgeTalk(); bt.target = "illustrator"; bt.body = uneval (CropImage)+"()"; bt.send(); })();
なるほど、とっても便利です。
いままでいちいちクォートで囲んでいたのがバカらしくなります。
(function(){ var NUM = 12.3; var CropImage = function(X){ alert(typeof X); } var bt=new BridgeTalk(); bt.target = "illustrator"; bt.body = uneval (CropImage)+"("+NUM+")"; bt.send(); })();
引数を渡すにはこんな感じでいいみたい。
これを使って[イラストレーターに貼り付けた画像をパスを元に分割する:CropPlacedItem]を書き直すと
こんな感じ、クォートで囲まなくてもいいし、とっても見通しが。よくなりました
#include 'c.js';//http://svn.coderepos.org//share/platform/illustrator/javascript/lib/c.js #include 'matrixConvert.js';//http://d.hatena.ne.jp/kamiseto/20090502/1241251512 (function(){ // var i = 0; // if(c('S').f('PL').length > 1 )return false; var PI = c('S').f('PL')[0]; var PI_MATRIX = matrixConvert.getAll(PI); // if(c('S').f('P').length < 1)return false; c('S').f('P').each(function(){ //画像を開く toOpen(PI.file,'photoshop'); //画像を切り抜いて保存 var x1 = (this.left-PI.left); var y1 = (PI.top-this.top); var x2 = (this.width+x1); var y2 = (this.height+y1); //保存するファイル名 var f = (PI.file.path+'/CROP_'+(i++)+'_'+PI.file.toString().replace (PI.file.path+'/', "")).replace(/(jpeg|jpg|eps|tiff|png)$/,'psd'); CropImage([ x1/PI.width, y1/PI.height, x2/PI.width, y2/PI.height] ,f); //画像が出来るまで待つ var timeout = 10*1000; // while(!File(f).exists && timeout > 0){ $.sleep (1000); timeout = timeout-1000; } if(timeout > 0){ //画像の配置 var pA = app.activeDocument.placedItems.add(); pA.file = File(f); //pA.matrix = PI.matrix; pA.resize(PI_MATRIX.vs,PI_MATRIX.hs); pA.position = this.position; pA.moveBefore(this); }else{ return false; } }); PI.remove(); })(); function toOpen(file,app){ var bt=new BridgeTalk(); bt.target = app; bt.body ="open (File('"+file+"'));"; bt.send(); } function CropImage(ract,f){ try{ var bt=new BridgeTalk(); bt.target = 'photoshop'; bt.body = uneval (Photoshop_CropImage)+"("+ract[0]+","+ract[1]+","+ract[2]+","+ract[3]+",'"+f+"');"; bt.onError = BridgeTalkErrorHandler; bt.onResult = function(res) { resF = res.body; } bt.send(); }catch(e){ throw(e); } } function BridgeTalkErrorHandler (btObj) {alert( btObj.body + " (" + btObj.headers ["Error-Code"] + ")" ); } // function Photoshop_CropImage(rac0,rac1,rac2,rac3,f){ var MakeRactangle = function(data){ var ract = []; ract[0] = new SubPathInfo(); ract[0].operation = ShapeOperation.SHAPEADD; ract[0].closed = true; ract[0].entireSubPath = [ MakepathPoint(data[0],data[1]), MakepathPoint(data[0],data[3]), MakepathPoint(data[2],data[3]), MakepathPoint(data[2],data[1]) ]; return ract; } var MakepathPoint =function (x,y){ var pd = new PathPointInfo(); with(pd){ kind = PointKind.CORNERPOINT; anchor= [x, y]; leftDirection= [x, y]; rightDirection = [x, y]; } return pd; } docObj = activeDocument; var saveF = new File(f); docHeight = docObj.height.toString().match(/[0-9.]+/); docWidth = docObj.width.toString().match(/[0-9.]+/); dw_pix=(docWidth/25.4*72); dh_pix=(docHeight/25.4*72); pObj = docObj.pathItems.add('made in javascript', MakeRactangle([rac0*dw_pix,rac1*dh_pix,rac2*dw_pix,rac3*dh_pix])); var pp = pObj.subPathItems[0].pathPoints; var xp = []; var yp = []; var sortOpt = function(a,b){return a-b} for(i=0;i<pp.length;i++){ xp.push(pp[i].anchor[0]); yp.push(pp[i].anchor[1]); } xp.sort(sortOpt); yp.sort(sortOpt); var pWidth = xp[xp.length-1] - xp[0]; var pHeight = yp[yp.length-1] - yp [0]; pObj.makeSelection(0,false); pObj.remove(); app.activeDocument.selection.copy(); app.documents.add(UnitValue(pWidth,'pt'),UnitValue(pHeight,'pt'),docObj.resolution,'',getNewDocumentMode(),DocumentFill.TRANSPARENT,1,docObj.bitsPerChannel); app.activeDocument.paste(); docObj.close(SaveOptions.DONOTSAVECHANGES); app.activeDocument.saveAs(saveF); app.activeDocument.close(); saveF; function getNewDocumentMode(){ switch(docObj.mode.toString().match(/DocumentMode.(.+)$/)[1]){ case 'CMYK' : return NewDocumentMode.CMYK; case 'RGB' : return NewDocumentMode.RGB; case 'GRAYSCALE' : return NewDocumentMode.GRAYSCALE; default : return NewDocumentMode.RGB; } } }