Re: LISP. Вычисление площади контура и простановка значения на плане

Скажите пожалуйста, куда и как необходимо установить эту программу, чтоб это работало на практике.

Re: LISP. Вычисление площади контура и простановка значения на плане

И еще, можно, чтоб автоматически эта площадь прописывалась в таблице Excel, в нужной строке, например, площадь комнаты такой-то, и ее периметр. Спасибо.

Re: LISP. Вычисление площади контура и простановка значения на плане

> Николай
Это случайно не твой пост?

> Николай
В любом случае почитай ответ на него

> VVA
По поводу > Николай (2008-05-01 21:14:15)
посмотри здесь https://www.caduser.ru/forum/topic31669.html

Re: LISP. Вычисление площади контура и простановка значения на плане

Какая часть данного кода (пост #1)отвечает за вставку в чертеж цифры с указанием места вставки числа? Подскажите пожалуйста.

Re: LISP. Вычисление площади контура и простановка значения на плане

...
(setq ptt (getpoint "\n Укажите место размещения текста: "))
...
(command "_TEXT" ptt "" "" area)
...

Re: LISP. Вычисление площади контура и простановка значения на плане

Технически возможно подчеркивание значения толстой линией ?

(изменено: Дмитрий Космос, 6 ноября 2014г. 10:41:43)

Re: LISP. Вычисление площади контура и простановка значения на плане

У меня почему-то перестало работать как поставил новый автокад '12.
Кодом пользовался очень долго  :cry:

Re: LISP. Вычисление площади контура и простановка значения на плане

Владимир Громов пишет:

> alex
По вашей просьбе:

(defun C:AREAK (/ slt pre pl s ptt)
       (setvar "cmdecho" 0)
       (setq osm (getvar "OSMODE"))
       (setq slt (getvar "CLAYER"))
     (if (null prec) (setq prec "1"))
     (princ (strcat "\n Количество знаков после точки (0, 1, 2) <" prec ">: "))
     (setq pre (getint))
     (if (= pre nil) (setq pre (atoi prec)))
     (if (> pre 2)
     (progn
     (setq pre 2)
     (alert " Перебор! Ограничимся 2-мя знаками.")
     ))
     (setq prec (itoa pre))
       (princ "\n Выберите полилинию: ")
       (setq pl (entsel))
       (command "_AREA" "_O" pl)
       (setq s (getvar "area"))
       (setq s (/ s 1000000))
       (princ "\n Площадь контура = ")(princ s) (princ " кв.м")
       (cond
       ((<= pre 0) (setq s (rtos s 2 0)))
       ((= pre 1) (setq s (rtos s 2 1)))
       ((>= pre 2) (setq s (rtos s 2 2)))
       )
           (initget "д l н")
           (setq dn (getkword "\n Подчеркивать число (да,нет)? <н>: "))
           (setvar "OSMODE" 0)
           (setq ptt (getpoint "\n Укажите место размещения текста: "))
           (if (or (= dn "д") (= dn "l"))
           (progn
           (command "_-LAYER" "_M" "Помещения" "")
           (setq area (strcat "%%U" s " кв.м" "%%U"))
           ))
           (if (or (= dn "н") (= dn nil))
           (progn
           (command "_-LAYER" "_M" "Экспликация" "")
           (setq area (strcat s " кв.м"))
           ))
           (command "_TEXT" ptt "" "" area)
       (princ "\n Площадь контура = ")(princ s) (princ " кв.м")
       (setvar "OSMODE" osm)
       (command "_-LAYER" "_S" slt "")
       (princ)
)

Подскажите, а как количество знаков после точки, увеличить к 4 ?  Спасибо за код)

Re: LISP. Вычисление площади контура и простановка значения на плане

Владимир Громов пишет:

Модернизированный код:

(defun C:AREAK (/ slt pl s dn area ptt)
       (setvar "cmdecho" 0)
       (setq osm (getvar "OSMODE"))
       (setq slt (getvar "CLAYER"))
       (vl-cmdf "_AREA" 0 "")
       (if (null prec) (setq prec "1"))
       (initget 4 "0 1 2")
       (princ (strcat "\n Количество знаков после точки [0/1/2] <" prec ">: "))
       (setq pre (getint))
       (if (= pre nil) (setq pre (atoi prec)))
       (if (> pre 2)
       (progn
       (setq pre 2)
       (alert " Дико извиняюсь! Ограничимся 2-мя знаками.")
       ))
       (setq prec (itoa pre))
(while (null pl)
       (setq pl (entsel "\n Выберите замкнутый контур: "))
       (if pl
       (progn
            (if (= (cdr (assoc 70 (entget (car pl)))) 1)
            (Progn
            (command "_AREA" "_O" pl)
            (setq s (getvar "area"))
            (setq s (/ s 1000000))
            (princ "\n Площадь контура = ")(princ s) (princ " кв.м")
            (cond
            ((<= pre 0) (setq s (rtos s 2 0)))
            ((= pre 1) (setq s (rtos s 2 1)))
            ((>= pre 2) (setq s (rtos s 2 2)))
            ) ;cond
            (if (not da) (setq da "Нет"))
            (initget "Да Нет")
            (princ (strcat "\n Подчеркивать число [Да/Нет] <" da ">: "))
            (setq dn (getkword))
            (if (= dn nil) (setq dn da))
            (setq da dn)
            (setvar "OSMODE" 0)
            (if (= dn "Да")
                (progn
                (command "_-LAYER" "_M" "Помещения" "")
                (setq area (strcat "%%U" s "%%U"))
            )) ; progn,if
            (if (= dn "Нет")
                (progn
                (command "_-LAYER" "_M" "Экспликация" "")
                (setq area s)
            )) ; progn,if
            (princ "\n Укажите место размещения текста: ")
            (setq kod40 (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
            (if (= kod40 0)
            (command "_TEXT" "0,0" "" "" area "_copybase" "0,0" (entlast) "" "_erase" (entlast) "" "_pasteclip" pause)
            (command "_TEXT" "0,0" "" area "_copybase" "0,0" (entlast) "" "_erase" (entlast) "" "_pasteclip" pause)
            ) ;if
            (princ "\n Площадь контура = ")(princ s) (princ " кв.м")
            ) ;progn
            (progn
            (setq pl nil)
            (princ "\n Это не есть замкнутая полилиния! Попробуйте еще раз.")
            ) ;progn
            ) ;if
        ) ;progn
        (princ "\n Замкнутый контур не выбран! Попробуйте еще раз.")
        ) ;if
) ;while
       (setvar "OSMODE" osm)
       (command "_-LAYER" "_S" slt "")
       (princ)
)

А можно поправить код, чтоб было видно, куда ставить значение площади?