IronPython для подключения к NavisWorks

Автор Тема: IronPython для подключения к NavisWorks  (Прочитано 9557 раз)

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

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Добрый день,

Я пытаюсь подключится к NavisWorks 2020 извне и прочитать данные о коллизиях.
Использую для этого IronPython

Насколько я понял для такой задачи нужно использовать NavisworksIntegratedAPI17 + NavisworksAutomationAPI17.
Но информации по тому где эти модули лежат или как их подгружать в IronPython я не нашел.

Может я не в ту сторону копаю. Подскажите где можно найти информацию. А то по NavisAPI её очень мало.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: IronPython для подключения к NavisWorks
« Ответ #1 : 25-08-2021, 13:32:18 »
Посмотри вот эту статью: https://www.linkedin.com/pulse/naviswork-python-viewpoints-per-room-ambrosio-gómez-morales/
Надеюсь, что она поможет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Re: IronPython для подключения к NavisWorks
« Ответ #2 : 25-08-2021, 19:00:42 »
 Спасибо за статью!

Это немного не то решение которое я ищу.
Здесь есть плагин внутри Navis который обрабатывает скрипт.
То-есть сначала нужно запустить Navis а уже потом внутри исполнять скрипт.

Так как Navis имеет внешние интерфейсы управления - я бы хотел решение которое запускает Navis выдаёт ему команду на открытие файла, считывает данные из него, а потом уже закрывает нэвис.

Я сейчас использую пример https://adndevblog.typepad.com/aec/2012/05/accessing-clash-report-information-using-net-api.html
Дошел до поиска плагина пересечений, и всё. Выводится сообщение "cannot find clash test plugin!"
Его там просто нет. Я уже перебрал всю коллекцию плагинов.

По библиотекам (NavisworksIntegratedAPI17...)- пока достал их из пакета нодов к dynamo "dynaworks".

Буду пробовать дальше. Если получится - отпишусь.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: IronPython для подключения к NavisWorks
« Ответ #3 : 25-08-2021, 19:11:37 »
Я сейчас использую пример https://adndevblog.typepad.com/aec/2012/05/accessing-clash-report-information-using-net-api.html
Но этот пример тоже создаёт плагин, который работает внутри Navisworks.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Re: IronPython для подключения к NavisWorks
« Ответ #4 : 27-08-2021, 22:19:52 »
Да, действительно это плагин. Не сразу увидел.

Я так и не понял откуда берутся библиотеки
Interop.NavisworksIntegratedAPI17.dll
Interop.NavisworksAutomationAPI17.dll

Вижуал студия их создаёт откуда - то.
Взял их из проекта https://dynamonodes.com/category/dynaworks/

По итогу удалось получить данные из отчёта о пересечениях.

Может кому-то ещё пригодится
Код - Python [Выбрать]
  1. import sys
  2. sys.path.append(r"C:\Program Files\Autodesk\Navisworks Manage 2020")
  3. import clr
  4. clr.AddReferenceToFile('Interop.NavisworksIntegratedAPI17.dll')
  5. clr.AddReferenceToFile('Interop.NavisworksAutomationAPI17.dll')
  6. import NavisworksIntegratedAPI17
  7. import NavisworksAutomationAPI17
  8.  
  9. if __name__ == '__main__':
  10.     # Create a new Navisworks Document, this will launch Navisworks
  11.     m_doc = NavisworksAutomationAPI17.DocumentClass()
  12.     # Read the state from the new Navisworks Document
  13.     m_state = m_doc.State()
  14.     # Tell Navisworks to be not visible
  15.     m_doc.Visible = False
  16.     # Open file
  17.     filename = "D:\test.nwd"
  18.     m_doc.OpenFile(filename)
  19.  
  20.     # get clash statistics
  21.  
  22.     m_clash = None
  23.     for d_plugin in m_state.Plugins():
  24.         if d_plugin.ObjectName == "nwOpClashElement":
  25.             m_clash = d_plugin
  26.             break
  27.  
  28.     if m_clash is None:
  29.         print"Clash Detective not found"
  30.     else:
  31.         # Run all stored clash tests
  32.         m_clash.RunAllTests()
  33.  
  34.         # Output results to list
  35.         result = {}
  36.         for clashTest in m_clash.Tests():
  37.             check_name = clashTest.name
  38.             result[check_name] = []
  39.             for clashResult in clashTest.results():
  40.                 result[check_name].append(clashResult.name)
  41.  
Код я обрезал без доступа к Нэвису, так что проверить не могу, но общий принцип - понятен я думаю.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: IronPython для подключения к NavisWorks
« Ответ #5 : 27-08-2021, 22:28:04 »
Я так и не понял откуда берутся библиотеки
Interop.NavisworksIntegratedAPI17.dll
Interop.NavisworksAutomationAPI17.dll
Если не самого Navisworks, то генерируются из его tlb-файлов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Re: IronPython для подключения к NavisWorks
« Ответ #6 : 28-08-2021, 11:41:47 »
Если не самого Navisworks, то генерируются из его tlb-файлов.
А Вы не знаете как обрабатывать эти файлы на IronPython?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: IronPython для подключения к NavisWorks
« Ответ #7 : 28-08-2021, 15:18:27 »
Если не самого Navisworks, то генерируются из его tlb-файлов.
А Вы не знаете как обрабатывать эти файлы на IronPython?
tlb-файлы из IronPython? Вряд ли в IronPython есть такие средства. Для этого используется утилита tlbimp.exe: https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-generate-primary-interop-assemblies-using-tlbimp-exe
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение