แป้นพิมพ์ลัด“ เลือกไปข้างหน้า” - รวมเลเยอร์ที่มองไม่เห็น


1

เนื่องจากแป้นพิมพ์ที่ไม่ใช่ของฉันในสหรัฐอเมริกาฉันต้องทำการดำเนินการที่แมป "เลือกเลเยอร์เลเยอร์" กับปุ่ม F

อย่างไรก็ตาม "เลือกไปข้างหน้าเลเยอร์" ไม่ได้เลือกเลเยอร์ที่มองไม่เห็น

มีวิธีเลือกเลเยอร์ไปข้างหน้าแม้จะมองไม่เห็นหรือไม่?

คำตอบ:


0

สมมติว่าโดยเลเยอร์ไปข้างหน้าคุณหมายถึงเลเยอร์บนสุดคุณสามารถทำได้ด้วยสคริปต์อย่างง่าย เปิดชุดเครื่องมือ ExtendScript ของคุณ (ควรติดตั้งพร้อมกับ Photoshop) และสร้างเอกสาร Javascript ใหม่ จากนั้นป้อน:

var doc = app.activeDocument; //references current document
doc.activeLayer = doc.layers[0]; //selects the top layer

สิ่งนี้จะทำให้ชั้นบนสุดมองเห็นได้เมื่อถูกเลือก หากคุณไม่ต้องการซ่อนมันให้เพิ่มบรรทัดต่อไปนี้ในตอนท้าย:

doc.activeLayer.visible = false;

บันทึกไว้ในโฟลเดอร์ Presets / Scripts ของคุณเพื่อความสะดวก (แม้ว่าจะสามารถไปได้ทุกที่)

จากนั้นไปที่ Photoshop สร้างไฟล์ใหม่เริ่มบันทึกการกระทำใหม่จากนั้นไปที่ไฟล์> สคริปต์> เรียกดูและค้นหาสคริปต์ของคุณ เปิดมันทำงาน เมื่อทำงานแล้วให้หยุดการบันทึกและกำหนดปุ่มทางลัดให้กับการดำเนินการและ voila !

หากคุณไม่พบ ExtendScript Toolkit ไม่ว่าด้วยเหตุผลใดก็ตามให้ใส่รหัสในเอกสารข้อความเปล่าและเปลี่ยนนามสกุลเป็น. jsx หากคุณย้ายไฟล์สคริปต์หลังจากที่คุณบันทึกการกระทำคุณจะต้องบันทึกอีกครั้งในขณะที่มันจำเส้นทาง


โดย "ส่งต่อ" ฉันหมายถึงเลเยอร์ "ถัดไป" - มีวิธีในการเลือกสคริปต์เลเยอร์ "ถัดไป" หรือ "ก่อนหน้า" หรือไม่ การทำงานในตัวของ Photoshop ช่วยให้คุณสามารถเลือกเลเยอร์ถัดไปและก่อนหน้าได้อย่างไรก็ตามมันจะไม่สนใจเลเยอร์ที่มองไม่เห็น ฉันไม่ต้องการเปลี่ยนการมองเห็นของเลเยอร์ฉันแค่ต้องการที่จะเลือกพวกเขาโดยไม่คำนึงถึงการมองเห็น
timkl

0

ฉันสามารถทำได้โดยการปรับเปลี่ยนสคริปต์ที่พบในฟอรัม AHK เล็กน้อย (ซึ่งเลเยอร์เป้าหมายหนึ่งเปลี่ยนเลเยอร์เป้าหมายอย่างเห็นได้ชัดและมีข้อผิดพลาดเล็กน้อยอื่น ๆ ) และทำงานได้สำหรับฉัน:

var doc = app.activeDocument;
var currentLayer = doc.activeLayer;


for(i=0; i < doc.layers.length; )
{         
  if(doc.layers[i]==currentLayer)
  {
      a=i;
      //alert(a);
      i = doc.layers.length;
  }
  else{ i++; }
}


try
{
  var nextLayer = doc.layers[a+1];
  var check = nextLayer.visible;
}
catch(e)
{
  var nextLayer = doc.layers[0];
  var check = nextLayer.visible;
}  

doc.activeLayer = nextLayer;
if (check == false)
  doc.activeLayer.visible = false;

