- Сообщения
- 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); //двигаем объект }