1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Adobe Illustrator", создана пользователем -, 3 окт 2003.

  1. Guest

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

    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{}
     
  2. Guest

    А Simplify чем плох? Опять велосипед изобретаем?
     
  3. Guest

    При чём тут Simplify? Мне же нужно имено удалить точки, а не "упростить" кривую. Я говорил об аналоге операции удаления точек пером.
     
  4. Guest

    А вот казус:
    если papo[q].remove, то papo.length уменьшается на 1?
     
  5. Guest

    У меня всё работает как часики. А что, ты обнаружил, что в каких-то случаях появляются траблы?
     
  6. Guest

    >> в каких-то случаях появляются траблы?
    так, навеяло :) papo.length с каждым удалением вершины уменьшается на единицу, а ты его используешь как критерий окончания цикла. Неопределенность получается. Так и до Corel'а с его легендарной Copy-Paste можно скатиться ;-)
     
  7. Guest

    Так проявляется в чём-то ошибка или нет?
     
  8. Guest

    Может. Так как в условии цикла FOR нельзя использовать параметры, меняющиеся внутри тела цикла. «Фирма не гарантирует», что это будет нормально работать всегда и везде.
     
  9. Guest

    Другими словами, Arkady хочет сказать, что значение, извлечённое из papo.length надо поместить в переменную ещё до начала цикла, и уже эту переменную использовать в определении параметров цикла. Тогда сюрпризов точно не будет.
     
  10. Guest

    Да это-то я понял, Шляпа, спасибо. Просто не надо забывать, что мы имеем дело с ИНТЕРПРИТАТОРОМ языка, а не с компилятором. И о таких вещах, равно как и о выделении памяти для переменных, и удалении переменных заботится сам интерпритатор. Просто подобные циклы я уже не раз использовал, в том числе и в IE, и никогда это проблем не вызывало. Стоит мне хоть раз столкнуться с траблом, связанным с такими циклами, и я, конечно буду вводить эти самые дополнительные массивы. Пока же повода лишний раз усложнять код я не вижу.
     

Поделиться этой страницей