Цикл по точкам пути в Photoshop

#bezier #photoshop-script

#безье #photoshop-скрипт

Вопрос:

Я пытаюсь выполнить итерацию по пути создания в Photoshop, чтобы определить положение опорных точек и т. Д

 var srcDoc = app.activeDocument;

// create the array of PathPointInfo objects
var lineArray = new Array();
lineArray.push(new PathPointInfo());
lineArray[0].kind = PointKind.CORNERPOINT;
lineArray[0].anchor = new Array(20, 160);
lineArray[0].leftDirection =  [35, 200];
lineArray[0].rightDirection = lineArray[0].anchor;

lineArray.push(new PathPointInfo());
lineArray[1].kind = PointKind.CORNERPOINT;
lineArray[1].anchor = new Array(20, 40);
lineArray[1].leftDirection = lineArray[1].anchor;
lineArray[1].rightDirection =  [220, 260];

// create a SubPathInfo object, which holds the line array in its entireSubPath property.
var lineSubPathArray = new Array();
lineSubPathArray.push(new SubPathInfo());
lineSubPathArray[0].operation = ShapeOperation.SHAPEXOR;
lineSubPathArray[0].closed = false;
lineSubPathArray[0].entireSubPath = lineArray;

//create the path item, passing subpath to add method
var myPathItem = srcDoc.pathItems.add("A Line", lineSubPathArray);


for (var i = 0; i < lineSubPathArray[0].entireSubPath.length; i  )
 {
   var b = lineSubPathArray[0].entireSubPath[i].anchor;
   alert(b);
}
 

Это работает нормально, но вместо того, чтобы создавать путь и находить его информацию, я хочу перебирать каждый путь и получать то же самое. Это должно быть то же самое, что и цикл выше, только без явного вызова lineSubPathArray и его частей.

 for (var i = 0; i < srcDoc.pathItems[0].subPathItems.pathPoints.length; i  ) // wrong I think
{
  var b = srcDoc.pathItems[0].entireSubPath[i].anchor; // wrong
  alert(b);
}
 

Ответ №1:

Почти: вам нужно выполнить итерацию subPathItems , которая состоит из pathPoints :

   var srcDoc = activeDocument;
  var workPath = srcDoc.pathItems[0];
  var i, k, b;
  for (i = 0; i < workPath.subPathItems.length; i  ) {
      for (k = 0; k < workPath.subPathItems[i].pathPoints.length; k  ) {
          b = workPath.subPathItems[i].pathPoints[k].anchor;
          alert(b);
      }
  }
 

Комментарии:

1. app.activeDocument.pathItems[a].subPathItems[b].pathPoints[c].anchor; Это цепляет 🙂 Спасибо