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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как организовать выход из While при выборе объекта?

Как организовать выход из While при выборе объекта?

Ответ
Поиск в этой теме
Непрочитано 21.07.2016, 17:28 #1
Как организовать выход из While при выборе объекта?
AlexZh
 
Регистрация: 23.09.2015
Сообщений: 146

Код:
[Выделить все]
 (setq ent1 nil)
(while (if ent1
	 (if (and (equal (cdr (assoc 0 (entget ent1))) "INSERT")
		  (wcmatch (cdr (assoc 8 (entget ent1))) "1Z_APS_Equipment*")
	     ) ;_ конец and
	   nil
	   t ;_ конец and
	 ) ;_ конец if
	 t
       ) ;_ конец and
  (setq	ent1 (car (entsel "\nВыберите приемное устройство:"))
			      ; объект трассы начала
  ) ;_ конец setq
) ;_ конец while
Подскажите, как организовать выход без клавиши ESC?

Последний раз редактировалось AlexZh, 21.07.2016 в 17:53.
Просмотров: 2226
 
Непрочитано 21.07.2016, 17:32
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


По правой кнопке мыши
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.07.2016, 17:34
#3
AlexZh


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


В том то и дело, что не выходит. висит "запрос".
AlexZh вне форума  
 
Непрочитано 21.07.2016, 17:57
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Как вариант (достаточно промахнуться - и выполнение цикла прервется) - во вложении
Вложения
Тип файла: lsp tmp2.lsp (453 байт, 22 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2016, 18:13
#5
Profan


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


А как-то так попробовать:
Код:
[Выделить все]
(setq ent1 T ss (ssadd))
(while ent1
  (setq	ent1 (car (entsel "\nВыберите приемное устройство:"))) ; объект трассы начала
  (if ent1
	 (if (and (equal (cdr (assoc 0 (entget ent1))) "INSERT")
                   (wcmatch (cdr (assoc 8 (entget ent1))) "1Z_APS_Equipment*")
	     ) ; _and
             (ssadd ss ent1)
          ) ; _if
    ) ; _if          
) ; _while
Profan вне форума  
 
Непрочитано 21.07.2016, 19:42
#6
VVA

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


или как-то так
Код:
[Выделить все]
(while
  (progn
    (setvar "errno" 0)
    (initget "Выход")
    (setq sel (entsel "\nВыберите приемное устройство или [Выход] <Выход>:"))
    (cond
      ((= 7 (getvar 'ERRNO))(princ "\nНичего не выбрано! Пробуй снова."))
      ((null sel) t)
      ((and (equal (cdr (assoc 0 (entget (car sel)))) "INSERT") 
           (wcmatch (strcase(cdr (assoc 8 (entget (car sel))))) "1Z_APS_EQUIPMENT*") 
          )
       nil
       )
      (t (alert "Не тот выбор") t)
      )
    )
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 21.07.2016, 22:08
#7
AlexZh


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как вариант (достаточно промахнуться - и выполнение цикла прервется) - во вложении
в том то и дело, что не нужно вылета из программы. выход только при желании пользователя, по "пустому ответу"

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Profan Посмотреть сообщение
А как-то так попробовать:
Код:
[Выделить все]
(setq ent1 T ss (ssadd))
(while ent1
  (setq	ent1 (car (entsel "\nВыберите приемное устройство:"))) ; объект трассы начала
  (if ent1
	 (if (and (equal (cdr (assoc 0 (entget ent1))) "INSERT")
                   (wcmatch (cdr (assoc 8 (entget ent1))) "1Z_APS_Equipment*")
	     ) ; _and
             (ssadd ss ent1)
          ) ; _if
    ) ; _if          
) ; _while
Вот что пишет...

Error: неверный тип аргумента: lentityp <Selection set: a81>

----- добавлено через ~14 мин. -----
Цитата:
Сообщение от VVA Посмотреть сообщение
или как-то так
Код:
[Выделить все]
(while
  (progn
    (setvar "errno" 0)
    (initget "Выход")
    (setq sel (entsel "\nВыберите приемное устройство или [Выход] <Выход>:"))
    (cond
      ((= 7 (getvar 'ERRNO))(princ "\nНичего не выбрано! Пробуй снова."))
      ((null sel) t)
      ((and (equal (cdr (assoc 0 (entget (car sel)))) "INSERT") 
           (wcmatch (strcase(cdr (assoc 8 (entget (car sel))))) "1Z_APS_EQUIPMENT*") 
          )
       nil
       )
      (t (alert "Не тот выбор") t)
      )
    )
  )
Спасибо! это то что надо. Немного подправил)

Код:
[Выделить все]
 (while
    (progn
      (setvar "errno" 0)
      (initget "Выход")
      (setq
	ent1 (entsel
	       "\nВыберите приемное устройство или [Выход] <Выход>:"
	     )
      ) ;_ конец setq
      (cond
	((= 7 (getvar 'errno))
	 (princ "\nНичего не выбрано! Пробуй снова.")
	)
	((or (or (null ent1) (equal ent1 "Выход"))
	     (and (equal (cdr (assoc 0 (entget (car ent1)))) "INSERT")
		  (wcmatch (strcase (cdr (assoc 8 (entget (car ent1)))))
			   "1Z_APS_EQUIPMENT*"
		  ) ;_ конец wcmatch
	     ) ;_ конец and
	 ) ;_ конец and
	 nil
	)
	(t (alert "Попробуй еще раз!") t)
      ) ;_ конец cond
    ) ;_ конец cond
  )
А где бы посмотреть подробнее про ERRNO?

Последний раз редактировалось AlexZh, 22.07.2016 в 10:20.
AlexZh вне форума  
 
Непрочитано 22.07.2016, 10:25
#8
Profan


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


Цитата:
Сообщение от AlexZh Посмотреть сообщение
Вот что пишет...
Error: неверный тип аргумента: lentityp <Selection set: a81>
Послушай-еа, если я написал, что "как-то так", то это не значит, что именно так.
Ты просил просто закончить выбор объектов в цикле по Enter и привел, на мой взгляд, неподходящий пример фрагмента кода.
Полного текста программы нет и файла DWG для проверки работы кода тоже нет. Я смоделировал предполагаемую ситуацию и моя программа
заканчивает цикл по нажатию Enter, правой кнопки мыши или пробела. Чтобы эти действия не казались бессмысленными, я записываю выбранные объекты в набор.
А что твой-то код делает? Попробовал я его запустить на своем примере (свои слои) и кроме невозможности выйти из цикла ничего не увидел. Ну, по Esc вышел, но результат-то
работы кода какой? Хотя бы сообщение было, как у VVA. Дескать, это - тот объект, э этот - не тот, чтоб ему лопнуть.
Profan вне форума  
 
Автор темы   Непрочитано 22.07.2016, 10:32
#9
AlexZh


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


Цитата:
Сообщение от Profan Посмотреть сообщение
Ты просил просто закончить выбор объектов в цикле по Enter и привел, на мой взгляд, неподходящий пример фрагмента кода.


"объектА" и дальше идет работа программы с данным объектом.
AlexZh вне форума  
 
Непрочитано 22.07.2016, 10:56
1 | #10
VVA

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


Цитата:
Сообщение от AlexZh Посмотреть сообщение
А где бы посмотреть подробнее про ERRNO?
В обычной справке Автокада. Это системная переменная - читать
Ниже - с отловом ошибок. Пользователь выйдет только "чисто"
Код:
[Выделить все]
(vl-load-com)
(while
  (vl-catch-all-apply
    (function
      (lambda ()
        (progn
          (setvar "errno" 0)
          (initget "Выход")
          (setq
            ent1
             (entsel
               "\nВыберите приемное устройство или [Выход] <Выход>:"
             ) ;_ end of entsel
          ) ;_ конец setq
          (cond
            ((= 7 (getvar 'errno))
             (princ "\nНичего не выбрано! Пробуй снова.")
            )
            ((or (or (null ent1) (equal ent1 "Выход"))
                 (and
                   (equal (cdr (assoc 0 (entget (car ent1)))) "INSERT")
                   (wcmatch (strcase (cdr (assoc 8 (entget (car ent1)))))
                            "1Z_APS_EQUIPMENT*"
                   ) ;_ конец wcmatch
                 ) ;_ конец and
             ) ;_ конец and
             nil
            )
            (t (alert "Не тот объект. Попробуй еще раз!") t)
          ) ;_ конец cond
        ) ;_ end of progn
      ) ;_ end of lambda
    ) ;_ end of function
  ) ;_ end of vl-catch-all-apply
) ;_ end of while
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 22.07.2016 в 11:05.
VVA вне форума  
 
Непрочитано 22.07.2016, 11:15
#11
Profan


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


Выскажу еще одно соображение.
Предлагается выбрать приемное устройство. Только пользователь, видимо, совсем не представляет себе, что это такое и тыкается наугад, пока не наткнется на то, что нужно.
Profan вне форума  
 
Автор темы   Непрочитано 22.07.2016, 14:07
#12
AlexZh


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




Все нормально. Эта программа для меня. Для составления каб. журнала.
AlexZh вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как организовать выход из While при выборе объекта?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли организовать выход из помещения без рабочего места с полом ниже нуля по стремянке? Emma Архитектура 33 26.05.2023 12:03
Является ли выход эвакуационным vlasctelin Пожарная безопасность 17 28.09.2014 14:06
При выборе объекта - окно свойства пустое, что делать? Ded_M03ay Вертикальные решения на базе AutoCAD 2 15.11.2012 21:34
Отрисовка полосы отвода линейного объекта Агент СмиТ Программирование 10 06.11.2012 10:05
Получение разрешения на строительство объекта капитального строительства maxummm Прочее. Архитектура и строительство 18 25.08.2010 20:31