[AI CC-CC2022] Прямоугольник вокруг выделенных объектов.

  • Автор темы Автор темы DerDas
  • Дата начала Дата начала

DerDas

Участник
Топикстартер
Сообщения
53
Реакции
11
Добрый день.
Версия значения не имеет.
Есть ли в Иллюстраторе функция-плагин-скрипт, который может в один-два щелчка мышью или клавиатурным сокращением рисует габаритный прямоугольник вокруг выделенных объектов?
Похоже работает <Artboards — Fit to selected art>, но эта команда в данном случае не нужна и она учитывает толщину линий. Учет толщины линий навредит. Габаритный прямоугольник нужен точно по краям выделенных линий, без учета их толщин.
Стандартными методами, с помощью HotDoor или скриптов найти не удалось. Возможно, плохо искал.
Есть ли варианты?
 
самым простым и надежным способом остается через Fit to selected art


Не по теме:
Как оказалось сбросить толщину всех штрихов в 0 скриптом в AI веселая задача '))'

JavaScript:
#target illustrator
if (app.documents.length !== 0) {
    var doc = app.activeDocument;
    if (doc.selection.length > 0) {
        var obj = [];
        for (var i = 0; i < doc.selection.length; i++) {obj[i] = doc.selection[i];};
        doc.selection = false;
        var tempLayer = doc.layers.add();
        var tempGroup = doc.groupItems.add();
        for (p=obj.length-1;p>=0;p--) {obj[p].duplicate(tempGroup);};
        tempGroup.selected = true;
        selectionStrokeWidth (0.000001);
        var abIndex = doc.artboards.getActiveArtboardIndex();
        var refgb = doc.artboards[abIndex].artboardRect;
        doc.fitArtboardToSelectedArt(abIndex);
        var gb = doc.artboards[abIndex].artboardRect;
        doc.artboards[abIndex].artboardRect = refgb;
        var newRect = doc.pathItems.rectangle (gb[1], gb[0], (gb[2]-gb[0]), (gb[1]-gb[3]));
        try {
            var newRectColor = doc.spots.getByName("OverallSizeColor").color;
            } catch (e) {
                var newColor = new CMYKColor();
                newColor.cyan = 100;
                newColor.magenta = 0;
                newColor.yellow = 0;
                newColor.black = 50;
                var newSpot = doc.spots.add();
                newSpot.name = "OverallSizeColor";
                newSpot.colorType = ColorModel.SPOT;
                newSpot.color = newColor;      
                var newRectColor = new SpotColor();
                newRectColor.spot = newSpot;
            };
        var noColor = new NoColor();
        newRect.strokeColor = newRectColor;
        newRect.fillColor = noColor;
        newRect.strokeWidth = 0.25;
        try {
            var layerOverallSize = doc.layers.getByName("OverallSize");
            newRect.move(layerOverallSize, ElementPlacement.INSIDE);
            tempLayer.remove();
        } catch (e) { tempLayer.name = "OverallSize" }
        tempGroup.remove();
    }    else {alert ("Нет выделенных объектов, миссия провалена :(")};
}    else {alert('Нет открытых документов');};

function selectionStrokeWidth (w) {
//beginning Action Set==========================================
var ActionString = [ '/version 3',
'/name [ 9',
'    536372697074536574',
']',
'/isOpen 1',
'/actionCount 1',
'/action-1 {',
'    /name [ 12',
'        536372697074416374696f6e',
'    ]',
'    /keyIndex 0',
'    /colorIndex 0',
'    /isOpen 1',
'    /eventCount 1',
'    /event-1 {',
'        /useRulersIn1stQuadrant 0',
'        /internalName (ai_plugin_setStroke)',
'        /localizedName [ 10',
'            536574205374726f6b65',
'        ]',
'        /isOpen 0',
'        /isOn 1',
'        /hasDialog 0',
'        /parameterCount 7',
'        /parameter-1 {',
'            /key 2003072104',
'            /showInPalette -1',
'            /type (unit real)',
'            /value '+w,
'            /unit 592476268',
'        }',
'        /parameter-2 {',
'            /key 1667330094',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 8',
'                4275747420436170',
'            ]',
'            /value 0',
'        }',
'        /parameter-3 {',
'            /key 1836344690',
'            /showInPalette -1',
'            /type (real)',
'            /value 10.0',
'        }',
'        /parameter-4 {',
'            /key 1785686382',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 10',
'                4d69746572204a6f696e',
'            ]',
'            /value 0',
'        }',
'        /parameter-5 {',
'            /key 1684825454',
'            /showInPalette -1',
'            /type (integer)',
'            /value 0',
'        }',
'        /parameter-6 {',
'            /key 1684104298',
'            /showInPalette -1',
'            /type (boolean)',
'            /value 0',
'        }',
'        /parameter-7 {',
'            /key 1634494318',
'            /showInPalette -1',
'            /type (enumerated)',
'            /name [ 6',
'                43656e746572',
'            ]',
'            /value 0',
'        }',
'    }',
'}'].join('\n');
//end Action Set================================================
            var f = new File('~/ScriptSet.aia');
            f.open('w');
            f.write(ActionString);
            f.close();
            loadAction (f);
            f.remove();
            ActionString = null;
            app.doScript("ScriptAction", "ScriptSet");
            unloadAction("ScriptSet", "");
};
 
