[AI CC-CC2022] Скрипт для замены одних объектов другими

Ant-3

Участник
Топикстартер
Сообщения
81
Реакции
2
Доброго дня!
Искал скрипт для массовой замены одних объектов другими объектами для иллюстратора. Нашел хороший на официальном форме adobe community , понравилось, что есть рандомизатор и объект вставляется по размеру заменяемого объекта, вот этот скрипт:
Код:
var n = prompt("", 8, "No. of items to randomly replace tiles:");
for (var i = app.selection.length - 1; i > n - 1; i--) {
    var pos = app.selection[i].position,
    w = app.selection[i].width,
    h = app.selection[i].height;
    app.selection[i].remove();
    var index = Math.floor(Math.random() * n);
    var duple = app.selection[index].duplicate(app.activeDocument, ElementPlacement.PLACEATEND);
    duple.position = pos;
    duple.width = w;
    duple.height = h;
}

B.png


Но в данном виде скрипт работает не так, как хотелось.
Проблема в том, что он может не задействовать один из объектов замены (отметил красный квадрат на скриншоте ниже) или может использовать один и тот же объект два или более раз (отметил два синих квадрата на скриншоте ниже) :

кркцооцк (1).png



Может быть кто-то знает, что нужно исправить в скрипте, чтобы данная проблема не возникала? Автор скрипта на форуме adobe community упомянул, что это довольно простой по структуре скрипт. Заранее благодарю!
 
понравилось, что есть рандомизатор
При этом жалуетесь что
что он может не задействовать один из объектов замены
?
Тогда рандомизатор надо сделать менее рандомныи и это будет уже не рандомизатор :) При достаточно большой выборке элементов эта проблема как бы сама исчезнет:)
 
Последнее редактирование:
Можно чуть развернуть логику.
Сейчас меняются все объекты на случайный из набора, а можно менять случайный объект на очередной из набора. Т.е. будут задействованы все объекты для замены. Надеюсь не путанно написал.
 
Дык убирать объект из набора/списка для замен после его обработки. Тем более, он физически удаляется даже в текущем коде.
 
Можно чуть развернуть логику.
Сейчас меняются все объекты на случайный из набора, а можно менять случайный объект на очередной из набора. Т.е. будут задействованы все объекты для замены. Надеюсь не путанно написал.
1-тест.png




2-тест.png
 
И чего у меня не так?
Берём случайный объект из меняемых, меняем на первый из набора для подстановки, объект удаляется
берём случайным образом следующий объект, меняем на второй
при исчерпании объектов для подстановки, начинаем брать их заново
делаем, пока есть объекты для замены.
 
И чего у меня не так?
Берём случайный объект из меняемых, меняем на первый из набора для подстановки, объект удаляется
берём случайным образом следующий объект, меняем на второй
при исчерпании объектов для подстановки, начинаем брать их заново
делаем, пока есть объекты для замены.
мне нужно сразу 100-150 объектов минимум заменять, для этого поштучное нажатие скрипта не подойдет
 
Вы с ума сошли?
Я с ума сошел?
Лыжи не едут?

Из темы устраняюсь.
 
Последнее редактирование:
Я тоже нихрена не понял, но из картинки вангую, что вам нужно два скрипта - первый для замены, второй для перемешивания - так?
 
ну давайте уже тогда перепоставим задачу: нужен не рандомный заменитель, а статистически равномерный перемешанный. Так, имхо, будет понятнее. Это потому исходный скрипт не подходит - задача другая
 
  • Спасибо
Реакции: Gad
ну давайте уже тогда перепоставим задачу: нужен не рандомный заменитель, а статистически равномерный перемешанный. Так, имхо, будет понятнее. Это потому исходный скрипт не подходит - задача другая
Собственно Лев такой алгоритм и предложил :)
 
Так бы сразу и сказали
Подумаешь бином Ньютона, вместо




var index = Math.floor(Math.random() * n);

поставьте

var index=i%n;
 
  • Спасибо
Реакции: Gene
Так бы сразу и сказали
Подумаешь бином Ньютона, вместо




var index = Math.floor(Math.random() * n);

поставьте

var index=i%n;
Это работает, спасибо большое! Прошу меня извинить за вероятно не самое точное изначальное описание проблемы. Слабо разбираюсь в теме скриптов