Тема: Определение "подсказки" атрибута выбранного блока?

Привет,
Быстрее чем через коллекцию блоков, ее можно узнать?
Может как-нибудь через dxf?
Спасибо,

Re: Определение "подсказки" атрибута выбранного блока?

Попробуй свойство атрибута TagString

Re: Определение "подсказки" атрибута выбранного блока?

Фигня такая, в блоках (ж.б. изделия панелей) по пять атрибутов: Марка, Наименование, Обозначение, Масса и Материал и их можно получить только по подсказке (promt), а во всех Tag'ах - имя блока.
Так вот, лазить за "подсказкой" через коллекцию блоков не совсем "безопасно", ведь атрибуты в BlockReferenc'е и в Blocks могут отличаться (например если кто-нибудь в редакторе блоков удалит атрибут). Надо это как-то проверять.
Ну а про dxf я кажись загнул. Ведь нет такой возможности?

Re: Определение "подсказки" атрибута выбранного блока?

Был бы лисп, я б попробовал. А в VBA - я лох

Re: Определение "подсказки" атрибута выбранного блока?

Для VBA, через таг:

Function GetAttributePointerByTagString(oBlock As AcadBlockReference, sTag As String) As AcadAttributeReference
Dim arAttr() As AcadAttributeReference, lCounter As Long
  If oBlock.HasAttributes Then
    arAttr = oBlock.GetAttributes
    Dim AttrCounter As AcadAttributeReference
    For lCounter = 0 To UBound(arAttr)
      If UCase(arAttr(lCounter).TagString) = UCase(sTag) Then
        Set GetAttributePointerByTagString = arAttr(lCounter)
        Exit For
      End If
    Next
  End If
End Function
Sub test()
Dim retObject As AcadEntity, sReqTag As String, sAvailTag As String
Dim retAttr As AcadAttributeReference, lCounter As Long, arAttr() As AcadAttributeReference
On Error GoTo lErrorGetEnt
  ThisDrawing.Utility.GetEntity retObject, retPoint
  If retObject.ObjectName = "AcDbBlockReference" And retObject.HasAttributes Then
    arAttr = retObject.GetAttributes
    For lCounter = 0 To UBound(arAttr)
        If sAvailTag = "" Then
          sAvailTag = arAttr(lCounter).TagString
        Else
          sAvailTag = sAvailTag & "\" & arAttr(lCounter).TagString
        End If
    Next lCounter
     sReqTag = ThisDrawing.Utility.GetString(True, "Укажите нужный таг [" & sAvailTag & "]")
     Dim Res As AcadAttributeReference
     Set Res = GetAttributePointerByTagString(retObject, sReqTag)
    MsgBox "Значение атрибута : " & Res.TextString
  End If
  Exit Sub
lErrorGetEnt:
  MsgBox "Ошибка указания примитива!", vbOKOnly + vbCritical + vbApplicationModal, "Ошибка указания"
  Exit Sub
End Sub

Как вариант, конечно.

Re: Определение "подсказки" атрибута выбранного блока?

