Тема: Атрибуты: как считать их значения

Подскажите, пожалуйста: каким образом можно считать "приглпшения" в атрибутике и введенные значения. Спасибо.

Re: Атрибуты: как считать их значения

Можно сделать Express - Blocks - Export Attribute Informaqtion
либо Сервис - Извлечение аттрибутов,
если хотелось именно этого, а то не совсем понял)

Re: Атрибуты: как считать их значения

Не совсем то. Нужно программно извлечь "приглашения" атрибутов, типа: "Введите номер..." Смысл в том, что есть блоки с атрибутами, и мне надо программно "ответить" на запросы атрибутов.

Re: Атрибуты: как считать их значения

Чтобы понять Вас необходимо уточнить, для чего извлекать такие "приглашения" или лучше сказать, что Вы под этим понимете...

Re: Атрибуты: как считать их значения

Мне необходимо создать новый блок (с другой конфигурацией примитива), но с атрибутикой уже существующего блока. Думаю так: разблокировать существующий блок, считать тэги атрибутики и создать новый блок точно с такими же  атрибутами. Возможно, программно поменять значения атрибутов.

Re: Атрибуты: как считать их значения

Открой в Хелпе описание ATTDEF
И есть там такая группа - 3 Prompt string

Re: Атрибуты: как считать их значения

А программно-то как можно ? Ведь есть же, наверное, поля в графической базе ?

Re: Атрибуты: как считать их значения

> SHRAIBIKUS
Программно можно. Через vla-* функции
Создаешь новое описание блока.
В него рисуешь другую конфигурацию примитива
Из старого описания копируешь описание атрибутов в новое

Re: Атрибуты: как считать их значения

"Из старого описания копируешь описание атрибутов в новое"
Вот именно с этих слов я не знаю, как считать (из каких полей) эти опмсания атрибутов. Спасибо.

Re: Атрибуты: как считать их значения

Подскажите, пожалуйста ответ на такую проблему: я знаю список описаний атрибутов, типа ("ПП и ПМ" "Красные линии" "20080710") и т.п. Вот каким образом программно мне вставить блок (именно с этими атрибутами)? То есть как мне обойти запросы "WBLOCK"? (как вставить эти значения в соответствующие запросы). Спасибо заранее(извините за неточное и сумбурное объяснение проблемы).

Re: Атрибуты: как считать их значения

Виноват, не то написал, поясню:
(setq TXT("ПП и ПМ" "Красные линии" "20080710"))
(COMMAND"_INSERT" BK1(LIST 0 0 0)1 1 0 (NTH 0 TXT)(NTH 1 TXT)....) А как сделать, чтобы, зная количество элементов - не задумываться об их вставке в приглашения атрибутов? Спасибо. (Может, типа "APPLY"...)Думаю, кто-нибудь сталкивался с этой проблемой.

Re: Атрибуты: как считать их значения

Ну неужели никто не подскажет, как связать "имя" атрибута с введенным "значением" его? Как, зная количество элементов "значения", представленных списком, вставить блок с атрибутами, в соответствии с запросами "имени" (я называю "имя" -  "приглашением" ко вводу)? Помогите, пожалуйста. Спасибо.

Re: Атрибуты: как считать их значения

1. ATTDIA = 0 ATTREQ = 0
2. Вставляешь блок.
3. Потом программно изменяешь атрибуты
Я выкладывал здесь https://www.caduser.ru/forum/topic35337.html в посте

> VVA
ф-цию mip-block-setattr-bylist Используй ее.
Как пример смотри BINC по ссылке выше
Для тебя здесь важно

(defun c:binc (/ oldStart oldPref oldSuf oldEcho
        oldSize oldBlock temBl *error* att attr apnum:tag pt)
;==== Local functions ============
;;[b]Эта и есть нужная тебе функция  [/b]
;; obj — Ename or Vla object of block
;; att_list — list ((Tag_Name1 . Value1)(Tag_Name2 . Value2) ...)
;;                 Tag_Name — string
;;                    Value — string
(defun mip-block-setattr-bylist (obj att_list / txt lst)
(if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
(setq att_list (mapcar '(lambda(x)(cons (strcase (mip-conv-to-str(car x)))(mip-conv-to-str(cdr x)))) att_list))
  (if (and obj
           (not(vlax-erased-p obj))
           (= (vla-get-ObjectName obj) "AcDbBlockReference")
     (eq :vlax-true (vla-get-HasAttributes obj))
     (vlax-property-available-p obj 'Hasattributes)
     (vlax-write-enabled-p obj)
      )
    (vl-catch-all-apply
      (function
  (lambda  ()
          (foreach at (vlax-invoke obj 'Getattributes)
            (if (setq lst (assoc(strcase(vla-get-TagString at)) att_list))
              (vla-put-TextString at (cdr lst))
            )
            )
          )
        )
      )
    )
  )
;==== Local functions END ============
....
;;;[b]Это п.1[/b]
  (setvar "ATTDIA" 0)(setvar "ATTREQ" 0)
....
;;;[b]Это п.2[/b]
  (command "_-insert" apnum:Block "_s" apnum:Size pause "0")
....
;;;[b]Это п.3[/b]
   (mip-block-setattr-bylist (entlast)
     (list(cons (strcase (mip-conv-to-str apnum:tag))
                (strcat apnum:Pref(itoa apnum:Num)apnum:Suf))))
  ....
  (setvar "ATTDIA" att)(setvar "ATTREQ" attr)
  ....

Re: Атрибуты: как считать их значения

Спасибо огромное.