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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Как бы сделать динамическое изменение значения площади?

Как бы сделать динамическое изменение значения площади?

Ответ
Поиск в этой теме
Непрочитано 01.08.2004, 10:24 #1
Как бы сделать динамическое изменение значения площади?
Grinzaid
 
Архитектор
 
Израиль
Регистрация: 14.10.2003
Сообщений: 365

Как бы сделать динамическое изменение значения площади подобно размеру? То есть создаёшь замкнутую полилинию и привязываешь к ней текст (или какой другой объект), реагирующий на изменемия площади полилинии - схватил полилинию за уголок и потянул, и цифери побежали. Вот бы здорово было... :roll:
__________________
С уважением,
Влад Гринзайд.
Просмотров: 4788
 
Непрочитано 01.08.2004, 14:53
#2
Денэн


 
Регистрация: 06.03.2004
г.Саратов
Сообщений: 72


На страничке http://www.metalot.com/kitox/kitoxtools_ru.html я скачал программу kitox toolset. В ней есть такая возможность. Для закнутой фигуры определяется площадь, вставляется в чертеж в виде текста, и затем при изменении фигуры изменяется и текст.
Денэн вне форума  
 
Непрочитано 02.08.2004, 07:41
#3
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


В 2005 это можно сделать при помощи обекта FIELD(поле).
Очень удобно.
Arkady вне форума  
 
Непрочитано 02.08.2004, 10:50
#4
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


А еще - прицепить к замкнутой полилинии реактор...

ЗЫ: Кочка зрения программиста...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Автор темы   Непрочитано 02.08.2004, 11:44
#5
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


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

Ещё раз спасибо.

Уважаемый kos, а как прицепить к замкнутой полилинии реактор? :roll: Подсобите, а?
__________________
С уважением,
Влад Гринзайд.
Grinzaid вне форума  
 
Непрочитано 02.08.2004, 13:29
#6
AY


 
Сообщений: n/a


Arkady прав с появлением FIELD это совсем просто,
однако у меня не получилось и тут менять размерность
(т.е. арифмитические операции со значением) может через Diesel.

Собственно напомню, что такие вещи как и многие другие
присутствуют в ADT. И там уже можно менять и размерность
и суффиксы и перфиксы и округление и наименование комнат т.п.

Реакторы для объектов всетаки как то муторно и с виду не надежно
кроме того их надо делать для этого случая постоянными, а
если в рисунок при этом не будет подгружена исполняемая функция
(например при открытии файла на чужом компе), то ситуация черевата
глюками и тормозами... как мне кажется...
 
 
Непрочитано 02.08.2004, 14:11
#7
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Код:
[Выделить все]
(vl-load-com)

(defun kos-calc-area (/ vla:polyArea vlr:calcArea)
  ;; Выбираем полилинию, к которой будет прицеплен реактор
  (setq	vla:polyArea
	 (vlax-ename->vla-object
	   (car (entsel "\n Выберите замкнутую полилинию: "))
	 ) ;_  vlax-ename->vla-object
  ) ;_  setq
  ;; Создаем реактор на изменение объекта
  (setq	vlr:calcArea
	 (vlr-object-reactor
	   (list vla:polyArea)				; список владельцев
	   "\n Площадь области: "			; данные
	   (list '(:vlr-modified . kos-save-area))	; реакции ифункции отклика
	 ) ;_  vlr-object-reactor
  ) ;_  setq

) ;_  defun

;;; Функция отклика
(defun kos-save-area (vla:object vlr:reactor lst:perameters)
  ;; Выводим новое значение площади в командную строку
  (princ (strcat (vlr-data vlr:reactor)
		 (rtos (vla-get-area vla:object))
	 ) ;_  strcat
  ) ;_  princ
  ;; Сохраняем его же в системной переменной USERR1
  (setvar "USERR1" (vla-get-area vla:object))
) ;_  defun
Кратко прокомментирую:
1. Никаких проверок не делалось. А нужно бы.
2. Как правильно писал AY реакторы дело муторное. Слишком много всего нужно учитывать. Но в том же ADT, насколько я знаю (могу ошибаться, могу...) именно на реакторах все и реализовано. Не на LISP'е, конечно.
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 02.08.2004, 15:17
#8


 
Сообщений: n/a


>kos несомненно подобные вещи в серьезных приложениях
основаны на реакторах и, конечно, не на лиспе, а какже иначе?

Однако я предложил бы решение без реактора
сфарганить код который добавляет в расширенные
данные полилинии хендл текста и код который при запуске
обновляет текст . Конечно это полуавтомат, но всеже...
 
 
Непрочитано 02.08.2004, 18:02
#9
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Уважаемые коллеги - настройка точности и метр, мм, дециметр и даже в световых годах
в DDUNITS, тогда FIELD отражает установку (в диалоге FIELD поставить DECIMAL)
Startrek вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Как бы сделать динамическое изменение значения площади?

Размещение рекламы