2015-01-28 2 views
0

Я пытаюсь написать сценарий (потому что я не могу найти тот, который работает), который будет экспортировать все мои отдельные слои, пути и т. Д. В прозрачные png-файлы. Я видел много скриптов, но все они не экспортируют все слои и т. Д. Они, похоже, просто пытаются экспортировать родительские слои. Поэтому, если есть подслои, они пропущены.Illustrator ExtendScript пути скрытия

Вот мой сценарий:

var doc = app.activeDocument; 
var counter = 0; 

hideOrShowItems(doc, false); 
// processLayers(doc); 
// displayLayer(doc, true); 

function hideOrShowItems(root, show) { 
    for(var i = 0; i < root.layers.length; i++) { 
     var layer = root.layers[i]; 
     var pathCount = layer.pathItems.length; 
     var layerCount = layer.layers.length; 

     if (pathCount > 0) { 
      hideOrShowPaths(layer, show); 
     } 

     if (layerCount > 0) { 
      hideOrShowItems(layer, show); 
     } 

     layer.visible = show; 
    } 
} 

function hideOrShowPaths(root, show) { 
    for(var i = 0; i < root.pathItems.length; i++) { 
     root.pathItems[i].visible = show; 
    } 
} 

// -- Removed for brievety 

Когда я запускаю сценарий, единственное, что получает скрыт это верхний слой

enter image description here

Все остальные нетронуты. Я положил счетчик в и сделал counter ++ в цикле for hideOrShowPaths и он насчитывает 246, поэтому я знаю, что он может видеть пути и на самом деле пытается скрыть их, но они остаются видимыми.

Кто-нибудь сделал это раньше? Могу ли я скрыть пути, группы, клипы и экспортировать их все как png? или я должен сделать это вручную?

ответ

2

Похоже, что вы ищите флаг hidden не visible.

var doc = app.activeDocument; 
var root = doc.layers[0]; 
// just for testing purpose. Change the color 
var newRGBColor = new RGBColor(); 
newRGBColor.red = 255; 
newRGBColor.green = 255; 
newRGBColor.blue = 255; 
// make all items hidden 
for (var i = 0; i < root.pathItems.length; i++) { 
    var item = root.pathItems[i]; 
    item.hidden = true; 
    item.fillColor = newRGBColor; // just for testing 
} 
// now loop all pathItems 
for (var i = 0; i < root.pathItems.length; i++) { 
    var item = root.pathItems[i]; 
    item.hidden = !item.hidden; //make one visible 
    // export visible part 
    redraw(); 
    item.hidden = !item.hidden; // hide it again 
} 

В вашем сценарии вам нужно будет скрывать каждый элемент, а затем отобразите один, экспорт и скрыть его снова. Надеюсь, что этот сниппет поможет с вашей проблемой

Смежные вопросы