[ID CC-CC2021] Поиск фрейма по размерам

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Фрейм, отлепленный от мастера, сохраняет связь с исходным, в том числе и обновление форматирования.
Вот такая магия.
Объектные стили, к сожалению, не обновляются. Сохраняются те, что были до отвязки - но становятся с плюсиком. То есть поиском их не найти.
По крайней мере, у меня в CS 5.5 так. Не знаю, как в более свежих версиях ИД.
 

Elsynor

Tesseract
12 лет на форуме
Сообщения
1 282
Реакции
1 377
2018 нет, но там, в 2018, появился размер в стиле объекта, может и в поиске появился…
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
А вот если на мастере у этих фреймов изменить заливку, то она должна поменяться и у отвязанных фреймов (правда, только у тех, которые после отвязки не были покрашены принудительно). И искать тогда можно по цвету фрейма.
Но вот те фреймы, которые изначально на мастере не были, конечно, при этом охвачены не будут.
 

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Коллеги, покумекали тут))

Хотелки упрощаются(надеюсь):
Выделаем фрейм, ищем во всем докуметне с такиме же размерами — переносим все найденное на новый слой (назвав его элегантно размерами нашего фрейма '))'

Можно такое в скрипте осуществить?
 

DrEgor

Участник
Сообщения
774
Реакции
68
Коллеги, покумекали тут))

Можно такое в скрипте осуществить?

Код:
var sourceDoc = app.activeDocument;


var gb = app.activeDocument.selection[0].geometricBounds;

var selection = [];

var width = gb[3] - gb[1];
var height = gb[2] - gb[0];


 try {
// Создаем слой
    var myLayer = sourceDoc.layers.add({name: width + "-" + height});
  } catch (error) {
// Если уже есть - его и пользуем
    var myLayer = sourceDoc.layers.item(width + "-" + height)
  }

var pagesCount = sourceDoc.pages.length;

for(var i = 0; i < pagesCount; i++)
        {
        sourceDoc.pages[i].pageItems.everyItem().select();
        var selection = app.activeDocument.selection;  
   
            for(var j = 0; j < selection.length; j++)
            {
                var Obj = selection[j].geometricBounds;
                var W = Obj[3] - Obj[1]
                var H = Obj[2] - Obj[0]
                if (W == width && H == height) {
                    selection[j].move(myLayer);
                }
            }
           
        }
   
        exit();
 
  • Спасибо
Реакции: LeonidB и Slx1

DrEgor

Участник
Сообщения
774
Реакции
68
если нужна заплатка для проверки выделен ли изначально объект - в самом начале допишите что-то типа

Код:
with (app) {
  if (selection.length == 0) {
    alert ("Ничего не выделено");
    exit();
    }
  }
 
  • Спасибо
Реакции: LeonidB и Slx1

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
Супер, огромное спасибо!!
 

DrEgor

Участник
Сообщения
774
Реакции
68
Работает только для тех фреймов, которые были отвязаны от шаблона. Фреймы на шаблонных страницах (и на обычных, но не отвязанные от шаблона) остаются в старом слое.
а разве не это было "хотелкой" ТС? '8]
в любом случае "я не волшебник, а только учусь", а если что - дык и поровнять наверное скрипт по ходу можно. ;]=
 
  • Спасибо
Реакции: Slx1

Slx1

Топикстартер
15 лет на форуме
Сообщения
944
Реакции
106
а разве не это было "хотелкой" ТС? '8]
в любом случае "я не волшебник, а только учусь", а если что - дык и поровнять наверное скрипт по ходу можно. ;]=

Ну в принципе, мне так и было нужно!))
Еще раз спасибо!
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
а разве не это было "хотелкой" ТС? '8]
Не, я про "вообще" :) Уж если все объекты заданного размера переносить на отдельный слой, то и на шаблонах тоже бы хорошо. Потому что на некоторых полосах они могут быть отвязаны, на некоторых - нет.
 

DrEgor

Участник
Сообщения
774
Реакции
68
Так я ж на то и намекаю... ;]]

нужно добавить перед -
Код:
sourceDoc.pages[i].pageItems.everyItem().select();

строку
Код:
app.menuActions.item("Override All Master Page Items").invoke();

Но оно будет отрывать все элементы от мастера. На сколько это актуально я не знаю.
В принципе, можно спрашивать скриптом про это, но в ТЗ такого небыло! ;]=
 
  • Спасибо
Реакции: LeonidB

DrEgor

Участник
Сообщения
774
Реакции
68
Не, я про "вообще" :) Уж если все объекты заданного размера переносить на отдельный слой, то и на шаблонах тоже бы хорошо. Потому что на некоторых полосах они могут быть отвязаны, на некоторых - нет.
Тут есть свои подводные камни. Далеко не факт, что элементы с мастера имеет смысл перетягивать на новый слой, который может оказаться поверх более важного.
Ну например колонцифры с мастера, которые изначально были перекрыты например картинкой, что было задумано и правильно, могу оказаться НА картинке, что уже нихт гуд.
 
  • Спасибо
Реакции: LeonidB

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Тут есть свои подводные камни. Далеко не факт, что элементы с мастера имеет смысл перетягивать на новый слой, который может оказаться поверх более важного.
Так ведь можно этот новый слой поместить рядом со старым, далеко его не утаскивать :)
 

DrEgor

Участник
Сообщения
774
Реакции
68
  • Спасибо
Реакции: LeonidB