Перемещение выделения относительно текущей позиции

Я хотел бы переместить выделение, которое я сделал через весь документ, на его ширину (var x2) относительно его текущей позиции. Кажется, в более ранних версиях была функция перевода, которая делала именно то, что я хочу, но теперь эта функция выдает ошибку «вероятно, не поддерживается в этой версии Photoshop». Я работаю в Photoshop Extended CS6. У меня такой выбор:

 var x2 = 720;
 var y2 = 350;

  docRef.selection.select(Array (Array(0, 0), Array(x2, 0), Array(x2, y2), Array(0, y2)));

Я попытался составить уравнение для этого, но все, что я получил, — это выборка мусора, которая даже больше не прямоугольная.


person timonsku    schedule 20.11.2012    source источник


Ответы (2)


Я думаю, что перевод (в более ранних версиях) не работает или уже устарел, так как он основан на точках, а не на пикселях. 1 точка = 4,86127 пикселей.

Я обычно использую эту функцию для получения прямоугольного или эллиптического выделения. Я нахожу это проще, чем определять четыре предела (верхний, левый, правый, нижний), а не четыре набора координат x и y каждый раз.

    selectThis(10, 10, 90, 90, "rect")

// function selectThis (top, left, right, bottom, ellipse or rect [default], antialias [default] )
// ----------------------------------------------------------------------------
function selectThis(top, left, right, bottom, shape, aa)
{
    srcDoc.selection.deselect()
    // =======================================================
    var id1 = charIDToTypeID( "setd" );
    var desc1 = new ActionDescriptor();
    var id2 = charIDToTypeID( "null" );
    var ref1 = new ActionReference();
    var id3 = charIDToTypeID( "Chnl" );
    var id4 = charIDToTypeID( "fsel" );
    ref1.putProperty( id3, id4 );
    desc1.putReference( id2, ref1 );
    var id5 = charIDToTypeID( "T   " );
    var desc2 = new ActionDescriptor();
    var id6 = charIDToTypeID( "Top " );
    var id7 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id6, id7, top );
    var id8 = charIDToTypeID( "Left" );
    var id9 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id8, id9, left );
    var id10 = charIDToTypeID( "Btom" );
    var id11 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id10, id11, bottom );
    var id12 = charIDToTypeID( "Rght" );
    var id13 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id12, id13, right );


    if (shape == "Elps" || shape == "oval")
    {
        var id14 = charIDToTypeID( "Elps" );
        desc1.putObject( id5, id14, desc2 );
        var id15 = charIDToTypeID( "AntA" );
        if (aa == true || aa == undefined)
        {
            desc1.putBoolean( id15, true );
        }
        else
        {
            desc1.putBoolean( id15, false );
        }
    }
    else
    {
        var id16 = charIDToTypeID( "Rctn" );
        desc1.putObject( id5, id16, desc2 );
    }

    executeAction( id1, desc1, DialogModes.NO );
}

Надеюсь, это полезно.

person Ghoul Fool    schedule 21.11.2012

Неважно, это очень просто, я думаю, у меня был узел в голове.

Это отлично работает:

 var offset = 720;   
 var x2 = 720+offset;
  var y2 = 350;

  docRef.selection.select(Array (Array(0+offset, 0), Array(x2,0), Array(x2, y2), Array(0+offset, y2)));
person timonsku    schedule 20.11.2012