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

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

Какие системные переменные и команды помогут в автолисп оперировать слоями?

Ответ
Поиск в этой теме
Непрочитано 21.05.2012, 13:44 #1
Какие системные переменные и команды помогут в автолисп оперировать слоями?
Иванов Дмитрий
 
Регистрация: 28.09.2010
Сообщений: 55

Как программно в автолиспе проверить видимость слоя (что слой включен/отключен) и при необходимости отключить/включить его? Например.
С помощью getvar ... - setvar ... это можно сделать?
Просмотров: 1982
 
Непрочитано 21.05.2012, 14:11
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Иванов Дмитрий Посмотреть сообщение
С помощью getvar ... - setvar ... это можно сделать?
Нет можно с помощью (tblsearch "layer" "имя_слоя") и DXF Reference, либо через vla-get..., vla-put... и (vla-item (vla-get-layers (vla-get-activedocument(vlax-get-acad-object))) "имя_слоя").
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 21.05.2012, 14:47
1 | #3
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Посмотреть все свойства слоя ("0" - имя слоя):
Код:
[Выделить все]
(vlax-dump-object (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "0"))
Свойство LayerOn отвечает за вкл/выкл слоя.
Проверить включен/выключен ли слой ("0" - имя слоя):
Код:
[Выделить все]
(vla-get-LayerOn (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "0"))
если вернет :vlax-true, значит слой включен, :vlax-false - выключен
Выключить слой ("0" - имя слоя):
Код:
[Выделить все]
(vla-put-LayerOn (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) "0") 0)
ну и так далее...
skkkk вне форума  
 
Непрочитано 21.05.2012, 20:51
#4
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Простенький пример:

(defun c:togle()
(setq la (strcase(getvar"clayer")))
(if (= la "VIEWLAYER")(setvar"clayer" "0"))
(setq lcond (tblsearch "layer" "viewlayer"))
(setq comp (cdr (assoc 62 lcond)))
(cond
((< comp 0)(command "layer" "on" "viewlayer" ""))
((> comp 0)(command "layer" "off" "viewlayer" ""))
)
(princ)
)
__________________
Сквозь тернии к звездам.... и обратно :yes:
Startrek вне форума  
 
Автор темы   Непрочитано 22.05.2012, 12:34
#5
Иванов Дмитрий


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


Спасибо, получилось
Нужно было сделать кнопку в автокаде на вкл/выкл слоя defpoints:

(defun c:1 (/ la lcond comp)
(setq la (strcase (getvar "clayer")))
(if (= la "DEFPOINTS")
(setvar "clayer" "0")
)
(setq lcond (tblsearch "layer" "defpoints"))
(setq comp (cdr (assoc 62 lcond)))
(cond
((< comp 0) (command "_layer" "_on" "defpoints" ""))
((> comp 0) (command "_layer" "_off" "defpoints" ""))
)
(setvar "clayer" la)
(princ)
)

И в свойствах кнопки macro (пользовательская команда): ^C^C(load "d:/tmp.lsp")^C^C1
Иванов Дмитрий вне форума  
 
Непрочитано 22.05.2012, 12:36
#6
Profan


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


Оставил бы ты слой "defpoints" в покое...
Profan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Какие системные переменные и команды помогут в автолисп оперировать слоями?