[ID CS4-CS6] Вопрос по массивам в Indesign

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
Собственно - почему

Код:
    app.activeDocument.pages.item(0).pageItems.item(0).geometricBounds[0] = 5;

не работает, а:

Код:
     app.activeDocument.pages.item(0).pageItems.item(0).geometricBounds = [5,2,10,7];
работает...

Просто не программист.. так погулять вышел и 30 мин потратил на эту мелочь...

Adobe InDesign CS6 (8.0) Object Model JS: PageItem - читал -
geometricBounds Array of Measurement Unit (Number or String) r/w The bounds of the PageItem excluding the stroke width, in the format [y1, x1, y2, x2], which give the coordinates of the top-left and bottom-right corners of the bounding box.

array - (согласно Indesign )
An array with integer indexing and a length property.
не могу понять....
 

mihas

15 лет на форуме
Сообщения
4 544
Реакции
2 762
в первой строке массив не объявлен, а элемент массива [0] уже есть. В некоторых языках так нельзя, в яваскрипт нельзя. Во втором варианте объявлен массив и его элементы. Напишите вначале geometricBounds = []; и должно заработать
 

Skvoznyak

15 лет на форуме
Сообщения
5 478
Реакции
2 158
не заработает. в данном случае присваивать можно только целиком массив. если нужно просто подвинуть, можно использовать метод move

Код:
PageItem.move (to:varies, by:Array of Measurement Unit (Number or String))
Adobe InDesign CC 2018 (11.4) Object Model
Moves the PageItem to a new location. Note: Either the 'to' or 'by' parameter is required; if both parameters are defined, only the to value is used.
to: Data Type: varies
The new location of the PageItem,in the format (x, y). Can accept: Array of 2 Units, Spread, Page or Layer. (Optional)
by: Data Type: Array of Measurement Unit (Number or String)
The amount (in measurement units) to move the PageItem relative to its current position, in the format (x, y). (Optional)
 

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
в первой строке массив не объявлен, а элемент массива [0] уже есть...
не совсем понимаю - массив уже существует - это реальные координаты реального объекта на странице (в данном конкретном случае это вставленный pdf). я его считываю, вижу в Data Browser, а вот поменять его не могу...

Точно такой же новый Array - без проблем правиться...

Что у них прототип Array разный что ли .
wyybekjnqi3fjbytpq90f5rk6ae.png

P.S. сравнил прототипы - вроде идентичны, выдает True - хотя это js. тут и чудеса возможны в зависимости от интерпретатора....
Код:
     var x =   app.activeDocument.pages.item(0).pageItems.item(0).geometricBounds;
     var xx = [1,2,3,4];
        var xx_p = xx.prototype;
        var x_p = x.prototype;
        alert ((xx_p ==x_p));
 
Последнее редактирование:

Oleg Butrin

15 лет на форуме
Сообщения
1 968
Реакции
1 202
не могу понять....
Это потому, что свойство geometricBounds не является обычным свойством. Это специальный объект, который реализует как минимум две функции: при вызове без аргумента выдает текущее положение объекта на странице, а при вызове с аргументом (через присвоение) проверяет значение аргумента и изменяет объект на странице только в том случае, если тип и значение аргумента соответствуют шаблону. Проверить можно, задав в качестве аргумента значения, заведомо большие, чем рабочее поле документа.
 
  • Спасибо
Реакции: Flame

Oleg Butrin

15 лет на форуме
Сообщения
1 968
Реакции
1 202
P.S. сравнил прототипы - вроде идентичны, выдает True - хотя это js. тут и чудеса возможны в зависимости от интерпретатора....
Код:
function parametricBounds () {
    this.name = 'test';
}

parametricBounds.prototype.constructor = Array;

bounds = new parametricBounds();

$.writeln(bounds.constructor.name);