[AI CC-CC2021] Есть ли готовый скрипт для изменения/задания размера наконечнику стрелки?

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Всем доброго времени суток!
Задача: всем наконечникам стрелок задавать один размер.
Геометрически задача решаемая: узнать существующее расстояние между двумя точками
(я предполагаю, что у одинаковых стрелок порядок точек в пути одинаковый) и задать масштаб для получения желаемого.
Но я новичок и не никак не пойму, как пробраться к x и y этих двух точек.
Кроме того, мне кажется, что проблема должна быть популярной. Старые версии иллюстратора делали "разобранные" стрелки, где наконечники масштабировались. Может есть уже скрипт?
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Так в новых тоже масштабируются... "неразобранные" :)
Зачем х у?
При масштабировании наконечники "разобранных" стрелок масштабируются вместе с рисунком, а нужно, чтобы их размер оставался таким же, как до масштабирования. Кроме того в полученных файлах размеры стрелок уже гуляют и их нужно привести к единообразию.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Всем доброго времени суток!
Задача: всем наконечникам стрелок задавать один размер.
Геометрически задача решаемая: узнать существующее расстояние между двумя точками
(я предполагаю, что у одинаковых стрелок порядок точек в пути одинаковый) и задать масштаб для получения желаемого.
Но я новичок и не никак не пойму, как пробраться к x и y этих двух точек.
Кроме того, мне кажется, что проблема должна быть популярной. Старые версии иллюстратора делали "разобранные" стрелки, где наконечники масштабировались. Может есть уже скрипт?
Вы определитесь, вам нужны "разобранные" стрелки (т.е. переведенные в редактируемый шейп или просто одинаковые не смотря на толщину линии? Но сразу предупреждаю - если я правильно понял обе задачи - они нетривиальны.
 

Gad

Сообщения
2 975
Реакции
1 408
1. Зачем разбирать стрелки?
2. Eсли после масштабирования толщину линий со стрелками привести к единому значению, "неразобранные" стрелки и так станут одинаковыми... Или нужно все таки
одинаковые не смотря на толщину линии?
3. Если стрелки разобраны, то это отдельные объекты, по какому алгоритму определить что этот объект стрелка и его нужно скорректировать?
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Похоже я "разобранными стрелками" сбила всех с толку. Мне нужно, сделать все наконечники одинакового размера. Они самостоятельные, а не те, что в современных версиях назначаются в поле обводка.
Я выделяю треугольничек, а скрипт находит расстояние между двумя определенными точками и, узнав расстояние между ними, масштабирует до нужного.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
То есть, стрелки разобранные, наконечники все одинаковые, отличаются на евклидово преобразование, надо распознать их, распознать преобразование, и применить к каждой некое другое преобразование? Неплохая задачка, я б взялся незадорого ;)
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
То есть, стрелки разобранные, наконечники все одинаковые, отличаются на евклидово преобразование, надо распознать их, распознать преобразование, и применить к каждой некое другое преобразование? Неплохая задачка, я б взялся незадорого ;)
Зачем так усложнять? Скрипту нужно работать с одной стрелкой. Найти длину бока треугольничка и исходя из его длины сделать масштабирование, но уже всего треугольничка до нужного размера. Мне нужно просто найти расстояние от точки 0 до точки 1 выделенного треугольничка, но я не знаю, какими JS-словами до всего этого достучаться. Что внутри pathPoint я не нашла.
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
3. Если стрелки разобраны, то это отдельные объекты, по какому алгоритму определить что этот объект стрелка и его нужно скорректировать?
Никакого алгоритма. Я выделяю стрелку, а скрипт ее масштабирует.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Найти длину бока треугольничка и исходя из его длины сделать масштабирование, но уже всего треугольничка до нужного размера
То есть предполагается что всевсевсе наконечники - равносторонние треугольники? Тогда все просто - pathPoint.ancor это массив из координат, формулу расстояния между точками с известными координатами вы помните? Причем, можно даже еще проще - берите периметр конца и получите готовое значение для масштабирования
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
То есть предполагается что всевсевсе наконечники - равносторонние треугольники? Тогда все просто - pathPoint.ancor это массив из координат, формулу расстояния между точками с известными координатами вы помните? Причем, можно даже еще проще - берите периметр конца и получите готовое значение для масштабирования
Для меня как раз отсюда начинается китайская грамота. Нет, геометрию еще помню, но записи в JS я просто не знаю.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Вы хоть девушка умная и целеустремленная, но вредная и ленивая
Ну неужели трудно открыть javascript reference или хотя бы погуглить?
У каждого PathItem есть свойство length - это его периметр
У подобных треугольников он отличается на коэффициент подобия - вот и все
правда остается главная проблема - распознавание подобных концов и (самое главное) точки прирастания его к основному контуру
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Вы хоть девушка умная и целеустремленная, но вредная и ленивая
Ну неужели трудно открыть javascript reference или хотя бы погуглить?
У каждого PathItem есть свойство length - это его периметр
У подобных треугольников он отличается на коэффициент подобия - вот и все
правда остается главная проблема - распознавание подобных концов и (самое главное) точки прирастания его к основному контуру
Я поняла, что у Вас вагон времени на препирательства. У меня его нет. Спасибо за помощь.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

