[Photoshop JSX] Illustratorのようにレイヤーを指定px移動させる

170726_0001.png

Illustratorでオブジェクトを選択しながらEnterキーを押したときの「移動」ダイアログが便利なので、
Photoshopでも出せないかと思い試しに作ってみました。

以下ソース。

/**
 * Copyright 2017 omame-lab. All Rights Reserved.
 */


////////////////////////////////////////////////////////////////////////////////
// 定数
////////////////////////////////////////////////////////////////////////////////
const TITLE = "移動";

////////////////////////////////////////////////////////////////////////////////
// グローバル変数
////////////////////////////////////////////////////////////////////////////////
var saveDirectory = "";

var exeFlg = false;
var moveX = 0;
var moveY = 0;

////////////////////////////////////////////////////////////////////////////////
// メイン
////////////////////////////////////////////////////////////////////////////////
function Main()
{
	if (documents.length > 0)
	{
		if (!activeDocument.activeLayer.isBackgroundLayer)
		{
			var dlg = new createDialog_DLG();
			initializeBuilder(dlg);

			if (runBuilder(dlg))
			{
				if (exeFlg)
				{
					activeDocument.activeLayer.translate(moveX, moveY);
				}
			}
			
			dlg = null;
		}
		else
		{
			alert("背景は移動できません", TITLE);
		}
	}
	else
	{
		alert("処理ファイルを開いて実行してください", TITLE);
	}
}

////////////////////////////////////////////////////////////////////////////////
// ダイアログ作成
////////////////////////////////////////////////////////////////////////////////
function createDialog_DLG()
{
	// ダイアログ
	var dlg = new Window("dialog", TITLE);
	dlg.bounds = [0, 0, 320, 210];
	
	with (dlg)
	{
		pnlOpt = add("panel", [20, 20, 240, 134], "位置");
		
		pnlOpt.sText01 = pnlOpt.add("statictext", [10, 24, 80, 48], "水平方向:");
		pnlOpt.sText02 = pnlOpt.add("statictext", [10, 64, 80, 88], "垂直方向:");
		pnlOpt.eText01 = pnlOpt.add("edittext", [80, 20, 180, 44], "");
		pnlOpt.eText02 = pnlOpt.add("edittext", [80, 60, 180, 84], "");
		
		// フォーカスセット
		pnlOpt.eText01.active = true;
	}
	
	// ボタン
	dlg.btnOk     = dlg.add("button", [220, 160, 300, 184], "実行",        { name:"ok" });
	dlg.btnCancel = dlg.add("button", [120, 160, 200, 184], "キャンセル",  { name:"cancel" });
//	dlg.btnCopy   = dlg.add("button", [ 20, 160, 100, 184], "コピー",      { name:"copy" });
	
	// フォーカスセット
//	dlg.btnOk.active = true;

	// センタリング
	dlg.center();

	return dlg;
}

////////////////////////////////////////////////////////////////////////////////
// ダイアログ(ボタンを押したときなどの動作設定)
////////////////////////////////////////////////////////////////////////////////
function initializeBuilder(builder)
{
	with (builder)
	{
		btnCancel.onClick = function()
		{
			this.parent.close(false);
		};
		btnOk.onClick = function()
		{
			moveX = parseInt(pnlOpt.eText01.text);
			moveY = parseInt(pnlOpt.eText02.text);
			if (moveX && moveY)
			{
				exeFlg = true;
				this.parent.close(true);
			}
			else if ((moveX == 0 && moveY) || (moveX && moveY == 0) || (moveX == 0 && moveY == 0))
			{
				exeFlg = true;
				this.parent.close(true);
			}
			else
			{
				alert("入力に誤りがあります");
			}
		};
	}
}

////////////////////////////////////////////////////////////////////////////////
//ダイアログ(起動・実行)
////////////////////////////////////////////////////////////////////////////////
function runBuilder(builder)
{
  return builder.show();
}

////////////////////////////////////////////////////////////////////////////////
Main();

実行すると下図のようなダイアログが表示され、
Illustratorのように選択したレイヤーを指定pxだけ移動させることができます。
まったく検証は行えていないので実用に耐えるかどうかは使いながら確認していく次第です。

170726_0002.png


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です