[AI CC2024] Не подскажете как раскрасить объект в 20% registration?

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Что то не получается покрасить в 20% Registration

Вот такой код
Код:
var swatch = doc.swatches[i];
                    $.writeln(tab+"--- Swatch " + (i+1) + ":");
                    $.writeln(tab+"---  Name: " + swatch.name);
                    $.writeln(tab+"---  Color Type: " + swatch.colorType);
                    $.writeln(tab+"---  Color Value: " + swatch.colorValue)
                    $.writeln(tab+"---  Color Tint: " + swatch.tint)
Swatch 2:
Name: [Registration]
Color Type: undefined
Color Value: undefined
Color Tint: undefined
Следом код
Код:
var registrationColor = doc.swatches.getByName("[Registration]");
registrationColor.tint = railTint;
$.writeln (registrationColor.tint = '+registrationColor.tint)
выдает
registrationColor.tint = 20

И тем не менее объект не перекрашивается
maxobj.fillColor = registrationColor
Что я делаю неправильно?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 435
Реакции
10 897

Drawer

Участник
Сообщения
2 098
Реакции
930

Chiga

20 лет на форуме
Сообщения
880
Реакции
558
Или так?

var registrationColor = doc.swatches.getByName("[Registration]").color;
 
  • Спасибо
Реакции: Drawer

creold

Сергей Осокин
Сообщения
41
Реакции
65
Отступление. Имя [Registration] зависит от локализации Иллюстратора. Ненадежный метод, если писать не только под версию Иллюстратора на своем компьютере. Альтернативное решение: циклом FOR проходить по спотам документа, проверяя тип этого спота

JavaScript:
var regSpot;
for (var i = 0; i < app.activeDocument.spots.length; i++) {
    if (app.activeDocument.spots[i].colorType === ColorModel.REGISTRATION) {
        regSpot = app.activeDocument.spots[i];
    }
}
 

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Отступление. Имя [Registration] зависит от локализации Иллюстратора. Ненадежный метод, если писать не только под версию Иллюстратора на своем компьютере. Альтернативное решение: циклом FOR проходить по спотам документа, проверяя тип этого спота

JavaScript:
var regSpot;
for (var i = 0; i < app.activeDocument.spots.length; i++) {
    if (app.activeDocument.spots[i].colorType === ColorModel.REGISTRATION) {
        regSpot = app.activeDocument.spots[i];
    }
}
Переписал так. Только как сделать, чтобы объект покрасить в registration 20%, а не 100%. Ну или хотя бы изменить registration на 20%
 

creold

Сергей Осокин
Сообщения
41
Реакции
65
Уже выше отвечали правильно. Если суммировать все ответы в общий код, то может быть такой вариант решения.
JavaScript:
var doc = app.activeDocument;
var regSpotName = '[Registration]'; // По умолчанию в англ версии

// Находим точное имя спота независимо от локализации
for (var i = 0; i < doc.spots.length; i++) {
    if (doc.spots[i].colorType === ColorModel.REGISTRATION) {
        regSpotName = doc.spots[i].name;
    }
}

try {
    // Пробуем получить свотч по найденному имени
    var regSwatch = doc.swatches.getByName(regSpotName).color;
    maxobj.fillColor = regSwatch; // Сначала красим объект в 100% спот
    maxobj.fillColor.tint = 20; // Только потом меняем тинт
} catch (err) {
    // Перехват ошибок. Если не сработал swatches.getByName(), чтобы скрипт не прервал свое выполнение
}
 
Последнее редактирование:

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Даст возможность сделать
registrationColor.tint = 20;
Ну вот я сделал так:
Код:
for (var i = 0; i < doc.swatches.length; i++)
                    {
                    var swatch = doc.swatches[i];
                    $.writeln(tab+"--- Swatch " + (i+1) + ":");
                    $.writeln(tab+"---  Name: " + swatch.name);
                    $.writeln(tab+"---  Color Type: " + swatch.colorType);
                    $.writeln(tab+"---  Color Value: " + swatch.colorValue)
                    $.writeln(tab+"---  Color Tint: " + swatch.tint);
                    }
                    
                    var registrationColor;
                    for (var i = 0; i < doc.spots.length; i++)
                    {
                        if (doc.spots[i].colorType === ColorModel.REGISTRATION)
                        {
                            registrationColor = doc.spots[i].color;
                        }
                    }
                    $.writeln (tab+'--- registrationColor = '+registrationColor)
                    registrationColor.tint = railTint;
                    $.writeln (tab+'--- registrationColor.tint = '+registrationColor.tint)

                    // Устанавливаем цвет объекта
                    maxobj.fillColor = registrationColor;

В консоли он мне написал:
. --- Color Value: undefined
. --- Color Tint: undefined
. --- Swatch 2:
. --- Name: [Registration]
. --- Color Type: undefined
. --- Color Value: undefined
. --- Color Tint: undefined
. --- registrationColor = [CMYKColor]
. --- registrationColor.tint = 20

А вот объект не стал 20% регистрэйшеном
 

Drawer

Участник
Сообщения
2 098
Реакции
930

Chiga

20 лет на форуме
Сообщения
880
Реакции
558
объект не стал 20% регистрэйшеном
Проверил. У меня так работает
Код:
var registrationColor = app.activeDocument.swatches.getByName("[Registration]").color;
registrationColor.tint = 20;
app.activeDocument.pageItems[0].fillColor = registrationColor;
1723020763242.png
 
Последнее редактирование:

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Уже выше отвечали правильно. Если суммировать все ответы в общий код, то может быть такой вариант решения.
JavaScript:
var doc = app.activeDocument;
var regSpotName = '[Registration]'; // По умолчанию в англ версии

// Находим точное имя спота независимо от локализации
for (var i = 0; i < doc.spots.length; i++) {
    if (doc.spots[i].colorType === ColorModel.REGISTRATION) {
        regSpotName = doc.spots[i].name;
    }
}

try {
    // Пробуем получить свотч по найденному имени
    var regSwatch = doc.swatches.getByName(regSpotName).color;
    maxobj.fillColor = regSwatch; // Сначала красим объект в 100% спот
    maxobj.fillColor.tint = 20; // Только потом меняем тинт
} catch (err) {
    // Перехват ошибок. Если не сработал swatches.getByName(), чтобы скрипт не прервал свое выполнение
}
А то что он у меня вначале про Registration пишет, что
Swatch 2:
. --- Name: [Registration]
. --- Color Type: undefined
. --- Color Value: undefined
. --- Color Tint: undefined
не имеет значения?
У меня как бы объект изначально покрашен в 100% Registration по умолчанию
И вот это 100% я хочу поменять на 20%

Вот в целом выглядит сейчас вот так:
Код:
for (var i = 0; i < doc.swatches.length; i++) 
{
   var swatch = doc.swatches[i];
    $.writeln(tab+"--- Swatch " + (i+1) + ":");
    $.writeln(tab+"---  Name: " + swatch.name);
     $.writeln(tab+"---  Color Type: " + swatch.colorType);
     $.writeln(tab+"---  Color Value: " + swatch.colorValue)
     $.writeln(tab+"---  Color Tint: " + swatch.tint);
 }


var railTint = 20
var registrationColor;
for (var i = 0; i < doc.spots.length; i++)
{
    if (doc.spots[i].colorType === ColorModel.REGISTRATION)
    {
        registrationColor = doc.spots[i].color;
    }
}
$.writeln (tab+'--- registrationColor = '+registrationColor)
maxobj.fillColor = registrationColor;
maxobj.fillColor.tint = railTint
$.writeln (tab+'--- maxobj.fillColor.tint = '+maxobj.fillColor.tint)

В итоге объект который должен был стать 20% регистрэйшеном так и остался 100% как был изначально.
А в консоли выдалось следующее:
. --- Color Value: undefined
. --- Color Tint: undefined
. --- Swatch 2:
. --- Name: [Registration]
. --- Color Type: undefined
. --- Color Value: undefined
. --- Color Tint: undefined
. --- registrationColor = [CMYKColor]
. --- maxobj.fillColor.tint = 20
 

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Проверил. У меня так работает
Код:
var registrationColor = app.activeDocument.swatches.getByName("[Registration]").color;
registrationColor.tint = 20;
app.activeDocument.pageItems[0].fillColor = registrationColor;
Посмотреть вложение 167390
Щас еще раз проверю. Может у меня с переменной объекта что то не так и это не тот объект что я ожидаю
 

Drawer

Участник
Сообщения
2 098
Реакции
930
Код:
for (var i = 0; i < doc.swatches.length; i++)
{
   var swatch = doc.swatches[i];
    $.writeln("--- Swatch " + (i+1) + ":");
    $.writeln("---  Name: " + swatch.name);
     $.writeln("---  Color Type: " + swatch.colorType);
     $.writeln("---  Color Value: " + swatch.colorValue)
     $.writeln("---  Color Tint: " + swatch.tint);
 }


var railTint = 20
var regSpotName;
for (var i = 0; i < doc.spots.length; i++)
{
    if (doc.spots[i].colorType === ColorModel.REGISTRATION)
    {
       regSpotName = doc.spots[i].name;
    }
}
maxobj.fillColor = doc.swatches.getByName(regSpotName).color;
maxobj.fillColor.tint = railTint
$.writeln ('--- maxobj.fillColor.tint = '+maxobj.fillColor.tint)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 435
Реакции
10 897
Меня, все таки, терзают смутные сомнения, что обьект какой то странный и ему свойство fillColor до интересного места 'hmmm'
сорян, я с деревни прост... а зачем это нужно?
Ну дык и не засоряй тему, раз не понимаешь о чем говорят.
 

Chiga

20 лет на форуме
Сообщения
880
Реакции
558

Akro

Участник
Топикстартер
Сообщения
523
Реакции
26
Код:
for (var i = 0; i < doc.swatches.length; i++)
{
   var swatch = doc.swatches[i];
    $.writeln("--- Swatch " + (i+1) + ":");
    $.writeln("---  Name: " + swatch.name);
     $.writeln("---  Color Type: " + swatch.colorType);
     $.writeln("---  Color Value: " + swatch.colorValue)
     $.writeln("---  Color Tint: " + swatch.tint);
 }


var railTint = 20
var regSpotName;
for (var i = 0; i < doc.spots.length; i++)
{
    if (doc.spots[i].colorType === ColorModel.REGISTRATION)
    {
       regSpotName = doc.spots[i].name;
    }
}
maxobj.fillColor = doc.swatches.getByName(regSpotName).color;
maxobj.fillColor.tint = railTint
$.writeln ('--- maxobj.fillColor.tint = '+maxobj.fillColor.tint)
Так вроде у меня так и есть?