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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > передача управления AutoCAD <-> AutoLISP ?

передача управления AutoCAD <-> AutoLISP ?

Ответ
Поиск в этой теме
Непрочитано 03.10.2006, 15:53 #1
передача управления AutoCAD <-> AutoLISP ?
Lesha
 
город Ч на Волге
Регистрация: 25.09.2006
Сообщений: 20

искал - что-то ничего не нашел.
нужно сделать следующее:
когда пользователь нажимает кнопку, переключиться на определенный слой, там начертить полилинию(задаваемую пользователем), и в конце переключиться на исходный слой.

повесил на кнопку функцию:
Код:
[Выделить все]
(defun brs_sch_pw( / oldlayer )
  (setq oldlayer (getvar "CLAYER"))
  (command "_setvar" "clayer" "wires")
  (command "_pline")
  (setvar "CLAYER" oldlayer)
)
надо на команде "_pline" отдать управление акаду до тех пор, пока юзер не закончит рисование полилинии. в моем коде этого не происходит
как это сделать?
заранее благодарен
Просмотров: 2270
 
Непрочитано 03.10.2006, 16:05
#2
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun brs_sch_pw( / oldlayer )
  (setq oldlayer (getvar "CLAYER"))
  (command "_setvar" "clayer" "wires")
  (command "_pline")
  (while (/= (logand (getvar "cmdactive") 31) 0)
    (command pause)
    )
  (setvar "CLAYER" oldlayer)
)
Вроде так, если опять не перепутал имя сист.переменной.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2006, 16:13
#3
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


то, что надо! спасибо!
вопрос закрыт)
Lesha вне форума  
 
Непрочитано 03.10.2006, 16:18
#4
Profan


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


Цитата:
(command "_setvar" "clayer" "wires")
А разве нельзя так:
Код:
[Выделить все]
(setvar "clayer" "wires")
?
Profan вне форума  
 
Непрочитано 03.10.2006, 16:27
1 | #5
Кулик Алексей aka kpblc
Moderator

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


Не-а, не закрыт
Что будет, если пользователь "закончит" рисование нажатием Esc? Праально, слой обратно не вернется А если слоя еще нет в файле? А если потом надо будет отменить сделанное? В общем, примерно решение такое получается (если не углубляться):
Код:
[Выделить все]
(defun brs_sch_pw (/ oldlayer *error*)
  (defun *error* (msg)
    (if	oldlayer
      (setvar "clayer" oldlayer)
      ) ;_ end of if
    (command "_.undo" "_e")
    (princ msg)
    (princ)
    ) ;_ end of defun

  (setq oldlayer (getvar "CLAYER"))
  ;;(setvar "clayer" "wires")
  (command "_.layer" "_m" "wires" "")
  (command "_.undo" "_g")
  (command "_.pline")
  (while (/= (logand (getvar "cmdactive") 31) 0)
    (command pause)
    ) ;_ end of while
  (setvar "CLAYER" oldlayer)
  (command "_.undo" "_e")
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2006, 17:23
#6
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


...и правда, по Esc-у слой обратно не возвращался...а теперь все в порядке.
а что с undo не так? не вижу разницы в работе...
Lesha вне форума  
 
Непрочитано 03.10.2006, 17:26
#7
Кулик Алексей aka kpblc
Moderator

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


Возьми свой код, нарисуй полилинию, заверши нормально. Потом - отмена до тех пор, пока полилиния не исчезнет. Слой какой? По идее не вернется
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2006, 17:38
#8
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


в обоих случаях после нормального завершения по первому undo стирается полилиния и устанавливается слой "wires" по второму undo устанавливается исходный слой ("0")

(command "_.undo" "_g")
поставил перед
(command "_.layer" "_m" "wires" "")
и стало все отлично

спасибо за помощь
я узнал больше чем спрашивал
Lesha вне форума  
 
Непрочитано 03.10.2006, 17:49
#9
Кулик Алексей aka kpblc
Moderator

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


Упс... Нда, что значит сила привычки. Настолько отвык работать через (command), что в них путаюсь
Естественно, что надо было поменять местами, ты все правильно сделал [img]http://img246.**********.us/img246/8399/thumbsup4kk.gif[/img]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > передача управления AutoCAD <-> AutoLISP ?

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