Daani

Участник
Сообщения
5
Реакции
2
А зачем такие сложности? Вам не подойдет скрипт, который делает все выделенные объекты одного размера? Такие есть в сети. Или например, заменить все выделенные наконечники на один, нужного размера, тоже можно.
 

catpaw

Топикстартер
12 лет на форуме
Сообщения
245
Реакции
10
Спасение утопающих дело рук самих утопающих.
Масштабирование наконечника стрелочки из трех точек до нужного размера по длине ее стороны.
Код:
function main(){
var pRatio = prompt("Ratio of ID Graph: ", "100");
var pDesC  = prompt("Desired Length of Arrow Side: ", "8");

for (var I = 0 ; I < app.activeDocument.selection.length ; I++ ) {
if (app.activeDocument.selection[I].typename == "PathItem") {

var sel = app.activeDocument.selection[I];

var x1, x2, x3, y1, y2, y3;
with (sel){
   x1 = pathPoints[0].anchor[0]; y1 = pathPoints[0].anchor[1];
   x2 = pathPoints[1].anchor[0]; y2 = pathPoints[1].anchor[1];
   x3 = pathPoints[2].anchor[0]; y3 = pathPoints[2].anchor[1];
}

  var second = Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));
  var third  = Math.sqrt(Math.pow((x3 - x2), 2) + Math.pow((y3 - y2), 2));

var selC;
if (second >= third) {selC = second;} else {selC = third;}

var myDesC = pDesC / (pRatio/100);
var ratio = myDesC / selC * 100;

//обводка масштабируется
//        sel.resize(ratio, ratio, true, true, true, true, ratio);
//обводка не масштабируется
        sel.resize(ratio, ratio, true, true, true, true, 100);
}}
alert("Arrow scaling done... Maybe...", "Arrow Scaling");
};
main();
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Во первых, непонятно, нафига вычисляется длина стороны, если есть периметр, а во вторых - как распознается центр трансформации? Если всего этого не надо вообще (чего от вас упорно и безнадежно добивались) то данный выстраданный скрипт в две строки можно было сделать. Если бы вы не состроили из себя обиженную и с ревом скрылись в неизвестном направлении.
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
Во первых, непонятно, нафига вычисляется длина стороны, если есть периметр, а во вторых - как распознается центр трансформации?
В некоторых случаях когда стрелочки параллельны осям - деталями можно пренебречь.
Длина стороны находится, поскольку ее длина задается параметром.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Проще задать целевой периметр, по которому всевсевсе стрелки будут нормированы
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
Проще задать целевой периметр
Иногда не проще, стрелки могут иметь разный профиль стреловидности - от равностороннего до вытянутого. И визуально как раз важна длина одной из сторон относительно толщины линий. Опять же считать периметр удовольствие среднее, а нужный размер можно сразу получить из Geometric Bounds подобрав визуально.