Undefined не является объектом в сценариях Photoshop - PullRequest
0 голосов
/ 14 мая 2019

Я хочу создать втулку в фотошопе с помощью этого скрипта, но при запуске этого скрипта в фотошопе я получаю сообщение об ошибке:

Error: undefined is not an object line 63 ( grommetMarkL = printMarksLayer.pathItems.ellipse( -(spacingY), spacingX, 
    grommetSize, grommetSize );).

Пожалуйста, помогите мне, я слишком старался решить эту проблемуно я не решил эту ошибку.

#target Photoshop
if (app.documents.length > 0){
    var idoc = app.activeDocument;    
    var dwidth = app.activeDocument.width;
    var dheight = app.activeDocument.height;
    //grommet by default
    var grommetbydefault=36;
    // Grommets
    var grommetSize = 14.4; // .375 in.
    var grommetMargin = 72; // .7 in.
    // var grommetSpacing = 576; // 8 in.
    var grommetSpacing = grommetbydefault;
    var grommetMarkFillColor = new RGBColor();
    grommetMarkFillColor.red = 0;
    grommetMarkFillColor.green = 0;
    grommetMarkFillColor.blue = 0;
    var grommetMarkStrokeColor = new RGBColor();0
    grommetMarkStrokeColor.red = 255;
    grommetMarkStrokeColor.green = 255;
    grommetMarkStrokeColor.blue = 255;
    var sideGrommets = confirm('Hello Tahir do you want side grommets?')

    // Get artboard sizing
    // var artBoardSize = myDoc.artboards;
    // var width = artBoardSize[0].artboardRect[2];
    // var height = artBoardSize[0].artboardRect[3];

    // Get document sizing
    // Styling
    var noColor = new NoColor();
    var black = new CMYKColor();
    black.black = 100;
    var white = new CMYKColor();
    white.black = 0;

    /* Functions */

    function calcSpacing(){
        areaX = (Math.abs(dwidth) - grommetSize) - (grommetMargin * 2);
        areaY = (Math.abs(dheight) - grommetSize) - (grommetMargin * 2);
        noOfGrommetX = Math.round(areaX / grommetSpacing);
        noOfGrommetY = Math.round(areaY / grommetSpacing);
        spaceBetweenGrommetsX = areaX / noOfGrommetX;
        spaceBetweenGrommetsY = areaY / noOfGrommetY;
    }

    if (grommetSpacing === "about"){
        alert("Grommetize " + grommetizeVersion + ". hello Tahir");
    } else if (grommetSpacing != null && grommetSpacing != 0) {
        grommetSpacing *= 72;
        if (grommetSpacing === parseInt(grommetSpacing, 10)) {

            // Create template layer
            var printMarksLayer = idoc.artLayers.add();
            printMarksLayer.name = "Grommets";

            function createGrommets(){
                calcSpacing();
                var spacingX = grommetMargin;
                var spacingY = grommetMargin;

                for (i = 0; i < noOfGrommetX + 1; i++) { // Top & Bottom Grommets
                    grommetMarkT = printMarksLayer.pathItems.ellipse( -(spacingY), spacingX, 
                    grommetSize, grommetSize );
                    grommetMarkT.fillColor = grommetMarkFillColor;
                    grommetMarkT.strokeColor = grommetMarkStrokeColor;
                    grommetMarkT.strokeWidth = "1";
                    grommetMarkB = printMarksLayer.pathItems.ellipse( -(spacingY + areaY), 
                    spacingX, grommetSize, grommetSize );
                    grommetMarkB.fillColor = grommetMarkFillColor;
                    grommetMarkB.strokeColor = grommetMarkStrokeColor;
                    grommetMarkB.strokeWidth = "1";
                    spacingX += spaceBetweenGrommetsX;
                }
                spacingX = grommetMargin;
                spacingY = grommetMargin + spaceBetweenGrommetsY;


                if (sideGrommets == true) {
                    for (i = 0; i < noOfGrommetY - 1; i++) 
                    { // Left & Right Grommets
                        grommetMarkL = printMarksLayer.pathItems.ellipse( -(spacingY), spacingX, 
                        grommetSize, grommetSize );   //error is here
                        grommetMarkL.fillColor = grommetMarkFillColor;
                        grommetMarkL.strokeColor = grommetMarkStrokeColor;
                        grommetMarkL.strokeWidth = "1";
                        grommetMarkR = printMarksLayer.pathItems.ellipse( -(spacingY), spacingX + 
                        areaX, grommetSize, grommetSize );
                        grommetMarkR.fillColor = grommetMarkFillColor;
                        grommetMarkR.strokeColor = grommetMarkStrokeColor;
                        grommetMarkR.strokeWidth = "1";
                        spacingY += spaceBetweenGrommetsY;
                    }
                }
            }

            createGrommets();

            function createProductionGuides(){
                innerGuide=null,
                innerGuide = idoc.pathItems.rectangle(0,0,dwidth,dheight);
                innerGuide.fillColor = noColor;
                innerGuide.strokeColor = black;
                innerGuide.strokeWidth = ".5";
                innerGuide.strokeDashes = [];

                outterGuide=null,
                outterGuide = idoc.pathItems.rectangle(0 + 72,0 - 72,dwidth + (72 * 2),dheight + (72 * 2));
                outterGuide.fillColor = noColor;
                outterGuide.strokeColor = black;
                outterGuide.strokeWidth = ".5";
                outterGuide.strokeDashes = [];
            }

            createProductionGuides();
            // Lock Template Layer
            printMarksLayer.locked = true;
            printMarksLayer.printable = true;

        } else {
            alert("Hello Tahir Please input a valid numeric entry for grommet spacing.\nMust be a value greater than 0.")
        }
    } else if (grommetSpacing != null || grommetSpacing != ''){
        // Do nothing.
    } else {
        alert("Hello Tahir Please enter a valid entry.")
    }
}
else{    
    alert ("there are no open documents");    
}

