[AI CS4-CS6] Управление градиентом на JavaScript

Статус
Закрыто для дальнейших ответов.

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
Доброго времени суток.
Нуждаюсь в подсказках, так как столкнулся с проблемой и не могу уже пол дня ее решить.

Нужно изменять при помощи JavaScript угол, соотношение сторон и размер градиента в заливке объекта. То есть изменять свойства класса GradientColor. Я пытаюсь присвоить им свои значения таким примерно образом:

activeDocument.Selection[0].fillColor.angle = 60;

Но ничего не происходит, хотя и ошибку не выдает. В то же время получить текущие значения этих свойств получается нормально. В чем тут дело ?

Также, пытался присвоить новосозданному градиенту набор цветовых переходов от другого градиента, таким образом:

mygrad = activeDocument.gradients.add();
mygradcol = new GradientColor();
mygrad.GradientStops = activeDocument.Selection[0].fillColor.GradientStops;
mygradcol.gradient = mygrad;
...
myellipse.fillColor = mygradcol;

Но в результате объект закрашивается градиентом со стандартными двумя цветами - белым и черным, а не цветами указанного мною градиента. Но это не так важно, как первая часть проблемы.

Подскажите, что я делаю не правильно ?
 
  • Спасибо
Реакции: dumbm1

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Не сильно вдаваясь в ваш код, мне сразу режет глаз упоминание Selection[0] Оно то тут каким боком? 'hmmm'
 

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
это не существенно, просто я экспериментирую над выделенным объектом
вопрос в том, почему не меняются свойства GradientColor
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Ну у Selection[0] к примеру таких свойств запросто и в помине быть не может, хотя, тогда б ошибку генерировало б. Впрочем, негенерирование ошибки может иметь совершенную кучу дополнительных причин к градиенту отношения не имеющих. Попробуйте просто безо всякого селекшна присвоить и проверить присвоилось или нет.
 

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
@_MBK_, с Selection проблем никаких нет, так как я с ним вполне могу прочитать указанные свойства, а вот записать не могу. Все же попробовал без Selection, результат аналогичный

@dumbm1, я как раз по такому руководству и делаю, только для своей версии CS6. В указанном Вами документе интересующие меня свойства находятся на странице 67
 

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
Тогда так:
Код:
selection[0].rotate(45, false, false, true, false, Transformation.CENTER);
Посмотрите здесь статью.
 
  • Спасибо
Реакции: _MBK_ и Bigroom

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
@dumbm1, да, так работает, я тоже нашел данное решение. Хотя не понятно, почему не работает нормальный вариант
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
А, вон вы о чем.
Я б высказал свои соображения, почему не работает пряморукий вариант, но меня только вернули в данную тему и я обещал вести себя прилично.'otbline'
 
  • Спасибо
Реакции: dumbm1

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
@Bigroom, хорошо, что хоть как-то работает. Вот это свойство, например, больше никак не работает, начиная с CS6.
PS. Спасибо, что натолкнули на решение ;)
 
Последнее редактирование:
  • Спасибо
Реакции: _MBK_

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
Я только сегодня взялся написать небольшой скрипт для собственных нужд, попутно изучая как писать скрипты для Иллюстратора. И как-то не ожидал столкнуться с багами. Думал, что много времени не займет - скрипт то простенький и короткий вроде.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Путь иллюстраторовского скриптинга сложен и тернист. А логика непроста для понимания белого человека
 

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196

Не по теме:
А для сильно загорелого белого? (Я сейчас в Крыму загораю. Вдруг поможет) Но несмотя ни на что - всё равно скриптинг + панельки в СС - это вещь!
 

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
Да, странноват скриптинг для Иллюстратора. Вот сейчас создаю скриптом новый градиент, не указывая его тип - создается линейный. Если же явно указываю тип линейный, то почему-то создается радиальный...
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Да, странноват скриптинг для Иллюстратора. Вот сейчас создаю скриптом новый градиент, не указывая его тип - создается линейный. Если же явно указываю тип линейный, то почему-то создается радиальный...
Образец кода в студию!
 

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
Вот этот отрывок:

mygrad = activeDocument.gradients.add();
//mygrad.type = GradientType.LINEAR;
mygradc.gradient = mygrad;
myellypse.fillColor = mygradc;
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Кстати, а вы экшном не хотите попробовать? Экшны можно из скрипта вызывать, если что
 

Bigroom

Участник
Топикстартер
Сообщения
26
Реакции
3
На сколько мне известно, экшна такого нет какой мне нужен - преобразовать эллиптический градиент с измененным соотношением сторон в контур, и залить его градиентом с такими же цветовыми переходами, но без изменения соотношения сторон. Нужно для корректного преобразования эллиптических градиентов из формата AI в EPS 10, без образования растров.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 235
Реакции
10 852
преобразовать эллиптический градиент с измененным соотношением сторон в контур, и залить его градиентом с такими же цветовыми переходами, но без изменения соотношения сторон.
Брр
Что-то вы каким-то непростым путем все это делать пытаетесь
Или я чего-то недопонимаю? Вам нужно, чтобы при масштабировании объекта элиптический градиент не масштабировался или как? Так у resize есть прекрасная опция changeFillGradients - делаете ее false и градиент при масштабировании остается с прежними пропорциями.
Что касается вашего кода - тоже никакой проблемы не вижу, у меня превосходно создается и линейный и радиальный, проверьте у себя внимательно:
Код:
 var mygrad = activeDocument.gradients.add();
     mygrad.type = GradientType.RADIAL; \\GradientType.LINEAR;
     var mygradc = new GradientColor();
    mygradc.gradient = mygrad;
   
    selObj = app.activeDocument.selection[0];
    selObj.fillColor=mygradc;
 
Статус
Закрыто для дальнейших ответов.