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

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

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

Ответ
Поиск в этой теме
Непрочитано 27.06.2010, 23:57 #1
Как увидть атрибуты блока через лисп?
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))
А про атрибуты и значения их нечего нету. Подскажите пожалуйста какой командой можно это посмотреть? И вообще как это можно сделать?
Просмотров: 10913
 
Непрочитано 28.06.2010, 00:22
1 | #2
Кулик Алексей aka kpblc
Moderator

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


http://forum.dwg.ru/showthread.php?t=22653
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.06.2010, 09:46
#3
Pr9nik


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


Спасибо, не подскажешь как ей пользоваться? Загрузил в автокад... а вот дальше какую функцию вводить? _dwgru-block-get-attr-by-mask?
Сильно не бейте, с автолиспом только начинаю знакомится.
Pr9nik вне форума  
 
Непрочитано 29.06.2010, 09:54
1 | #4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Эту функцию можно использовать в своем коде.
Код:
[Выделить все]
<...>
(setq ats (_dwgru-block-get-attr-by-mask (car (entsel "\nУкажите блок с атрибутами:")) nil))
<...>
Главное тут - не забыть, что функция _dwgru-block-get-attr-by-mask использует еще 3 библиотечные функции, которые, в свою очередь, могут использовать другие функции... и все их надо подгрузить в автокад.
Do$ вне форума  
 
Автор темы   Непрочитано 29.06.2010, 10:36
#5
Pr9nik


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


Подгрузил все 5 функции...
1_dwgru-block-get-attr-by-mask.lsp
2_dwgru-is-ent-block-reference.lsp
3_dwgru-property-get.lsp
4_dwgru-conv-ent-to-vla.lsp
5_dwgru-conv-value-vla-to-list.lsp

ввожу (setq ats (_dwgru-block-get-attr-by-mask (car (entsel "\nУкажите блок с атрибутами:")) nil))
выбираю блок...
он мне возвращает nill
Pr9nik вне форума  
 
Непрочитано 29.06.2010, 10:39
#6
Кулик Алексей aka kpblc
Moderator

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


В последнем аргументе используй не nil, а "*".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.06.2010, 10:52
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


В функции есь вот что:
Код:
[Выделить все]
(if (not mask)
    (setq mask "*")
    ) ;_ end of if
Так что мона и nil! А в блоке есть атрибуты-то?
Do$ вне форума  
 
Непрочитано 29.06.2010, 11:10
#8
Кулик Алексей aka kpblc
Moderator

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


Do$, я уж и забыл
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.06.2010, 09:28
#9
Pr9nik


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


Попробовал и nil и "*"
возвращает:
Укажите блок с атрибутами:; error: no function definition: nil
в 1-м файле прописал в начале (vl-load-com)
может надо еще какието команды подгрузить?
Pr9nik вне форума  
 
Непрочитано 30.06.2010, 09:29
1 | #10
Кулик Алексей aka kpblc
Moderator

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


ОБразец файла покажи. Мне уже просто интересно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.06.2010, 09:36
#11
Pr9nik


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


тут 5 файлов лиспа, сам блок, и какую команду ввожу
Вложения
Тип файла: rar 1.rar (39.1 Кб, 101 просмотров)
Pr9nik вне форума  
 
Непрочитано 30.06.2010, 09:53
1 | #12
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


В функции _dwgru-block-get-attr-by-mask
надо заменить _dwgru-conv-value-to-list на _dwgru-conv-value-vla-to-list.
И вообще, я понимаю - отлов ошибок и пр... но иногда проще надо быть :
Код:
[Выделить все]
(defun do$-blk-get-attributes (ent / lst)
;;(do$-blk-get-attributes (car (entsel "\nSelect block:")))
  (while (and (setq ent (entnext ent))
       (= "ATTRIB" (cdr (assoc 0 (entget ent))))
  ) ;_ end of and
    (setq lst (cons ent lst))
  ) ;_ end of while
  lst
) ;_ end of defun
Do$ вне форума  
 
Автор темы   Непрочитано 30.06.2010, 10:20
#13
Pr9nik


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


