[AI CC-CC2021] Вопрос по скриптописанию

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Хочу освоить скриптописание на JS под иллюстратор, часто бывает нужно прикручивать небольшие мелочи, и хотелось бы научиться азам.
Но натыкаюсь на непонятные вещи для меня.

вот к примеру
Что есть конструктор, а данном случае, надо переопределять конструктор како-то класса?

полигон рисует, но при попытке задать ему CMYK цвет получаю ошибку.


Код:
var myDocument = app.documents.add();

var myTextFrame = myDocument.textFrames.add();


var newcolor = new CMYKcolor();
newcolor.cyan = 100;
newcolor.magenta = 0;
newcolor.yellow = 0;
newcolor.black = 0;


var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);

polygon.stroked = true;
polygon.strokeColor = newcolor;
polygon.filled = false;
polygon.strokeOverprint = false;
polygon.fillOverprint = false;
 

Вложения

  • Screen Shot 2019-05-23 at 12.37.21.png
    Screen Shot 2019-05-23 at 12.37.21.png
    32.9 КБ · Просм.: 523

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Как то ты совсем не в ту степь зашел. Открываем референс на нужной странице:

и видим что у класса PathItems нет ни свойств ни методов ни конструкторов ни деструкторов по имени polygon

Path item или Page item ?
что-то я запутался

Эта конструкция рисует пятигранник, в заданных координатах, но цвет по умолчанию черный

var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);

polygon.stroked = true;
polygon.strokeColor = newcolor;
polygon.filled = false;
polygon.strokeOverprint = false;
polygon.fillOverprint = false;
 

eugeny

15 лет на форуме
Сообщения
855
Реакции
210
Как то ты совсем не в ту степь зашел. Открываем референс на нужной странице:
Именно так! Смотришь кто родитель данного свойства/объекта (от кого к нему добраться) и далее какие свойства-потомки у него в наличии и какие методы можешь использовать. Соответственно, с его потомками тоже самое. Если это группа/коллекция, то обращаешься по индексу. Руководство очень удобное.
 
  • Спасибо
Реакции: ACTPOHOM

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Найди различие ;)
JavaScript:
var newcolor = new CMYKColor();
 
  • Спасибо
Реакции: Skvoznyak и ACTPOHOM

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Path item или Page item ?
что-то я запутался

Эта конструкция рисует пятигранник, в заданных координатах, но цвет по умолчанию черный

var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);

polygon.stroked = true;
polygon.strokeColor = newcolor;
polygon.filled = false;
polygon.strokeOverprint = false;
polygon.fillOverprint = false;
Ага пока писал вспомнил. Глянь сообщение выше
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Балиин :)
CMYKColor
CMYKcolor

спасибо!
 
Последнее редактирование:

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Именно так! Смотришь кто родитель данного свойства/объекта (от кого к нему добраться) и далее какие свойства-потомки у него в наличии и какие методы можешь использовать. Соответственно, с его потомками тоже самое. Если это группа/коллекция, то обращаешься по индексу. Руководство очень удобное.
до индексов не добрался еще, пока вкуриваю вообще взаимосвязь
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
А если мне надо несколько обхектов, надо под каждый писать описание с цветами и свойствами ?

var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);
var polygon1 = myDocument.pathItems.polygon (114, 218, 72.0, 6);
var polygon2 = myDocument.pathItems.polygon (114, 218, 72.0, 7);

Это же с тоски помереть.
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
С яваскрипт надо быть очень внимательным. Регистрозависимый язык: polygon, polyGon, Polygon -- это все разные переменные, например.
ну это понятно, как и в самой Java, тут банально опечатка.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
А если мне надо несколько обхектов, надо под каждый писать описание с цветами и свойствами ?

var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);
var polygon1 = myDocument.pathItems.polygon (114, 218, 72.0, 6);
var polygon2 = myDocument.pathItems.polygon (114, 218, 72.0, 7);

Это же с тоски помереть.

циклы, массивы, словари 'hz'
 
  • Спасибо
Реакции: ACTPOHOM

eugeny

15 лет на форуме
Сообщения
855
Реакции
210
А если мне надо несколько обхектов, надо под каждый писать описание с цветами и свойствами ?

var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);
var polygon1 = myDocument.pathItems.polygon (114, 218, 72.0, 6);
var polygon2 = myDocument.pathItems.polygon (114, 218, 72.0, 7);

Это же с тоски помереть.
Сделай функцию например
function parametrShape(obj, stroked, strcolor, filled, strOver, fillOver )
{
obj.stroked = stroked;
obj.strokeColor = strcolor;
obj.filled = filled;
obj.strokeOverprint = strOver;
obj.fillOverprint = fillOver ;
}
и потом просто ее вызывай
parametrShape(polygon, 1, newcolor, 0,0,0 )
 
  • Спасибо
Реакции: ACTPOHOM

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Во, это уже веселе.
А как в цикле например имя объекта менять, это возможно ?
что бы создавать или менять свойства ? obj1 obj2 etc ?

Код:
for(var i = 0; i< 3; i ++)
{
    obj[i].stroked = true;
    obj[i].strokeColor = newcolor;
    obj[i].filled = false;
    obj[i].strokeOverprint = false;
    obj[i].fillOverprint = false;
}
 

