Re: Как заменить линейный сегмент полилинии на дуговой и наоборот?

> Владимир Громов
Что то мне все так не понравилось - решил объединить обе программы в одну, если задать (визуально) кривизну близкую к нулевой, сегмент будет преобразован в линейный...

(defun C:LW_ARC    (/ A1 GR LW PAR PT)
  (setq lw (entsel "\n Выберите нужный сегмент в полилинии. "))
  (if (and lw (= (cdr (assoc 0 (entget (car lw)))) "LWPOLYLINE"))
    (progn
      (setq par    (fix (vlax-curve-getParamAtPoint
               (car lw)
               (vlax-curve-getClosestPointTo (car lw) (cadr lw))
             )
        )
        a1    (angle (vlax-curve-getPointAtParam (car lw) (fix par))
               (vlax-curve-getPointAtParam (car lw) (1+ (fix par)))
        )
      )
      (vla-StartUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
      )
      (princ "\n Задайте визуально кривизну сегмента. ")
      (while (and (setq gr (grread 5)) (= (car gr) 5))
    (redraw)
    (grdraw    (setq pt (vlax-curve-getPointAtParam
               (car lw)
               (fix par)
             )
        )
        (cadr gr)
        6
        1
    )
    (vla-SetBulge
      (vlax-ename->vla-object (car lw))
      par
      (if (equal 0.
             (setq bul (/ (sin (/ (- a1 (angle pt (cadr gr))) 2.))
                  (cos (/ (- a1 (angle pt (cadr gr))) 2.))
                   )
             )
             0.01
          )
        0.
        bul
      )
    )
      )
      (vla-EndUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
      )
    )
    (princ "\n Ничего не выбрано или объект не полилиния. ")
  )
  (redraw)
  (princ)
)

Извини, если надоел, только скажи перестану доставать с дурацкими программами.

Re: Как заменить линейный сегмент полилинии на дуговой и наоборот?

> Евгений Елпанов
Дурацкие, не дурацкие... Я-то с самого начала предполагал так: выбираю сегмент, получаю сообщение:

Сегмент линейный. Преобразовать его в дуговой [Да/Нет]? <Да>: 

Или:

Сегмент дуговой. Преобразовать его в линейный [Да/Нет]? <Да>: 

А в последнем варианте не очень очевидно, какая кривизна является минимальной, при которой дуговой сегмент преобразуется в линейный. Можно, конечно на глазок изловчиться в режиме ОРТО, а если не ОРТО? Тоже можно, конечно, но как-то это не хорошо. Вот сейчас у меня две кнопки задействованы и обе предыдущие программы работают хорошо. Но с одной кнопкой, наверное, было бы лучше. В принципе, можно ничего дальше и не сочинять, и так сгодится.

Re: Как заменить линейный сегмент полилинии на дуговой и наоборот?

> Владимир Громов
Попробуй перед запуском программы выдели полилинию, тогда посередине дугового сегмента будет пропадать и появляться ручка, можно в программу добавить выделение полилинии и последующее его снятие...

Re: Как заменить линейный сегмент полилинии на дуговой и наоборот?

> Евгений Елпанов
Ну, я так и делал, до и после... Ладно, Евгений, закруглимся, лучшее - враг хорошего. Спасибо за помощь.