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

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

Как реализовать зависимость параметра видимости от значения атрибута?

Ответ
Поиск в этой теме
Непрочитано 17.07.2021, 18:13 #1
Как реализовать зависимость параметра видимости от значения атрибута?
rostyan
 
CAD оператор
 
Регистрация: 17.07.2021
Сообщений: 4

Не могу решить следующую задачу:
Требуется пакетное нанесение блоков по их координатам, а также их атрибутов и самое главное - параметра видимости. Со всем этим отлично справляется CadTools, но к сожалению за исключением параметра видимости, т.е. умеет переносить в блоки при вставке только атрибуты.
Код:
[Выделить все]
  X  |  Y  |  Z  | Номер | Тип
 0,00| 0,00| 0,00| 12/123| COIN

//колонка 'Тип' определяет одно из восьми состояний видимости блока.

Соответственно был сделан тестовый блок (для находок.dwg) в котором через таблицу блоков связаны значения скрытого атрибута (FIND_CODE) и параметра видимости (тип находки), от которого зависит отображаемый условный знак на выноске. Но как оказалось такая зависимость работает в одностороннем порядке: при изменении видимости атрибут меняется, а при изменении атрибута параметр видимости - нет.


Возможно я где-то что-то проглядел или копаю не с той стороны, в общем, хотелось бы узнать решение этой задачи.
AutoCAD 2014 SP1.

Просмотров: 2364
 
Непрочитано 17.07.2021, 19:42
1 | #2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от rostyan Посмотреть сообщение
Но как оказалось такая зависимость работает в одностороннем порядке: при изменении видимости атрибут меняется, а при изменении атрибута параметр видимости - нет.
штатными средствами - никак не сделать обратную зависимость от атрибута.

----- добавлено через ~44 мин. -----
Копать надо со стороны программирования. Например, если исходные данные на листе эксель
Цитата:
X Y Z Номер Тип
1 1 0 12/123 Камень
2 2 0 12/124 Металл
3 3 0 12/125 Монета
4 4 0 12/126 Камень
5 5 0 12/127 Металл
6 6 0 12/128 Монета
7 7 0 12/129 Камень
8 8 0 12/130 Металл
9 9 0 12/131 Монета
10 10 0 12/132 Монета
кстати, если тип находки нужен на английском - правьте блок, в списке допустимых значений параметра видимости русские названия.

И тогда простейшим макросом и блоки расставит, и атрибут, и видимость
Код:
[Выделить все]
Public Sub HlopTop3()
  If (Application.Selection.Columns.Count <> 5) Then Exit Sub
  Dim lData As Variant: lData = Application.Selection
  Dim lAcadApp As Object: Set lAcadApp = GetObject(, "AutoCAD.Application")
  Dim lCurrDoc As Object: Set lCurrDoc = lAcadApp.ActiveDocument
  Dim I1 As Long, lCenter(0 To 2) As Double, lBlockRef As Object, lAttrs As Variant
  Dim I2 As Long, lDynProps As Variant, lDynProp As Object
  For I1 = 1 To UBound(lData, 1)
    lCenter(0) = CDbl(lData(I1, 1))
    lCenter(1) = CDbl(lData(I1, 2))
    lCenter(2) = CDbl(lData(I1, 3))
    Set lBlockRef = lCurrDoc.ModelSpace.InsertBlock(lCenter, "Находка", 1, 1, 1, 0)
    If (lBlockRef.HasAttributes) Then
      lAttrs = lBlockRef.GetAttributes
      For I2 = LBound(lAttrs) To UBound(lAttrs)
        If (lAttrs(I2).TagString = "N_list/find") Then
          lAttrs(I2).TextString = CStr(lData(I1, 4))
          Exit For
        End If
      Next I2
    End If
    If (lBlockRef.IsDynamicBlock) Then
      lDynProps = lBlockRef.GetDynamicBlockProperties
      For I2 = LBound(lDynProps) To UBound(lDynProps)
        If (lDynProps(I2).PropertyName = "Тип находки") Then
          lDynProps(I2).Value = CStr(lData(I1, 5))
          Exit For
        End If
      Next I2
    End If
  Next I1
  Set lCurrDoc = Nothing
  Set lAcadApp = Nothing
End Sub
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.07.2021, 22:36
#3
rostyan

CAD оператор
 
Регистрация: 17.07.2021
Сообщений: 4


Сергей812, спасибо большое, я правда не очень силен в программировании - VBA отладчик ругается что объект не поддерживает свойство или метод.
rostyan вне форума  
 
Непрочитано 17.07.2021, 22:49
1 | 1 #4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


С заголовком выделили ячейки, наверно.. проверил на вашем файле еще раз - отработал как надо

----- добавлено через 29 сек. -----
что за ошибка то?

----- добавлено через ~1 мин. -----
и VBA в экселе или акаде для начала?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.07.2021, 23:02
#5
rostyan

CAD оператор
 
Регистрация: 17.07.2021
Сообщений: 4


Все, разобрался - все работает.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и VBA в экселе или акаде для начала?)
- да, по незнанию в каде запускал)
Осталось в боевом режиме опробовать, еще раз большое спасибо!
rostyan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Как реализовать зависимость параметра видимости от значения атрибута?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование значения линейного параметра для вычислений SantosP Динамические блоки 13 18.09.2020 10:14
LISP. Получение значения ID пользовательского атрибута динамического блока modest-bp LISP 23 03.09.2020 11:40
Как создать зависимость между значением атрибута и длиной линии в блоке? zenija2007 AutoCAD 2 10.02.2017 10:05
Как сделать отбражение разных атрибутов на разных состояниях видимости? KiritUngol AutoCAD 5 12.10.2015 10:35
Присвоение атрибуту блока значения атрибута другого блока. shartal Программирование 4 14.11.2013 14:02