А я и тама и тама лох ))) но хоцца ускорить работу
Ты наверно не понял всей бредовости ситуации: имеем блок с 5 атрибутами и у всех Tag = имени этого блока!!! поделать с этим я ничего не могу((
по твоему примеру у меня sAvailTag=
Ладно, буду и дальше выкручиватся через коллекцию блоков (значения атрибутов и там(Blocks) и там(BlockReference) у нас равны, вот такая вот фигня:))

Re: Определение "подсказки" атрибута выбранного блока?

Ой, недописал:
sAvailTag="ЦВ1\ЦВ1\ЦВ1\ЦВ1\ЦВ1"

Re: Определение "подсказки" атрибута выбранного блока?

> Vildar
Ситуация, при которой в блоке несколько атрибутов с одинаковыми тэгами, по меньшей мере неверна. По хорошему от этого надо избавляться любой ценой. Ну, не знаю... переименуй атрибуты в описании блока, потом попробуй _attsync провернуть.

Re: Определение "подсказки" атрибута выбранного блока?

Такой принцип блоков ввел внештатный программер.
Он писал приложение на лиспе. все в fas'ах. позырить не могу. Ему наверно просто определять Promt'ы.
А, еще забыл, каждый атрибут на своем слое (Atr_Мarka, Atr_Naimenovanie и т.д.) Щас попробую это использовать.

Re: Определение "подсказки" атрибута выбранного блока?

> Vildar
Дурилка картонная твой программер. Если он нештатный - то почему, получив оплату, он не предоставил исходные коды? Ведь по идее заказчиками работы являешься ты (ну или контора, неважно). Соответственно права на интеллектуальную собственность (насколько я понимаю) должны принадлежать явно не программеру.
P.S. лично я бы попробовать переписать код, если бы подобная задача передо мной встала.

Re: Определение "подсказки" атрибута выбранного блока?

Переписать код будет даже маловато.
Уже созданы библиотеки блоков.
Нужна была бы еще програмка по редактированию всех этих блоков.
Вносить коренные изменения в ход работы, при котором прежняя система не сможет работать, мне не позволят. Я тут неск. месяцев работаю, а он неск. лет (крепкие связи). Да и я на самом деле смытся уже подумываю.
А скажи, как бы ты сделал такие блоки, ну у которых значения атрибутов жестко заданы.
Тип атрибута - "постоянный" (на рус акаде), не подходит, т.к. его не видно на чертеже.

Re: Определение "подсказки" атрибута выбранного блока?

А может быть вообще не атрибутами.
Только надо чтобы эти свойства (марка, итд и их значения) были видны при выделении блока, а марка должна быть отображена и на чертеже (ну тут тока атрибутом наверное)
Спасибо,

Re: Определение "подсказки" атрибута выбранного блока?

Интересная фигня... Может, так:

...
dim ...
ThisDrawing.Utility.GetEntity objBlk, varPoint, "Выберите вставку блока"
If TypeOf objBlk Is AcadBlockReference Then
   For Each obj In objBlk.GetAttributes
    Select Case obj.layer
      Case "Atr_Мarka"
        Marka=obj.textstring
      Case "Atr_Naimenovanie"
        Naimenovanie=obj.textstring
     ....
    end select
   Next

Если, конечно, я правильно понял и в promt задано наименование атрибута ("Марка, Наименование, Обозначение, Масса и Материал"), а значение в textstring. Если же в promt - именно значение атрибута, то ... странная логика у вашего программиста.

Re: Определение "подсказки" атрибута выбранного блока?

> AlexV
все правильно, спасибо
надо будет еще проверок напихать этих слоев для атрибутов, соответствия с promt'ами, ну и тд.
Но если кто знает или узнает простой способ получения promt'а для атрибута выбранного блока - пишите, было бы круто.

Re: Определение "подсказки" атрибута выбранного блока?

> Vildar
Но если кто знает или узнает простой способ получения promt'а для атрибута выбранного блока — пишите, было бы круто.

В VBA никак не определишь, не трать силы и время.

Re: Определение "подсказки" атрибута выбранного блока?

Я так понимаю, PromptString- свойство объекта AcadAttribute (описание атрибута в описании блока). А у объекта AcadAttributeReference, т.е атрибута, входящего в состав вставленного в чертеж блока, такого с-ва я чего-то не наблюдаю. Ну, поскольку атрибуты гарантированно разнесены на разные слои, то вполне можно это использовать. Можно, в принципе, написать простой код, перебирающий все описания блоков, и меняющий значения TagString атрибутов в зависимости от слоя, на котором они расположены.

Re: Определение "подсказки" атрибута выбранного блока?

Vildar пишет:

А может быть вообще не атрибутами.
Только надо чтобы эти свойства (марка, итд и их значения) были видны при выделении блока, а марка должна быть отображена и на чертеже (ну тут тока атрибутом наверное)

Можно использовать расширенные данные (Xdata), если свойства должны считываться с вставки блока программно (при подсчете спецификации, напр.). Если же их необходимо видеть просто при выделении блока, можно использовать гиперссылку (навел курсор на блок - появилась информация по нему)

Re: Определение "подсказки" атрибута выбранного блока?

Наверно атрибутами попрощее будет,
да и люди уже привыкли.
Ладно, всем спасибо, все свободны :)))