[AI CC-CC2021] Выделение всех объектов в документе и вставка их в уже имеющийся документ с выравниванием по центру

Sam1993

Участник
Топикстартер
Сообщения
6
Реакции
0
Добрый вечер Всем.
Столкнулся с проблемкой, и не могу решить ее...

В чем суть: Есть документ (Doc№1) в несколько объектов (этот документ открыт (активный)). Есть второй документ (Doc№2) с набором каких то объектов (он располагается в определенной папке). Нужно открыть документ (Doc№2), который находится в папке и скопировать в него все объекты, которые расположены в открытом документе (Doc№1).
При этом Все объекты должны быть как бы в группе, что бы можно было им задать определенный размер по высоте (с уменьшением ширины во столько же раз - пропорционально изменить размер так сказать) и от центровать по Артборду.

Из имеющегося кода есть следующее:


//Выделение всех объектов в активном документе
app.activeDocument.activeLayer.hasSelectedArtwork = true;
var docSelected = app.activeDocument.activeLayer;


// Вот тут должна быть какая то связка.
Была мысль растрировать все что есть и перенести картинку в новый документ 2 (и в этом случае бы подошел ниже написанный код),
но не смог найти отрастрировать все выделенное....
Вторая мысль была, это занести все в группу и перенести,
но не осилил это. (Была мысль сгруппировать все объекты компандой «var gr = app.executeMenuCommand ('group')» , далее выделить группу с назначением ей переменной и исправив как то нижний код перенести все в док 2 ...)


//Рабочий вариант вставки объекта в Doc2 документ.
Но эта часть когда может перенести только один выделенный объект.

var fileRef = new File("C:/Users....");
var docSelected = app.activeDocument.selection;
var myDoc = app.open (fileRef)
var doc = activeDocument;
selectContur=docSelected[0].duplicate(doc,ElementPlacement.PLACEATEND);


Как то так.
Выше описал как себе этот процесс представляю я, но может у вас есть какие то более разумные идеи, а может и готовые решения....

Спасибо за помощь
 

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
послушаю что скажут умные люди... 'otbline'
Вобще столько букф, что трудно понять смысл задачи...)))) А экшен не подходит чтоли?
 

Sam1993

Участник
Топикстартер
Сообщения
6
Реакции
0
послушаю что скажут умные люди... 'otbline'
Вобще столько букф, что трудно понять смысл задачи...)))) А экшен не подходит чтоли?
Экшен подошел бы, но хочется что бы это был все таки один файл js, так как выше указанная задача является лишь маленькой частью кода.
"Вобще столько букф" - ну можно не смотреть на то что я уже написал и и на мои размышления о путях решения и рассмотреть только абзац после "В чем суть:...". Если немного попроще описать задачу - то нужно несколько объектов из одного документа вставить в другой документ и выровнять группу этих объектов по центру артборда
 

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
Если немного попроще описать задачу - то нужно несколько объектов из одного документа вставить в другой документ и выровнять группу этих объектов по центру артборда

Скопировать и вставить.... делов то .
а выравнивание насколько мне известно сложная задача.... я сама через экшен делаю ))))
Код:
       app.doScript ("actionName", "folderName");
       app.redraw();
 
Последнее редактирование:

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
вообще мне самой интересно что скажут насчет выравнивания - )))
но по- моему эта задача непростая.... 'otbline'
 
Последнее редактирование:

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Вобще столько букф, что трудно понять смысл задачи...))))
Ну кто-бы говорил.
указанная задача является лишь маленькой частью кода
Если делаете большой проект, то садитесь за освоение JS или готовьте денежку программисту. Тут нет третьего пути.
 
  • Спасибо
Реакции: NatalieRedFox_333

Sam1993

Участник
Топикстартер
Сообщения
6
Реакции
0
Ну кто-бы говорил.

Если делаете большой проект, то садитесь за освоение JS или готовьте денежку программисту. Тут нет третьего пути.
Дак в том то и суть, что все написано и работает, и вот на финишной прямой уткнулся в эту проблемку.
В целом весь проект дублирует один объект с определённым интервалом по документу заданного размер с расстановкой всех размерностей.
И последний этап - это вставка отрисованного чертежа в готовый бланк, который потом будет экспортироваться в jpeg.

JS - осваиваю, просто подумал что знающие люди смогут немного подсказать...
 

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
возможно это поможет....)))
Код:
  // ==============Duplicate====================

  var newItem;
  var docSelected = app.activeDocument.selection;

  if (docSelected.length > 0) {
    // Create a new document and move the selected items to it.

    var newDoc = app.documents.add(DocumentColorSpace.RGB,864,864); //RGB mode

    /*
    var newDoc = app.documents.addDocument ('', new DocumentPreset (), true); //Pop-Up Dialog
    */

    if (docSelected.length > 0) {
      for (var i = 0; i < docSelected.length; i++) {
        docSelected[i].selected = false;
        newItem = docSelected[i].duplicate(newDoc, ElementPlacement.PLACEATEND);

      }
    }
  }
 

Sam1993

