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

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

Как получить информацию о переопределённых слоях в ВЭ?

Ответ
Поиск в этой теме
Непрочитано 18.12.2008, 16:47 #1
Как получить информацию о переопределённых слоях в ВЭ?
Makswell
 
Инженер-строитель
 
Киров
Регистрация: 15.08.2007
Сообщений: 2,204

Всем привет!
С недавнего времени (вроде начиная с Автокада 2008) для каждого ВЭ в пространстве листа стало можно переопределить свойства слоёв. Конкретно это Цвет, Тип линии и Вес линии.
Как программно можно узнать, какие слои для данного ВЭ переопределены, а также узнать новые значения переопределённых свойств?

Для объекта AcDbViewport я только нашёл свойство LayerPropertyOverrides:
(vla-get-LayerPropertyOverrides (vlax-ename->vla-object (car (entsel))))

Т.е. можно узнать, применялось ли переопределение свойств слоёв для данного ВЭ.

Что надо делать дальше - не знаю.
Просмотров: 4188
 
Автор темы   Непрочитано 19.12.2008, 10:34
#2
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


На данном этапе могу получить список имён переопределённых слоёв для данного ВЭ.
Функция возвращает список имён или nil, если для данного ВЭ слои не переопределялись:
Код:
[Выделить все]
(defun test (/ vp_ent layers lay_ent XREC_LAYER_OVR tmp_lst lay_nam_lst)
  (setq vp_ent (car (entsel "\nВыбери ВЭ: ")))
  (if vp_ent
    (if	(= (vla-get-LayerPropertyOverrides (vlax-ename->vla-object vp_ent))
	   :vlax-true
	)
      (progn
	(setq layers (vla-get-layers
		       (vla-get-ActiveDocument
			 (vlax-get-acad-object)
		       )
		     )
	)
	(vlax-for fam_item layers
	  (setq	lay_ent	       (vlax-vla-object->ename fam_item)
		XREC_LAYER_OVR (cdr (assoc 360 (entget lay_ent)))
	  )
	  (if XREC_LAYER_OVR
	    (progn
	      (setq tmp_lst (vl-remove-if-not
			      '(lambda (x) (member (car x) '(360))) ;'(3 360)
			      (entget XREC_LAYER_OVR)
			    )
	      )
	      (if (eq (cdr (assoc 335 (entget (cdr (car tmp_lst))))) vp_ent)
		(setq lay_nam_lst
		       (append lay_nam_lst
			       (list (cdr (assoc 2 (entget lay_ent))))
		       )
		)
	      )
	    )
	  )
	)
	lay_nam_lst
      )
      nil
    )
  )
)
Makswell вне форума  
 
Непрочитано 19.12.2008, 11:03
#3
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


С объектной моделью по-моему действительно глухо, а вот через dxf 331 группа у viewporta содержит ename слоя который заморожен в данном вьюпорте.
если например создать вьюпорт и заморозить слой в нем то вот этот код доберется до списка точечных пар одного из слоев.
Код:
[Выделить все]
(entget (cdr (assoc 331 (entget(car(entsel))))))
Sleekka вне форума  
 
Непрочитано 30.09.2009, 14:50
#4
VVA

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


Цитата:
Сообщение от Makswell Посмотреть сообщение
Как программно можно узнать, какие слои для данного ВЭ переопределены, а также узнать новые значения переопределённых свойств?
Вроде разобрался как найти, но мне пока это не надо, так что покажу на пальцах.
Вводная:
Есть слой с именем Слой1 и 2 видовых экрана, на которых у этого слоя переопределены Цвет, Тип линии и Вес линии.
Код:
[Выделить все]
(setq Id_Lay (TBLOBJNAME "Layer" "Слой1")) ;_ Ename слоя "Слой1"
(setq dict_Lay (entget (cdr(assoc 360 (entget Id_Lay))))) ;_ Словари этого слоя "Слой1"
Список dict_Lay имеет вид
Цитата:
Команда: !dict_lay
((-1 . <Имя объекта: 7efd5210>) (0 . "DICTIONARY") (330 . <Имя объекта:
7efd5168>) (5 . "CA") (100 . "AcDbDictionary") (280 . 1) (281 . 1) (3 .
"ADSK_XREC_LAYER_COLOR_OVR") (360 . <Имя объекта: 7efd5218>) (3 .
"ADSK_XREC_LAYER_LINETYPE_OVR") (360 . <Имя объекта: 7efd52a0>) (3 .
"ADSK_XREC_LAYER_LINEWT_OVR") (360 . <Имя объекта: 7efd52a8>))
Думаю расшифровывать название в группе 3 нет необходимости.
Возьмем для примера словарь переопределенных цветов ADSK_XREC_LAYER_COLOR_OVR
Код:
[Выделить все]
(setq col (member '(3 . "ADSK_XREC_LAYER_COLOR_OVR") dict_Lay))
(setq dict_col (entget(cdr(assoc 360 col))))
Список dict_col
Цитата:
Команда: !dict_col
((-1 . <Имя объекта: 7efd5218>) (0 . "XRECORD") (5 . "CB") (102 .
"{ACAD_REACTORS") (330 . <Имя объекта: 7efd5210>) (102 . "}") (330 . <Имя
объекта: 7efd5210>) (100 . "AcDbXrecord") (280 . 1) (102 .
"{ADSK_LYR_COLOR_OVERRIDE") (335 . <Имя объекта: 7efd51f8>) (420 . -1023410174)
(102 . "}") (102 . "{ADSK_LYR_COLOR_OVERRIDE") (335 . <Имя объекта: 7efd5350>)
(420 . -1023410055) (102 . "}"))
В 335 группе содержится Ename того видового экрана, в котором это свойство слоя переопределено. Подозреваю, что в 420 группе как-то закодирован цвет. (так оно и оказалось)
Ну и т.д. по другим словарям
PS Похожая тема на caduser: функция доступа к переопределенным свойствам слоев экрана(vports) листа(layout)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 30.09.2009 в 15:07.
VVA вне форума  
 
Автор темы   Непрочитано 30.09.2009, 15:02
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Спасибо. Вроде понял.
С этим словарями как всегда всё дико заморочено. )))
Makswell вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить информацию о переопределённых слоях в ВЭ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить 3d-Solid объекты из Макса? longgy AutoCAD 18 04.09.2008 14:28
Как получить лицензию.... vinilman Разное 7 25.01.2008 11:11
Как получить значение системной переменной (аналог getvar)? mmmx Программирование 2 06.08.2007 15:02
Как получить таблицу свойств объектов такую же как в OrCad passat AutoCAD 1 08.12.2004 01:12
Как получить статистику по блокам Артём AutoCAD 5 02.03.2004 15:30