eugeny

15 лет на форуме
Сообщения
855
Реакции
210
Во, это уже веселе.
А как в цикле например имя объекта менять, это возможно ?
что бы создавать или менять свойства ? obj1 obj2 etc ?

Код:
for(var i = 0; i< 3; i ++)
{
    obj[i].stroked = true;
    obj[i].strokeColor = newcolor;
    obj[i].filled = false;
    obj[i].strokeOverprint = false;
    obj[i].fillOverprint = false;
}
тут либо массив объектов создавать и потом перебирать, либо проще, если объектов немного и нет закономерности при их создании:
var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);
parametrShape(polygon, 1, newcolor, 0,0,0 )
var polygon1 = myDocument.pathItems.polygon (114, 218, 72.0, 6);
parametrShape(polygon1, 1, newcolor, 0,0,0 )
var polygon2 = myDocument.pathItems.polygon (114, 218, 72.0, 7);
parametrShape(polygon2, 1, newcolor, 0,0,0 )

Пример закономерности: Надо создать несколько фигур с определенным шагом.
var prm1=144; var prm2=288; var prm3=72.0; var prm4= 5;

for(var i = 0; i< 3; i ++){
var polygon = myDocument.pathItems.polygon (prm1, prm2, prm3, prm4);
parametrShape(polygon, 1, newcolor, 0,0,0 );
prm1=prm1+10; prm2=prm2+10; // ну или нечто подобное

}
 
  • Спасибо
Реакции: ACTPOHOM

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А я вообще не понимаю смысла рисовать покоординатно из скрипта. Нарисуй шаблон и читай объекты оттуда.
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
А я вообще не понимаю смысла рисовать покоординатно из скрипта. Нарисуй шаблон и читай объекты оттуда.
Я просто учусь.
пытаюсь вкурить как вообще тут все работает.
Пока спотыкаюсь на простых вещах;
То, что в теории должно работать, не работает.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
То, что в теории должно работать, не работает.
Ты еще только верхушку айсберга видишь. Там внутренних багов, которые совершенно неочевидны и сложно повторяемы на разных иллюстраторах - легион! ;)
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
А можно подойти более функционально. На сколько помню, в illustrator нет array.map. Но и не проблема

Код:
Array.prototype.map = function(callback) {
        var len = this.length;
        while (len--) {
            callback(this[len]);
        }
    }


polygonsArray.map(function (item) {
    item.stroked = true;
    item.strokeColor = newcolor;
    item.filled = false;
    item.strokeOverprint = false;
    item.fillOverprint = false;
    return item;
});

polygonsArray2.map(function (item) {
    item.strokeColor = newcolo2;
    item.filled = true;
    return item;
});
 
Последнее редактирование:
  • Спасибо
Реакции: ACTPOHOM

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Ты еще только верхушку айсберга видишь. Там внутренних багов, которые совершенно неочевидны и сложно повторяемы на разных иллюстраторах - легион! ;)
да я уже в ужасе.
 

ACTPOHOM

Топикстартер
12 лет на форуме
Сообщения
2 981
Реакции
1 133
Почему не работает ?
По идее все же правильно.

Код:
var myDocument = app.documents.add();
var myTextFrame = myDocument.textFrames.add();

var newcolor = new CMYKColor();
newcolor.cyan = 100;
newcolor.magenta = 0;
newcolor.yellow = 0;
newcolor.black = 0;


// вызов
parametrShape(obj1, true, newcolor, true, newcolor, true, true)

//рисуем объект
var obj1 = myDocument.pathItems.polygon (50, 188, 72.0, 5);

function parametrShape(obj, strok, strcolor, filled, strOver, fillOver)
{
    obj.stroked = strok;
    obj.strokeColor = strcolor;
    obj.filled = filled;
    obj.strokeOverprint = strOver;
    obj.fillOverprint = fillOver ;
    return obj;
}

тут либо массив объектов создавать и потом перебирать, либо проще, если объектов немного и нет закономерности при их создании:
var polygon = myDocument.pathItems.polygon (144, 288, 72.0, 5);
parametrShape(polygon, 1, newcolor, 0,0,0 )
var polygon1 = myDocument.pathItems.polygon (114, 218, 72.0, 6);
parametrShape(polygon1, 1, newcolor, 0,0,0 )
var polygon2 = myDocument.pathItems.polygon (114, 218, 72.0, 7);
parametrShape(polygon2, 1, newcolor, 0,0,0 )

Пример закономерности: Надо создать несколько фигур с определенным шагом.
var prm1=144; var prm2=288; var prm3=72.0; var prm4= 5;

for(var i = 0; i< 3; i ++){
var polygon = myDocument.pathItems.polygon (prm1, prm2, prm3, prm4);
parametrShape(polygon, 1, newcolor, 0,0,0 );
prm1=prm1+10; prm2=prm2+10; // ну или нечто подобное

}
 

Вложения

  • Screen Shot 2019-05-23 at 14.34.22.png
    Screen Shot 2019-05-23 at 14.34.22.png
    27.5 КБ · Просм.: 490