Трансформировать объект

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

Бычок

Участник
Топикстартер
Сообщения
2
Реакции
0
Прошу знатоков подсказать, совсем недавно начал заниматься автоматизацией процесса верстки - и пока все очень тяжело дается.
Задача такова: выделить на каждом четном листе все textFrames и повернуть их вокруг центральной точки на 180 градусов.
Из примеров, поставляемых с InDesign, собрал вот такую штуку, все объекты выделяются на активном листе.
Код:
main();

function main(){
    var myObjectTypes = new Array;
    myObjectTypes.push("textFrames");
    var myCounter;
    var myObjectsToSelect = new Array;
    with(app.activeWindow.activeSpread){
                myPageItems = eval(myObjectTypes[0]);
                    for(myPageItemCounter = 0; myPageItemCounter < myPageItems.length; myPageItemCounter ++){
                        myObjectsToSelect.push(myPageItems[myPageItemCounter]);
                    }
        parent.select(myObjectsToSelect, SelectionOptions.replaceWith);
    }
}

Осталось это засунуть в цикл перебора страниц, определить четные и на них перевернуть.
Заранее крайне признателен всем откликнувшимся.
 
Код:
function rotate_matrix(item, angle) {
    var matrix = app.transformationMatrices.add({clockwiseRotationAngle:angle});
    item.transform(CoordinateSpaces.INNER_COORDINATES,  AnchorPoint.centerAnchor, matrix);
}


for (var i = 1; i < app.activeDocument.pages.length; i++) {
    rotate_matrix(app.activeDocument.pages[i].textFrames.everyItem(), 180);
    i++;
}
 
  • Спасибо
Реакции: Бычок
Вот что получилось в итоге:
скрипт перебирает все страницы, на каждой четной выделяет и группирует все текстовые фреймы и затем поворачивает группу вокруг своей оси.
Уверен, что все это можно сделать краше, гибче, более профессионально, но пока это не в моей компетенции.
Может быть, кому-то пригодится.
Спасибо Олегу Бутрину)
Код:
main();

function main()
{
    for (var j = 1; j <= app.activeDocument.pages.length; j++)
    {
        app.activeWindow.activePage = app.activeDocument.pages[j-1];       
        if (app.activeWindow.activePage.name % 2 == 0)
        {
            var myObjectsToSelect = new Array;
            with(app.activeWindow.activeSpread)
            {
                var myTextFrames = eval("textFrames");
                for(var i = 0; i < myTextFrames.length; i ++)
                {
                    myObjectsToSelect.push(myTextFrames[i]);
                }
                parent.select(myObjectsToSelect, SelectionOptions.replaceWith);
            }
            app.activeWindow.activePage.groups.add(app.selection);
            app.activeWindow.activePage.groups.item(-1).rotationAngle = 180;
            myObjectsToSelect = [];
        }           
    }
}
 
А вот как тот же код может выглядеть в очищенном виде:
Код:
main();

function main()
{
    for (var j = 0; j < app.activeDocument.pages.length; j++)
    {
        page = app.activeDocument.pages[j]
        if (page.documentOffset % 2 == 0)
        {
            spread = page.parent;
            frames = spread.textFrames.everyItem().getElements();
            if (frames.length != 0)
            {
                group = spread.groups.add(frames);
                group.rotationAngle = 180;
            }
        }
    }
}
Для создания группы не нужно выделять объекты и перелистывать страницы. Желательно, чтобы скрипт не производил действий сверх минимально необходимого — скорость работы выше и отменять действия проще.
 
Статус
Закрыто для дальнейших ответов.