Создание (изменение) размерного стиля в AutoCad из vba Access

Автор Тема: Создание (изменение) размерного стиля в AutoCad из vba Access  (Прочитано 24570 раз)

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

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladimirАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Доброго времени суток!
German, я читал эту статью и общался с А. Бушман, он рекомендовал этот форум.
В контексте с сообщением
Так вот свойства Annotative у объекта DimStyle нет и поэтому напрямую ты не можешь изменить это свойство у размерного стиля.
понимаю, что данную задачу решить корректно средствами vba нельзя. По наличию времени постараюсь поработать с расширенными данными (Xdata) и в случае удовлетворительного результата отчитаться о проделанной работе.
Резюме:
  • надо мигрировать на vba.net;
  • текущую задачу решить путем запуска файла шаблона .dwt с заранее настроенными стилями.
Спасибо всем кто помог словом и делом в решении моего вопроса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
надо мигрировать на vba.net;
Уточнение не vba.net, а VB.NET. Хотя я бы рекомендовал C#. Хотябы по той причине, что примеров на нём значительно больше.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladimirАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Да, vb.net описался. Я не профи, пишу для себя,  учить С# уже наверно староват. Хотя никогда не говори никогда....

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй такой код. Точнее это библиотечные функции для включения/выключения аннотативности у размерного стиля, заданного именем:
Код - Visual Basic [Выбрать]
  1. ' Устанавливаем признак аннотативности у размерного стиля
  2. ' заданного именем dimStyleName (если он есть)
  3. Sub DimAnnotateOn(dimStyleName As String)
  4.     On Error GoTo Skip
  5.     Dim dimSt As AcadDimStyle
  6.     Set dimSt = ThisDrawing.DimStyles(dimStyleName)
  7.     Dim data(0 To 5) As Integer
  8.     Dim value(0 To 5) As Variant
  9.     data(0) = 1001: value(0) = "AcadAnnotative"
  10.     data(1) = 1000: value(1) = "AnnotativeData"
  11.     data(2) = 1002: value(2) = "{"
  12.     data(3) = 1070: value(3) = 1
  13.     data(4) = 1070: value(4) = 1
  14.     data(5) = 1002: value(5) = "}"
  15.     dimSt.SetXData data, value
  16. Skip:
  17. End Sub
  18. ' Удаляем признак аннотативности у размерного стиля
  19. ' заданного именем dimStyleName  (если он есть)
  20. Sub DimAnnotateOff(dimStyleName As String)
  21.     On Error GoTo Skip
  22.     Dim dimSt As AcadDimStyle
  23.     Set dimSt = ThisDrawing.DimStyles(styleName)
  24.     Dim data(0 To 0) As Integer
  25.     Dim value(0 To 0) As Variant
  26.     data(0) = 1001: value(0) = "AcadAnnotative"
  27.     dimSt.SetXData data, value
  28. Skip:
  29. End Sub
P.S.: На VBA я не пишу, поэтому не обращай внимания на "некрасивости"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladimirАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
 Александр Ривилис, спасибо за код. С лету не получилось. Буду разбираться в выходные.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Для проверки я использовал простейший код:
Код - Visual Basic [Выбрать]
  1.     Sub SetAnnoOn()
  2.       Call DimAnnotateOn("ISO-25")  ' Включаем аннототивность
  3.    End Sub
  4.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
P.S.: Ну и вместо ThisDrawing у тебя должно быть acadDoc
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 25-11-2014, 14:04:02

Оффлайн VladimirАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Всем доброго дня!
Александр Ривилис, разобрался, работает.
Переменную dimSt нужно объявлять как Object (первый раз (#20)  пробовал с Variant на Object не хватило времени)
С "ThisDrawing" и  "acadDoc" само собой и чтобы не было путаницы, в рабочем коде оставлю "ThisDrawing"

Код - Visual Basic [Выбрать]
  1. ' Устанавливаем признак аннотативности у размерного стиля
  2. ' заданного именем dimStyleName (если он есть)
  3. Sub DimAnnotateOn(dimStyleName As String)
  4.     On Error GoTo Skip
  5.     Dim dimSt As Object
  6.     Set dimSt = ThisDrawing.DimStyles(dimStyleName)
  7.     Dim data(5) As Integer
  8.     Dim value(5) As Variant
  9.     data(0) = 1001: value(0) = "AcadAnnotative"
  10.     data(1) = 1000: value(1) = "AnnotativeData"
  11.     data(2) = 1002: value(2) = "{"
  12.     data(3) = 1070: value(3) = 1
  13.     data(4) = 1070: value(4) = 1
  14.     data(5) = 1002: value(5) = "}"
  15.     dimSt.SetXData data, value
  16. Skip:
  17. End Sub
  18.  

Код - Visual Basic [Выбрать]
  1. ' Удаляем признак аннотативности у размерного стиля
  2. ' заданного именем dimStyleName  (если он есть)
  3. Sub DimAnnotateOff(dimStyleName As String)
  4.     On Error GoTo Skip
  5.     Dim dimSt As Object
  6.     Set dimSt = ThisDrawing.DimStyles(styleName)
  7.     Dim data(0) As Integer
  8.     Dim value(0) As Variant
  9.     data(0) = 1001: value(0) = "AcadAnnotative"
  10.     dimSt.SetXData data, value
  11. Skip:
  12. End Sub
  13.  

Не смотря на решение моего вопроса, программным путем, в своем рабочем коде оставлю следующее решение:
Код - Visual Basic [Выбрать]
  1.      Set acadApp = CreateObject("AutoCAD.Application")
  2.     If Err Then
  3.       MsgBox Err.Description
  4.       Exit Sub
  5.     End If
  6.      End If
  7.   acadApp.Visible = True
  8.    Set acadDoc = acadApp.Documents.Add("Путь к файлу шаблона\iso-25.dwt")
  9.  

P.S. при создании ответа не видно порядковых номеров предыдущих сообщений.