Render.ru

Удаление точек без разрыва кривой

#1
Бывает так, что нужно удалить множество точек с кривой (кривых), не разрывая кривую. Если удаляемых точек много, то "пером" это делать заколебёшся. Вот и средство: нужно выделить набор точек, которые надо удалить, и запустить такой-вот скриптик:

mySelection = activeDocument.selection;
if (mySelection.length>0){
for(i=0;i<mySelection.length;i++){
if(mySelection.pathPoints){
papo=mySelection.selectedPathPoints;
for(q=0;q<papo.length;q++){
if(papo[q].selected==2){
papo[q].remove();
}
}
}
}
}else{}
 
#3
При чём тут Simplify? Мне же нужно имено удалить точки, а не "упростить" кривую. Я говорил об аналоге операции удаления точек пером.
 
#5
У меня всё работает как часики. А что, ты обнаружил, что в каких-то случаях появляются траблы?
 
#6
>> в каких-то случаях появляются траблы?
так, навеяло :) papo.length с каждым удалением вершины уменьшается на единицу, а ты его используешь как критерий окончания цикла. Неопределенность получается. Так и до Corel'а с его легендарной Copy-Paste можно скатиться ;-)
 
#8
Может. Так как в условии цикла FOR нельзя использовать параметры, меняющиеся внутри тела цикла. «Фирма не гарантирует», что это будет нормально работать всегда и везде.
 
#9
Другими словами, Arkady хочет сказать, что значение, извлечённое из papo.length надо поместить в переменную ещё до начала цикла, и уже эту переменную использовать в определении параметров цикла. Тогда сюрпризов точно не будет.
 
#10
Да это-то я понял, Шляпа, спасибо. Просто не надо забывать, что мы имеем дело с ИНТЕРПРИТАТОРОМ языка, а не с компилятором. И о таких вещах, равно как и о выделении памяти для переменных, и удалении переменных заботится сам интерпритатор. Просто подобные циклы я уже не раз использовал, в том числе и в IE, и никогда это проблем не вызывало. Стоит мне хоть раз столкнуться с траблом, связанным с такими циклами, и я, конечно буду вводить эти самые дополнительные массивы. Пока же повода лишний раз усложнять код я не вижу.
 
Сверху