[AI CC-CC2021] Сортировка объектов по шаблону.

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
а то что в исходном массиве элементы расположены хаотично не смущает? Для начала его нужно по zIndex отсортировать
эта задача уже решена, всё отсортировано, оставалось подвинуть каждый n-элемент, что тоже уже сделано.
Думаю, можно задать нужный порядок сортировки в самом начале, без дополнительной сортировки, надо попробовать.
Передо мной стоит задача определить все элементы в мозаике кусками 4 х 4 элемента и дальше по коду...
Определить именно рисунок - если кусок из квадратов 4х4 похож на букву "Г", то делаем одно, если похож на "L", то другое. Похоже на распознавание текста по заданному шаблону, только примитивнее и там не текст, а простые узоры.
Всем спасибо.
Хотелось бы услышать, у всех ли работает сортировка из поста #12, с которыми у меня возникли глюки ?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844
Вы имеете в виду код
Код:
 for (k = 0; k < mSel.length; k++) // SELECTION - код НИЧЕГО не делает
    {
        mSel[k].zOrder(ZOrderMethod.SENDBACKWARD);  // BACKWARD
    }
?
Если выделено больше одного объекта - не работает
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844
Если выделено больше одного объекта - не работает
А впрочем, нет, все зависит от того, какие объекты выделены.
Я начинаю думать, что корень проблемы не в изменении порядка объектов а в глюкавости самого метода zorder.
Давайте определимся - что именно данный кусок делать должен?
По идее, если все объекты выделены, то данное действие и ничего делать не должно - порядок следования объектов внутри выделения сохраняется и после отработки данного кода не так ли?
Требуется сдвинуть их все относительно окружающих невыделенных объектов? Для чего?
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Вы имеете в виду код
Код:
 for (k = 0; k < mSel.length; k++) // SELECTION - код НИЧЕГО не делает
    {
        mSel[k].zOrder(ZOrderMethod.SENDBACKWARD);  // BACKWARD
    }
?
Если выделено больше одного объекта - не работает
Имею ввиду все 4 примера, которые коряво работают. Код должен каждый выделенный объект смещать на 1 индекс в слое - либо вверх, либо вниз. Данные 4е примера созданы для теста метода zOrder - с выделением и с перебором всех paths.
Время от времени, рабочий код у меня перестаёт корректно работать, пока не перегружу extendtoolscript. Переменные сохраняются в кэше и влияют на подправленный код в дальнейшем, довольно часто такое бывает. Надо будет попробовать каждый пример с перезагрузкой Extendtool'а.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844
Как вариант - плюньте на zorder, создавайте новый слой, в который последовательно перекидывайте элементы в нужном порядке.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Конечное решение для сортировки получилось таким:

PHP:
var aDoc = app.activeDocument;
var mSel = aDoc.selection;
var paths = aDoc.pathItems;

for (s = 0; s < 4; s++)  // кол-во групп в строке (1 группа = 4 объекта), т.е. 16 объектов в строке
{
m = s * 4;
    for (k = m; k < paths.length-1; k++)
    {
        for (i = 0; i < 4; i++)  // берём по 4е элемента
        {
        mSel[k].zOrder(ZOrderMethod.BRINGTOFRONT);
        k = k + 1;
        }
    k = k + 11; // шагаем через 16 элементов
    }
}
 
Последнее редактирование: