Тема: Атрибуты: как считать их значения
Подскажите, пожалуйста: каким образом можно считать "приглпшения" в атрибутике и введенные значения. Спасибо.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → Атрибуты: как считать их значения
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите, пожалуйста: каким образом можно считать "приглпшения" в атрибутике и введенные значения. Спасибо.
Можно сделать Express - Blocks - Export Attribute Informaqtion
либо Сервис - Извлечение аттрибутов,
если хотелось именно этого, а то не совсем понял)
Не совсем то. Нужно программно извлечь "приглашения" атрибутов, типа: "Введите номер..." Смысл в том, что есть блоки с атрибутами, и мне надо программно "ответить" на запросы атрибутов.
Чтобы понять Вас необходимо уточнить, для чего извлекать такие "приглашения" или лучше сказать, что Вы под этим понимете...
Мне необходимо создать новый блок (с другой конфигурацией примитива), но с атрибутикой уже существующего блока. Думаю так: разблокировать существующий блок, считать тэги атрибутики и создать новый блок точно с такими же атрибутами. Возможно, программно поменять значения атрибутов.
Открой в Хелпе описание ATTDEF
И есть там такая группа - 3 Prompt string
А программно-то как можно ? Ведь есть же, наверное, поля в графической базе ?
> SHRAIBIKUS
Программно можно. Через vla-* функции
Создаешь новое описание блока.
В него рисуешь другую конфигурацию примитива
Из старого описания копируешь описание атрибутов в новое
"Из старого описания копируешь описание атрибутов в новое"
Вот именно с этих слов я не знаю, как считать (из каких полей) эти опмсания атрибутов. Спасибо.
Подскажите, пожалуйста ответ на такую проблему: я знаю список описаний атрибутов, типа ("ПП и ПМ" "Красные линии" "20080710") и т.п. Вот каким образом программно мне вставить блок (именно с этими атрибутами)? То есть как мне обойти запросы "WBLOCK"? (как вставить эти значения в соответствующие запросы). Спасибо заранее(извините за неточное и сумбурное объяснение проблемы).
Виноват, не то написал, поясню:
(setq TXT("ПП и ПМ" "Красные линии" "20080710"))
(COMMAND"_INSERT" BK1(LIST 0 0 0)1 1 0 (NTH 0 TXT)(NTH 1 TXT)....) А как сделать, чтобы, зная количество элементов - не задумываться об их вставке в приглашения атрибутов? Спасибо. (Может, типа "APPLY"...)Думаю, кто-нибудь сталкивался с этой проблемой.
Ну неужели никто не подскажет, как связать "имя" атрибута с введенным "значением" его? Как, зная количество элементов "значения", представленных списком, вставить блок с атрибутами, в соответствии с запросами "имени" (я называю "имя" - "приглашением" ко вводу)? Помогите, пожалуйста. Спасибо.
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) ....
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → Атрибуты: как считать их значения
Форум работает на PunBB, при поддержке Informer Technologies, Inc