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

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

Помогите создать лисп открывающи/закрывающий окно свойств циклически одной командой

Ответ
Поиск в этой теме
Непрочитано 17.01.2015, 13:23 #1
Помогите создать лисп открывающи/закрывающий окно свойств циклически одной командой
VAV
 
Проектировщик
 
Воронеж
Регистрация: 28.10.2009
Сообщений: 331

Помогите создать лисп открывающи/закрывающий циклически окно свойств одной командой.
По умолчанию в автокаде это комбинация контрл+1, но мне хотелось бы вызывать это обычным написанием команды в командной строке.
Макрос на эту комбинацию такой: $M=$(if,$(and,$(>,$(getvar,opmstate),0)),^C^C_propertiesclose,^C^C_properties)
Как его переделать в лисп?
Спасибо за помощь
Просмотров: 3173
 
Непрочитано 17.01.2015, 14:40
1 | #2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


как-то так
Код:
[Выделить все]
(defun C:POC()
(if(zerop(getvar "opmstate"))
  (if command-s (command-s "_properties")(command "_properties"))
  (if command-s (command-s "_propertiesclose")(command "_propertiesclose"))
)
(princ)
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 17.01.2015 в 23:38.
VVA вне форума  
 
Непрочитано 17.01.2015, 14:51
#3
Кулик Алексей aka kpblc
Moderator

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


command? Может, лучше будет vl-cmdf или ввести доп.проверку на версию ACAD'a?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.01.2015, 14:55
#4
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


все работает. Огромное спасибо

----- добавлено через 57 сек. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
command? Может, лучше будет vl-cmdf или ввести доп.проверку на версию ACAD'a
Т.е. этот лисп не во всех версиях автокада пойдет?

----- добавлено через ~6 мин. -----
хоть все и работает в командной строке появляются такие строки:
Команда: РОС
_properties
Команда: nil
Команда: РОС _propertiesclose
Команда: nil

----- добавлено через ~7 мин. -----
nil - это ведь значит, что какая-то ошибка присутствует?
VAV вне форума  
 
Непрочитано 17.01.2015, 22:26
#5
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


а не проще повесить окно свойств всплывающим скажем справа. отвел мыху вправо и получил окно, убрал - окно исчезло.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 17.01.2015, 23:39
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от VAV Посмотреть сообщение
nil - это ведь значит, что какая-то ошибка присутствует?
нет. Обновил #2. Правда без проверки, надеюсь со скобками не напутал
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.01.2015, 00:41
#7
Кулик Алексей aka kpblc
Moderator

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


Нну, если хочется тишины в ком.строке, то вот вариант:
Код:
[Выделить все]
 (vl-load-com)

(defun c:poc (/ adoc sysvar)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq sysvar (mapcar
                 (function
                   (lambda (x / tmp)
                     (setq tmp (getvar (car x)))
                     (setvar (car x) (cdr x))
                     (cons (car x) tmp)
                     ) ;_ end of LAMBDA
                   ) ;_ end of function
                 '(("menuecho" . 0)
                   ("cmdecho" . 0)
                   ("nomutt" . 1)
                   )
                 ) ;_ end of mapcar
        ) ;_ end of setq
  (if command-s
    (command-s (strcat "_.properties"
                       (if (zerop (getvar "opmstate"))
                         ""
                         "close"
                         ) ;_ end of if
                       ) ;_ end of strcat
               ) ;_ end of command-s
    (command (strcat "_.properties"
                     (if (zerop (getvar "opmstate"))
                       ""
                       "close"
                       ) ;_ end of if
                     ) ;_ end of strcat
             ) ;_ end of command
    ) ;_ end of if
  (foreach item sysvar
    (setvar (car item) (cdr item))
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2015, 09:00
#8
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Кулик Алексей aka kpblc,
А что за command-s такая? Чем отличается от coomand? Почему она после if без скобок, если это функция? У меня твой код ошибку выкидывает. После чего кад виснет.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 18.01.2015, 10:07
1 | #9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Krieger Посмотреть сообщение
А что за command-s такая?
Начни отсюда
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.01.2015, 10:34
#10
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Кулик Алексей aka kpblc,
А что за command-s такая? Чем отличается от coomand? Почему она после if без скобок, если это функция? У меня твой код ошибку выкидывает. После чего кад виснет.
Я проверял в 2014 и 2015 - у меня не вис.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2015, 10:45
#11
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я проверял в 2014 и 2015 - у меня не вис.
Еще раз попробовал. Кад вывалил ошибку, но не повис. Повис редактор LISP. При попытке закрыть редактор - фатал эррор и вылетает вместе с кадом. Кад 2014.
Миниатюры
Нажмите на изображение для увеличения
Название: скрин.jpg
Просмотров: 31
Размер:	125.7 Кб
ID:	142085  
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 18.01.2015, 11:02
#12
Кулик Алексей aka kpblc
Moderator

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


Очень интересно... Ошибка, похоже, связана с ядром acad.exe и вряд ли лечится. У тебя SP установлен на 2014?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2015, 11:06
#13
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Очень интересно... Ошибка, похоже, связана с ядром acad.exe и вряд ли лечится. У тебя SP установлен на 2014?
SP1

Короче:
Код:
[Выделить все]
 (defun c:pp()
(if (zerop (getvar "opmstate"))
  (vl-cmdf "_properties")
  (vl-cmdf "_propertiesclose"))
  )
__________________
Делай хорошо, плохо само получится.

Последний раз редактировалось Krieger, 18.01.2015 в 11:11.
Krieger вне форума  
 
Непрочитано 18.01.2015, 11:28
#14
Кулик Алексей aka kpblc
Moderator

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


Тоже вариант Но хотели тишину в ком.строке...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2015, 11:41
#15
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Так тихо.
Код:
[Выделить все]
 (defun c:pp(/ ECHO adoc)
   (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
	(setq ECHO (getvar "CMDECHO"))
   	(setvar "CMDECHO" 0)
	(if (zerop (getvar "opmstate"))
  	(vl-cmdf "_properties")
  	(vl-cmdf "_propertiesclose"))
   	(setvar "CMDECHO" ECHO)
   	
   (vla-endundomark adoc)
   (princ)
  )
В ACAD20015 vl-cmdf работает без изменений?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 19.01.2015, 09:52
#16
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


Спасибо всем за помощь. Решил использовать код VVA из поста №2
VAV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите создать лисп открывающи/закрывающий окно свойств циклически одной командой

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать лисп, вызывающий команду ПРЯМАЯ с определенными параметрами VAV LISP 16 20.01.2015 18:58
Помогите создать лисп выделяющий несколько объектов по шаблону Аристарх Северный LISP 13 15.08.2014 08:03