Тема: Как измерить длину полилинии ?

Нужно измерить длину линии, состоящей из нескольких отрезков, указывая начальную и конечную точки (АCAD2000). Подскажите, плиз!

Re: Как измерить длину полилинии ?

Используйте команду List (Список)

Re: Как измерить длину полилинии ?

То есть: существует полилиния (не набор отрезков? плоская?), сегменты которой линейные (дуговых нет?). Требуется указать начальную точку (где-то "внутри" полилинии? на конце сегмента?) и таким же образом конечную точку. И посчитать длину вдоль полилинии от начальной до конечной точки, так?

Re: Как измерить длину полилинии ?

Если по простому: накройте все отрезки временной полилинией, возьмите ее длину командой LIST и затем сотрите. Для грубых расчетов идеально. Для точных используйте OSNAP

Re: Как измерить длину полилинии ?

можно ввести команду area  "ентер"  о
и выделить полилинию.

Re: Как измерить длину полилинии ?

To VH
Так, так.
To Vova.
Почему при использоовании List рассчет получается грубым?

Re: Как измерить длину полилинии ?

Попробуем сочинить.

Re: Как измерить длину полилинии ?

То же самое и для множества отрезков тоже нужно.

Re: Как измерить длину полилинии ?

To Ballack
List выдает, конечно, точный результат. Но чтобы покрыть дуговые объекты полилинией точно, надо предварительно находить их радиус-той же командой Li. Или все время варьировать опциями PL-arc-dir-line. Я применяю этот метод для подсчета общего количества труб заложенных в перекрытии между этажами. Точность для спецификации достаточная.

Re: Как измерить длину полилинии ?

> Ballack
(defun SEARCH (_l _p / fp lp) ;поиск сегмента линии по списку точек _l, на котором лежит точка _p
  (setq fp (car _l))
  (if (cdr _l)
   (progn
    (setq lp (car (cdr _l)))
    (setq dif
     (- (+ (distance _p fp) (distance _p lp)) (distance fp lp)))
    (if (= dif 0.0)
     (cdr _l)
     (SEARCH (cdr _l) _p))))
)
(defun DISTCHAIN (_l) ;подсчет длины линии по списку точек _l
  (if (cdr _l)
   (+
    (distance (car _l) (car (cdr _l)))
    (DISTCHAIN (cdr _l)))
   0)
)
(defun C:LENCOUNT ()
  (setq e (car (entsel "\nВыберите POLYLINE: ")))
  (setq sp (getpoint "\nНачальная точка: "))
  (setq ep (getpoint "\nКонечная точка: "))
  (setq d (entget e))
  (setq pl
   (apply
    'append
    (mapcar
     '(lambda (_l)
       (if (= (car _l) 10) (list (cdr _l))))
     d))) ;извлечение списка точек полилинии
  (setq wpl
   (if (setq wpl (search (setq spl pl) sp))
    (cons sp wpl)
    (progn
     (prompt "\nНачальная точка НЕ лежит на POLYLINE. Расчет трассы с начала POLYLINE.")
     spl)))
  (setq wpl
   (if (setq wpl (searchp (setq epl (reverse wpl)) ep))
    (cons ep wpl)
    (progn
     (prompt "\nКонечная точка НЕ лежит на POLYLINE. Расчет трассы до конца POLYLINE.")
     epl)))
  (setq wpl (reverse wpl))
  (setq l (distchain wpl))
  (princ (strcat "\nДлина трассы: " (rtos l)))
  (prin1)
)
P.S. в функцию (rtos) можно добавить представление и точность.