Спасибо, заменил и получилось, вернул:
(#<VLA-OBJECT IAcadAttributeReference2 0c993b2c> #<VLA-OBJECT IAcadAttributeReference2 0c993964> #<VLA-OBJECT
IAcadAttributeReference2 0c9938cc> #<VLA-OBJECT IAcadAttributeReference2 0c993834> #<VLA-OBJECT IAcadAttributeReference2 0c99379c> #<VLA-OBJECT IAcadAttributeReference2 0c993704> #<VLA-OBJECT IAcadAttributeReference2 0c99366c>)
Это я так понимаю имена атрибутов, и нужно еще их разложить на списки чтоб добраться до значения этих атрибутов? И еще вопросс это он выдал результат в виде списка? Как их можно обрабатывать?
Вот этот код попроще Только он мне выдал:
Command: (setq ats (do$-blk-get-attributes (car (entsel "\nУкажите блок с
атрибутами:")) nil))

Укажите блок с атрибутами:; error: too many arguments
Pr9nik вне форума  
 
Непрочитано 30.06.2010, 10:31
1 | #14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


А надо так:
(setq ats (do$-blk-get-attributes (car (entsel "\nSelect block:"))))
Do$ вне форума  
 
Автор темы   Непрочитано 30.06.2010, 10:37
#15
Pr9nik


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


Спасибо получилось! Вернул список с именами
Pr9nik вне форума  
 
Непрочитано 30.06.2010, 12:00
#16
VVA

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


А где АКАД хранит значения атрибутов?
Редактирование атрибутов блока (скрытых и постоянных)
Извлечение значений атрибутов блоков AutoCAD Electrical с помощью AutoLisp
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.06.2010, 13:35
#17
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Pr9nik, Вообще то не обязательно использовать добрый десяток функций "со стороны", а можно развить код начатый Вами в теме используя стандартные функции Lisp:
Код:
[Выделить все]
(setq bl (cdr (assoc -1 (entget (car (entsel))))))
(print bl);;ТУТА ИМЯ БЛОКА
(while (eq (cdr (assoc 0 (entget (setq bl (entnext bl)))))
	   "ATTRIB"
       ) ;_ конец eq
  (progn
    (setq bbll (entget bl))
    (print bbll)	      ;;ТУТА АТРИБУТЫ т.е. ТО, ЧТО ТЕ НАДО!!!
  ) ;_ конец progn
) ;_ конец while
Вот коротенький кусочек кода, попробуй.
PS: Все это уже на форуме многократно обсуждалось.

Последний раз редактировалось E-degtyarev, 30.06.2010 в 13:56.
E-degtyarev вне форума  
 
Непрочитано 04.10.2022, 11:27
#18
pad


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


Добрый день! Как увидеть атрибуты с режимами СКРЫТЫЙ и ПОСТОЯННЫЙ?
pad вне форума  
 
Непрочитано 04.10.2022, 11:55
#19
===AAA===


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


Если склероз не подводит, то СКРЫТЫЙ - как обычный, перебором атрибутов
примитива "INSERT", а вот ПОСТОЯННЫЙ - тот живёт уже в таблице определения
блоков "BLOCK".
__________________
Счастливо, Алексей!
===AAA=== на форуме  
 
Непрочитано 06.10.2022, 09:32
#20
pad


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


С помощью функций LEE MAC LM:getvisibilitystate можно получить состояние видимости динамического блока, а с помощью LM:getvisibilityparametername узнать имя параметра видимости динамического блока (если есть)).
Вопрос, А как считать атрибуты блока с учетом параметра Видимости (они меняются в зависимости от выбора той или иной Видимости)?
С обычного дин. блока я из считываю фунцией get-all-atts
Код:
[Выделить все]
 
(defun  get-all-atts (obj)
  (if (and obj
	   (eq :vlax-true (vla-get-HasAttributes obj))
	   (vlax-property-available-p obj 'Hasattributes)
      )
    (vl-catch-all-apply
      (function
	(lambda	()
	  (mapcar (function (lambda (x)
			      (cons (vla-get-TagString x)
				    (vla-get-TextString x)
			      )
			    )
		  )
		  (append (vlax-invoke obj 'Getattributes)
			  (vlax-invoke obj 'Getconstantattributes)
		  )
	  )
	)
      )
    )
  )
)
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