Тема: Указание длины полилинии в точке

Здраствуйте, подскажите, можно ли вытащить значение длины полилинии от ее начала до определенной точки? В идеале, чтобы в блоке было поле в атрибутах, в которое заносилась длина от начала полилинии до  перпендикуляра к точке вставки блока. Надеюсь понятно объяснил) Может есть какие идеи?)

Re: Указание длины полилинии в точке

Пробовал применить поиск? Введите текст ссылки...

Re: Указание длины полилинии в точке

(vl-load-com)
(defun c:test1()
    (if (setq pl (entsel "\nPick Polyline:"))
       (if (or (= (dxf 0 (car pl)) "POLYLINE") (= (dxf 0 (car pl)) "LWPOLYLINE"))(progn
          (setq ent (vlax-ename->vla-object (car pl)))
          (if (setq po (getpoint "\nPick point :"))(progn
                (if (setq pol (vlax-curve-getClosestPointTo ent po T))(progn
                    (if (vlax-curve-getParamAtPoint ent pol)(progn ;;Check if point is not over the curve
                        (setq dStation (vlax-curve-getDistAtPoint ent pol))
                        (setq dOffset (distance po pol))
                        (princ (strcat "\nStation :" (rtos dStation 2 2) ", Offset:"     (rtos dOffset 2 2)))
                    ))
                ))
          ))
    `    ))
    )
    (princ)
)

Re: Указание длины полилинии в точке

Arkady пишет:

(vl-load-com)
(defun c:test1()
    (if (setq pl (entsel "\nPick Polyline:"))
       (if (or (= (dxf 0 (car pl)) "POLYLINE") (= (dxf 0 (car pl)) "LWPOLYLINE"))(progn
          (setq ent (vlax-ename->vla-object (car pl)))
          (if (setq po (getpoint "\nPick point :"))(progn
                (if (setq pol (vlax-curve-getClosestPointTo ent po T))(progn
                    (if (vlax-curve-getParamAtPoint ent pol)(progn ;;Check if point is not over the curve
                        (setq dStation (vlax-curve-getDistAtPoint ent pol))
                        (setq dOffset (distance po pol))
                        (princ (strcat "\nStation :" (rtos dStation 2 2) ", Offset:"     (rtos dOffset 2 2)))
                    ))
                ))
          ))
    `    ))
    )
    (princ)
)

Попробовал, пишет:
ошибка: no function definition: DXF

Re: Указание длины полилинии в точке

Извиняюсь. Нужно добавить

(defun dxf (code elist / ret)
    (cond
      ( (= (type elist) 'LIST) (setq ret (cdr (assoc code elist))) )
      ( (= (type elist) 'ENAME) (setq ret (cdr (assoc code (entget elist)))) )
      (T (setq ret nil))
    )
    ret
  )

Re: Указание длины полилинии в точке

Arkady пишет:

Извиняюсь. Нужно добавить

(defun dxf (code elist / ret)
    (cond
      ( (= (type elist) 'LIST) (setq ret (cdr (assoc code elist))) )
      ( (= (type elist) 'ENAME) (setq ret (cdr (assoc code (entget elist)))) )
      (T (setq ret nil))
    )
    ret
  )

Arkady, спасибо за отзывчивость)
Подскажете как правильно добавить? В начало и в конец добавлял  после команды "Pick Polyline" и выбора полилинии выдает ошибку:
Pick Polyline:; ошибка: no function definition: VLAX-ENAME->VLA-OBJECT

Re: Указание длины полилинии в точке

Полный текст.
какая версия Автокада?

(vl-load-com)

(defun dxf (code elist / ret)
    (cond
      ( (= (type elist) 'LIST) (setq ret (cdr (assoc code elist))) )
      ( (= (type elist) 'ENAME) (setq ret (cdr (assoc code (entget elist)))) )
      (T (setq ret nil))
    )
    ret
  )

(defun c:test1()
    (if (setq pl (entsel "\nPick Polyline:"))
       (if (or (= (dxf 0 (car pl)) "POLYLINE") (= (dxf 0 (car pl)) "LWPOLYLINE"))(progn
          (redraw (car pl) 3)
          (setq ent (vlax-ename->vla-object (car pl)))
          (if (setq po (getpoint "\nPick point :"))(progn
                (if (setq pol (vlax-curve-getClosestPointTo ent (trans po 1 0) T))(progn
                    (if (vlax-curve-getParamAtPoint ent pol)(progn ;;Check if point is not over the curve
                        (setq dStation (vlax-curve-getDistAtPoint ent pol))
                        (grdraw (trans po 0 1) pol 2  0)
                        (setq dOffset (distance po pol))
                        (princ (strcat "\nStation :" (rtos dStation 2 2) ", Offset:"     (rtos dOffset 2 2)))
                        (redraw (car pl) 4)
                    ))
                ))
          ))
    `    ))
    )
    (princ)
)          
(princ)

Re: Указание длины полилинии в точке

Acad 2018