Каким образом редактируются параметры элементов?

  • Автор темы Автор темы ealeonov
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Каким образом редактируются параметры элементов?

Да, я понял, что вы хотите. Я думал над этим и пришел к выводу, что, на самом деле задачу можно слегка упростить. На самом деле Reference Point в соответствующей панельке - чисто информативный параметр, ни на что не влияющий за пределами этой панельки, поэтому, я с трудом себе представляю, как получить к нему доступ из скрипта, да и, не факт, что возможно вообще. С другой стороны - а нужен ли он нам вообще? Дело в том, что этим параметром можно выбрать 9 степеней свободы для масштабирования. В то же время, отрезок, увеличивающий свою длину, без сдвига и поворота, имеет всего три степени свободы (зафиксировать можно только один из концов или центр) То есть, задача упрощается - можно всего навсего сделать три варианта скрипта, изменяющего длину отрезка относительно каждой из этих точек. Ну или ввести дополнительный вопрос относительно какой точки удлиннять отрезок.
 
Ответ: Каким образом редактируются параметры элементов?

Да, Вы правы. В данном случае направления только три и если скрипт будет спрашивать, куда менять размер, это будет просто замечательно. )):]
 
Ответ: Каким образом редактируются параметры элементов?

Вот как то так:
Код:
function GetCorner(line, direct)
{
 if (line.pathPoints[0].anchor[0]<line.pathPoints[1].anchor[0])
 {
  left=0;
  right=1;
 }
 else
 {
  left=1;
  right=0;
 }
 if (line.pathPoints[left].anchor[1]<line.pathPoints[right].anchor[1])
 {
  lcorner=Transformation.BOTTOMLEFT
  rcorner=Transformation.TOPRIGHT
 }
 else
 {
  lcorner=Transformation.TOPLEFT
  rcorner=Transformation.BOTTOMRIGHT
 }
 if (direct==0) return lcorner;
 if (direct==1) return Transformation.CENTER;
 if (direct==2) return rcorner;
}

  if(documents.length >= 1) 
  {
   var s = activeDocument.selection;
   if (s.length==1)
   {

     var m;
   
     if ((s[0].typename=="PathItem") && (s[0].pathPoints.length==2))
     {
       direct=prompt("Input anchor corner (0:left, 1:center, 2:right): ", 1);
       if ((direct==0) || (direct==1) || (direct==2))
       {
        m=Math.sqrt(s[0].height*s[0].height+s[0].width*s[0].width)/72*25.4;
        n = prompt("Line length (mm): ", m);
        s[0].resize(n/m*100,n/m*100,true,false,false,false,false,GetCorner(s[0],direct));
       } 
     }
   }
  }
Извиняюсь за придурашные иллюстраторовские промпты, хотя IMHO это адоба должна извиняться за то, что в иллюстраторе не предоставила простой вменяемой работы с диалоговыми окнами, как, например в кореле или в своем же индизайне...
 
Ответ: Каким образом редактируются параметры элементов?

Михаил. Положи скрипт на файлоообменник. Чтоб не затерялся.
 
Ответ: Каким образом редактируются параметры элементов?

Да ну, скрипт достаточно узкоспециальный, мало кому нужен. Хотя, Linxy у нас администратор, если сочтет нужным, пусть переложит. К тому же, это, возможно еще не окончательный вариант, может кто надумает к нему нормальный интерфейс прикрутить. ;)
 
Ответ: Каким образом редактируются параметры элементов?

_MBK_, браво! ':=))'Всё работает замечательно. Еще раз огромная благодарность. Скрипт сейчас отнесу в файловый архив. Если где-то что-то изменится или добавится, то файл всегда можно обновить. :)
 
Ответ: Каким образом редактируются параметры элементов?

Мда уж, ужасная-ужасная работа с элементами. Вот хочу сделать дугу 12 мм по х и 1 мм по Y, но чтобы дуга смотрела в этом случае вниз (то есть кусочек параболы). Когда вводу значения, то дуга появляется произвольно и я ума не приложу, как в данном случае сделать кусочек параболы, параллельный горизонтальной линии. Adobe должны учиться у Autodesk. Подскажите литературу или вообще, как справляться с этом иллюстратором? И скажите, как же сделать эту дугу.
Без имени-1.jpg
 
Ответ: Каким образом редактируются параметры элементов?

Ничего не понял. Как это - парабола параллельна прямой линии? Ну нарисуйте прямую линию и сделайте из нее пораболу, подергав за хинты как я указывал выше.
 
Ответ: Каким образом редактируются параметры элементов?

Извиняюсь за придурашные иллюстраторовские промпты
Тоже извиняюсь за то, что без спросу влез в чужой код, :) но можно решить с помощью пользовательского интерфейса:
Код:
function GetCorner(line, direct){
	if (line.pathPoints[0].anchor[0]<line.pathPoints[1].anchor[0]){
		left=0;
		right=1;
		}
	else{
		left=1;
		right=0;
		}
	if (line.pathPoints[left].anchor[1]<line.pathPoints[right].anchor[1]){
		lcorner=Transformation.BOTTOMLEFT
		rcorner=Transformation.TOPRIGHT
		}
	else{
		lcorner=Transformation.TOPLEFT
		rcorner=Transformation.BOTTOMRIGHT
		}
	if (direct==0) return lcorner;
	if (direct==1) return Transformation.CENTER;
	if (direct==2) return rcorner;
	}

