Тема: Команда _AREA в lisp-функции

Необходимо подсчитать площадь помещения, а затем воспользоваться системной переменной AREA. Для того, чтобы воспользоваться в lisp-функции командой _AREA, я могу использовать (COMMAND "_AREA" pause pause...), но заранее я не знаю количество вводимых точек. Кроме того возможен вариант развития с опцией /Object. Как я могу разрешить эту ситуацию?

Re: Команда _AREA в lisp-функции

Возможен вариант с использованием cmdactive:

(command "_area")
(while  (=    (getvar "cmdactive" )    1    )
 (command pause)  )

Re: Команда _AREA в lisp-функции

Обводим помещение полилинией и
(setq kx (entlast))
(command "_AREA" "_O" kx) (entdel kx) (setq kx (getvar "AREA"))
kx - площадь

Re: Команда _AREA в lisp-функции

Вариант расчета площади и периметра с предварительным указанием масштаба чертежа.

(defun c:ploper ( / cl d plin myarea myperimeter olddimzinpt
                        k pl pt areatx pt1 x y pt2 pt3 pr perimtx scl)
     (setq cl (getvar "clayer"))
(if scale
    (progn (initget 6)
      (setq d (getint (strcat "\nМасштаб чертежа: " "<" (itoa scale) "> ")))
         (if d
            (setq scale d)
         )                                 ;_ конец if
     )                                     ;_ конец progn
    (progn
      (initget 7)
      (setq scale (getint "\nУкажите масштаб чертежа: "))
    )                                      ;_ конец progn
 )                                         ;_ конец if
    (prompt "Укажите объект: ")
 (command "_boundary" pause "")
    (setq plin (entlast))
 (command "_area" "o" (entlast))
 (command "_erase" plin "")
    (setq myarea (getvar "AREA"))
    (setq myperimeter (getvar "PERIMETER"))
    (setq olddimzin (getvar "DIMZIN"))
    (setvar "DIMZIN" 1 )
 (command "layer" "set" "тРазмера" ""
          "style" "RUSSW" "" "2" "1" "0" "" "" "")
    (setq k (* (/ scale 100.0) (/ scale 100.0)))
    (setq pl (rtos (* (/ myarea 100) k) 2 2))
 (princ pl)
    (alert pl)
 (princ "Укажите точку вставки размера площади: ")
    (setq pt (getpoint))
 (command "_text" pt 0 pl)
    (setq areatx (entlast))
 (terpri) (princ "Укажите точку окончательной установки текста: ")
    (setq pt1 (getpoint pt))
    (setq x (car pt1))
    (setq y (cadr pt1))
 (command "_move" areatx "" pt pt1)
    (setq pt2 (list x (- y 1)))
    (setq pt3(getpoint pt2))
 (command "_line" pt2 pt3 "")
(setq pr (rtos (/ myperimeter (/ 1000 scale)) 2 2))
  (princ pr)
 (alert pr)
 (princ "Укажите точку вставки размера периметра: ")
    (setq pt (getpoint))
 (command "_text" pt 0 pr)
    (setq perimtx (entlast))
 (terpri) (princ "Укажите точку окончательной установки текста: ")
    (setq pt1 (getpoint pt))
    (setq x (car pt1))
    (setq y (cadr pt1))
 (command "_move" perimtx "" pt pt1)
    (setq pt2 (list x (- y 1)))
    (setq pt3(getpoint pt2))
 (command "_line" pt2 pt3 "")
    (setvar "DIMZIN" olddimzin)
  (princ)
    (setvar "clayer" cl)
  )  ;_ конец ploper

Re: Команда _AREA в lisp-функции

Спасибо всем. Особенно - Эдуарду - это именно то, что нужно.