Тема: Как измерить длину полилинии ?
Нужно измерить длину линии, состоящей из нескольких отрезков, указывая начальную и конечную точки (АCAD2000). Подскажите, плиз!
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Autodesk → AutoCAD → Как измерить длину полилинии ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нужно измерить длину линии, состоящей из нескольких отрезков, указывая начальную и конечную точки (АCAD2000). Подскажите, плиз!
То есть: существует полилиния (не набор отрезков? плоская?), сегменты которой линейные (дуговых нет?). Требуется указать начальную точку (где-то "внутри" полилинии? на конце сегмента?) и таким же образом конечную точку. И посчитать длину вдоль полилинии от начальной до конечной точки, так?
Если по простому: накройте все отрезки временной полилинией, возьмите ее длину командой LIST и затем сотрите. Для грубых расчетов идеально. Для точных используйте OSNAP
можно ввести команду area "ентер" о
и выделить полилинию.
To VH
Так, так.
To Vova.
Почему при использоовании List рассчет получается грубым?
То же самое и для множества отрезков тоже нужно.
To Ballack
List выдает, конечно, точный результат. Но чтобы покрыть дуговые объекты полилинией точно, надо предварительно находить их радиус-той же командой Li. Или все время варьировать опциями PL-arc-dir-line. Я применяю этот метод для подсчета общего количества труб заложенных в перекрытии между этажами. Точность для спецификации достаточная.
> 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) можно добавить представление и точность.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Autodesk → AutoCAD → Как измерить длину полилинии ?
Форум работает на PunBB, при поддержке Informer Technologies, Inc