Тема: LISP. Определение координат центра произвольного замкнутого контура

;**************** cen_reg.lsp *********************************************
;       Определение координат центра произвольного
;       замкнутого контура.
;
(defun C:CEN_REG ( / pp echo osm reg minp maxp pmin pmax pxy cx cy ak)
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq pp (getpoint "\n Укажите точку внутри контура: "))
(vl-cmdf "_BOUNDARY" "_A" "_O" "_R" "" pp "")
(setq reg (entlast))
(setq pxy
(vlax-safearray->list (vlax-variant-value (vla-get-Centroid (vlax-ename->vla-object reg))))); setq
(vl-cmdf "_ERASE" reg "")
(princ "\n Одна область удалена.")
(princ "\n Координаты центра контура: ")(princ pxy)
(setq cx (rtos (car pxy)))
(setq cy (rtos (cadr pxy)))
(setq ak (strcat "\n Координаты центра контура." "\n По X: " cx "\n По Y: " cy))
(alert ak)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)

Возможный макрос для кнопки или пункта меню:

^C^C^P(if (not C:CEN_REG) (load "cen_reg")) CEN_REG

Re: LISP. Определение координат центра произвольного замкнутого контура

Здравствуйте Владимир.Я пользуюсь многими из Ваших программ.Большое спасибо Вам.Ума не хватает как вывести центр в виде окружности  на чертеж.Язык VBA для меня более менее понятен ,в лиспе немогу.Помогите в данном вопросе если сможет,внесите изменения..С уважением Сергей

Re: LISP. Определение координат центра произвольного замкнутого контура

Вопрос не совсем понятен? Имеется в виду отрисовка окружности (круга) в центре контура?

Re: LISP. Определение координат центра произвольного замкнутого контура

Совершенно верно

Re: LISP. Определение координат центра произвольного замкнутого контура

Ну, вот так, например:

;**************** cen_cir.lsp *********************************************
;       Отрисовка круга в центре произвольного замкнутого контура.
;
(defun C:CEN_CIR ( / echo osm lay diam pp reg pxy cx cy)
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq lay (getvar "CLAYER"))
(vl-cmdf "_-LAYER" "_M" "CIRCLE" "")
(setq diam (getreal "\n Диаметр круга: "))
(setq pp (getpoint "\n Укажите точку внутри контура: "))
(vl-cmdf "_BOUNDARY" "_A" "_O" "_R" "" pp "")
(setq reg (entlast))
(setq pxy
(vlax-safearray->list (vlax-variant-value (vla-get-Centroid (vlax-ename->vla-object reg))))); setq
(vl-cmdf "_ERASE" reg "")
(princ "\n Одна область удалена.")
(princ "\n Координаты центра контура: ")(princ pxy)
(setq cx (rtos (car pxy)))
(setq cy (rtos (cadr pxy)))
(vl-cmdf "_CIRCLE" pxy "_D" diam)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(setvar "CLAYER" lay)
(princ)
)

Возможный макрос для кнопки или пункта меню:

^C^C^P(if (not C:CEN_CIR) (load "cen_cir")) CEN_CIR

Думаю, что слой "CIRCLE" (имя условное) лучше создать заранее с нужными параметрами.

Re: LISP. Определение координат центра произвольного замкнутого контура

Удалил лишние переменные:

;**************** cen_cir.lsp *********************************************
;       Отрисовка круга в центре произвольного замкнутого контура.
;
(defun C:CEN_CIR ( / echo osm lay diam pp reg pxy)
(vl-load-com)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq lay (getvar "CLAYER"))
(vl-cmdf "_-LAYER" "_M" "CIRCLE" "")
(setq diam (getreal "\n Диаметр круга: "))
(setq pp (getpoint "\n Укажите точку внутри контура: "))
(vl-cmdf "_BOUNDARY" "_A" "_O" "_R" "" pp "")
(setq reg (entlast))
(setq pxy
(vlax-safearray->list (vlax-variant-value (vla-get-Centroid (vlax-ename->vla-object reg))))); setq
(vl-cmdf "_ERASE" reg "")
(princ "\n Одна область удалена.")
(princ "\n Координаты центра контура: ")(princ pxy)
(vl-cmdf "_CIRCLE" pxy "_D" diam)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(setvar "CLAYER" lay)
(princ)
)

Возможный макрос для кнопки или пункта меню:

^C^C^P(if (not C:CEN_CIR) (load "cen_cir")) CEN_CIR

Думаю, что слой "CIRCLE" (имя условное) лучше создать заранее с нужными параметрами.

Re: LISP. Определение координат центра произвольного замкнутого контура

Все работает прекрасно.То,что было необходимо.Ьольшое Вам спасибо

Re: LISP. Определение координат центра произвольного замкнутого контура

Математическое вычисление центра масс произвольной LW полилинии
DwgRuLispLib: Геометрия. Вычисление центра масс (centroid) LW полилинии