1 Ответ

0 голосов
/ 14 мая 2019

Вы смешиваете Photoshop и Illustrator DOM: в Photoshop нет методов pathItems.ellipse или pathItems.rectangle.Проверьте Справочник по сценариям Photoshop , чтобы найти конкретные методы.Вы можете использовать этот фрагмент для создания прямоугольных или эллиптических контуров в Photoshop:

/**
 creates a new path or adds to an existing path
 example: createPath({
    addToPath: false, // will create a new path
    type: 'Rctn', //'Elps' for ellipse
    top: 50,
    left: 50,
    bottom: 150,
    right: 150
 })
 */
function createPath(data)
{
    if (data == undefined) return false;
    data.addToPath == undefined && data.addToPath = false;
    data.type == undefined && data.type = 'Rctn'; //'Elps';

    var desc10 = new ActionDescriptor();
    var ref4 = new ActionReference();
    if (data.addToPath)
        ref4.putEnumerated(cTID('Path'), cTID('Ordn'), cTID('Trgt'));
    else
        ref4.putProperty(cTID('Path'), cTID('WrPt'));


    desc10.putReference(cTID('null'), ref4);
    var desc11 = new ActionDescriptor();
    desc11.putUnitDouble(cTID('Top '), cTID('#Pxl'), data.top);
    desc11.putUnitDouble(cTID('Left'), cTID('#Pxl'), data.left);
    desc11.putUnitDouble(cTID('Btom'), cTID('#Pxl'), data.bottom);
    desc11.putUnitDouble(cTID('Rght'), cTID('#Pxl'), data.right);
    desc10.putObject(cTID('T   '), cTID(data.type), desc11);
    executeAction(cTID(data.addToPath ? 'AddT' : 'setd'), desc10, DialogModes.NO);

    function cTID(s)
    {
        return app.charIDToTypeID(s);
    };

    function sTID(s)
    {
        return app.stringIDToTypeID(s);
    };

}; // end of createPath()
...