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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Реакция программы на появление объекта определенного типа

Реакция программы на появление объекта определенного типа

Ответ
Поиск в этой теме
Непрочитано 28.07.2004, 11:51
Реакция программы на появление объекта определенного типа
Torino
 
Штаб
Регистрация: 21.08.2003
Сообщений: 943

Идея такая: предположим

я начертил в чертеже заливку.
Это каким-то образом отслеживается и запускается лисп, в котором последний созданный объект (в данном случае штриховка) премещается на слой "HATCH"
Потом управление передается обратно командной строке.
То же самое с текстом: на слой "TEXT"
И размерами: на слой "DIM"

Может быть реакторами?

В идеале, если нажатие ПРОБЕЛа (ENTER или правый щелчок мыши), вызывало бы команду, которая запускалась ДО запуска "перехватчика". И UNDO отменяла тоже эту команду.
Но это в идеале и думаю трудно осуществимо.
Просмотров: 7616
 
Непрочитано 29.07.2004, 10:30
#21
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Код:
[Выделить все]
; Если racsb-реактор изменения базы и rcom-реактор завершения команды
;уже существуют в рисунке , то мы их не создаем
; При наступлении события изменения базы запускается функция отклика dataobj
;При наступлении события завершения команды запускается функция отклика ismlay
(if

    (not racdb)


     (setq racdb (vlr-acdb-reactor
		   nil
		   (list
		     '(:vlr-objectappended . dataobj)
		   )
		 )
     )
  )
  (if 

    (not rcom)


     (setq rcom	(vlr-command-reactor
		  nil
		  (list
		    '(:vlr-commandended . ismlay)
		  )
		)
     )
  )
;*******************************************************
;Здесь должна быть проверка на наличие в рисунке реакторов подобного типа
;и проверка на включенность-выключенность реакторов этих и подобных через
;vlr-added-p , включение нужных , отключение ненужных через vlr-add и vlr-remove
;***********************************************************
)
; функция отклика получает аргументы а-указатель на реактор,(cadr b)-имя создаваемого
;объекта
(defun dataobj (a b)
  (setq	vl-obj	 (vlax-ename->vla-object
		   (cadr b)
		 ); указатель на  VLA объект
	name-obj (vla-get-objectname vl-obj);тип(имя) VLA объекта
  )
  ;Изменения в базе происходят до окончательного создания объекта
  ;т.е допустим запущена команда line (при указании 1 точки отрезка
  ;ACAD уже создает его имя и записывает информацию о нем в базу ,
  ;поэтому изменить свойства примитива из этой функции нельзя , нужно
  ;отслеживать событие завершение команды.

)
; Функция отклика получает аргументы x-указатель на реактор , Y-имя завершенной
;команды в виде '(LINE)

(defun ismlay (x y)
  ;если имя завершенной команды соответствует именам указанным в списке ниже , то
  (if
    (member (car y)
	    '("TEXT"	    "DTEXT"	  "MTEXT"	"HATCH"
	      "BHATCH"	    "DIMALIGNED"  "DIMLINEAR"	"DIMANGULAR"
	     )
    )
     (progn
       ; выполняется проверка какого типа объект создан и в
       ;соответствии с типом объекту присваивается слой
       ;тип объекта функция берет из переменной name-obj указатель из vl-obj
       ;определенных в функции dataobj
       (cond

	 (
	  (equal name-obj "AcDbHatch")

	  (vla-put-Layer vl-obj "HATCH")
	 )

	 (
	  (or
	    (equal name-obj "AcDbText")
	    (equal name-obj "AcDbMText")
	  )

	  (vla-put-Layer vl-obj "TEXT")
	 )

	 (
	  ;если в имени объекта присутствует фраза "Dimens" , то объекту
	  ;присваивается слой DIM
	  (vl-string-search "Dimens" name-obj)

	  (vla-put-Layer vl-obj "DIM")
	 )
       )
     )
  )
  (princ)
  )
; код можно упростить , но писал быстро что в голову пришло , т.к. времени
; не очень много.
Эдуард вне форума  
 
Непрочитано 29.07.2004, 10:48
#22
kos

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


Torino, снова облом...
Пробую с другого mail'а... В имени 7 цифр... Не прими за вирус...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 29.07.2004, 12:09
#23
kos

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


Ув. Torino!
Мне почему-то кажется, что не у меня проблемы с почтой...
Код:
[Выделить все]
ВНИМАНИЕ: сообщение на адрес 'w3w@imail.ru' не доставлено
SMTP module(domain @195.209.41.194:imail.ru) reports:
 return-path address <6689183@tut.by> rejected by relay6.aport.ru:
 552 sorry, that message size exceeds my databytes limit (#5.3.4)


Уведомление от: dns; tut.by 
 
Оригинальный получатель: rfc822;<w3w@imail.ru> 
Итоговый получатель: rfc822;<w3w@imail.ru> 
Действие: failed 
Статус: 5.0.0
Какие будут предложения?...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Автор темы   Непрочитано 29.07.2004, 12:24
#24
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


>>Эдуард
Моя благодарность не знает границ, в пределах моего благосостояния

>>kos
Посмотри, пожалуйста, приват.
Torino вне форума  
 
Автор темы   Непрочитано 29.07.2004, 14:52
#25
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


>>kos
Получил!
Огроменное спасибо!
Torino вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Реакция программы на появление объекта определенного типа