นี่เป็นการก้าวไปสู่เลเยอร์ถัดไป (ลง); สำหรับก่อนหน้า (ขึ้น) เพียงแค่สร้างสคริปต์อื่นที่มีการเปลี่ยนแปลง [a + 1] เป็น [a-1] ในส่วนลองและ [0] ถึง [doc.layers.length-1] ในส่วนของการจับ ในวิธีต่อไปนี้วิธีทั่วไป: วางสคริปต์ทั้งสองไว้ในโฟลเดอร์สคริปต์ Ps ทำการดำเนินการด้วย "แทรกรายการเมนู" และกำหนดปุ่มลัดตามที่คุณต้องการ คุณสามารถใช้งานได้แม้กระทั่งทางลัด AHK ที่คุณโปรดปรานเป็นต้น


0

นอกเหนือจากสคริปต์ด้านบนเล็กน้อย

หลังจากทดสอบผู้ที่อยู่ใน Ps ฉันได้พบกับความจริงที่ว่าถ้ามีกลุ่มในเวิร์กโฟลว์ปัจจุบันสคริปต์ทำงานไม่ถูกต้อง พวกเขาไม่ได้ใช้เลเยอร์บัญชีภายในกลุ่มหรือที่รู้จักกันว่าเลเยอร์ชุดในภาษาสคริปต์ เมื่อสคริปต์แสดงรายการผ่าน "เลเยอร์" สคริปต์จะจัดการเฉพาะองค์ประกอบระดับบน (เลเยอร์นอกกลุ่มและกลุ่มของตัวเอง)

ดังนั้นฉันจึงลองปรับให้เข้ากับความต้องการที่เพิ่มขึ้น

