Schöck
Показать сообщение отдельно
 
Непрочитано 28.11.2008, 10:51
#143
VVA

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


beholder, То что показал Алексей не лишне. Вскрытие показало наличие грубейшей ошибки в логике. Непоянтно почему это работало в предыдущих версиях ??? К коду №140 Добавил исправление ошибки (выделил красным) и добавил 2 команды (CMDS и CMDE) на аткивации и остановки командных реакторов в сеансе работы
Код:
[Выделить все]
(vl-load-com)
  (setq lyrs (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'Layers) 
        nlrs (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lyrs x)));Проверяем наличие слоя в файле 
              (vla-add lyrs x))) '("РАЗМЕРНАЯ" "ТЕКСТ")));
(defun cmdr-remove ()
(if *vlr-cmd*
  (progn
    (setq *vlr-cmd* nil)
    (vlr-remove-all :vlr-command-reactor)
    ) ;_ end of progn
  ) ;_ end of if
  )
(defun cmdr-create ()
(if (not *vlr-cmd*)
  (setq *vlr-cmd*
         (vlr-command-reactor
           "-command-reactor"
           '(
             (:vlr-commandwillstart . startcommand)
             (:vlr-commandended . endcommand)
             (:vlr-commandcancelled . endcommand)
             (:vlr-commandfailed . endcommand)
             )
           ) ;_ end of VLR-Command-Reactor
        ) ;_ end of setq
  ) ;_ end of if
  )
(defun startCommand (calling-reactor startcommandInfo / thecommandstart)
  (setq thecommandstart (nth 0 startcommandInfo))
  (setq *OldLayer* (append *OldLayer* (list (getvar "CLAYER"))))
      (cond ((wcmatch thecommandstart "DIM*") (setvar "clayer" "РАЗМЕРНАЯ"))
            ((wcmatch thecommandstart "*TEXT") (setvar "clayer" "ТЕКСТ"))
            (t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев
            );cond
      (princ)
);startCommand
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil)
;;; (cmdr-remove)
;;;(cmdr-create)
 
 (princ) 
);endCommand
;;;Активировать командный реактор
;;;CoMmanD reactor Start
(defun C:CMDS ()
(cmdr-remove)
(cmdr-create)
  )
;;;Удалить командный реактор
;;;CoMmanD reactor End
(defun C:CMDE ()(cmdr-remove))
(cmdr-remove)
(cmdr-create)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Размещение рекламы