[AI CC-CC2022] Повернуть монтажную область.

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

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
12 625
Реакции
3 704
Как в action повернуть монтажную область на 90°?
 
Понимаю. я не один такой. Интереса ради пошустрил по офф-форуму — простых методов не указано. Только крутить страницу и элементы. В качестве альтернативы — разблокировать всё, сгруппировать всё, а потом крутить. А вдруг есть метод проще?
 
Как в action повернуть монтажную область на 90°?
Код:
/* Скрипт для пакетного или единичного поворота документа
Корректно работает, если в документе содержится один артборд.
*/

/* Окно меню с выбором вырианта работы:
поворачиваем активный документ или все документы в выбранной папке */
var doc = app.activeDocument;
var WorkPath = doc.path;
var Metka='Current';
var Rotate=[];
var Rotation;
var files;
var sourceFile;
var SaveOptionPdf = new PDFSaveOptions();

function RotateDoc () {
var doc = app.activeDocument;
var ArtBoardSize = doc.artboards[0].artboardRect;
var ParentLayer = doc.layers;
var LockedLayers = [];
var UnvisibleLayers = [];

var ArtBoardWidth=Math.abs(ArtBoardSize[2]-ArtBoardSize[0]);
var ArtBoardHeight=Math.abs(ArtBoardSize[3]-ArtBoardSize[1]);

var dX= (ArtBoardSize[2]+ ArtBoardSize[0])/2;
var dY = (ArtBoardSize[3]+ ArtBoardSize[1])/2;

doc.artboards[0].artboardRect = [-ArtBoardWidth/2, ArtBoardHeight/2, ArtBoardWidth/2, -ArtBoardHeight/2];
if (Rotation!=180) {
doc.artboards[0].artboardRect = [-ArtBoardHeight/2, ArtBoardWidth/2, ArtBoardHeight/2, -ArtBoardWidth/2];
}


for (i=0; i<doc.layers.length; i++) {
        if (doc.layers[i].locked == true) {
            LockedLayers[i] = doc.layers[i];
            // alert (LockedLayers[i])
            }
        if (doc.layers[i].visible == false) {
            UnvisibleLayers[i] = doc.layers[i]
            }
    doc.layers[i].locked = false;
    doc.layers[i].visible = true;
    for (k=0; k<doc.layers[i].pageItems.length; k++) {
        if (doc.layers[i].pageItems[k].parent == ParentLayer[i]) {
        doc.layers[i].pageItems[k].translate(-dX, -dY);       
        doc.layers[i].pageItems[k].rotate(Rotation,true, true, true, true, Transformation.DOCUMENTORIGIN);
        }
    }
      // if (doc.layers[i].name == 'knife') { doc.layers[i].locked = true }
}
for (i=0; i<LockedLayers.length; i++) {
        if (LockedLayers[i]!=null) {
     LockedLayers[i].locked = true;
     }
}
for (i=0; i<UnvisibleLayers.length; i++) {
        if (UnvisibleLayers[i]!=null) {
     UnvisibleLayers[i].visible = false;
     }
}
}
// alert (WorkPath);
var WorkOptions = new Window ('dialog', 'Повернуть документ');
var AllFiles = WorkOptions.add ('group');
AllFiles.orientation = 'row';
var AllFilesTxt = AllFiles.add ('statictext', undefined, 'Все документы в этой папке');
var ChAllFiles = AllFiles.add ('checkbox');
var RotateGroup = WorkOptions.add ('group');
RotateGroup.orientation = "row";
Rotate[0] = RotateGroup.add ('button', [0,0, 54,18], '90\u00b0');
Rotate[0].active = true;
Rotate[1] = RotateGroup.add ('button', [0,0, 54,18], '180\u00b0');
Rotate[2] = RotateGroup.add ('button', [0,0, 54,18], '270\u00b0');
Rotate[0].onClick = function () {Rotation = 90; WorkOptions.close ()    }
Rotate[1].onClick = function () {Rotation = 180; WorkOptions.close () }
Rotate[2].onClick = function () {Rotation = 270; WorkOptions.close () }
WorkOptions.show ();
//alert (Rotation);
if (ChAllFiles.value == true) {
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    files = new Array();
    files = WorkPath.getFiles('*.pdf');
    // alert (files.length);
    for (a=0; a<files.length; a++) {
        sourceFile = app.open(files[a]);
        doc = app.activeDocument;
        NameFiles = doc.fullName;
        // alert (NameFiles);
        sourceFile = RotateDoc();
        doc.saveAs(NameFiles, SaveOptionPdf);
        doc.close(SaveOptions.DONOTSAVECHANGES);
    }
}
else { doc = RotateDoc ()}
 
  • Спасибо
