> GADFly
Не расстраивайся
Твоя функция по определению не может ни в каком случае
возвращать список. Во-первых (vla-get-blocks adoc) есть
коллекция вхождений блоков в рисунок, поэтому ни у одного объекта
коллекции не может быть свойства Hasattributes, это свойство может
быть только у вставки этого блока
Во-вторых ни у одного объекта не может быть метода Getattributes,
этот метод применим тоже только к вставке блока
Все это легко проверить, чтобы не тратить время напрасно с помощью
функции vlax-dump-object (золотое правило), например :
(vlax-dump-object (vla-item (vla-get-blocks adoc) "МойБлок") T)
или узнать свойства и методы сразу всех вхождений блока :
(vlax-map-collection (vla-get-blocks adoc)
(function (lambda (x)
(vlax-dump-object x T))))
и я тебя уверяю, ты сразу увидишь подтверждение моим словам
Поэтому, то что я предложил и есть правильное решение, единственно,
что можно добавить, это проверку на валидность (validity), т.е.
отсечь вкладку модели и вкладки листа, которые тоже являются
вхождениями блока, а также вхождения внешних ссылок (Xref) :
(defun make_bd ( / adoc att att_list bd)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for i (vla-get-blocks adoc)
(vlax-for j i
(if (and (eq (vla-get-islayout i) :vlax-false); если блок не является вкладкой рисунка или листа
(eq (vla-get-isxref i) :vlax-false); если блок не является внешней ссылкой
(vlax-read-enabled-p i); если блок читабелен
(eq (vla-get-objectname j) "AcDbAttributeDefinition"); если субобъект является определением атрибута
);_and
(progn
(setq att_list
(cons (cons (vla-get-tagstring j)
(vla-get-textstring j)) att_list))
(setq bd (cons (cons 1 att_list) bd))
(setq att_list nil)))))
bd
)
; TesT : (setq data (make_bd))
~'J'~