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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp Запрет ввода

AutoLisp Запрет ввода

Ответ
Поиск в этой теме
Непрочитано 29.06.2011, 15:29 #1
AutoLisp Запрет ввода
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, подскажите как сделать что бы человек мог указать только блок? Если что-то другое, то выводить предупреждение как внизу. При таком раскладе здесь можно ввести цифру или ничего не ввести... Как nil обработать понятно, а вот если число попадется или еще чего?

Код:
[Выделить все]
(setq c1 1)
  (while c1
(setq e1 (car (entsel "\nТыкай блок: ")))
    (setq ee1 (entget e1))
    (setq ee2 (cdr (assoc 0 ee1)))
    (setq pt0 (cdr (assoc 10 ee1)))
    (if (equal ee2 "INSERT")
      (setq c1 nil)
      (alert "Нужно выбрать блок ")
    )
)
Просмотров: 1855
 
Непрочитано 29.06.2011, 15:31
#2
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Код:
[Выделить все]
 (setq ent (ssname (ssget "_+.:S:E" '((0 . "INSERT"))) 0))
Например, так...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 29.06.2011, 16:03
#3
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


При запросе выбрать объект, жму Enter. Результат - вылет по ошибке(
Zaghim вне форума  
 
Непрочитано 29.06.2011, 16:05
#4
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Ну как вариант - оборачивать в обработчик ошибок. Вариантов много, и твой ничем не хуже других
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 29.06.2011, 16:15
#5
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Нет, вы не поняли. Если я выбрал не блок, она вылетает на этом месте: (setq ee1 (entget e1))
Нужно сразу после ответа на запрос блока проверять что бы был не ноль не цифра и вообще ничего кроме блока)) думал о INITGET, но хз как его присобачить...
Zaghim вне форума  
 
Непрочитано 29.06.2011, 16:21
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Zaghim, попробуй так, налепил по быстрому
Код:
[Выделить все]
 
; Получить ссылку на указанный объект на чертеже
;	message - текст сообщения при запросе указать объект 
;	filter - список типов объктов для фильтрации (например: ("LINE" "INSERT") - значит будут восприниматься только объекты типа "LINE"  и "INSERT")
;	lock_enter - блокировка нажатия Enter (lock_enter - T при нажатии Enter будет снова запрос на указание объекта; lock_enter - nil выход из функции)
;	return - ссылка на указанный объект (например: <Имя объекта: 7e8ac738>) или 0 если нажали Enter при lock_enter - nil или nil если нажали Esc
(defun Get-Object-BySelect(message filter lock_enter / errnovar obj ed type_obj return)
  (setq errnovar (getvar 'errno))
  (setvar "errno" 0)
  (setq obj nil)
  (while (not obj)
    (prompt "\n")
    (if (not (vl-catch-all-error-p
	       (setq obj (vl-catch-all-apply 'entsel
			   (list message)
			 )
	       )
	     )
	)
      (progn
	(if obj
	  (progn
	    (if (and filter
                     (listp filter)
                     )
	      (progn
		(setq ed (entget (car obj)))
		(setq type_obj (strcase (cdr (assoc 0 ed))))
		(if (member type_obj (mapcar 'strcase filter))
		  (progn
	            (setq return (car obj))
		  )
		  (progn
		    (setq obj nil)
		  )
		)
	      )
	      (progn
		(setq return (car obj))
	      )
	    )
	  )
	  (progn
	    (if (and (not lock_enter) (= (getvar "errno") 52))
	      (progn
		(setq obj T)
		(setvar "errno" errnovar)
		(setq return 0)
	      )
	    )
	  )
	)
      )
      (progn
	(setq return nil)
      )
    )
  )
  return
); End Get-Object-BySelect
В Твоем случае вызывать так: (Get-Object-BySelect "Выберете вхождение блока" (list "INSERT") T)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 29.06.2011, 16:25
#7
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Вот это крокодил...неужель нельзя как-нибудь попроще?
А хотя ладно. Это работает!!!!!!! СПАСИБО ОГРОМНОЕ!!!!
Zaghim вне форума  
 
Непрочитано 29.06.2011, 16:39
#8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Вот это крокодил...неужель нельзя как-нибудь попроще?
А хотя ладно. Это работает!!!!!!! СПАСИБО ОГРОМНОЕ!!!!

Zaghim, разбери код и переделай под свои нужды (с Твом количеством сообщений и временем, что Ты обитаешь на форуме это пора уже далать). В моем примере обрабатываются все возможные ошибки (хотя может и не все, мож че пропустил), отключаемая (через входной параметр lock_enter) опция контроля нажатия пользователем Enter'а при выборе объекта, задаваемый фильтр (через входной параметр filter) на выбираемые объекты. Если все это убрать, то крокодил станет моськой.
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 29.06.2011, 17:01
#9
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Форум открыт круглосуточно в фоне, поэтому, наверно и столько часов)))
Просто вижуал лисп я как-то всегда обхожу стороной...больше по душе автолисп
Zaghim вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp Запрет ввода



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет ввода некоторых символов в поле editbox Nitrogenium Программирование 4 07.04.2011 01:29
ЩР или ПР на два ввода без АВР с учетом электроэнергии. КТО ЗНАЕТ yapOn Поиск литературы, чертежей, моделей и прочих материалов 9 26.08.2010 12:01
2 ввода + ДГК + ИБП, как всё увязатьс помощью АВР Mr.Andersen Инженерные сети 32 13.10.2009 17:51
Как отладить нейтив и менеджед код в COM объекте который используется из AutoLISP? lexluther LISP 1 12.08.2009 08:37