2

首先,我在一台装有 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。结果在任一系统上都是相同的。

简而言之,我的问题不在于设置变量本身。它与稍后在脚本中正确使用的变量中的值一起使用。包括将变量从一个传递到另一个。

例如

    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();
            }
        }
    }

我没有尝试过制作预定义的列表、下拉列表或其他方式。我也没有设置滑块、复选框或任何类似的替代方案。因为没有一个是理想的。我希望能够使用可键入的输入字段设置单元格大小。

我不确定这是预期的行为、我的代码中的缺陷还是需要报告的错误。任何有关为什么会发生这种情况的帮助或见解将不胜感激。

这有点长,所以不要在文本字段中发布我的脚本。完整的当前脚本迭代可在此处获得。对于那些希望看到它的人。

4

1 回答 1

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

我希望这有帮助。

于 2015-06-16T16:40:40.037 回答