- Сообщения
 - 4 566
 
- Реакции
 - 2 957
 
Как можно передавать в функцию то, чего еще нет? Сначала вызов функции, а потом создание объекта, который должен быть внутри функции? Программа выполняется с конца или вообще в произвольном порядке?// вызов
Как можно передавать в функцию то, чего еще нет? Сначала вызов функции, а потом создание объекта, который должен быть внутри функции? Программа выполняется с конца или вообще в произвольном порядке?// вызов
Ну так правильно, obj1 у тебя не определенparametrShape(obj1, true, newcolor, true, newcolor, true, true)
Пока что все вышеперечисленные ошибки не от кривизны иллюстраторовской модели, а от твоего незнания основ матчасти.Поменял местами создание объекта и вызов функции, вроде заработало.
частично.
спасибо, ценное замечание. Просто думал что объекту все равно где находиться.Как можно передавать в функцию то, чего еще нет? Сначала вызов функции, а потом создание объекта, который должен быть внутри функции? Программа выполняется с конца или вообще в произвольном порядке?
Это первый скрипт который пишу с нуля, прошу простить и понятьПока что все вышеперечисленные ошибки не от кривизны иллюстраторовской модели, а от твоего незнания основ матчасти.


В смысле? Переменной все равно, присваивают ее в начале или конце программы???объекту все равно где находиться.
obj1 - это переменная и есть, до тех пор пока ты ее не инициализировал она undefined по моему вполне логично?не, переменной конечно не все равно.
да, логично.obj1 - это переменная и есть, до тех пор пока ты ее не инициализировал она undefined по моему вполне логично?
var newcolor = new CMYKColor();
usercolor(newcolor, 100, 0,0,0);
var newcolor2 = new CMYKColor();
usercolor(newcolor2, 100, 100, 0, 0);
var newcolor3 = new CMYKColor();
usercolor(newcolor3, 0, 0, 0, 50);
//рисуем объект
var obj1 = myDocument.pathItems.polygon (50, 188, 72.0, 5);
parametrShape(obj1, true, newcolor, true, newcolor, true, true)
var obj2 = myDocument.pathItems.polygon (150, 288, 72.0, 6);
parametrShape(obj2, true, newcolor3, true, newcolor2, true, true, )
function parametrShape(obj, strok, strcolor, filled, fillcolor, strOver, fillOver)
{
    obj.stroked = strok;
    obj.strokeColor = strcolor;
    obj.filled = filled;
    obj.strokeOverprint = strOver;
    obj.fillOverprint = fillOver ;
    obj.fillColor = fillcolor;
}
// конструктор цвета
function usercolor(colorname, cyan, magenta, yellow, black) {
    colorname.cyan = cyan;
    colorname.magenta = magenta;
    colorname.yellow = yellow;
    colorname.black = black;
}
	// конструктор цвета
function usercolor(cyan, magenta, yellow, black) {
    var colorname= new CMYKColor();
    colorname.cyan = cyan;
    colorname.magenta = magenta;
    colorname.yellow = yellow;
    colorname.black = black;
    return colorname;
}
var color=usercolor(0, 0,0,0);
	var COLOR_RED = usercolor (COLOR_RED, 0, 100,100,0);
