Макрос вставки атрибутов в блок

Автор Тема: Макрос вставки атрибутов в блок  (Прочитано 9199 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sae.prcАвтор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Код - Visual Basic [Выбрать]
  1. Sub AddAttributePritok()
  2. Dim blk As AcadBlockReference
  3. Dim att As AcadAttribute
  4. Dim insertionPoint(0 To 2) As Double
  5. Dim height As Double
  6. Dim mode As Long
  7. Dim prompt As String
  8. Dim tag As String
  9. Dim value As String
  10.  
  11. ' Удалить существующий Selection Set, если он есть
  12. On Error Resume Next
  13. ThisDrawing.SelectionSets.Item("SelectionSet").Delete
  14. On Error GoTo 0
  15.  
  16. ' Создать новый Selection Set
  17. Dim selectionSet As AcadSelectionSet
  18. Set selectionSet = ThisDrawing.SelectionSets.Add("SelectionSet")
  19.  
  20. ' Проверить, удалось ли создать Selection Set
  21. If Not selectionSet Is Nothing Then
  22. ' Предоставить пользователю возможность выбрать объекты
  23. selectionSet.SelectOnScreen
  24. ' Перебрать все выбранные объекты
  25. For Each obj In selectionSet
  26. ' Проверить, является ли объект блоком
  27. If TypeOf obj Is AcadBlockReference Then
  28. Set blk = obj
  29. ' Задать параметры атрибута
  30. height = 1#
  31. mode = acAttributeModeInvisible
  32. prompt = "тест"
  33. insertionPoint(0) = 5#: insertionPoint(1) = 5#: insertionPoint(2) = 0
  34. tag = "тест"
  35. value = "привет"
  36. ' Создать новый атрибут
  37. Set att = blk.AddAttribute(height, mode, prompt, insertionPoint, tag, value)
  38. ' Обработать ситуацию, если добавление атрибута не удалось
  39. If Not att Is Nothing Then
  40. MsgBox "Атрибут успешно добавлен к блоку."
  41. Else
  42. MsgBox "Ошибка при добавлении атрибута к блоку.", vbExclamation
  43. End If
  44. End If
  45. Next obj
  46. ' Удалить Selection Set после использования
  47. selectionSet.Delete
  48. End If
  49. End Sub

Код для добавления атрибута в блок - в чем ошибка, а так же как можно добавлять пакетно атрибуты в блок (и если у блока есть параметр видимости, то добавить атрибуты во все видимости)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Re: Макрос вставки атрибутов в блок
« Ответ #1 : 09-03-2024, 20:13:35 »
Атрибуты по идее надо добавлять не к вхождению блока, а к его описанию. Соответственно надо ИМХО
а) пройтись по набору блоков и сформировать список имен блоков (без повторений, естественно)
б) по каждому из элемента списка имен - получить указатель на описание блока и уже в него добавлять описания атрибутов
в) выполнить _.attsync либо его аналог
г(по желанию)) пройтись по полученному в в. а) списку и установить значения добавленных атрибутов.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!