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

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

Как увидть атрибуты блока через лисп?

Ответ
Поиск в этой теме
Непрочитано 27.06.2010, 23:57
Как увидть атрибуты блока через лисп?
Pr9nik
 
Регистрация: 26.02.2009
Сообщений: 25

Как в AutoLisp-е увидеть атрибута блока?
Есть блок с атрибутами в AutoCAD-е...
Чтоб посмотреть данные этого объекта набераю:
(entget (car (entsel))), выделяю блок
AutoCAD мне выдает:
((-1 . <Entity name: 7efc0570>) (0 . "INSERT") (330 . <Entity
name: 7efbecf8>) (5 . "1EE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"Невидимые") (6 . "Continuous") (100 . "AcDbBlockReference") (66 . 1) (2 .
"ARM-INFO") (10 862.134 1271.86 0.0) (41 . 150.0) (42 . 150.0) (43 . 150.0) (50
. 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
А про атрибуты и значения их нечего нету. Подскажите пожалуйста какой командой можно это посмотреть? И вообще как это можно сделать?
Просмотров: 11867
 
Непрочитано 06.10.2022, 10:17
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


а зачем? извлекаете все атрибуты, но берете только нужные по текущей логике программы.
Сергей812 вне форума  
 
Непрочитано 06.10.2022, 12:19
#22
pad


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


Дак в том то и дело, что атрибуты содержащие текст выставлены в зависимости от состояния Видимости, в этом суть. Должен же быть маркер у них?
pad вне форума  
 
Непрочитано 06.10.2022, 12:43
#23
Кулик Алексей aka kpblc
Moderator

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


По-моему, достаточно проверять свойство видимости. Какой бит в DXF за это отвечает, не помню точно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2022, 13:18
#24
pad


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, достаточно проверять свойство видимости. Какой бит в DXF за это отвечает, не помню точно.
Может есть кусок кода, или источник где можно изучить? Читая на форуме ветку от Supermax "Создание дополнительных параметров Visibility Set в динамических блоках" закипел уже
pad вне форума  
 
Непрочитано 06.10.2022, 13:32
#25
Кулик Алексей aka kpblc
Moderator

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


Ну как-то так примерно:
Код:
[Выделить все]
 (defun  get-all-atts (obj)
  (if (and obj
	   (vlax-property-available-p obj 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes obj))
      )
    (vl-catch-all-apply
      (function
	(lambda	()
	 (vl-remove nil (mapcar (function (lambda (x)
			    (if (equal (vla-get-visible x))  (cons (vla-get-TagString x)
				    (vla-get-TextString x)
			      )
			    )
		  ))
		  (append (vlax-invoke obj 'Getattributes)
			  (vlax-invoke obj 'Getconstantattributes)
		  ))
	  )
	)
      )
    )
  )
)
Код не проверял (пишу без ACAD'a)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2022, 14:07
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от pad Посмотреть сообщение
Дак в том то и дело, что атрибуты содержащие текст выставлены в зависимости от состояния Видимости, в этом суть. Должен же быть маркер у них?
с другой стороны, у каждого атрибута есть тэг/имя. И если в динпараметр видимости эти атрибуты заносятся по определенной системе, а не в каждом блоке произвольно - то по состоянию параметра видимости и именам атрибутов можно выбрать нужные. Хотя на лиспе проще видимость атрибута посмотреть, наверно)
Сергей812 вне форума  
 
Непрочитано 06.10.2022, 14:57
#27
Кулик Алексей aka kpblc
Moderator

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


Тэги - как ни парадоксально - могут повторяться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2022, 15:09
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тэги - как ни парадоксально - могут повторяться.
имхо, не вижу ничего парадоксального, потому что атрибуты - просто список, а не словарь с ключом = имени тэга (сужу на основании того, что нет механизма доступа к значениям отдельных атрибутов по имени).
Сергей812 вне форума  
 
Непрочитано 06.10.2022, 15:57
#29
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Дык атрибуты появились в те времена, когда "словари" только бумажные были...
И стояли на книжных полках. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 07.10.2022, 10:48
#30
pad


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тэги - как ни парадоксально - могут повторяться.
Может я не корректно объяснил вопрос, есть блок. В блоке есть N количество видимостей.
На каждой видимости помимо графической части есть два скрытых постоянных атрибута, пусть будут единицы измерения и количество.
Для примера:
"видимость 1" атрибуты имеют значения М и 1,
"видимость 2" атрибуты имеют значения КГ и 100,
"видимость 3" атрибуты имеют значения ШТ и 1000.

Дак вот вопрос был, как считать атрибуты активной (установленной) видимости блока на чертеже, т.е. если пользователь выбрал "видимость 2" то необходимо считать атрибуты КГ и 100.

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

Последний раз редактировалось pad, 07.10.2022 в 10:56.
pad вне форума  
 
Непрочитано 07.10.2022, 10:54
1 | #31
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Код:
[Выделить все]
 (setq insert_object (vlax-ename->vla-object (car (entsel))))
(princ "\n")
(foreach attribute
	(vl-remove-if '(lambda (attribute) (zerop (vlax-get attribute 'visible)))
				   (append (vlax-invoke insert_object 'getattributes)
				   		   (vlax-invoke insert_object 'getconstantattributes)
				   )
	)
	(princ (strcat "\n" (vla-get-tagstring attribute) "/" (vla-get-textstring attribute)))
)
__________________
K Lisp
koMon вне форума  
 
Непрочитано 07.10.2022, 10:58
#32
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


имхо, какой-то усложненный путь - хранить в блоке множество атрибутов, используя лишь небольшую часть для самой работы.
Сергей812 вне форума  
 
Непрочитано 07.10.2022, 14:24
#33
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Ну дык и смотри DXF-код 70. Первый бит - режим скрытности.
0 - видим, 1 - скрыт.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 07.10.2022, 16:53
#34
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


70 группа это флаг атрибута, здесь нужна видимость объекта - 60 группа.
__________________
K Lisp
koMon вне форума  
 
Непрочитано 10.10.2022, 06:43
#35
pad


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Код:
то что надо было!
pad вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как увидть атрибуты блока через лисп?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как переделать атрибуты в тексты? Grinzaid AutoCAD 4 29.08.2016 16:53
Как задать блоку с атрибуты? kosolapi AutoCAD 20 02.12.2009 13:54
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как изменять, добавлять атрибуты у блока Алексей К. AutoCAD 2 29.01.2007 10:59