Тема: Вычерчивание полилинии с указанием последней точки как центра блока.

Не давно всерьез занялся лиспом, так что вопрос чайника. Стоит задача построить полилинию между двумя блоками. Первым щелчком указываю первый блок, извлекаю его центр и из него начинаю чертить полилинию, с этим проблем нет. Как сделать так чтоб после этого я мог указать произвольное количество промежуточных точек и кликнув на втором блоке линия завершалась в его центре.

Re: Вычерчивание полилинии с указанием последней точки как центра блока.

Вот такой получился франкинштейн! сам не силен в лиспе по этому не знаю как сделать так чтоб полилинию видно было при отрисовке может через VL-cmdf?

(defun c:b_lin_b (/)
  (setq i1 -1)
 (setq sp_p '())
 (setq sp_10 '())
  (setq p_b1 (list(reverse (cdr (reverse (assoc 10 (entget(car (entsel "\nУкажите блок:")))))))))
(while
    (setq p1 (getpoint "\nУкажите точку полилинии <Enter для завершения>: "))
      (setq sp_p (append sp_p (list p1))))
              (setq sp_2d  (mapcar 'reverse (mapcar 'cdr (mapcar 'reverse sp_p))))
  (setq p_b2 (list(reverse (cdr (reverse (assoc 10 (entget(car (entsel "\nУкажите блок:")))))))))
(repeat (length sp_p)
 (setq i1 (1+ i1))
 (setq sp_10 (append sp_10 (list 10)))
  );конец repeat
 (setq sp_tp (mapcar 'cons sp_10 sp_2d))
  (setq sp_plin (append p_b1 sp_tp p_b2 ))
    (setq k_ver(list (cons 90 ( + 2 (length sp_tp)))))
  (entmake   (append '((0 . "LWPOLYLINE") (8 . "0")  (100 . "AcDbEntity") (67 . 0) (410 . "Model")
  (100 . "AcDbPolyline")  (70 . 0) (43 . 0.0) (38 . 0.0)
 (39 . 0.0) 
  (210 0.0 0.0 1.0))  k_ver  sp_plin)))

Re: Вычерчивание полилинии с указанием последней точки как центра блока.

Ща пытаюсь через vl-cmdf, для меня критично отображение полилинии при отрисовке. Но все равно спасибо!

Re: Вычерчивание полилинии с указанием последней точки как центра блока.

Андрей пишет:

для меня критично отображение полилинии при отрисовке

Может так сойдет

(defun c:test()
  ((lambda(block_start)
     (if (and block_start
          (not (vl-catch-all-error-p block_start))
          (= (cdr (assoc 0 (entget (car block_start)))) "INSERT")
          )
       (progn
     (vl-cmdf "_.pline" (cdr (assoc 10 (entget (car block_start)))))
     (while (= (getvar "CMDACTIVE") 1) (vl-cmdf pause))
     ((lambda(obj blcok_end)
        (if (and blcok_end
             (not (vl-catch-all-error-p blcok_end))
             (= (cdr (assoc 0 (entget (car blcok_end)))) "INSERT")
             )
          ((lambda(ed) (entmod (append ed (list (assoc 10 (entget (car blcok_end)))))) (princ)) (entget obj))
          )
        )
       (entlast)
       (vl-catch-all-apply 'entsel
         (list "\n Укажите блок конца полинии:")
         )
       )
     )
       )
     )
    (vl-catch-all-apply 'entsel
      (list "\n Укажите блок начала полилинии:")
      )
    )
  ); end c:test

Re: Вычерчивание полилинии с указанием последней точки как центра блока.

то что нужно, спасибо!