if(documents.length >= 1){
	var s = activeDocument.selection;
	if (s.length==1){
		var m;
		if ((s[0].typename=="PathItem") && (s[0].pathPoints.length==2)){
			m=Math.sqrt(s[0].height*s[0].height+s[0].width*s[0].width)/72*25.4;
			var w = new Window("dialog");
			w.alignChildren = "left";
			var direct = [];
			var p1 = w.add("panel");
			p1.alignChildren = "left";
			p1.add("statictext",undefined,"Input anchor corner:");
			direct[0] = p1.add("radiobutton",undefined,"left");
			direct[1] = p1.add("radiobutton",undefined,"center");
			direct[2] = p1.add("radiobutton",undefined,"right");
			var g1 = w.add("group{orientation:\"column\",alignChildren:\"left\"}");
			g1.add("statictext",undefined,"Line length (mm): ");
			var n = g1.add("edittext",undefined,m);
			var g2 = w.add("group");
			g2.add("button",undefined,"OK");
			g2.add("button",undefined,"Cancel");
			if (w.show()==1){
				n=Number(n.text);
				var dirsel;
				getdirect(dirsel);
				s[0].resize(n/m*100,n/m*100,true,false,false,false,false,GetCorner(s[0],dirsel));
				}
			}
		}
	}

function getdirect(dirsel){
	for (z=0;z<direct.length;z++){
		if (direct[z].value){dirsel=z;}
		}
	}
 
Ответ: Каким образом редактируются параметры элементов?

Если речь идет о перацком софте, то можно поставить себе Xtream Path и не морочить голову ни себе ни людям. Функции это плугина перекрывают возможности и иллюстратора и корела и всех известных мне векторных редакторов вместе взятых. И всё интерактивно, с шоткатами, без всяких промптов. Насколько я помню, задавать длину отрезка с любого конца можно было тыкая пипеткой. Причем с предосмотром, вроде бы. Дуги из прямых одним движением, на глаз и забивая значения. И еще много чего.
 
Ответ: Каким образом редактируются параметры элементов?

Ну вот я ж говорил, и интерфейс прикрутили. ;)
 
Ответ: Каким образом редактируются параметры элементов?

Тоже извиняюсь за то, что без спросу влез в чужой код, но можно решить с помощью пользовательского интерфейса:
Жень, а оно теперь не работает. *(
Не учитывает мой выбор left, center или right. Всегда делает center.
Почините, пожалуйста. С интерфейсом так удобненько стало. )):]
 
Ответ: Каким образом редактируются параметры элементов?

Вот так вроде работает:
Код:
function GetCorner(line, direct){
	if (line.pathPoints[0].anchor[0]<line.pathPoints[1].anchor[0]){
		left=0;
		right=1;
		}
	else{
		left=1;
		right=0;
		}
	if (line.pathPoints[left].anchor[1]<line.pathPoints[right].anchor[1]){
		lcorner=Transformation.BOTTOMLEFT
		rcorner=Transformation.TOPRIGHT
		}
	else{
		lcorner=Transformation.TOPLEFT
		rcorner=Transformation.BOTTOMRIGHT
		}
	if (direct==0) return lcorner;
	if (direct==1) return Transformation.CENTER;
	if (direct==2) return rcorner;
	}
var dirsel;
if(documents.length >= 1){
	var s = activeDocument.selection;
	if (s.length==1){
		var m;
		if ((s[0].typename=="PathItem") && (s[0].pathPoints.length==2)){
			m=Math.sqrt(s[0].height*s[0].height+s[0].width*s[0].width)/72*25.4;
			var w = new Window("dialog");
			w.alignChildren = "left";
			var direct = [];
			var p1 = w.add("panel");
			p1.alignChildren = "left";
			p1.add("statictext",undefined,"Input anchor corner:");
			direct[0] = p1.add("radiobutton",undefined,"left");
			direct[1] = p1.add("radiobutton",undefined,"center");
			direct[2] = p1.add("radiobutton",undefined,"right");
			var g1 = w.add("group{orientation:\"column\",alignChildren:\"left\"}");
			g1.add("statictext",undefined,"Line length (mm): ");
			var n = g1.add("edittext",undefined,m);
			var g2 = w.add("group");
			g2.add("button",undefined,"OK");
			g2.add("button",undefined,"Cancel");
			if (w.show()==1){
				n=Number(n.text);

				getdirect(dirsel);
				s[0].resize(n/m*100,n/m*100,true,false,false,false,false,GetCorner(s[0],dirsel));
				}
			}
		}
	}

function getdirect(){
	for (z=0;z<direct.length;z++){
		if (direct[z].value){dirsel=z;return}
		}
	}
 
Ответ: Каким образом редактируются параметры элементов?

Да-да, теперь всё работает и хорошо выглядит. Спасибо Михаилу и Евгению за старания. Скрипт уходит в файловый архив.
 
Ответ: Каким образом редактируются параметры элементов?

я бы еще округлил:
Код:
28   m = (Math.sqrt(s[0].height * s[0].height + s[0].width * s[0].width) / 72 * 25.4).toFixed(3);
так, для полного счастья и соответствия с палитрой transform ;)
спасибо за скрипт, супер оперативно )
 
Ответ: Каким образом редактируются параметры элементов?

ID_transform.png - оно?
Это в Индизайне. Никаких скриптов. Правда, насчет дуги не знаю.
 
Ответ: Каким образом редактируются параметры элементов?

Оно. Но, в индизайне... :-(
 
Ответ: Каким образом редактируются параметры элементов?

Для задачи, описанной Linxy, как мне кажется, неплохо подходит. Опять же для простых фигур копипаст Иллюстратор-Индизайн хорошо работает.
 
Ответ: Каким образом редактируются параметры элементов?

Для задачи, описанной Linxy, как мне кажется, неплохо подходит.
В принципе как костыли неплохой вариант, но у меня же теперь есть замечательный скрипт. :)
 
Статус
Закрыто для дальнейших ответов.