Скрипт не видит слои svg файла

  • Автор темы Автор темы quux
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

quux

Участник
Топикстартер
Сообщения
33
Реакции
0
Добрый день.

Хочу скриптом перебрать слои svg файла. Скрипт получает только верхний слой. Почему скрипт не видит подслои?

Код:
f(app.activeDocument.layers.length>0)
    {
        for(var k=0; k<app.activeDocument.layers.length; k++)
        {
            strLayers+=(app.activeDocument.layers[k].name);
        }
    }
 
Попробовал так:

Код:
if(app.activeDocument.layers.length>0)
    {
        for(var k=0; k<app.activeDocument.layers.length; k++)
        {
            strLayers+=(app.activeDocument.layers[k].name+'\n');
            parLayer = app.activeDocument.layers[k];
            for(var d=0; d<parLayer.layers.length; d++)
            {
                strLayers+=(parLayer.layers[d].name+'\n');
                }
        }
    }

Все равно в svg файле не видит подслои. В eps формате все работает.
 
скриншот панели Layers можете показать?
 
А при чем тут svg? У вас обычный иллюстраторовский документ, неважно, каким способом полученный. Думаю, собака порылась вот в чем. У каждого слоя layer есть свойство layers, содержащее подслои. Получается бесконечно вложенная древовидная структура. У вас же первый скрипт обрабатывает только верхний уровень вложенности, а второй - верхние два уровня. А правильно делать не вложенные циклы, а рекурсивные вызовы. Тогда все подслои обрабатываться будут.
 
  • Спасибо
Реакции: Skvoznyak
А при чем тут svg? У вас обычный иллюстраторовский документ, неважно, каким способом полученный. Думаю, собака порылась вот в чем. У каждого слоя layer есть свойство layers, содержащее подслои. Получается бесконечно вложенная древовидная структура. У вас же первый скрипт обрабатывает только верхний уровень вложенности, а второй - верхние два уровня. А правильно делать не вложенные циклы, а рекурсивные вызовы. Тогда все подслои обрабатываться будут.


Однако же в eps скрипт показывает два уровня слоев (мне дальше по дереву слоев не нужно, только два уровня), а в svg только самый верхний уровень.
 
Разобрался. Все дело в том что при сохранении eps файла в svg формат необходимо ставить галочку в checkbox "Сохранять возможность редактирования в программе Illustrator". Тогда все слои останутся доступными.
 
а вот придет вам откуда-нибудь svg, который сохранили без этой галочки, и что делать?
 
Пока не понял что делать. Сохранял обратно в eps, естественно слои недоступны. Отлаживал в ExtendScript ToolKit, смотрел свойства документа и слоев, не нашел параметр который делает слои доступными. Скорее всего все сложнее, потому что файл сохраненный в svg с возможностью редактирования, по размеру в два раза отличается от файла без возможности редактирования.
 
а посмотреть, что там в слоях никак? :) панель Layers

MBK совершенно верно отметил, что работаете вы все равно с документом иллюстратора
 
  • Спасибо
Реакции: _MBK_
Вот именно. По умолчанию в SVG никаких иллюстраторовских слоев нету, а на нет и суда нет.
 
Вот именно. По умолчанию в SVG никаких иллюстраторовских слоев нету, а на нет и суда нет.


Если сохранить eps файл в svg с пометкой "Сохранять возможность редактирования в программе Illustrator", то все работает, только размер большой :) Буду скриптом работать в eps файле, а результат сохранять в svg/
 
Насколько я полагаю, при включении этой галочки, в файл просто иллюстраторовская копия добавляется.
 
  • Спасибо
Реакции: Skvoznyak
Структура слоев svg файла полностью соответствует структуре слоев eps файла.

чудес не бывает - было б одинаково, и работало бы одинаково
 
Статус
Закрыто для дальнейших ответов.