удаляет только половину прямоугольников

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

myamlik

Участник
Топикстартер
Сообщения
14
Реакции
0
with (app)
{
if (documents.length<1)
{
alert ("нет открытых документов!");
exit();
}
var myDoc = activeDocument; //объект активный документ
var pryamougolnik=myDoc.rectangles.length;
for(k=0; k<pryamougolnik;k++) // цикл для перебора всех картинок
{
myDoc.rectangles[k].remove();
}
alert("конец");
}

вот такой скриптец в инди 3.01а удалят тольлко половину картинок потом выводит ошибку

JavaScript error!
Error Number 45
Error Sting^ "Object is invalid"
Line 12
Source." myDoc.rectangles[k].remove();"


Это глюк инди или скрипта?
 
Ответ: удаляет только половину прямоугольников

это неправильная логика... в скрипте ;)
Надо начинать с последнего элемента и идти к началу.
 
Ответ: удаляет только половину прямоугольников

спасибо
поменял в обратном порядке получилось
 
Ответ: удаляет только половину прямоугольников

Можно было проще - в этом же цикле удалять ВСЕГДА первый элемент:
myDoc.rectangles[0].remove();
 
Ответ: удаляет только половину прямоугольников

ragman сказал(а):
Можно было проще - в этом же цикле удалять ВСЕГДА первый элемент:
myDoc.rectangles[0].remove();
проще и быстрее (на большом кол-ве 400-500 rect. в разы разница во времени): myDoc.rectangles.itemByRange(0,-1).remove();
удалить все rect'ы (почти все) в документе .

2 myamlik
Но какой смысл в уделании? может надо использовать template? :)
 
Ответ: удаляет только половину прямоугольников

Steve сказал(а):
myDoc.rectangles.itemByRange(0,-1).remove();

А почему не myDoc.rectangles.everyItem().remove() ?
 
Ответ: удаляет только половину прямоугольников

это одно и тоже. Хотя, были какие-то "различия", но в очень спец. случаях, сейчас не вспомню, а адобовский форум еще в переходном процессе.
 
Ответ: удаляет только половину прямоугольников

Гхм... видите ли, для меня вопрос не праздный, ибо метод everyItem не виден "снаружи" (из VB, Delphi и т.д.) в то время как itemByRange виден...
 
Ответ: удаляет только половину прямоугольников

Specialist сказал(а):
Гхм... видите ли, для меня вопрос не праздный, ибо метод everyItem не виден "снаружи" (из VB, Delphi и т.д.) в то время как itemByRange виден...
everyItem/range "нормально" работают только в JS... range в VB вернет коллекцию, которую всё равно придется пробегать в цикле, т.е. почти ненужный метод. Единственное применение для range (в VB), которое я использую — texts.itembyrange().
Если же надо использовать everyItem/itembyrange под VB и т.д., тогда DoScript и JS-code.
 
Ответ: удаляет только половину прямоугольников

Steve сказал(а):
Если же надо использовать everyItem/itembyrange под VB и т.д., тогда DoScript и JS-code.

Да это идея. Я уже потихоньку думал над этим, но не нашел как J-скрипт запустить и вы мне здорово помогли. Благодарямс.
 
Статус
Закрыто для дальнейших ответов.