Тема: Работа с динамическими блоками.

Кто работал с динамическими блоками ? Как извлечь значение атрибутов в динамическом блоке и состояние видимости. никак не выходит.

Re: Работа с динамическими блоками.

> Максим
Попробуй переделать по твоей ситуации, это
небольшой пример как можно извлечь атрибуты
и дин. свойства

;;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'~

Re: Работа с динамическими блоками.

Спасибо. Работает. только я не понимаю как работает часть функций, не подскажешь литературу ?

Re: Работа с динамическими блоками.

> Максим
Ищи в Озоне книги Полещука Н.Н. из серии типа
"Visual Lisp разработка приложений и адаптация..."
за ближайшие годы
Уточни название книг сам
Объяснять сейчас будет неуместно, думаю сначала
нужно узнать базовые принципы и функции ActiveX
самостоятельно
Успехов,
~'J'~

Re: Работа с динамическими блоками.

Спасибо

Re: Работа с динамическими блоками.

хорошая прога. а можна так зделать чтобы извлечь значение атрибута в блоке (по всему чертежу) и занести в список. Например: я вибираю блок IDENT и у меня создан список всех эво значений (G001W D002W D005S D003Q ...)по чертежу. !!!блок только с одним атрибутом!!!