首先,我在桌面上使用OS X 10.9&带有OS X 10.10的Macbook以及最新版本的Photoshop& ESTK。截至目前为止:Photoshop CC 2015529.r.88 x64,ESTK 4.0.0.1 - ExtendedScript 4.5.5& ScriptUI 6.2.2。两个系统的结果都是相同的。
简而言之,我的问题不在于设置变量本身。它是在稍后在脚本中正确使用变量中的值。包括将变量从on传递给另一个。
e.g。
var dflt = 16
var z = dflt
我要做的主要是将用户输入的数值传递给变量。然后在脚本的另一部分准确使用该值。当在用户输入之外的脚本中定义变量时,一切都很完美。添加用户输入后,可以准确地重复变量。
例如使用:
alert('The variable is currently set to: ' + value);
然而,在photoshop中运行时,结果并不像预期的那样。
脚本执行或应该执行的操作。采取活动层&将整个事物切割成预定义的网格。每个切口都放在它自己的层上。正如我已经说过的那样。当网格被预定义时,一切都是完美无瑕的。但是当添加用户输入时。网格完全倾斜。只有网格的第一个单元格/图层是准确的。尽管可以预见,其他所有东西都会被奇怪地拼凑起来。
我尝试过使用:
document.getElementById("numb")
Chrome和&#; Firefox浏览器。但是在Photoshop或ESTK中运行时会崩溃。
prompt
提供了倾斜/镶嵌结果。
以及对话窗口:
// begin dialog layout
var GridLayersDialog = new Window('dialog');
GridLayersDialog.text = 'Grid To Layers';
GridLayersDialog.frameLocation = [70, 70];
GridLayersDialog.alignChildren = 'center';
GridLayersDialog.GridSizePnl = GridLayersDialog.add('panel', [2, 2, 200, 70], 'Grid Size');
GridLayersDialog.GridSizePnl.add('statictext', [10, 16, 79, 48], 'Dimensions: ');
GridLayersDialog.GridSizePnl.aspectDimension = GridLayersDialog.GridSizePnl.add('edittext', [85, 13, 120, 34], dfltCs, {name:'cellSize'});
GridLayersDialog.GridSizePnl.aspectDimension.helpTip = 'Width & Height in pixels';
var buttons = GridLayersDialog.add('group');
buttons.orientation = 'row';
var okBtn = buttons.add('button');
okBtn.text = 'OK';
okBtn.properties = {name: 'ok'};
var cancelBtn = buttons.add('button');
cancelBtn.text = 'Cancel';
cancelBtn.properties = {name: 'cancel'};
// display dialog and only continues on OK button press (OK = 1, Cancel = 2)
if (GridLayersDialog.show() == 1) {
cellSize = String(GridLayersDialog.GridSizePnl.cellSize.text); etc...
这也提供了偏差的结果。
原始的'无瑕疵的',脚本如下:
// Size of cell in pixels
var cellSize = 16;
// Set the ruler type
if (app.preferences.rulerUnits != Units.PIXELS)
{
app.preferences.rulerUnits = Units.PIXELS;
}
var layerRef = docRef.activeLayer;
for (y = 0; y<docRef.height; y+=cellSize)
{
for (x = 0; x<docRef.width; x+=cellSize)
{
//activate the original layer
docRef.activeLayer = layerRef;
//make the selection
docRef.selection.select(Array (Array(x, y), Array(x, y+cellSize), Array(x+cellSize,y+cellSize), Array(x+cellSize,y)), SelectionType.REPLACE, 0, false);
//copy the selection
docRef.selection.copy();
//create and paste new layer
docRef.artLayers.add();
docRef.paste();
}
}
}
我还没有尝试制作预定义列表,下拉列表或其他内容。我也没有设置滑块,复选框或任何类似的替代方案。没有一个是理想的。我希望能够用一个典型的输入字段设置单元格大小。
我不确定这是否是预期的行为,我的代码中的缺陷或需要报告的错误。任何有关为何发生这种情况的帮助或见解将不胜感激。
这有点长,所以不要在文本字段中发布我的脚本。脚本的当前迭代完整可用here。对于那些希望看到它的人。
答案 0 :(得分:1)
我已经查完了你的剧本:这可能会有所帮助:
var dfltCs = 16;
// begin dialog layout
var GridLayersDialog = new Window('dialog');
GridLayersDialog.center();
GridLayersDialog.text = 'Grid To Layers';
GridLayersDialog.frameLocation = [70, 70];
GridLayersDialog.alignChildren = 'center';
GridLayersDialog.GridSizePnl = GridLayersDialog.add('panel', [2, 2, 200, 70], 'Grid Size');
GridLayersDialog.GridSizePnl.add('statictext', [10, 16, 79, 48], 'Dimensions: ');
GridLayersDialog.GridSizePnl.aspectDimension = GridLayersDialog.GridSizePnl.add('edittext', [85, 13, 120, 34], dfltCs, {name:'cellSize'});
GridLayersDialog.GridSizePnl.aspectDimension.helpTip = 'Width & Height in pixels';
// Room left for additional data in future update.
cellSize = String(GridLayersDialog.GridSizePnl.cellSize.text); if (cellSize=="") { cellSize = dfltCs;} // Set user input to variable
GridLayersDialog.add ("button", undefined, "OK");
if (GridLayersDialog.show () == 1)
{
var v = GridLayersDialog.GridSizePnl.aspectDimension.text;
alert('The variable is currently set to: ' + v);
}
所有更改都在最后几行。要获取edittext(字符串)的值,您需要以下内容:
var v = GridLayersDialog.GridSizePnl.aspectDimension.text
我希望这会有所帮助。