Тема: Работа с динамическими блоками.
Кто работал с динамическими блоками ? Как извлечь значение атрибутов в динамическом блоке и состояние видимости. никак не выходит.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → Работа с динамическими блоками.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Кто работал с динамическими блоками ? Как извлечь значение атрибутов в динамическом блоке и состояние видимости. никак не выходит.
> Максим
Попробуй переделать по твоей ситуации, это
небольшой пример как можно извлечь атрибуты
и дин. свойства
;;local defuns ;;=====================================================;; (defun getatts (obj / attr_list) (setq attr_list (mapcar (function (lambda (att) (cons (vla-get-tagstring att) (vla-get-textstring att)) ) ) (vlax-invoke obj 'Getattributes) ) ) ) ;;=====================================================;; (defun getroperty (blk / props) (setq props (vlax-safearray->list (variant-value (vla-getdynamicblockproperties blk)))) (mapcar (function (lambda (x) (vla-get-propertyname X))) props) ) ;;=====================================================;; (defun getvalue (blk prop_name) (variant-value (vla-get-value (car (vl-remove-if-not (function (lambda (x) (eq prop_name (vla-get-propertyname x)))) (vlax-safearray->list (variant-value (vla-getdynamicblockproperties blk))))))) ) ;;==========================main part========================;; (vl-load-com) (defun C:test (/ atts blkref data dps dyninfo value) (if (setq blkref (vlax-ename->vla-object (car (entsel "\n >> Выбрать блок >>")))) (progn (if (eq :vlax-true (vla-get-hasattributes blkref)) (progn (setq atts (getatts blkref)) (princ "\nАтрибуты:") (princ atts) (princ "\n") ) (princ "\nБлок не имеет атрибутов") ) (if (eq :vlax-true (vla-get-isdynamicblock blkref)) (progn (setq dps (getroperty blkref)) (foreach itm dps (setq value (getvalue blkref itm)) (if (= (type value) 'SAFEARRAY) (setq value (vlax-safearray->list value))) (setq data (cons itm value)) (setq dyninfo (cons data dyninfo))) (princ "\nДин. свойства:") (princ dyninfo) (princ "\n") ) (princ "\nБлок не динамический") ) ) (alert "ничего не выбрано\nПовторите...") ) (princ) )
~'J'~
Спасибо. Работает. только я не понимаю как работает часть функций, не подскажешь литературу ?
> Максим
Ищи в Озоне книги Полещука Н.Н. из серии типа
"Visual Lisp разработка приложений и адаптация..."
за ближайшие годы
Уточни название книг сам
Объяснять сейчас будет неуместно, думаю сначала
нужно узнать базовые принципы и функции ActiveX
самостоятельно
Успехов,
~'J'~
хорошая прога. а можна так зделать чтобы извлечь значение атрибута в блоке (по всему чертежу) и занести в список. Например: я вибираю блок IDENT и у меня создан список всех эво значений (G001W D002W D005S D003Q ...)по чертежу. !!!блок только с одним атрибутом!!!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → Работа с динамическими блоками.
Форум работает на PunBB, при поддержке Informer Technologies, Inc