Последнее редактирование:
  • Спасибо
Реакции: ITIT и Chiga
Так тогда уж лучше все в экшн загнать. И неплохо бы после (а желательно и перед) вызовом redrawов животворящих вставить
 
По аналогии с темой про артборд
Код:
doc = app.activeDocument;
if (app.selection.length > 0){
    var rect = app.selection[0].geometricBounds;
    for (i = 1; i < app.selection.length; i++){
        if (doc.pageItems[i].geometricBounds[0] < rect[0]) rect[0] = doc.pageItems[i].geometricBounds[0];
        if (doc.pageItems[i].geometricBounds[1] > rect[1]) rect[1] = doc.pageItems[i].geometricBounds[1];
        if (doc.pageItems[i].geometricBounds[2] > rect[2]) rect[2] = doc.pageItems[i].geometricBounds[2];
        if (doc.pageItems[i].geometricBounds[3] < rect[3]) rect[3] = doc.pageItems[i].geometricBounds[3];
    }
    var newpath = doc.pathItems.rectangle(rect[1],rect[0],rect[2] - rect[0],rect[1] - rect[3], false);
}
Можно скриптом и маски перебирать, но мне пока лень.
 
Можно скриптом и маски перебирать, но мне пока лень.
А зря. С масками там как раз и самая засада, этот путь работает только для простых обьектов, набросанных на макете, для общего случая он ведет в тупик.
 
Ну желающие могут присоединиться :)
А смысл? 1) К некоторым маскам доступа из скриптинга все равно нету 2) визуальные размеры маскированного объекта это вовсе не постое пересечение прямоугольников ...
 
1) К некоторым маскам доступа из скриптинга все равно нету 2) визуальные размеры маскированного объекта это вовсе не постое пересечение прямоугольников ...
Kаждый делает под свои задачи. Такой алгоритм в библиотеке не помешал бы, пусть он и ограничен возможностями api.
 
Зачем? Мне через артборд вполне хватает, хотелку с игнорированием обводок я откровенно не понимаю.
Ну если даже и надо без обводок, костыль с обезобвоживанием кажется вполне нормальным.
Не стоит плодить потенциально слабые и глючные места в программе если можно обойтись проверенными средствами.
 
  • Спасибо
Реакции: ITIT
Опять болтун ляпнул, чтобы ляпнуть и увел разговор в сторону.
Решение найдено, тема закрыта.

Хватит уже.
1689844641720.png



Не по теме:
бросить толщину всех штрихов в 0 скриптом
Cmd+A — панель Stroke — 0 pt.
 
Последнее редактирование:
Cmd+A — панель Stroke — 0 pt.
Правда чтоль? :) А мужики то не знали '))' Может покажете как это в скрипт заснуть?
ляпнул, чтобы ляпнуть и увел разговор в сторону
Не вижу ни одного его поста не по теме либо где он ошибся :) Покажете?
Решение найдено,
Но спасибо нажать в лом?
 
Последнее редактирование:
Опять болтун ляпнул, чтобы ляпнуть и увел разговор в сторону.
Решение найдено, тема закрыта.

Хватит уже.
Посмотреть вложение 159675


Не по теме:

Cmd+A — панель Stroke — 0 pt.
Вот это поворот! Уважаемый, вы таблетки принять забыли или июльское солнышко головку напекло и вы потерялись во времени и пространстве? '))'