[AI CC2024] Найти размеры выделенных объектов и вывести их в текст

lmn1

Топикстартер
20 лет на форуме
Сообщения
585
Реакции
266
Пытаюсь заставить ИИ написать мне скрипт. Скрипт должен определить размеры выделенных объектов и выдать панельку, в которой дать выбор, как эти размеры выводить в текст: в одну строку, в одну колонку (один размер - одна строка), или рядом с объектом. ИИ радостно пишет, но скрипт не работает. Я его запускаю, панелька появляется и сразу пропадает. ИИ на мое недовольство снова пишет тот же скрипт.
Я решил, что коллективный разум или ЕИ (естественный интеллект) быстрее справятся. Где тут ошибка?
Код:
#target illustrator

// Создаем панель
var win = new Window("palette", "Размеры объектов", undefined);
win.orientation = "column";

// Добавляем чек-боксы
var checkbox1 = win.add("checkbox", undefined, "Текст в одну строку");
var checkbox2 = win.add("checkbox", undefined, "Текст в одну колонку");
var checkbox3 = win.add("checkbox", undefined, "Текст возле каждого объекта");

// Добавляем кнопку
var runButton = win.add("button", undefined, "Запустить");

// Функция для форматирования размера
function formatSize(size) {
    var roundedSize = Math.round(size * 10) / 10;
    return (roundedSize % 1 === 0) ? roundedSize.toFixed(0) : roundedSize.toFixed(1);
}

// Обработчик нажатия кнопки
runButton.onClick = function() {
    var doc = app.activeDocument;

    if (doc.selection.length > 0) {
        var allSizes = [];

        for (var i = 0; i < doc.selection.length; i++) {
            var selectedItem = doc.selection[i];

            var widthPx = selectedItem.width;
            var heightPx = selectedItem.height;

            var widthMm = widthPx * 0.352777;
            var heightMm = heightPx * 0.352777;

            var formattedWidth = formatSize(widthMm);
            var formattedHeight = formatSize(heightMm);

            if (checkbox3.value) {
                var textItem = doc.textFrames.add();
                textItem.contents = formattedWidth + " мм х " + formattedHeight + " мм";
                textItem.position = [selectedItem.position[0], selectedItem.position[1] - 20];
            }

            allSizes.push(formattedWidth + " х " + formattedHeight);
        }

        if (checkbox1.value) {
            var allSizesTextItem = doc.textFrames.add();
            allSizesTextItem.contents = allSizes.join("; ");
            allSizesTextItem.position = [50, 50];
        }

        if (checkbox2.value) {
            var allSizesTextItem = doc.textFrames.add();
            allSizesTextItem.contents = allSizes.join("\n");
            allSizesTextItem.position = [100, 50];
        }
    } else {
        alert("Нет выделенных объектов.");
    }
};

// Показываем панель
win.center();
win.show();
 
Предлагаю законодательно закрепить на форуме запрет анализа тупорылых текстов от роботов, а задавших подобный вопрос отдавать в рабство терминатору банить на полгода.
 
замените "palette" на "dialog"

окно исчезать не будет, но остальное вряд ли будет работать так как вы задумали.
 
Последнее редактирование:
  • Спасибо
  • Огонь
Реакции: Drawer и lmn1
Чего сразу банить-то? Анализ тупорылых текстов от роботов - это ведь один из способов обучения.
А с заменой "palette" на "dialog" скрипт начал работать. Пусть не идеально, но то, что мне нужно, делает. Сам я бы такое не написал. Подправить только расположение надписей надо.
Скрипт мне нужен для простых векторных объектов, так что маски и другие подводные камни не страшны.
1734705064751.png
 
Через Ж но работает :) Размер без учета обводки.
Мне именно без обводки и надо. Скрипт нужен для подписи размеров этикеток на монтаже и рядом с монтажом.
Через Ж - да, наверное, но я в скриптописании не разбираюсь, и сам такой скрипт не написал бы. А на просторах ничего похожего не нашел.
 
  • Спасибо
Реакции: Flame