скрипт для авто-рамок выделенного объекта

  • Автор темы Автор темы hailfor
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

hailfor

Участник
Топикстартер
Сообщения
24
Реакции
11
Добрый день!
Каждую неделю сталкиваюсь с одной и той же задачей - сделать рамки для фотографии. Можно ли с помощью скрипта сделать эту работу? Прилагаю рисунок ниже.
Спасибо за любую помощь!
example.jpg
 
Ответ: скрипт для авто-рамок выделенного объекта

Можно с помощью скрипта, можно сделать стилями, можно поместить заготовку в библиотеку.
Высота линий фиксирована или пропорциональна высоте фрейма?
 
Ответ: скрипт для авто-рамок выделенного объекта

С библиотекой я как раз до последнего времени и работал. Не всегда бывает удобно. Высота пропорциональна высоте фрейма. Спасибо за ответ (со стилями сейчас сам попробую покопаться, а вот со скриптами без помощи не обойдуюсь)
 
Ответ: скрипт для авто-рамок выделенного объекта

Высота пропорциональна высоте фрейма.
А как у Вас это решается? Линии технически — это, получается, прямоугольники? Или толщину линий можно оставлять одинаковой? С остальным вопросов нет, скрипт можно сделать.
 
Ответ: скрипт для авто-рамок выделенного объекта

Простите, что не сказал сразу. Линии - это прямоугольники. Толщина для всех прямоугольников одинакова — 2 мм. А длина зависит от выделенного объекта. Буду очень благодарен за помощь!
 
Ответ: скрипт для авто-рамок выделенного объекта

Код:
#targetengine "fotoLines"
var w = new Window("palette");
var but = w.add("button",undefined,"линии для фото");
but.onClick = function(){
	try{
		var doc = app.activeDocument;
		app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
		var img = doc.selection[0];
		var gb = img.geometricBounds;
		var lin = [];
		for (i=0;i<=2;i=i+2){
			lin[i] = img.parentPage.rectangles.add();
			lin[i].appliedObjectStyle = doc.objectStyles.item("fotoLine");
			lin[i].geometricBounds = [gb[i]-i, gb[1], gb[i]-i+2, gb[3]];
			}
                 doc.groups.add([lin[0],lin[2],img]).select();
		}
	catch(e){alert(e.description);}
	}
w.show();
В строке "lin.appliedObjectStyle = doc.objectStyles.item("fotoLine");" вместо "fotoLine" впишите свой объектный стиль для прямоугольников.
 
  • Спасибо
Реакции: NikAR
Ответ: скрипт для авто-рамок выделенного объекта

Большое спасибо за помощь! :)

update: всё работает простот шикарно!
 
Ответ: скрипт для авто-рамок выделенного объекта

Заранее извиняюсь... можно ли сделать чтобы в конце вся конструкция группировалась? В остальном супер! Спасибо!
 
Ответ: скрипт для авто-рамок выделенного объекта

Добрый день!

Помогите разобраться в этом скрипте:

Код:
#targetengine "PhotoLines"

var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
var img = doc.selection[0];
var gb = img.geometricBounds;
var lin = [];
for (i=0;i<=2;i=i+3){
    lin[i] = img.parentPage.rectangles.add();
    lin[i].appliedObjectStyle = doc.objectStyles.item("PhotoLines");
    lin[i].geometricBounds = [gb[i]-i, gb[1], gb[i]-i+2, gb[3]];
    }

Этот скрипт отлично работает. Но возникла необходимость изменить толщину линий с 2 мм, до 1,5 мм. Я не силен в языках программирования, перепробовал все варианты с изменением цифр в скрипте, но не могу добиться результата. Если есть возможность, объясните по-простому как самому изменить толщину линий. Мне понадобятся скипт на 1,5 мм и 1 мм рамки!
Спасибо!
 
Ответ: скрипт для авто-рамок выделенного объекта

Я так и делал. Но тогда нижний прямоугольник-рамка будет смещен!
ramka.jpg
 
Ответ: скрипт для авто-рамок выделенного объекта

А откуда взялось i=i+3? Было ж i=i+2
 
Ответ: скрипт для авто-рамок выделенного объекта

Код:
var k = 1.5; //ТОЛЩИНА ЗАДАЁТСЯ ЗДЕСЬ
var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
var img = doc.selection[0];
var gb = img.geometricBounds;
var lin = [];
lin[0] = img.parentPage.rectangles.add({
	appliedObjectStyle:doc.objectStyles.item("PhotoLines"),
	geometricBounds: [gb[0], gb[1], gb[0]+k, gb[3]]
	});
lin[1] = img.parentPage.rectangles.add({
	appliedObjectStyle:doc.objectStyles.item("PhotoLines"),
	geometricBounds: [gb[2]-k, gb[1], gb[2], gb[3]]
	});
doc.groups.add([lin[0],lin[1],img]).select();
 
Ответ: скрипт для авто-рамок выделенного объекта

Код:
var k = 1.5; //ТОЛЩИНА ЗАДАЁТСЯ ЗДЕСЬ
var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
var img = doc.selection[0];
var gb = img.geometricBounds;
var lin = [];
img.parentPage.rectangles.add({
    appliedObjectStyle:doc.objectStyles.item("PhotoLines"),
    geometricBounds: [gb[0], gb[1], gb[0]+k, gb[3]]
    });
img.parentPage.rectangles.add({
    appliedObjectStyle:doc.objectStyles.item("PhotoLines"),
    geometricBounds: [gb[2]-k, gb[1], gb[2], gb[3]]
    });


О лучшем не мог и мечтать! Спасибо!

простите за оффтоп, но любопытсво не даст мне покоя. Как можно было исправить этот код на толщину, скажем 1,5 мм.

Код:
#targetengine "PhotoLines"

var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
var img = doc.selection[0];
var gb = img.geometricBounds;
var lin = [];
for (i=0;i<=2;i=i+2){
    lin[i] = img.parentPage.rectangles.add();
    lin[i].appliedObjectStyle = doc.objectStyles.item("PhotoLines");
    lin[i].geometricBounds = [gb[i]-i, gb[1], gb[i]-i+1, gb[3]];
    }
 
Ответ: скрипт для авто-рамок выделенного объекта

Т.к. в этом варианте случайно совпали численные значения толщины линии (2 мм) и индекса нижней координаты Y изображения (geometricBounds[Y1,X1,Y2,X2], индексы соответственно [0,1,2,3]), то довольно легко удалось два числа — 0 и 2 — увязать в простом цикле. Если взять 1.5 мм, можно в принципе тоже изобрести какую-то формулу, но это будет извращение :). Здесь уже проще в лоб, две линии одну за другой.
 
Статус
Закрыто для дальнейших ответов.