[CC2014] Повернуть монтажную область.

Тема в разделе "Adobe Illustrator", создана пользователем ~RA~, 16 май 2016.

  1. Как в action повернуть монтажную область на 90°?
     
  2. Понимаю. я не один такой. Интереса ради пошустрил по офф-форуму — простых методов не указано. Только крутить страницу и элементы. В качестве альтернативы — разблокировать всё, сгруппировать всё, а потом крутить. А вдруг есть метод проще?
     
  3. Как?
     
    • Одобряю Одобряю x 1
  4. Вижу script, а вопрос был про action.
     
  5. Код:
    /* Скрипт для пакетного или единичного поворота документа
    Корректно работает, если в документе содержится один артборд.
    */
    
    /* Окно меню с выбором вырианта работы:
    поворачиваем активный документ или все документы в выбранной папке */
    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 ()}
    
     
    • Одобряю Одобряю x 3
  6. @INTER, пользовался я скриптом пользовался, нарадоваться не мог и тут бац, вторая смена… :(
    Обнаружился глюк. Помогите исправить.
    Проявляется на этом файле.
     
  7. Что ж ты хотел, на клипнутых и маскированных объектах скриптовая магия не работает, они при повороте и масштабировании рассыпаются, это давно известный факт
    Sad but true. *(
     
    • Одобряю Одобряю x 1
  8. Убрал маску. Поведение не изменилось.
    И да, всё работает на маскированных объектах.
     
  9. Все маски убрал? Их там вложенных несколько штук
    upload_2016-12-5_13-17-9.png
     
    • Одобряю Одобряю x 1
  10. Перескачай.
    Да и маски ни разу не мешали раньше вращать.
     
  11. Да я даже и скрипт запускать не буду
    Засада видна невооруженным глазом - в скрипте идет перебор pageitemов всех слоев
    На масках и клипнутых группах такая схема просто тупо не работает - половина объектов не видна и хоть застрелись 'otbline''\:E@@@'
     
    • Одобряю Одобряю x 1
  12. Как сделать, чтобы заработало?
     
  13. Крутить не через rotate, а через вызов экшна, к примеру
    И то, скорее всего, не универсально будет *(
     
    • Одобряю Одобряю x 1
  14. Немного потеоретизирую
    Основной цикл
    Код:
    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
    Тогда, возможно, на клипах и маскированных объектах работать будет, насколько устойчиво и универсально - надо проверять.
     
    • Одобряю Одобряю x 1
  15. а для чего это вообще нужно?
    не проще например сохранить во внешний файл, сделать импорт и повернуть placedItem?
     
  16. Вот что это.
    Скриншот 2016-12-05 13.49.09.png
     
  17. Что это?
     
  18. повернуть монтажную область на 90°
     
  19. Впрочем, возможно, все не так плохо, как я описал выше и можно обойтись меньшей кровью без использования экшнов.
    Вариант номер ноль, который стоит попробовать сперва: разбивать на два цикла придется по любому, как я уже говорил, первый цикл открывает, второй закрывает.
    Между ними вместо вызова экшна спорный перебор 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()
    А если и это не поможет - через экшн
     
    • Одобряю Одобряю x 1

Поделиться этой страницей

   Рейтинг@Mail.ru