Тема: Как из точки построить отрезки к вершинам полилинии ?

Как из точки построить отрезки к вершинам полилинии ? Поиском не нашел.

Re: Как из точки построить отрезки к вершинам полилинии ?

Функция составлена из элементов кода форума

(defun get_vertices (obj / i verts)
  (setq i (vlax-curve-getendparam obj))
  (while (>= i 0)
    (setq verts  (cons (vlax-curve-getpointatparam obj i) verts)
    i  (- i 1)
    )
  )
 verts
) 
;|======================================================================================= 
*    Функция возвращает vla-активное пространство (лист / модель). 
*    Параметры вызова: 
*   Нет 
*    Примеры вызова: 
(_kpblc-get-active-space-obj) 
=======================================================================================|; 
(defun _kpblc-get-active-space-obj () 
   (setq    *kpblc-acad*   (vlax-get-acad-object)
            *kpblc-activedoc* (vla-get-activedocument *kpblc-acad*)    
    ) ;_ end of setq
    (if (and (zerop (vla-get-activespace *kpblc-activedoc*)) 
      (= :vlax-false (vla-get-mspace *kpblc-activedoc*)) 
      ) ;_ end of and 
    (vla-get-paperspace *kpblc-activedoc*) 
    (vla-get-modelspace *kpblc-activedoc*) 
    ) ;_ end of if 
  ) ;_ end of defun

(defun draw-polyline (lst) ; Функция отрисовки полилинии по заданному списку
;;; Преобразовываем полученный список точек в гарантированно ;;; список 3Д-точек и сразу преобразовываем его в одномерный
  (setq lst (apply 'append
                   (mapcar '(lambda (x)
                              (list (car x)
                                    (cadr x)
                                    (cond ((caddr x))
                                          (t 0.)
                                          ) ;_ end of cond
                                    ) ;_ end of list
                              ) ;_ end of lambda
                           lst
                           ) ;_ end of mapcar
                   ) ;_ end of apply
        ) ;_ end of setq
  (vla-addpolyline ; добавляем полилинию
    (_kpblc-get-active-space-obj) 
      (vlax-make-variant ; создаем вариант
      (vlax-safearray-fill ; из заполняемого безопасного массива
        (vlax-make-safearray ; создаем безопасный массив
          vlax-vbdouble ; с элементами типа Double (числа двойной точности)
          (cons 0 (1- (length lst))) ; длиной в полученный lst.
          ) ;_ end of vlax-make-safearray
        lst ; и заполняем данными из списка
        ) ;_ end of vlax-safearray-fill
      ) ;_ end of vlax-make-variant
    ) ;_ end of vla-AddPolyline
  ) ;_ end of defun

(defun c:point-poly ( / )
 (vl-load-com)
 (setq obj_one nil)
   (setq lst_sectPoly nil)
    (setq obj_one (car (entsel "\nУкажите полилинию <Отмена> : ")))
             (if (= obj_one nil) (princ "\nНичего не выбрано..."))
         (setq obj_one (vlax-ename->vla-object obj_one)) 
  (setq vert_poly (get_vertices obj_one))
 (setq pointPly (getpoint "\nУкажите точку <Отмена> : "))
  (foreach item vert_poly 
  (draw-polyline (list item  pointPly))
    )           
 )

Re: Как из точки построить отрезки к вершинам полилинии ?

Может, проще сделать наподобие

(vl-load-com)

(defun test (/ adoc pt ent)
  (if (and (= (type (setq pt (vl-catch-all-apply (function (lambda () (getpoint "\nУкажите точку <Отмена> : ")))))
                    ) ;_ end of type
              'list
              ) ;_ end of =
           (= (type
                (setq ent (vl-catch-all-apply (function (lambda () (car (entsel "\nУкажите полилинию <Отмена> : "))))))
                ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
           ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq ent (entget ent))
      (mapcar
        (function
          (lambda (x)
            (setq x (cdr x))
            (entmakex
              (list (cons 0 "LINE") (cons 10 (trans x (cdr (assoc 210 ent)) 0)) (cons 11 (trans pt 1 0)))
              ) ;_ end of entmakex
            ) ;_ end of lambda
          ) ;_ end of function
        (vl-remove-if-not
          (function
            (lambda (x)
              (= (car x) 10)
              ) ;_ end of lambda
            ) ;_ end of function
          ent
          ) ;_ end of vl-remove-if-not
        ) ;_ end of mapcar
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun

На немировых системах координат не проверял.

Re: Как из точки построить отрезки к вершинам полилинии ?

Спасибо огромное это то что надо !!!