// конструктор цвета
function usercolor (colorname, cyan, magenta, yellow, black) {
    var colorname = new CMYKColor;
    colorname.cyan = cyan;
    colorname.magenta = magenta;
    colorname.yellow = yellow;
    colorname.black = black;
    return colorname;
	Брррvar COLOR_RED = usercolor (COLOR_RED, 0, 100,100,0);
function falign(newRect,newRect2, type,type2){
   var stayObj = newRect2.geometricBounds; //left, top, right, bottom -- это примечание в каком порядке хранятся координаты в массиве (крайние точки).
   var moveObj = newRect.geometricBounds;
    if(type2===undefined) {type2=type;}  // проверка есть ли второй параметр
    type=type.toUpperCase();type2=type2.toUpperCase(); // перевести значения параметров в верхний регистр. Это делает независимым, как напечатаны параметры
    var horiz=''; var vertikal=''; // далее обнаруживаем какие выравнивания присутствуют в параметрах
    if(type=='TOP' || type=='BOTTOM') vertikal=type;
    if(type=='LEFT' || type=='RIGHT') horiz=type;
    if(type2=='TOP' || type2=='BOTTOM') vertikal=type2;
    if(type2=='LEFT' || type2=='RIGHT') horiz=type2;
     if(type=='CENTER' && type2=='CENTER') {   horiz=vertikal=type;  }
      if(type=='CENTER' && type2!='CENTER') {  if(!horiz)  {horiz=type;} else if(!vertikal)  vertikal=type; }
        if(type2=='CENTER' && type!='CENTER') {  if(!horiz)  {horiz=type2;} else if(!vertikal)  vertikal=type2; }
    switch(horiz){ // проверяем какое у нас гориз. выравнивание и расчитываем дельту на которую надо сместить первый объект
        case 'CENTER': var cntr=stayObj[0]+(stayObj[2]-stayObj[0])/2; var cntrMov=moveObj[0]+(moveObj[2]-moveObj[0])/2;  var delt =cntr-cntrMov;      break;
        case 'LEFT':   delt =stayObj[0]-moveObj[0];     break;
        case 'RIGHT': delt =stayObj[2]-moveObj[2];   break;    
         default:delt=0; break;
        }
    switch(vertikal){ // здесь тоже самое про вертикальное выравнивание и расчет дельты
        case 'CENTER':  var cntr=stayObj[1]+(stayObj[3]-stayObj[1])/2; var cntrMov=moveObj[1]+(moveObj[3]-moveObj[1])/2;   var  delt2 =cntr-cntrMov;   break;
       case 'TOP':  delt2=stayObj[1]-moveObj[1];    break;
       case 'BOTTOM':  delt2 =stayObj[3]-moveObj[3];  break;
       
         default:delt2=0; break;
        }
    newRect.translate(delt,delt2); //двигаем объект
    }
	Когда обьект рисуется по коррдинатам - зачем его выравнивать, когда можно сразу нарисовать в нужном месте? Другое дело, если читать обьект из файла (как проще и правильнее) Кстати, интересная идея - для корела был макрос, переводящий шейп в массив координат, которые можно использовать в другом макросе. А вот для иллюстратора такого нету, а, возможно, пригодилось бы кому то.После рисования фигур возникает желание начать их выравнивать. Вот мой скрипт, который делает выравнивание. Закомментировал для лучшего понимания.
В параметрах функции передаются первыми два объекта, которые надо выровнять. Выравнивание происходит относительно второго передаваемого объекта newRect2. 3 и 4 параметры это текстовые переменные, как выравнивать (TOP, BOTTOM,LEFT,RIGHT,CENTER). Функция реализована так, что не имеет значение в какой последовательности передавать эти переменные. Можно передавать одну переменную, если выранивание нужно только по одной стороне. Но при передаче только одного параметра CENTER, будет центрировано и по вертикали и по горизонтали.
JavaScript:function falign(newRect,newRect2, type,type2){ var stayObj = newRect2.geometricBounds; //left, top, right, bottom -- это примечание в каком порядке хранятся координаты в массиве (крайние точки). var moveObj = newRect.geometricBounds; if(type2===undefined) {type2=type;} // проверка есть ли второй параметр type=type.toUpperCase();type2=type2.toUpperCase(); // перевести значения параметров в верхний регистр. Это делает независимым, как напечатаны параметры var horiz=''; var vertikal=''; // далее обнаруживаем какие выравнивания присутствуют в параметрах if(type=='TOP' || type=='BOTTOM') vertikal=type; if(type=='LEFT' || type=='RIGHT') horiz=type; if(type2=='TOP' || type2=='BOTTOM') vertikal=type2; if(type2=='LEFT' || type2=='RIGHT') horiz=type2; if(type=='CENTER' && type2=='CENTER') { horiz=vertikal=type; } if(type=='CENTER' && type2!='CENTER') { if(!horiz) {horiz=type;} else if(!vertikal) vertikal=type; } if(type2=='CENTER' && type!='CENTER') { if(!horiz) {horiz=type2;} else if(!vertikal) vertikal=type2; } switch(horiz){ // проверяем какое у нас гориз. выравнивание и расчитываем дельту на которую надо сместить первый объект case 'CENTER': var cntr=stayObj[0]+(stayObj[2]-stayObj[0])/2; var cntrMov=moveObj[0]+(moveObj[2]-moveObj[0])/2; var delt =cntr-cntrMov; break; case 'LEFT': delt =stayObj[0]-moveObj[0]; break; case 'RIGHT': delt =stayObj[2]-moveObj[2]; break; default:delt=0; break; } switch(vertikal){ // здесь тоже самое про вертикальное выравнивание и расчет дельты case 'CENTER': var cntr=stayObj[1]+(stayObj[3]-stayObj[1])/2; var cntrMov=moveObj[1]+(moveObj[3]-moveObj[1])/2; var delt2 =cntr-cntrMov; break; case 'TOP': delt2=stayObj[1]-moveObj[1]; break; case 'BOTTOM': delt2 =stayObj[3]-moveObj[3]; break; default:delt2=0; break; } newRect.translate(delt,delt2); //двигаем объект }