URSA  Библиотека материалов  Архитекторам и проектиров­щикам
Показать сообщение отдельно
 
Непрочитано 25.11.2008, 20:47 код работает не так как нужно в 2009-м акаде
#139
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 455
<phrase 1=


Скачал здесь на форуме код, который загоняет размеры и текст на нужные слои, переделал его под себя, вроде бы все было чудесно на 2007-м акаде, но когда попробовал загрузить у сотрудника на 2009-м возникла следующая ситуация. Допустим, у меня активен другой слои, не размеры. Я проставляю размер (он проставляется в нужном мне слое РАЗМЕРЫ), дальше активным вновь становится мой текущий слой, но (!) после этого я уже не могу сделать активным любой другой слой кроме того, который был до проставления размера, назначить любой слой объекту могу, а сделать слой текущим нет. Такой глюк появился только в 2009-й версии акада.

Прилагаю этот самый код:

Код:
[Выделить все]
(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))) '("РАЗМЕРНАЯ" "ТЕКСТ")));

(vlr-command-reactor nil '((:vlr-commandWillStart . startCommand))) 
(vlr-command-reactor nil '((:vlr-commandEnded . endCommand))) 
(vlr-command-reactor nil '((:vlr-commandCancelled . endCommand))) 
;
(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 nil));cond 
  (princ)
);startCommand
;
(defun endCommand (calling-reactor endcommandInfo) 
 (if *OldLayer* (setvar "clayer" (nth 0 *OldLayer*))) 
 (setq *OldLayer* nil) 
 (princ) 
);endCommand

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

Последний раз редактировалось beholder, 26.11.2008 в 00:01. Причина: Тэги code кто проставлять будет?
beholder вне форума  
 
CAD БИБЛИОТЕКА
Размещение рекламы