[ID CC-CC2021] Сдвинуть фреймы по лейблам

aleksasha

Топикстартер
15 лет на форуме
Сообщения
316
Реакции
5
Может кто-то быстро подскажет темы в ветке, где народ сдвигает содержимое страниц за пределы разворотов? А еще лучше по лейблам... Чтобы только избранные фреймы мувились.
 

Leha_Ygli

Участник
Сообщения
21
Реакции
25
Вот такой скрипт есть под рукой.
Двигается или удаляется только то, что в пределах полей.

JavaScript:
// CleanOrMove
app.doScript(main, undefined , undefined,UndoModes.fastEntireScript,"Run " + app.activeScript.name);

function main() {
    
    var Doc = app.activeDocument;
    
    myDialog = app.dialogs.add({ name: "Настройки:" });
    with (myDialog.dialogColumns.add()) {
        
        dialogRows.add().staticTexts.add({staticLabel: "Брать страницы:"});
        oddBox = checkboxControls.add({staticLabel:"Четные", minWidth: 150, checkedState: true});
        evnBox = checkboxControls.add({staticLabel:"Нечетные", minWidth: 150, checkedState: true});

        dialogRows.add().staticTexts.add({staticLabel: "Игнорировать страницы:"});
        var pagesBox = dialogRows.add().textEditboxes.add({editContents: "2,3", minWidth:220});
        
        dialogRows.add().staticTexts.add({staticLabel: ""});
        var RB = radiobuttonGroups.add();
        with (RB) {
            var cleanRB = radiobuttonControls.add({ staticLabel: "Удалить", checkedState: true });
            var moveRB = radiobuttonControls.add({ staticLabel: "Сдвинуть на поля" });
        }
        
        dialogRows.add().staticTexts.add({staticLabel: ""});
        removeLockedBox = checkboxControls.add({staticLabel:"Включая заблокированные объекты", minWidth: 150, checkedState: true});
    }
    var myResult = myDialog.show();
    if (!myResult) { exit(); }
    
    // Страницы-исключения:
    var exceptPages = pagesBox.editContents;
    exceptPages = exceptPages.replace(" ", "");
    var exceptPages = exceptPages.split(",");
    
    // Стили объектов-исключения
    var objStyles = [];

    for (p = 0, pLen = Doc.pages.length; p < pLen; p++) {

        var myPage = Doc.pages[p];
        
        if (checkExceptPages(myPage, exceptPages)) { continue }
        
        // Размеры и координаты:
        var pageBounds = myPage.bounds;
        var margPref = myPage.marginPreferences;
        var y1 = pageBounds[0];
        var x1 = pageBounds[1];
        var y2 = pageBounds[2];
        var x2 = pageBounds[3];
        var pageWidth = (x2-x1);
        var pageHeight = (y2-y1);
        var xOffset = ((x2 - x1) + 10);

        // чет-нечет
        pN = +myPage.name;
        if (pN % 2 == 0 ) {
            if (!oddBox.checkedState) { continue; }
            var areaBounds = [y1 + margPref.top, x1 + margPref.right, y2 - margPref.bottom, x2 - margPref.left];
            xOffset = -xOffset;
        } else {
            if (!evnBox.checkedState) { continue; }
            var areaBounds = [y1 + margPref.top, x1 + margPref.left, y2 - margPref.bottom, x2 - margPref.right];
        }
        
        for (z = myPage.pageItems.length-1; z >= 0; z--) {

            var item = myPage.pageItems[z];

            // Исключения:
            if (item.itemLayer.locked == true) { continue } // Заблокированные слои
            if (item.itemLayer.visible == false) { continue } // Невидимые слои
            if (item.locked == true) {
                if (removeLockedBox.checkedState) {
                    item.locked = false;
                } else {
                    continue;
                }
            }
            if (checkObjStyles(item, objStyles)) { continue }
            
            // Исключения по типу:
            if (item.parent.constructor.name === "Group") { continue }
            if (item.constructor.name === "Group") { continue }

            // Исключения по коррдинатам:
            bounds = item.geometricBounds;
            if (!objectsAreCrossing(bounds, areaBounds)) { continue }




            if (cleanRB.checkedState) {
                item.remove();
            } else {
                item.move([bounds[1] + xOffset, bounds[0]]);
            }
            
        }



    }
    

    function GB (element, point) {
        return element.geometricBounds[point];
    }

    function objectsAreCrossing(itemBounds, areaBounds) {

        var iX = itemBounds[1] + ((itemBounds[3] - itemBounds[1])/2);
        var iY = itemBounds[0] + ((itemBounds[2] - itemBounds[0])/2);

        var aLft = areaBounds[1];
        var aRht = areaBounds[3];
        var aTop = areaBounds[0];
        var aBot = areaBounds[2];
        
        if (iX > aLft && iX < aRht && iY > aTop && iY  < aBot) {
            return true;
        }
        
        return false;

    }

    function checkObjStyles(frame, styles) {
        for (s = 0, sLen = styles.length; s < sLen; s++) {
            if (frame.appliedObjectStyle.name === styles[s]) { return true; }
        }
        return false;
    }
    
    function checkExceptPages(myPage, exceptPages) {
        for (e =0, eLen = exceptPages.length; e < eLen; e++) {
            if (myPage.name === exceptPages[e].toString()) { return true; }
        }
        return false;
    }

}
 
  • Спасибо
Реакции: aleksasha