Участник
Топикстартер
Сообщения
6
Реакции
0
возможно это поможет....)))
Код:
  // ==============Duplicate====================

  var newItem;
  var docSelected = app.activeDocument.selection;

  if (docSelected.length > 0) {
    // Create a new document and move the selected items to it.

    var newDoc = app.documents.add(DocumentColorSpace.RGB,864,864); //RGB mode

    /*
    var newDoc = app.documents.addDocument ('', new DocumentPreset (), true); //Pop-Up Dialog
    */

    if (docSelected.length > 0) {
      for (var i = 0; i < docSelected.length; i++) {
        docSelected[i].selected = false;
        newItem = docSelected[i].duplicate(newDoc, ElementPlacement.PLACEATEND);

      }
    }
  }
Спасибо большое за подсказку))
В процессе поиска по вашим подсказкам наткнулся на путь к решению

Код прикрепляю, вдруг кому то пригодится:

JavaScript:
app.activeDocument.activeLayer.hasSelectedArtwork = true;
app.executeMenuCommand ("OffsetPath v22");
app.executeMenuCommand ("outline");
app.executeMenuCommand ("compoundPath");
var fileRef = new File("C:/Users..........");
var docSelected = app.activeDocument.selection; // Активный объект
var myDoc = app.open (fileRef) //Открыть файл
var doc = activeDocument;
selectContur=docSelected[0].duplicate(doc,ElementPlacement.PLACEATEND);

var dimPX = 2.834645
var baseHeight = selectContur.height;
var baseWidth = selectContur.width;
var differenceHeight = baseHeight/210;
var changedHeight = 210;
var changedWidth = baseWidth/differenceHeight;

selectContur.height = changedHeight*dimPX;
selectContur.width = changedWidth*dimPX;
var alignWidth = ((210-changedWidth)/2)*dimPX
selectContur.position = [alignWidth,-123]
 

Gad

Сообщения
2 975
Реакции
1 408
Осторожнее с этим кодом :) Для примера перенесите им объекты из этого файла :)
 

Вложения

  • Test2.zip
    3 МБ · Просм.: 148
  • Спасибо
Реакции: NatalieRedFox_333

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
Спасибо большое за подсказку))
В процессе поиска по вашим подсказкам наткнулся на путь к решению

Код прикрепляю, вдруг кому то пригодится:

JavaScript:
app.activeDocument.activeLayer.hasSelectedArtwork = true;
app.executeMenuCommand ("OffsetPath v22");
app.executeMenuCommand ("outline");
app.executeMenuCommand ("compoundPath");
var fileRef = new File("C:/Users....");
var docSelected = app.activeDocument.selection; // Активный объект
var myDoc = app.open (fileRef) //Открыть файл
var doc = activeDocument;
selectContur=docSelected[0].duplicate(doc,ElementPlacement.PLACEATEND);

var dimPX = 2.834645
var baseHeight = selectContur.height;
var baseWidth = selectContur.width;
var differenceHeight = baseHeight/210;
var changedHeight = 210;
var changedWidth = baseWidth/differenceHeight;

selectContur.height = changedHeight*dimPX;
selectContur.width = changedWidth*dimPX;
var alignWidth = ((210-changedWidth)/2)*dimPX
selectContur.position = [alignWidth,-123]
да это фигня какая то ..)))) 'otbline'
 
Последнее редактирование:

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
Осторожнее с этим кодом :) Для примера перенесите им объекты из этого файла :)
Gad скажи пожалуйста.... скриптом можно обьекты поставить по центру?
Я смотрела форум Adobe - там нет решения.... ))))
Весь инет перевернула... не нашла такого скрипта чтоб делал это.... там же надо считать, как говорят умные люди, размеры каждого.. вроде так?
 
Последнее редактирование:

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
app.executeMenuCommand ("compoundPath");
если обьекты накладываются то вообще ерунда будет . 'otbline'

их сначала делить надо )))
 

Gad

Сообщения
2 975
Реакции
1 408
скриптом можно обьекты поставить по центру?
Можно конечно, но не все :) В примере выше есть маска непрозрачности, к ней доступа из скрипта напрямую вроде как нет (ну я не нашел по крайней мере :) ).
Вроде как самое нормальное решение через экшен, но можно и поизвращаться :)
Если ТС нужно всё из одного файла в другой и не важно сохранить слои, то можно попробовать переносить все с нужного артборда во временный файл, линковать, перемещать/масштабировать потом внедрить...
 
Последнее редактирование:
  • Спасибо
Реакции: NatalieRedFox_333

NatalieRedFox_333

Чего мне бояться? - подумала Красная Шапочка...)))
Сообщения
2 089
Реакции
145
Последнее редактирование:

_MBK_

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

Sam1993

Участник
Топикстартер
Сообщения
6
Реакции
0
Осторожнее с этим кодом :) Для примера перенесите им объекты из этого файла :)
ОО, интересно....

Была мысль конечно занести все элементы в группу циклом и как то с помощью этой команды
JavaScript:
docSelected[0].duplicate(doc,ElementPlacement.PLACEATEND);
или ее аналога (если она не подойдет для группы) перенести все.

Но сколько не шерстил интенет - не нашел.

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

Еще раз спасибо всем за ответ))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 201
Реакции
10 848
  • Спасибо
Реакции: NatalieRedFox_333