Сообщество программистов Autodesk в СНГ

ADN Club => Другие продукты Autodesk => Navisworks API => Тема начата: Cader от 24-08-2021, 23:20:11

Название: IronPython для подключения к NavisWorks
Отправлено: Cader от 24-08-2021, 23:20:11
Добрый день,

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

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

Может я не в ту сторону копаю. Подскажите где можно найти информацию. А то по NavisAPI её очень мало.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Александр Ривилис от 25-08-2021, 13:32:18
Посмотри вот эту статью: https://www.linkedin.com/pulse/naviswork-python-viewpoints-per-room-ambrosio-gómez-morales/
Надеюсь, что она поможет.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Cader от 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".

Буду пробовать дальше. Если получится - отпишусь.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Александр Ривилис от 25-08-2021, 19:11:37
Я сейчас использую пример https://adndevblog.typepad.com/aec/2012/05/accessing-clash-report-information-using-net-api.html
Но этот пример тоже создаёт плагин, который работает внутри Navisworks.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Cader от 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.  
Код я обрезал без доступа к Нэвису, так что проверить не могу, но общий принцип - понятен я думаю.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Александр Ривилис от 27-08-2021, 22:28:04
Я так и не понял откуда берутся библиотеки
Interop.NavisworksIntegratedAPI17.dll
Interop.NavisworksAutomationAPI17.dll
Если не самого Navisworks, то генерируются из его tlb-файлов.
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Cader от 28-08-2021, 11:41:47
Если не самого Navisworks, то генерируются из его tlb-файлов.
А Вы не знаете как обрабатывать эти файлы на IronPython?
Название: Re: IronPython для подключения к NavisWorks
Отправлено: Александр Ривилис от 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