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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как закончить циклическую команду (послать ей ESC)?

LISP. Как закончить циклическую команду (послать ей ESC)?

Ответ
Поиск в этой теме
Непрочитано 09.01.2014, 00:14 #1
LISP. Как закончить циклическую команду (послать ей ESC)?
WhiteShark
 
Регистрация: 30.03.2012
Сообщений: 101

Прошу прощения за детский вопрос, но чо то как то не могу

Написал вот гасилку слоев

(defun c:loff (/)
(vl-cmdf "-layer" "OFF" (strcat "~*" (read-line) "*") "N" )
)

Но в конце команда остается активной и просит следующую опцию. Каждый раз вручную нажимать на ESC напрягает. Как прервать команду программно, подскажите?

И заодно вопрос №2. Имена принтеров в настройках лэйаутов хранятся в словарях чертежа ведь?
Просмотров: 3600
 
Непрочитано 09.01.2014, 01:13
#2
Кулик Алексей aka kpblc
Moderator

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


Попробуй так:
Код:
[Выделить все]
 (defun c:loff (/)
(vl-cmdf "_.-layer" "_OFF" (strcat "~*" (read-line) "*") "_N" "")
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.01.2014, 10:27
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от WhiteShark Посмотреть сообщение
И заодно вопрос №2. Имена принтеров в настройках лэйаутов хранятся в словарях чертежа ведь?
Нет, в свойствах печати листа.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 09.01.2014, 10:42
#4
WhiteShark


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


to Кулик Алексей aka kpblc
Так, конечно, пробовал, Алексей. Пробовал еще через chr(27). Не выходит. Еще варианты?

to Do$
Так эти свойства они где хранятся?
WhiteShark вне форума  
 
Непрочитано 09.01.2014, 11:08
#5
Кулик Алексей aka kpblc
Moderator

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


WhiteShark, тебе что надо сделать-то? Отключить все слои, кроме указанного?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.01.2014, 11:11
#6
WhiteShark


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


Отключить слои по маске. Иначе б я просто isolate'ом пользовался. Но вообще в принципе интересно как быть в случае таких команд? То есть как ответить на вопрос в топике?
WhiteShark вне форума  
 
Непрочитано 09.01.2014, 11:24
#7
Кулик Алексей aka kpblc
Moderator

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


Я бы вообще командами не пользовался...
Если через ActiveX:
Код:
[Выделить все]
 (vl-load-com)

(defun layon-by-mask (mask / adoc)
                      ;|
*    Отключение слоев по маске
*    Параметры вызова:
  mask    маска имен слоев, которые надо оставить "включенными"
|;
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for item (vla-get-layers adoc)
    (vla-put-layeron
      item
      (if (wcmatch (strcase (vla-get-name item)) (strcase mask))
        :vlax-true
        :vlax-false
        ) ;_ end of if
      ) ;_ end of vla-put-layeron
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.01.2014, 12:11
#8
WhiteShark


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


Не, ну можно, конечно, по воробьям из из ActiveX шмалять..
Я то просто три строчки писал на скорую руку.

Просто есть и другие такие цикличные команды (pedit к примеру). Там такая же фигня с выходом. Нету способа что ли программно их тормозить?

Пока решил задачу, повесив макрос на кнопку и посылая ему ^C^C в конце
WhiteShark вне форума  
 
Непрочитано 09.01.2014, 12:21
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Нажатие ESC в Lisp имитируется функцией без аргумента (vl-cmdf) или (command)
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 09.01.2014, 12:39
#10
WhiteShark


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


а всё, понял что надо было следующей строкой добавлять.
WhiteShark вне форума  
 
Непрочитано 09.01.2014, 14:06
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от WhiteShark Посмотреть сообщение
to Do$
Так эти свойства они где хранятся?
Для доступа с помощью VBA/VisualLISP:
http://vbamodel.narod.ru/AutoCAD/idh_layout_object.htm
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 09.01.2014, 15:07
#12
WhiteShark


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


Ммм.. спасибо за намёк Do$, а SetPlotDeviceName не бывает что ли? Как же назначить лэйауту PlotDeviceName?

----- добавлено через ~7 мин. -----
Цитата:
Сообщение от WhiteShark Посмотреть сообщение
Ммм.. спасибо за намёк Do$, а SetPlotDeviceName не бывает что ли? Как же назначить лэйауту PlotDeviceName?
Вроде сам догадался
(vlax-put-property (vlax-get-property (vla-get-activedocument (vlax-get-acad-object)) 'ActiveLayout) 'ConfigName "ххх")
WhiteShark вне форума  
 
Непрочитано 09.01.2014, 15:30
#13
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Можно и без vlax-get/put (свойства-то известны автокаду):
(vla-put-ConfigName (vla-get-ActiveLayout (vla-get-activedocument (vlax-get-acad-object))) "ххх")
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 10.01.2014, 08:36
#14
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
(vl-cmdf "-layer" "OFF" (strcat "~*" (read-line) "*") "N" "" "")
__________________
Никогда не спорьте с дураками - они опустят Вас до своего уровня и победят за счет опыта
CB вне форума  
 
Автор темы   Непрочитано 10.01.2014, 14:02
#15
WhiteShark


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


CB, как ни странно, но ваш вариант, будучи скоприрован в ком строку, вызывает по завершению предыдущую команду

Хотя если вводить эту последовательность в интерактивном режиме с клавы, то последний enter действительно выводит из цикла.
WhiteShark вне форума  
 
Непрочитано 13.01.2014, 22:24
#16
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Код:
[Выделить все]
 (vl-cmdf "_.-layer" "_OFF" (strcat "~*" (read-line) "*") "_N" "" "") 
В конце макроса пробел

----- добавлено через ~52 мин. -----
Для команды попробуй
Код:
[Выделить все]
 (defun c:loff (/)
(vl-cmdf "_.-layer" "_OFF" (strcat "~*" (read-line) "*") "_s" (getvar "CLAYER") ""))
roaa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как закончить циклическую команду (послать ей ESC)?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
LISP на команду 3dcorbit Малюк LISP 2 30.09.2009 14:18