Подскажите пожалуйста, можно ли, и как методами VLisp получить доступ к вложенному блоку (блок в блок) (имя, атрибуты, текст и т.п.)
С внешним блоком проблем не возникает.
АТЭКСП и извлечение данных видят всю иерархию блока без вопросов, включая вложенные блоки.
Поиск на просторах сети дает на данный момент некие рекурсивные методы.
Нет ли простого и изящного решения для доступа к вложенному/вложенным блокам и получения данных из них?
Решено! Перейти к решению.
Решено: kpblc2000. Перейти к решению.
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Насчет CapsLock извиняюсь, привычка писать заголовки в верхнем регистре. Прошу прощения.
Если можно: как получить из "указатель из вхождения блока" - "указатель на описание блока"? (проход по примитивам описания уже сам)
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Написал не сам, взял отсюда -> http://forum.dwg.ru/showthread.php?t=61754 Автор Кулик Алексей 🙂
Насколько я понимаю вот это верно:
(vl-load-com)
;;; Запросить у пользователя указать на блок
(setq ent (vlax-ename->vla-object (car (entsel "\nSelect block : "))))
;;; Получить vla-указатель на описание блока
(setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-effectivename ent)
) ;_ end of vla-item
) ;_ end of setq
;;; Получить список всех примитивов, входящих в блок
(setq block_cont ((lambda (/ res)
(vlax-for sub block_def
(setq res (cons sub res))
) ;_ end of vlax-for
(reverse res)
) ;_ end of lambda
)
) ;_ end of setq
;;; Отфильтровать все примитивы, из состава указанного блока, которые не являются блоком
(setq result_ent (vl-remove-if-not
(function
(lambda (x)
(= (vla-get-objectname x) "AcDbBlockReference")
) ;_ end of lambda
) ;_ end of function
block_cont
) ;_ end of vl-remove-if-not
) ;_ end of setq
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Благодарю. Решение вопроса ясно. Проведу ряд экспериментов для решения своей локальной задачи.
Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.