[AI CS4-CS6] Как получить размер Workspace в CS6

Виталий Поляков

Участник
Топикстартер
Сообщения
6
Реакции
1
Привет. Возникла сложность с определением размеров рабочей области (Workspace) в CS6. Есть у кого-то идеи как узнать размеры?

Я понимаю, что она должна быть 16384 на 16384 на CS6. Но как определить местоположение этой области относительно координатной сетки в текущем файле?

VirtualBox_xp_04_12_2020_12_52_40.png


В Creative Cloud сработал следующий трюк:

Код:
MaiFuncs.getWorkspaceSize = function(){
    var doc = app.activeDocument;
    var res = {};
    var step = 1000;
    //Делаем шаг по тысяче пикселей. До тех пор пока артборд успешно не создастся
    res.x_min = this.getWorkspaceCoord(-16000, step, "x");
    res.x_max = this.getWorkspaceCoord(16000, -step, "x");;
    res.y_min = this.getWorkspaceCoord(-16000, step, "y");;
    res.y_max = this.getWorkspaceCoord(16000, -step, "y");;
    return res;
    
    }


MaiFuncs.getWorkspaceCoord = function(start, delta, coord) {
    
    //Рассчитываем максимальные координаты артбордов - методом проб и ловли ошибок. К сожалению,
    //в разных иллюстраторах разные размеры этих областей и в ЯваСкрипт никак иначе информацию не получить.
    var artboards = app.activeDocument.artboards;
    var aIndex = artboards.getActiveArtboardIndex();
    var repeat = true;
    var artboard;
    
    while (repeat) {
        try {
            repeat = false;
            var rect;
            if (coord == "x")
                rect = [start, 0, start+1, -1];
            else
                rect = [0 , start, 1, start-1];
            artboard = artboards.add(rect);
            }
        catch (err) {
            start = start+delta;
            repeat = true;
            }
        }
    artboard.remove();
    artboards.setActiveArtboardIndex(aIndex);
    return start;
    }

Но CS6 не крэшится. Может есть какой-то другой способ определить размеры Workspace?
 

Виталий Поляков

Участник
Топикстартер
Сообщения
6
Реакции
1
Чтобы рассчитать какое количество артбордов можно создать и с какими координатами.
 

Виталий Поляков

Участник
Топикстартер
Сообщения
6
Реакции
1
Сам спросил, сам отвечу ) Идею решения нашел тут:
How to get bounds of largest possible document area?

На основе этого решения написал такой код:

JSX:
MaiFuncs.getWorkspaceSizeCS6 = function(){
    var d = activeDocument,
        rects = [],
        abs = d.artboards;
    abs.add([0, 1, 1, 0]);
    abs.add([0, 1, 1, 0]);
    for (i = abs.length - 3; i >= 0; i--) {
        var a = abs[i];
        rects.push([a.artboardRect, a.name]);
        a.remove();
        }
    d.rearrangeArtboards(DocumentArtboardLayout.Row, 1, 0, false);
    var rect = abs[0].artboardRect;
    var res = {};
    res.x_min = rect[0] + 0.5 - 16383 / 2;
    res.y_max = rect[1] - 0.5 + 16383 / 2;
    res.x_max = res.x_min+16383;
    res.y_min = res.y_max-16383;
    for (i = rects.length - 1; i >= 0; i--) {
        var rect = rects[i];
        abs.add(rect[0]).name = rect[1];
    }
    abs[0].remove();
    abs[0].remove();
    return res;
    }

Всем спасибо за внимание )
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Насчет размера не знаю, но координаты то зачем определять? DOCUMENTCOORDINATESPACE использовать, и zero point в левом верхнем углу
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
было б интересно глянуть на такой образец, поделитесь?
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
вернее как, точка отсчета может конечно быть где угодно, но ее посмотреть можно в
Document.rulerOrigin
Data Type: Point
Adobe Illustrator 24 Type Library

а размер области вроде неизменный, 16383x16383. так что пока смысл всех этих манипуляций от меня ускользает
 
Последнее редактирование: