Re: LISP. Вычисление площади контура и простановка значения на плане
Скажите пожалуйста, куда и как необходимо установить эту программу, чтоб это работало на практике.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Готовые программы → LISP. Вычисление площади контура и простановка значения на плане
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Скажите пожалуйста, куда и как необходимо установить эту программу, чтоб это работало на практике.
И еще, можно, чтоб автоматически эта площадь прописывалась в таблице Excel, в нужной строке, например, площадь комнаты такой-то, и ее периметр. Спасибо.
> Николай
Это случайно не твой пост?
> Николай
В любом случае почитай ответ на него
> VVA
По поводу > Николай (2008-05-01 21:14:15)
посмотри здесь https://www.caduser.ru/forum/topic31669.html
Какая часть данного кода (пост #1)отвечает за вставку в чертеж цифры с указанием места вставки числа? Подскажите пожалуйста.
... (setq ptt (getpoint "\n Укажите место размещения текста: ")) ... (command "_TEXT" ptt "" "" area) ...
Технически возможно подчеркивание значения толстой линией ?
У меня почему-то перестало работать как поставил новый автокад '12.
Кодом пользовался очень долго :cry:
> 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 ? Спасибо за код)
Модернизированный код:
(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) )
А можно поправить код, чтоб было видно, куда ставить значение площади?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc