Что делать с тормозами в инкскейп.....
Короткое вступление ( или корень проблемы).
Я уже упоминал о том, что основной проблемой медлительности программы при работе с иллюстрацией насыщенной объектами является (рендеринг) попросту говоря отрисовка (по крайней мере так обстоят дела на сегодняшний момент). Много хорошего в этом плане обещают в версии 0,49 (которая напомню выйдет этой зимой (хотя точная дата неизвестна))
а судя по отчетам разработчиков портирование на CAIRO уже законченно и остальное будет сделано в ближайшее время. Короче ждемс....
…... А пока …..
Часть 1. «Слои»
Ну про слои то мы знаем...Воскликнет добрая половина читателей. Знаете? Боюсь что не все.
По крайней мере это касается инкскейпа. Немного теории. В инкскейпе нет слоев. Их нет в том привычном виде, точнее сказать в той реализации как в других программах. Дело вот в чем, программа использует в качестве рабочего файла SVG. И структура svg не содержит слоев как таковых. Так как же тогда программа позволяет работать со слоями..? Все достаточно просто SVG позволяет делать группы , а «хитрец» инкскейп их просто по своему «метит» (и соответственно обрабатывает как слои). Какое это отношение имеет к нашему вопросу будет рассказано ниже.....
Учитывая этот факт я организовал работу следующим образам....
Сейчас попробую объяснить на абстрактном примере. Допустим нам нужно создать иллюстрацию на которой будет изображено следующее. Окружение в виде фона состоящего из неба, леса, домика. И человека соответственно в это все вписанного. По логике вещей нам нужно всего два слоя в данной иллюстрации, а именно фон и человек. Так и поступим создав два как бы корневых (или основных) слоя. Создавая новые слои в программе можно обратить внимание на строку положение. В ней помимо выбора над слоем и под слоем присутствует позиция внутри (внутри слоя). Вот она как раз нас и интересует. То есть слой может быть встроен в другой слой. Так можно встраивать не один слои, а столько сколько угодно. Таким образом можно скажем человека разделить на голову туловище и одежду (имеется ввиду субслои (слой в слое). Если изображение человека крупное и насыщено деталями то субслоев может быть намного больше (глаза, волосы и т.*д.). Вообщем этот вопрос остается полностью на усмотрение создающего иллюстрацию. Субслои подчиняются корневому слою (в который встроены но так же могут управляться и самостоятельно. По мимо того что создание иллюстрации упрощается за счет удобства в работе слои можно двигать между собой (меняя Z-порядок) отключать,блокировать это позволит контролировать производительность. Еще немного теории. Во время рендера инкскейп действует следующим образом он сканирует все объекты находящиеся на поверхности холста (в активном состоянии), а потом выбирает те которые нужно отобразить на экране (соответственно чем больше объектов тем дольше происходит этот процесс.). Скажем рисуя глаза нам же совершенно не нужно отображение ботинок на экране в это время (да мы их вообще не можем увидеть так как масштаб сосредоточен на лице, то мы просто отключаем ненужные слои. Таким образом сокращается время обработки и повышается отклик программы. А что же потом делать с этим многоСЛОЙНЫМ «пирогом» невольно возникает вопрос. Ответ очень прост ничего!. Я не зря упоминал структуру SVG в начале этой части. Когда закончена работа над иллюстрацией. Сохраняем ее в SVG и открываем иллюстратор для экспорта в EPS. Обратившись в последнем ко вкладке слоев мы увидим что структура документа не изменилась утратились только названия слоев. Дальше делаем следующее создаем два слоя (относительно примера приведенного выше) и перетаскиваем те основные два слоя созданные в икскейпе прямо в новые созданные слои «иллюстратора» (слой SVG и соответственно все что в нем осталось удаляем) закрываем вкладку слои, сохраняем в EPS. Снова открываем только что созданный EPS, открываем вкладку слои и видим...... Два слоя созданных в «иллюстраторе» и все... Все слои инкскейпа превратились в обычные группы. То есть был у нас субслой голова стала группа содержащая объекты которые входили в данный слой.

Подведя итог можно сказать следующее. Создание многослойного документа в инкскейп более чем оправданно. Организовав работу выше описанным способом мы (догоняем и ловим сразу нескольких зайцев) получаем сразу ряд плюсов.
1.Документом легко управлять во время создания иллюстрации (под ногами не чего не мешается).
2.Можно контролировать падение производительности при увеличении количества объектов
3.Для удобства мы можем присваивать «фривольные названия» нашим слоям-группам.
4.Привидение документа согласно нашей концепции ( в вид удобный конечному пользователю) не составляет ни какого труда, а если сказать больше файл будет нести более четкую структуру. (вы ни когда не забудете сгруппировать объекты по их смысловому содержанию).
5. Имеем повод лишний раз убедиться как недостатки легко перевести в достоинства если быть внимательным к деталям.....
Часть.2 «По мелочам»
Есть еще ряд моментов которые в той или иной мере позволяют обойти проблему производительности.
1. Отключаем следящую отрисовку редактирования узлов (настройки-узлы-обновлять контуры при перемещении узлов). При редактировании узлов будем теперь видеть абрис как в «иллюстраторе», а только в конце фигура-контур будет обновляться.
2. Стараемся не выходить за 300-500 узлов в контуре который будем интенсивно править. Программа по всей видимости обрабатывает контур целиком чем больше он содержит узлов тем медлительней процесс.
3. Можно воспользоваться опцией «дублировать окно». Один документ будет открыт в разных окнах икскейпа. Там может быть задан разный масштаб, открыты разные панели с инструментами. Иногда очень удобно работать над рисунком (переключение cnrl-Tab (искать в меню «вид»)
4. Иногда я обрабатываю куски иллюстрации или сложные контура в отдельном окне (документе). Понятно что скорость обработки в почти пустом документе высокая. Пришел к такому методу я совсем по другой причине. Просто не хотел тратить время на очистку рабочего документа от мусора. Который иногда в больших количествах появляется в следствии некоторых операций над контурами. Вычещать потом рисунок от векторных обрезков мне совсем не хотелось (ибо иногда очень хлопотно), то я и стал использовать подобный метод работе. Команда «Вставить на место» позволяет обменивать данные между документами последствием буфера с высокой точностью. Поэтому можно забирать контура из рисунка,править, и вставлять на тоже место (абсолютно «чистыми»). Так иногда и работаю перебрасывая между документами куски иллюстраций собирая в один «чистовой» рисунок потом все это хозяйство....
При данной методике бывает полезна опция сделать растровую копию (меню правка, alt-B). Выделив нужные объекты выполняем данную команду, и получаем поверх рисунка растровый кусок с данными контурами который можно перебросить в другой документ и рисовать поверх него в векторе. Потом его удалить а векторный рисунок вернуть обратно в основную иллюстрацию на тоже место.
Выше описанная организация работы позволяет мне почти не чувствовать медлительность программы при создании сложных иллюстраций. Так же к плюсам можно отнести порядок который данный метод позволяет поддерживать во время рисования, что в целом сказывается и на скорости и на качестве (потерянные контура под массой объектов, случайные точки и ненужные векторные «огрызки» и т.д.)
Приятной работы....
