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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЛИСП : Как удалить последнюю из списка команд

ЛИСП : Как удалить последнюю из списка команд

Ответ
Поиск в этой теме
Непрочитано 04.04.2012, 14:04 #1
ЛИСП : Как удалить последнюю из списка команд
ГрустныйПрограммист
 
Регистрация: 06.09.2010
Сообщений: 16

Добрый вечер!
Пишу плагин для одной трехмерной программы, которая использует автокад. Там есть возможность выполнить любую команду автокада.
То есть
Код:
[Выделить все]
 plughost_eventTrigger(CAD,"p4d_mod_refresh", NULL); 
приводит к вводу в командную строку автокада конструкции p4d_mod_refresh.
Если в коде плагина я использую указанную строку (а я вынужден это делать), то последняя команда в автокаде, после завершения работы плагина - p4d_mod_refresh.
Но мне-то нужно видеть последней командой не ее
, так как пользователь привык вызывать последнюю команду (пробел или энтер в командной строке)!
Попытка использовать конструкции вида
Код:
[Выделить все]
 plughost_eventTrigger(CAD,"(setvar \"cmdecho\" 0)", NULL); 	
plughost_eventTrigger(CAD,"(command p4d_mod_refresh)", NULL); 
тоже не спасают.
Что можно сделать?
Просмотров: 2958
 
Непрочитано 04.04.2012, 15:15
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Есть доступ к исходному тексту команды p4d_mod_refresh? Если да, то всё просто - достаточно описать её с флагом ACRX_CMD_NOHISTORY (CommandFlags.NoHistory)
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 04.04.2012, 15:28
#3
ГрустныйПрограммист


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


Спасибо за ответ. Нет.
ГрустныйПрограммист вне форума  
 
Непрочитано 04.04.2012, 16:22
#4
TararykovDG

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


Цитата:
Сообщение от ГрустныйПрограммист Посмотреть сообщение
Нет.
Нет, в смысле так не работает, или нет доступа к исходному тексту команды p4d_mod_refresh?
ГрустныйПрограммист, попробуй так
Код:
[Выделить все]
 
plughost_eventTrigger(CAD,"(defun my_func() (command p4d_mod_refresh))", NULL); - обернули команду в функцию
plughost_eventTrigger(CAD,"(my_func)", NULL); - вызвали функцию, а не команду, но по факту отработала команда p4d_mod_refresh
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 04.04.2012, 17:54
#5
ГрустныйПрограммист


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


нет доступа к исходному тексту команды p4d_mod_refresh
ГрустныйПрограммист вне форума  
 
Непрочитано 04.04.2012, 19:20
#6
TararykovDG

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


Цитата:
Сообщение от ГрустныйПрограммист Посмотреть сообщение
нет доступа к исходному тексту команды p4d_mod_refresh
Ну так, а вариант обернуть команду в функцию и вызывать функцию, как преложено в посте #4 не заработал?
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 04.04.2012, 20:16
#7
Do$

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


Мне кажется, что тут (command p4d_mod_refresh) надо в кавычки аргумент заключить.
Do$ вне форума  
 
Автор темы   Непрочитано 04.04.2012, 20:43
#8
ГрустныйПрограммист


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


спасибо за ответ,TararykovDG
Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Ну так, а вариант обернуть команду в функцию и вызывать функцию, как преложено в посте #4 не заработал?
вывод:
Команда: (defun my_func() (command p4d_mod_refresh))
MY_FUNC
Команда: (my_func)
*Прервано*
nil
Спасибо за ответ, Do$. а что заключать в кавычки? к вечеру плохо соображаю, извините.
ГрустныйПрограммист вне форума  
 
Непрочитано 04.04.2012, 20:49
#9
Do$

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


Попробуйте так:
Код:
[Выделить все]
plughost_eventTrigger(CAD,"(defun my_func() (command \"p4d_mod_refresh\"))", NULL)
plughost_eventTrigger(CAD,"(my_func)", NULL)
Do$ вне форума  
 
Автор темы   Непрочитано 04.04.2012, 20:57
#10
ГрустныйПрограммист


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Попробуйте так:
Код:
[Выделить все]
plughost_eventTrigger(CAD,"(defun my_func() (command \"p4d_mod_refresh\"))", NULL)
plughost_eventTrigger(CAD,"(my_func)", NULL)
еще раз спасибо, но не работает. вывод :
Команда: (defun my_func() (command "p4d_mod_refresh"))
MY_FUNC
Команда: (my_func)
nil
ГрустныйПрограммист вне форума  
 
Непрочитано 04.04.2012, 21:46
#11
Do$

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


Судя по логу - работает вроде. Ошибок не вываливает.
Вот что происходит, если имя команды не распознано:
Код:
[Выделить все]
Команда: (command "abvgd")
abvgd Неизвестная команда "ABVGD".  Для вызова справки нажмите F1.

Команда: nil
Do$ вне форума  
 
Непрочитано 04.04.2012, 21:51
#12
Кулик Алексей aka kpblc
Moderator

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


Можно как вариант - подавить вывод в ком.строку. Если обращение к AutoCAD идет через СОМ-модель, то для VB можно попробовать сделать нечто типа (если указатель на активный документ получен и назначен переменной oDoc
Код:
[Выделить все]
Dim arSysVar(1) As oSysVar, iCounter As Integer
  arSysVar(0).sName = "cmdecho": arSysVar(0).iValue = oDoc.GetVariable(arSysVar(0).sName)
  arSysVar(1).sName = "nomutt": arSysVar(1).iValue = oDoc.GetVariable(arSysVar(1).sName)
  oDoc.SetVariable (arSysVar(0).sName), 0
  oDoc.SetVariable (arSysVar(0).sName), 1
  On Error GoTo lError
  oDoc.SendCommand msg + vbCr
lError:
  For iCounter = 0 To UBound(arSysVar)
    oDoc.SetVariable arSysVar(iCounter).sName, arSysVar(iCounter).iValue
  Next iCounter
Код писал на VBA из AUtoCAD 2009, и на красивость не претендую ни разу. Все же к лиспу я как-то больше привык
---
Добавлено:
Можно сделать и по-другому:
Код:
[Выделить все]
plughost_eventTrigger(CAD,"(defun my_func() (command \"p4d_mod_refresh\") (princ))", NULL)
plughost_eventTrigger(CAD,"(my_func)", NULL)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.04.2012, 09:54
#13
ГрустныйПрограммист


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Судя по логу - работает вроде. Ошибок не вываливает.
Вот что происходит, если имя команды не распознано:
Код:
[Выделить все]
Команда: (command "abvgd")
abvgd Неизвестная команда "ABVGD".  Для вызова справки нажмите F1.

Команда: nil
Уважаемый ДОС! Вы меня спасли. Действительно,все работает. Большое спасибо!
СПАСИБО ВСЕМ!!
ГрустныйПрограммист вне форума  
 
Непрочитано 05.04.2012, 11:11
1 | #14
Do$

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


Да особо не за что, автор основной идеи - TararykovDG. Его и благодарите
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЛИСП : Как удалить последнюю из списка команд



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить строку в которой содержится определённый символ из списка...? МихМих Программирование 13 16.10.2010 15:37
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Увеличение списка команд в кантекстном меню Yuzer AutoCAD 15 21.04.2009 21:48