| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Кнопка - Площадь с учётом масштаба

Кнопка - Площадь с учётом масштаба

Ответ
Поиск в этой теме
Непрочитано 29.11.2006, 01:24 #1
Кнопка - Площадь с учётом масштаба
Чигинский Дмитрий
 
ГИП
 
Тула
Регистрация: 09.09.2006
Сообщений: 112

Здравствуйте,
подскажите, пожалуйста, какая macro-команда должна быть у кнопки со следующей функцией: при нажатии кнопка реагирует, как кнопка Area (площадь), но результат выдаёт в масштабе заданном в размерном стиле, то есть полученную площадь умножает на масштаб в квадрате. Речь идёт о чёртеже в Model в заданном масштабе, например 1:100, тогда в размерном стиле Scale factor равен 100.

В принципе аналогичные кнопки возможны и для Distance и для Region.

P.S. Я знаю, что в Model нужно чертить в масштабе 1:1.
__________________
С уважением, Чигинский Дмитрий.
Просмотров: 4643
 
Непрочитано 29.11.2006, 05:44
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А раз знаешь, то зачем же?
Profan вне форума  
 
Непрочитано 29.11.2006, 09:35
#3
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


Код:
[Выделить все]
(defun C:Ploshad ( / l1 p1 p2 p3 p4 t1 s1 ploshad0)
(princ "\nТекущий размерный стиль должен быть настроен на миллиметры")
(setq ploshad0 2 ;точность расчета (знаков после точки)
      p1 (getpoint (strcat "\nПервая точка (точность (=" (itoa ploshad0) ")"))
      l1 (list p1)
)
(initget 1)(setq p1 (getpoint "\nВторая точка:"))
(while p1
   (setq l1 (cons p1 l1) p1 (getpoint "\nСледующая точка <завершить>:")))
(if (= (length l1) 2)
   (setq p1 (car l1) p2 (cadr l1) p3 (list (car p2)(cadr p1))
         p4 (list (car p1)(cadr p2)) l1 (list p1 p3 p2 p4)))
(Osmo 0)
(apply 'command (append (list "_area") l1 (list "")))
(Osmo nil)
(setq t1 (* (getvar "area")(getvar "dimlfac")(getvar "dimlfac") 1e-06)
      t1 (rtos t1 2 ploshad0)
)
(if (setq p1 (getpoint (strcat "\n \nТочка для " t1 " м.кв. или <пропустить>:")))
   (progn (setq s1 (ssget "c" (Dxy p1 -2 -1)(Dxy p1 2 1)))
          (Osmo 0)(setvar "cmdecho" 0)
          (if s1 (command "_erase" s1 ""))
          (command "_text" "_m" p1 "" "" t1)
          (Osmo nil))
);if
(princ));c:Ploshad

(defun Osmo (v1);global osmo0
(cond ((and v1 osmo0)(setvar "osmode" 0))
      (v1 (setq osmo0 (getvar "osmode"))(setvar "osmode" 0))
      (osmo0 (setvar "osmode" osmo0)(setq osmo0 nil)))
(princ));Osmo

(defun Dxy (p1 v1 v2)(list (+ (car p1) v1)(+ (cadr p1) v2)));Dxy
Pilot вне форума  
 
Непрочитано 29.11.2006, 09:55
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Pilot
Стандартная команда "_area" ("площадь") помимо площади выдает еще и периметр. В программе нельзя добавить? И не мешало бы визуально отслеживать построение контура. А как быть если контур уже построен и надо определить его площадь? Обводить? А он, оказывается, имеет дуговые сегменты или это эллипс. Вот, блин, к чему приводит нерациональная работа в AutoCAD'е.
Profan вне форума  
 
Непрочитано 29.11.2006, 16:04
#5
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


Эта программка написана в основном для получения площади помещений, а там дуги встречаются не так часто.
Когда попадается что-то более лохматое и при этом требующее высокой точности, то я делаю руками. Но не обрисовываю контур, а копирую нужное на свободное поле, _trim все лишнее и _pedit _join в полилинию, а потом _area _object.

Воткнуть про периметр можно, но сейчас физически некогда дописывать и отлаживать. Сорри. Выше я просто свою старую прогу поместил.
Pilot вне форума  
 
Непрочитано 29.11.2006, 16:19
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да мне, собственно, и не нужно. Я работаю в масштабе 1:1 и у меня есть свои программы для работы с площадями. Ремарка моя направлена в основном Дмитрию.
Profan вне форума  
 
Непрочитано 29.11.2006, 16:52
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Как вариант
Код:
[Выделить все]
(defun C:TEST ( )
(setvar "CMDECHO" 1)
(command "_.AREA")
(while (> (getvar "CMDACTIVE") 0)(command pause))
(setq S (getvar "AREA"))
(setq P (getvar "PERIMETER"))
(setq Sn (* S (getvar "DIMLFAC")(getvar "DIMLFAC") 1e-6)) ;_М2
(setq Pn (* P (getvar "DIMLFAC") 0.001))                   ;_М
(princ "\nПлощадь:\n\tпосчитанная - ")(princ (rtos S 2 9))
(princ "\n\tс учетом масштаба - ")(princ (rtos Sn 2 9))(princ " м2")
(princ "\nПериметр:\n\tпосчитанный - ")(princ (rtos P 2 9))
(princ "\n\tс учетом масштаба - ")(princ (rtos Pn 2 9))(princ " м")
(princ))
VVA вне форума  
 
Автор темы   Непрочитано 29.11.2006, 19:53
#8
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Благодарю за отклик.

Я добавил данные коды в кнопки, в обоих вариантах, при нажатии на кнопку в Dynamic Input, вижу (_>

Что нужно сделать, чтобы предложенный код заработал?
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Автор темы   Непрочитано 30.11.2006, 07:58
#9
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Разобрался: Код нужно сохранить в файл с расширением .lsp потом, загрузить командой Appload, а потом уже команду Ploshad или TEST присвоить кнопке.

Спасибо.
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Автор темы   Непрочитано 30.11.2006, 22:47
#10
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Я остановился на варианте:
Код:
[Выделить все]
(defun C:AreaM ( )
(setvar "CMDECHO" 1)
(command "_.AREA")
(while (> (getvar "CMDACTIVE") 0)(command pause))

(setq A (getvar "AREA"))
(setq P (getvar "PERIMETER"))
(setq AM (* A (getvar "DIMLFAC")(getvar "DIMLFAC") 1e-6)) ;_М2
(setq PM (* P (getvar "DIMLFAC") 0.001)) ;_М

(princ "\nПлощадь = ")
(princ (rtos AM 2))
(princ " м2, Периметр = ")
(princ (rtos PM 2))
(princ " м")(princ))
Мне не понятно:
1. Почему результат не отображается в Dynamic (рядом с курсором);
2. Как сделать параметр, который задаёт единицы измерения, стоит по умолчанию в метры (м), но может изменяться с помощью выпадающего меню (+ command line).
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Кнопка - Площадь с учётом масштаба

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск