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

;************AREA_K.LSP - Вычисление площади контура
;                          и простановка значения на плане
;
;         Разработал  Громов В.В. Апрель 1999, 2001.
;
(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"))
  ;  (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))
       (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 s)
           ))
           (command "_TEXT" ptt "" "" area)
       (princ "\n Площадь контура = ")(princ s) (princ " кв.м")
       (setvar "OSMODE" osm)
       (command "_-LAYER" "_S" slt "")
       (princ)
)

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

> Владимир Громов
Попробовал - получил такой результат(ACAD2004ING):

Command: areak
 Количество знаков после точки (0, 1, 2) <1>: 2
 Выберите полилинию:
Select object:
 Площадь контура = 0.00318415 кв.м
 Подчеркивать число (да,нет)? <н>:
 Укажите место размещения текста: Unknown command "0".  Press F1 for help.
 Площадь контура = 0 кв.м

В плане площадь не поставила, а если мне надо в кв.мм?

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

> Владимир Громов
... да, и еще вопрос: на каком языке отвечать на запросы программы?

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

> Владимир Громов
Вопрос "Как сохранить программный код на своем компьютере?" и ответ на него помещены в FAQ.
http://www.autocad.ru/cgi-bin/f1/board. … amp;key=RU

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

> sergcd2
То, что 0 (ноль) понятно.

Unknown command "0"

может означать, что в текущем текстовом стиле задан шрифт с фиксированной высотой, а в этом случае из опций выпадает запрос о высоте текста и получается ошибка в моей программе.
Отвечать надо на русском языке. l в строке

(initget "д l н")

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

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

sergcd2 пишет:

В плане площадь не поставила, а если мне надо в кв.мм?

Что бы получить площадь в кв.мм. достаточно удалить строку
(setq s (/ s 1000000))

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

> sergcd2
Ошибка возникает потому, что у Вас в текущем текстовом стиле назначена высота текста, чего делать не надо.

> Владимир Громов
Ну а автор, перед командой
(command "_TEXT" ptt "" "" area)
должен проверять это. Т.е. есть ли высота текста в текущем текстовом стиле.
Ну и заодно задавать её и угол написания, а не принимать неизвестно что.

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

> sergcd2
аналогичная прога, выложил бы исходники, да слишком огромны.
http://dwg.ru/dwl/331

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

> Alan
Я ведь уже ответил раньше по поводу фиксированной высоты текста...
И ведь, повторяю еще раз, сам код просто подвернулся под руку для иллюстрации и пробы того, что переехало теперь в FAQ. Первую тему в этом разделе я хотел посвятить просто вопросу копирования кода, приведенного здесь, в файл на локальном компьютере.
А если кто-то думает, что этот раздел создан для того, чтобы можно было бы ехидно или злобно раскритиковать любую программу, созданную пользователем AutoCAD'а, а не профессиональным программистом, то он заблуждается. Этот раздел представлялся мне как жест доброй воли, как возможность предоставить ВСЕМ бескорыстную помощь в освоении AutoCAD'а и AutoLisp'а, и совершенствования приемов работы в AutoCAD'е. И если я в программе указываю свое авторство, это не значит, что ее нельзя совершенствовать или нельзя представить в конкретной теме более совершенный вариант программы. Мои программы еще далеки от совершенства, ну так попробуйте создать тему со своими программами. Лиха беда начало, может все получится и в дальнейшем темы не будут такими многословными.

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

> Владимир Громов

> diz

> Alan
Как подправить код я знаю. Речь вроде бы шла об окнчательно отлаженных программах (я об этой ветке). А данная програмка требует доработки. :о)

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

Т.е. я не вдаваясь в код (как была идея для этой ветки) запустил програмку на выполнение и получил тот резутат, который получил

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

> sergcd2
Блин, еще раз говорю, этот код случайно здесь оказался и без комментариев. А в комментариях я мог бы указать, что шрифт не должен иметь фиксированную высоту и было бы все ясно. Мои коллеги успешно используют эту программу и никто из них не думает, что я им устроил подлянку. И ни черта эта программа не требует. Есть более совершенный вариант - ну, так и приведи его здесь, а не кусай.

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

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

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

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

А если кто-то думает, что этот раздел создан для того, чтобы можно было бы ехидно или злобно раскритиковать любую программу, созданную пользователем AutoCAD'а, а не профессиональным программистом, то он заблуждается.

Извини, не хотел обидеть. Я сам не профессионал в программировании.
Я рассуждал как sergcd2 (2005-08-09 01:13:55). Думаю, принято?

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

Отмечусь.
http://dwg.ru/dwl/231

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

> Владимир Громов
Win XP PRO SP2. AUTOCAD 2005ru.
Подгрузил Вашу програмку вот результат из комстроки:

Команда: _rectang
Первый угол или [Фаска/Уровень/Сопряжение/Высота/Ширина]:
Второй угол или [Размеры]: @2000,2000
Команда: AREAK
Количество знаков после точки (0, 1, 2) <2>:
Выберите полилинию:
Выберите объект:
Площадь контура = 4.0 кв.м
Подчеркивать число (да,нет)? <н>: д
Укажите место размещения текста: Неизвестная команда "%%U4%%U".  Для вызова
справки нажмите F1.
Площадь контура = 4 кв.м

Что я не так сделал? текст соответственно не прописался :(  ?

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

> Михаил74
У вас в текущем текстовом стиле текст имеет фиксированную высоту, об этом писалось выше...

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

Наткнулся на подобную тему http://dwg.ru/forum/viewtopic.php?t=558 … 951b54b111

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

А можно написать программу которая считала бы площадь контура который образован набором примитивов, указав только точку внутри этих примитивов, и уж совсем было бы супер шоб программка не обращала в подсчете площади на размеры выноски и слои осей и вспомогательных линий построения

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

> Syrex
С помощью этого лиспа https://www.caduser.ru/forum/topic30797.html получи контур, образованный примитивами, ну а потом проставь площадь.

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

Уважаемый Владимир Громов или может еще кто нибудь кто может помочь...
Нет ли у вас Лиспа  который может вычислять и суммировать  длины выбираемых ребер в 3Д теле (включая криволинейные дуги там и проч)
Или лисп вычисления периметра выбранной грани 3Д тела? (включая криволинейные дуги и проч)

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

> Алексий
Не там вопрос задали...

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

А где задать?

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

В разделе "AutoCAD" хотя бы...

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

> Владимир Громов
Владимир, мне хотелось бы спросить у вас, почему не работает программа если задана высота текста в текстовом стиле. Что мешает или ограничивает?