Реакции: RIKITIKI, ~RA~ и dumbm1
@INTER, пользовался я скриптом пользовался, нарадоваться не мог и тут бац, вторая смена… :(
Обнаружился глюк. Помогите исправить.
Проявляется на этом файле.
 
Что ж ты хотел, на клипнутых и маскированных объектах скриптовая магия не работает, они при повороте и масштабировании рассыпаются, это давно известный факт
Sad but true. *(
 
  • Спасибо
Реакции: ~RA~ и Jeine
Перескачай.
Да и маски ни разу не мешали раньше вращать.
 
Да я даже и скрипт запускать не буду
Засада видна невооруженным глазом - в скрипте идет перебор pageitemов всех слоев
На масках и клипнутых группах такая схема просто тупо не работает - половина объектов не видна и хоть застрелись 'otbline''\:E@@@'
 
  • Спасибо
Реакции: ~RA~ и Jeine
Крутить не через rotate, а через вызов экшна, к примеру
И то, скорее всего, не универсально будет *(
 
  • Спасибо
Реакции: ~RA~ и Jeine
Немного потеоретизирую
Основной цикл
Код:
for (i=0; i<doc.layers.length; i++) {
        if (doc.layers[i].locked == true) {
            LockedLayers[i] = doc.layers[i];
            // alert (LockedLayers[i])
            }
        if (doc.layers[i].visible == false) {
            UnvisibleLayers[i] = doc.layers[i]
            }
    doc.layers[i].locked = false;
    doc.layers[i].visible = true;
    for (k=0; k<doc.layers[i].pageItems.length; k++) {
        if (doc.layers[i].pageItems[k].parent == ParentLayer[i]) {
        doc.layers[i].pageItems[k].translate(-dX, -dY);       
        doc.layers[i].pageItems[k].rotate(Rotation,true, true, true, true, Transformation.DOCUMENTORIGIN);
        }
    }
      // if (doc.layers[i].name == 'knife') { doc.layers[i].locked = true }
}
for (i=0; i<LockedLayers.length; i++) {
        if (LockedLayers[i]!=null) {
     LockedLayers[i].locked = true;
     }
}
for (i=0; i<UnvisibleLayers.length; i++) {
        if (UnvisibleLayers[i]!=null) {
     UnvisibleLayers[i].visible = false;
     }
}
}
разбить на два - в первом сделать видимыми все невидимые слои и разблокировать во втором - спрятать-заблокировать обратно
Строки
Код:
 for (k=0; k<doc.layers[i].pageItems.length; k++) {
        if (doc.layers[i].pageItems[k].parent == ParentLayer[i]) {
        doc.layers[i].pageItems[k].translate(-dX, -dY);       
        doc.layers[i].pageItems[k].rotate(Rotation,true, true, true, true, Transformation.DOCUMENTORIGIN);
        }
    }
выпилить как потенциально глючные
Между этими двумя циклами вставить вызов экшна Select All - Move - Rotate
Тогда, возможно, на клипах и маскированных объектах работать будет, насколько устойчиво и универсально - надо проверять.
 
  • Спасибо
Реакции: ~RA~ и Jeine
а для чего это вообще нужно?
не проще например сохранить во внешний файл, сделать импорт и повернуть placedItem?
 
Вот что это.
Скриншот 2016-12-05 13.49.09.png
 
Впрочем, возможно, все не так плохо, как я описал выше и можно обойтись меньшей кровью без использования экшнов.
Вариант номер ноль, который стоит попробовать сперва: разбивать на два цикла придется по любому, как я уже говорил, первый цикл открывает, второй закрывает.
Между ними вместо вызова экшна спорный перебор pageitemов вот в таком виде:
Код:
for (k=0; k<doc.pageItems.length; k++) {
        if (doc.pageItems[k].parent.typename == "Layer") {
        doc.pageItems[k].translate(-dX, -dY);       
        doc.pageItems[k].rotate(Rotation,true, true, true, true, Transformation.DOCUMENTORIGIN);
        }
    }
есть вероятность, что такое сработает
если не сработает, попробовать понавставлять redraw()
А если и это не поможет - через экшн
 
  • Спасибо
Реакции: ~RA~ и Jeine
Статус
Закрыто для дальнейших ответов.