Прошу помощи с кодом

Автор Тема: Прошу помощи с кодом  (Прочитано 17772 раз)

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

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #30 : 25-11-2018, 18:06:59 »
Теперь мой ACAD понимает эти типы данных, но я всё равно не понимаю, как присвоить переменной запись "КН" и занести её в мультивыноску, которую мы потом вставим.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #31 : 25-11-2018, 18:14:27 »
Теперь мой ACAD понимает эти типы данных
Замечательно.
но я всё равно не понимаю, как присвоить переменной запись "КН" и занести её в мультивыноску, которую мы потом вставим.
Раздели эту задачу на две.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #32 : 25-11-2018, 18:31:41 »
Код - Visual Basic [Выбрать]
  1. Sub mm()
  2. Dim amap As AcadMap
  3. Dim returnObj As Object
  4. Dim ODfdfs As ODFieldDefs
  5. Dim ODfdf As ODFieldDef
  6. Dim ODtb As ODTable
  7. Dim ODrc As ODRecord
  8.  
  9.  
  10.  
  11.  
  12. Dim basePnt As Variant
  13.  
  14. On Error Resume Next
  15.  
  16. ThisDrawing.Utility.GetEntity returnObj, basePnt, "Выберите объект"
  17.  
  18. If Err = 0 Then
  19. MsgBox "Тип объекта: " & returnObj.EntityName, , "Пример GetEntity"
  20. End If
  21.  
  22. ResUn = returnObj.ODtb("Result_un")
  23. kn = ResUn.Item("КН")
  24.  
  25. MsgBox "КН: " & kn
  26.  
  27. End Sub
  28.  

Не выходит считать саму запись

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #33 : 25-11-2018, 18:44:09 »
ResUn = returnObj.ODtb("Result_un")
Почему ты решил, что так должно работать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #34 : 25-11-2018, 18:48:38 »
ResUn = returnObj.ODtb("Result_un")
Почему ты решил, что так должно работать?
Примеры вчера смотрел с англоязычных форумов, по памяти написал, но скорее всего ошибся.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Прошу помощи с кодом
« Ответ #35 : 25-11-2018, 18:52:22 »
а зачем так замачиваться, когда есть аннотации?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #36 : 25-11-2018, 18:52:54 »
Примеры вчера смотрел с англоязычных форумов, по памяти написал, но скорее всего ошибся.
100% У AcadObject нет ни свойства, ни метода с именем ODtb
Я раскопал в документации такой код. Попробуй:
Код - Visual Basic [Выбрать]
  1. Dim amap As AcadMap
  2.  
  3. Dim acadObj As Object
  4.  
  5. Dim ODtb As ODTable
  6.  
  7. Dim i As Integer
  8.  
  9. Dim prj As Project
  10.  
  11. Dim ODrcs As ODRecords
  12.  
  13. Dim boolVal As Boolean
  14.  
  15.  
  16.  
  17. Set amap = ThisDrawing.Application. _
  18.  
  19. GetInterfaceObject("AutoCADMap.Application")
  20.  
  21. Set prj = amap.Projects(ThisDrawing)
  22.  
  23. prj.ProjectOptions.DontAddObjectsToSaveSet = True
  24.  
  25. Set ODtb = prj.ODTables.Item("SampleOD")
  26.  
  27. Set ODrcs = ODtb.GetODRecords
  28.  
  29. For Each acadObj In ThisDrawing.ModelSpace
  30.  
  31. boolVal = ODrcs.Init(acadObj, True, False)
  32.  
  33. Debug.Print ODrcs.Record.tableName
  34.  
  35. Debug.Print ODrcs.Record.ObjectID
  36.  
  37. For i = 0 To ODrcs.Record.Count - 1
  38.  
  39. Debug.Print ODrcs.Record.Item(i).Value
  40.  
  41. Next i
  42.  
  43. Next

Вместо "SampleOD" наверное "Result_un"
Чтобы было проще проверять - удали всё из чертежа кроме одной полилинии с этими данными.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #37 : 25-11-2018, 18:55:39 »
Set amap = ThisDrawing.Application. _
 
GetInterfaceObject("AutoCADMap.Application")
Ругается на синтаксис

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Прошу помощи с кодом
« Ответ #38 : 25-11-2018, 19:06:39 »
Set amap = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Application")

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #39 : 25-11-2018, 20:25:11 »
Дома попробовал поработать с данным кодом, выдает фатальную ошибку. Больше код похож на создание таблицы, а не поиск нужного элемента. Просто не понимаю, почему ошибка вылетает?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #40 : 25-11-2018, 20:56:41 »
Больше код похож на создание таблицы, а не поиск нужного элемента.
Совершенно не похож.
Просто не понимаю, почему ошибка вылетает?
Я тоже. Как минимум запусти в режиме отладки пошагово и посмотри на чем вылетает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Прошу помощи с кодом
« Ответ #41 : 25-11-2018, 21:16:42 »
вылетает если boolVal = False
код обходит все примитивы в моделе и читает их OD, а OD нет - вылетеат

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

  • ADN OPEN
  • Сообщений: 30
  • Карма: 0
Re: Прошу помощи с кодом
« Ответ #42 : 25-11-2018, 21:26:36 »
Так у меня-то в чертеже есть тот самый OD:Result_Un

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #43 : 25-11-2018, 21:41:51 »
Попробуй вот такой код:
Код - Visual Basic [Выбрать]
  1. Sub PrintAllOData()
  2.     Dim amap As AcadMap
  3.     Dim acadObj As Object
  4.     Dim ODtbs As ODTables
  5.     Dim ODtb As ODTable
  6.     Dim i As Integer
  7.     Dim prj As Project
  8.     Dim ODrcs As ODRecords
  9.     Dim boolVal As Boolean
  10.      
  11.     Set amap = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Application")
  12.     Set prj = amap.Projects(ThisDrawing)
  13.     prj.ProjectOptions.DontAddObjectsToSaveSet = True
  14.     Set ODtbs = prj.ODTables
  15.    
  16.     For Each ODtb In ODtbs
  17.       Debug.Print ODtb.Name
  18.       Set ODrcs = ODtb.GetODRecords
  19.       For Each acadObj In ThisDrawing.ModelSpace
  20.         boolVal = ODrcs.Init(acadObj, False, False)
  21.         If boolVal = True Then
  22.           Debug.Print ODrcs.Record.tableName
  23.           Debug.Print ODrcs.Record.ObjectID
  24.           For i = 0 To ODrcs.Record.Count - 1
  25.            Debug.Print ODrcs.Record.Item(i).Value
  26.           Next i
  27.         End If
  28.       Next
  29.     Next
  30.     Set ODrcs = Nothing
  31. End Sub

Еще раз повторяю. Удали из чертежа ВСЁ (!!!), кроме одной (или нескольких) полилининий с ObjectData.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом
« Ответ #44 : 25-11-2018, 21:44:00 »
Так у меня-то в чертеже есть тот самый OD:Result_Un
Но у тебя есть и примитивы без неё. Вот на них похоже и вылет. Поэтому я еще добавил проверку:
Код - Visual Basic [Выбрать]
  1.         If boolVal = True Then
Off-Topic: показать
P.S.: Похоже пока ты очень далёк от программирования...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение