Получение всех зависимостей в dwg файле

Автор Тема: Получение всех зависимостей в dwg файле  (Прочитано 13498 раз)

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

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Это решение тебя устроит или будешь копать дальше?
Остановлюсь на этом решении, хотя оно меня не совсем устраивает по двум причинам:
1. Происходит повторное открытие документа, это время, но от этого, похоже, не уйти, если использовать эту библиотеку.
2. Нужен как минимум enabler, из словаря поднять информацию было бы гораздо интереснее, но по-моему это не реально. Да и не факт, что эта информация там есть.
Возможно все-таки приложения сами подкидывают зависимости для etransmit:
While working with a transmittal set, you can register event handlers that allow the Transmittal engine to communicate with a custom program. The ITransmittalDatabaseNotificationHandler and ITransmittalAddFileNotificationHandler interfaces provide notifications to third-party applications whenever a transmittal set is created or a file is added to a transmittal set, respectively.
https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-25638F6D-D65B-4538-95D0-8B21D300107B-htm.html

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Возможно кому-то пригодится код примера на C++ (без обработки ошибок).
Потребуется #import библиотеки типов AcETransmit*.tlb (находится в ObjectARX SDK\inc-x64 или ObjectARX SDK\inc-win32)

Код - C++ [Выбрать]
  1. void DependentFiles()
  2. {
  3.         ITransmittalOperationPtr to;
  4.  
  5.         HRESULT hRes = CoCreateInstance(CLSID_TransmittalOperation, NULL, CLSCTX_INPROC_SERVER, IID_ITransmittalOperation, (void **)&to);
  6.  
  7.         ITransmittalFilePtr tf;
  8.         ITransmittalInfoPtr ti;
  9.         to->getTransmittalInfoInterface(&ti);
  10.  
  11.         ti->put_includeDataLinkFile(1);
  12.         ti->put_includeDGNUnderlay(1);
  13.         ti->put_includeDWFUnderlay(1);
  14.         ti->put_includeFontFile(1);
  15.         ti->put_includeImageFile(1);
  16.         ti->put_includeInventorProjectFile(1);
  17.         ti->put_includeInventorReferences(1);
  18.         ti->put_includeMaterialTextureFile(1);
  19.         ti->put_includeNestedOverlayXrefDwg(1);
  20.         ti->put_includePDFUnderlay(1);
  21.         ti->put_includePhotometricWebFile(1);
  22.         ti->put_includePlotFile(1);
  23.         ti->put_includeUnloadedXrefDwg(1);
  24.         ti->put_includeXrefDwg(1);
  25.  
  26.  
  27.         _bstr_t dwgFile = _T("C:\\Temp\\Sample.dwg");
  28.         AddFileReturnVal retVal;
  29.         to->addDrawingFile(dwgFile, &tf, &retVal);
  30.         if (retVal == eFileAdded)
  31.         {
  32.                 ITransmittalFilesGraphPtr tfg;
  33.                 to->graphInterfacePtr(&tfg);
  34.  
  35.                 ITransmittalFilePtr rootTF;
  36.                 tfg->getRoot(&rootTF);
  37.  
  38.                 DisplayDependent(rootTF);
  39.         }
  40. }
  41.  
  42. void DisplayDependent(ITransmittalFilePtr tf)
  43. {
  44.         int numberOfDependents;
  45.         tf->get_numberOfDependents(&numberOfDependents);
  46.         for (int i = 0; i < numberOfDependents; ++i)
  47.         {
  48.                 ITransmittalFilePtr childTF;
  49.                 tf->getDependent(i, &childTF);
  50.  
  51.                 FileType ft;
  52.                 childTF->get_FileType(&ft);
  53.  
  54.                 _bstr_t sourcePath;
  55.                 childTF->get_sourcePath(sourcePath.GetAddress());
  56.  
  57.                 acutPrintf(_T("\n зависит %d - %s"), ft, (LPTSTR)sourcePath);
  58.  
  59.                 DisplayDependent(childTF);
  60.         }
  61. }
  62.  
« Последнее редактирование: 31-05-2017, 13:43:43 от Александр Ривилис »