| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Как добраться до подсказки атрибута блока

Lisp. Как добраться до подсказки атрибута блока

Ответ
Поиск в этой теме
Непрочитано 24.11.2010, 16:52 #1
Lisp. Как добраться до подсказки атрибута блока
молодой человек
 
Регистрация: 14.11.2007
Сообщений: 159

Здравствуйте.
Атрибуты в блоке- скрытые. До атрибутов добираюсь вот так:
Код:
[Выделить все]
 (setq ObjLst(vlax-safearray->list
               (vlax-variant-value
                  (vlax-invoke-method
                     (vlax-ename->vla-object ent) 'GetAttributes)))
Но у этих указателей на атрибуты нет свойства PromptString, чтобы воспользоваться функцией vla-get-PromptString.
Если не трудно подскажите как получить значение подсказки?
Просмотров: 2628
 
Непрочитано 24.11.2010, 17:01
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


PromptString есть не у атрибутов (ATTRIB) вставки блока (INSERT), а в описания блока (BLOCK) в определениях атрибута (ATTDEF).
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 24.11.2010, 17:18
#3
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Спасибо. Уже обыскался, так и не смог найти как добраться до подсказки. А это вообще возможно с помощью Lisp?
молодой человек вне форума  
 
Непрочитано 24.11.2010, 18:46
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Может так
Код:
[Выделить все]
; ent - указатель на ename объект, полученный например так (car (entsel))
; lst - результат (nil если объект не является вхождением блока, если у блока нет атрибутов или список вида (("<имя атрибута1>" "<Подсказка1>") ("<имя атрибута2>" "<Подсказка2>") ...)


(defun get-prompt-atr(ent / ed obj lst)
  (if (and (= (cdr (assoc 0 (setq ed (entget ent)))) "INSERT") (= (cdr (assoc 66 ed)) 1))
    (progn
      (setq obj (cdr (assoc -2 (entget (tblobjname "BLOCK" (cdr (assoc 2 ed)))))))
      (while obj
        (if (= (cdr (assoc 0 (entget obj))) "ATTDEF")
	  (setq lst (append lst (list (list (cdr (assoc 2 (entget obj))) (cdr (assoc 3 (entget obj)))))))
	  )
        (setq obj (entnext obj))
        )
      )
    )
  lst
  )
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 24.11.2010, 19:33
#5
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


TararykovDG, спасибо вам огромное ещё раз.
молодой человек вне форума  
 
Непрочитано 24.11.2010, 21:28
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Может так
Почти. Нужно пропустить постоянные (constant) атрибуты, т.к. они не участвуют при вставке блока. Т.е. атрибутов у вставки блока (ATTRIB) может быть меньше, чем описаний атрибутов (ATTDEF) в блоке.
Александр Ривилис вне форума  
 
Непрочитано 25.11.2010, 08:39
#7
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Почти. Нужно пропустить постоянные (constant) атрибуты, т.к. они не участвуют при вставке блока. Т.е. атрибутов у вставки блока (ATTRIB) может быть меньше, чем описаний атрибутов (ATTDEF) в блоке.
Александр Ривилис, можно конечно и пропустить постоянные (constant) атрибуты, но я вот из какой логики исходил. Как Вы сами сказали
Цитата:
PromptString есть не у атрибутов (ATTRIB) вставки блока (INSERT), а в описания блока (BLOCK) в определениях атрибута (ATTDEF).
Значит, говоря о подсказках атрибутов, мы подразумеваем именно attdef в описании блоках, а вхождение блока которое нужно передать в функцию нужно лишь, чтобы узнать имя блока и по нему отыскать описание блока. Вот кстати, пока писал, сообразил, что получать имя блока через dxf коды (cdr (assoc 2 ed)) не корректно для динамических блоков можно получить типа *U... , поэтому нужно так (vla-get-EffectiveName (vlax-ename->vla-object ent))
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 25.11.2010, 09:01
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Ну без ТС мы все-равно не разберемся в том, что ему было нужно. Обычно же хотят получить подсказки атрибутов для вставленного блока, т.е. приходится находить соответствие между ATTRIB и ATTDEF. При вставке блока командой _INSERT порядок следования ATTRIB и ATTDEF совпадают за исключением константных ATTDEF. Вообще же программно можно так "наковырять" с атрибутами, что никакого соответствия ATTRIB <-> ATTDEF не будет.
Александр Ривилис вне форума  
 
Непрочитано 25.11.2010, 09:20
#9
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Вообще же программно можно так "наковырять" с атрибутами, что никакого соответствия ATTRIB <-> ATTDEF не будет.
Это точно, а можно и не программо "наковырять". Я например,сталкивался с таким. Есть описание блока с атрибутами. Есть две замечательные команды _divide и _measure для разбиения какой-нибудь кривой, у которых есть опция _block. Так если в качестве блока указать наш блок с атрибутами, то эти команды повставляют вхождения блоков у которых воощбе не будет атрибутов (attrib)
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Как добраться до подсказки атрибута блока

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lisp. Присвоение блоку атрибута и Z из текста. Ancient John LISP 31 20.02.2023 17:20
Изменение значения атрибута в составе блока rzinnurov Программирование 27 06.12.2013 17:50
Непонятное поведение многострочного атрибута блока Нитонисе AutoCAD 2 11.09.2010 17:35
Изменить поле (формула) атрибута блока EfremenkoDO Программирование 5 08.04.2010 11:43
как редактировать contents в свойствах текста? как привязать размер текста атрибута к размеру блока? p-sm AutoCAD 3 13.08.2009 18:08