สคริปต์ที่แก้ไขด้านล่าง; พวกเขาสามารถจัดการเวิร์กโฟลว์อย่างถูกต้องด้วยเลเยอร์และกลุ่มระดับบนและองค์ประกอบที่ซ้อนกันในกลุ่มระดับบน ด้วยลำดับชั้นที่มากขึ้นพวกเขาก็จะทำงานเช่นกันหากเลเยอร์ที่ใช้งานไม่ใช่องค์ประกอบซ้อนกันสองครั้ง (มิฉะนั้น "ลง" - สคริปต์จะเปลี่ยนเป็นเลเยอร์บนสุดและ "up" - สคริปต์จะไม่ทำอะไรเลย) แต่ฉันไม่ค่อยจัดการกับกลุ่มที่ซ้อนกันมากกว่าหนึ่งครั้งและที่แย่ที่สุดก็สามารถคลิกเมาส์ที่ดีได้หากจำเป็น (การใช้แร่ทางลัด Alt + [/] ดั้งเดิมพวกเขายังคงทำงานบนเลเยอร์ที่ไม่ซ่อนอยู่ทั้งหมด

ขออภัยฉันไม่ได้เป็นโปรแกรมเมอร์ในตอนนี้รหัสเต็มรูปแบบทำงานได้ดีกว่าสมองของฉัน นอกจากนี้สคริปต์เหล่านี้ก็ค่อนข้างใหญ่เช่นกันฉันคิดว่า แต่พวกเขาทำงาน (ตัวอย่างเช่นฉันกำหนด "up" - จักรยานให้กับ F3, "down" - จักรยานถึง F4 และ "toggle-ทัศนวิสัย" - สคริปต์ที่ F2; สำหรับฉันชุดค่าผสมนี้ค่อนข้างมีประโยชน์และประหยัดเวลามาก)

"วงจรลง" -script

var doc = app.activeDocument;
var currentLayer = doc.activeLayer;
//===========
var gropp = doc.layerSets.length;
var docl = doc.layers.length;
var sublayer = 0;
//alert(gropp)
for (i=0; i < gropp;)
{
sublayer = sublayer + doc.layerSets[i].layers.length;
i++;
}
//==============
var a = -1
var kk = -1
var aa = -1
//если активный слой - элемент высшего порядка:
for(i=0; i<docl;)
{
  if(doc.layers[i]==currentLayer)
  {
     a=i;
     i = docl;
  }
  else{ i++;}
}
//если активный слой - элемент группы:
if (a<0)
{
  for (i=0; i<gropp;)
  {
     var subdocl = doc.layerSets[i].layers.length;
     for (k=0; k<subdocl;)
     {
       if(doc.layerSets[i].layers[k]==currentLayer)
       {
          aa = i;
          kk = k;
          k = doc.layerSets[i].layers.length;
          i = gropp-1;
       }
       else { k++; }
      }
     i++;
  }
}
//ACTIVATING
//если активный слой - слой высшего порядка:
if (kk<0)
{
    //если активный слой - группа (т.е. нижележ. слой - внутри её):
    for (i=0; i<gropp;)
    {
        if (doc.layerSets[i] == currentLayer)
        {
            var nLayer = doc.layerSets[i].layers[0];
            var check = nLayer.visible;
            doc.activeLayer = nLayer;
            var isGroup = true;
            var isActived = true;
            if (check == false)
            doc.activeLayer.visible = false;
            i = gropp;
        }
        else {i++;}
    }
    //если активный слой - простой слой (будет обрабатываться в try-catch):
    if (isGroup != true)
    {
        for (i=0; i<docl;)
        {
            if (doc.layers[i]==currentLayer)
            {
                numm = i;
                i=docl;
            }
            else {i++;}
        }
    }
}
else
//(если активный слой - подобъект (элемент группы), т.е. известны (неотриц.) aa и kk:
{
    //если элемент группы - последний в ней (будет обрабатываться в try-catch):
    if (kk == subdocl-1)
    {
        for (i=0; i<docl;)
        {
            if (doc.layers[i] == doc.layerSets[aa])
            {
                numm = i;
                i = docl;
            }
            else {i++;}
        }
    }
    //если не последний в группе, то проще:
    else
    {
        var nLayer = doc.layerSets[aa].layers[kk+1];
        var check = nLayer.visible;
        doc.activeLayer = nLayer;
        var isActived = true;
        if (check == false)
        doc.activeLayer.visible = false;
    }
}

//try-catch секция для последних вариантов (самых нижних слоёв):
try
{
    //alert ("isActived is " + isActived)
    if (isActived != true)
    {
        var nLayer = doc.layers[numm+1];
        var check = nLayer.visible;
        doc.activeLayer = nLayer;
        if (check == false)
        doc.activeLayer.visible = false;
    }
}
catch(e)
{
  var nLayer = doc.layers[0];
  var check = nLayer.visible;
  doc.activeLayer = nLayer;
  if (check == false)
  doc.activeLayer.visible = false;
} 

สคริปต์ "วนรอบ"

var doc = app.activeDocument;
var currentLayer = doc.activeLayer;

var gropp = doc.layerSets.length;
var docl = doc.layers.length;

var a = -1
var kk = -1
var aa = -1

//если активный слой - элемент высшего порядка:
for(i=0; i<docl;)
{
  if(doc.layers[i]==currentLayer)
  {
     a=i;
     i = docl;
  }
  else{ i++;}
}

//если активный слой - элемент группы:
if (a<0)
{
  for (i=0; i<gropp;)
  {
     var subdocl = doc.layerSets[i].layers.length;
     for (k=0; k<subdocl;)
     {
       if(doc.layerSets[i].layers[k]==currentLayer)
       {
          aa = i;
          kk = k;
          k = doc.layerSets[i].layers.length;
          //модернизируем скрипт: вносим сразу в этот цикл обработку активизации.
            //если элемент группы - первый в ней (активизируем саму группу - гипероним):
          if (kk==0)
          {
              var pLayer = doc.layerSets[i];
              var check = pLayer.visible;
              doc.activeLayer = pLayer;
              //var isGroup = true;
              var isActived = true;
              if (check == false)
              doc.activeLayer.visible = false;
          }
            //если не первый, то просто слой вверх:
          else
          {
              var pLayer = doc.layerSets[i].layers[kk-1];
              var check = pLayer.visible;
              doc.activeLayer = pLayer;
              var isActived = true;
              if (check == false)
              doc.activeLayer.visible = false;
          }
          i = gropp-1;
       }
       else { k++; }
     }
     i++;
  }
}
//если активный слой - высший элемент; нам известно (неотриц) a:
else
{
    if (a==0)
    a=docl;
    for (i=0; i<gropp;)
    {
        //если предыдущий слой - последний элемент находящейся выше группы:
        if (doc.layerSets[i] == doc.layers[a-1])
        {
            var subdocl = doc.layerSets[i].layers.length;
            var pLayer = doc.layerSets[i].layers[subdocl-1];
            var check = pLayer.visible;
            doc.activeLayer = pLayer;
            var isActived = true;
            if (check == false)
            doc.activeLayer.visible = false;
            i = gropp;
        }
        else {i++;}
    }
    if (isActived != true)
    {
        var pLayer = doc.layers[a-1];
        var check = pLayer.visible;
        doc.activeLayer = pLayer;
        if (check == false)
        doc.activeLayer.visible = false;
    }
}

"โบนัส" - "สลับการมองเห็น" - สคริปต์

var currentLayer = activeDocument.activeLayer;
currentLayer.visible = !currentLayer.visible

หมายเหตุ: บันทึกเป็นไฟล์ * .jsx และใส่ C: \ Program Files \ Adobe \% โฟลเดอร์เวอร์ชัน Adobe% \ Presets \ Scripts ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.