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

30/05/2013

Программное сохранение активного документа в C++/ARX приложении

Используем ActiveX интерфейс внутри ARX-приложения. Следующий пример кода показывает два подхода. Обратите внимание, что проект ARX-приложения должен поддерживать клиентские интерфейсы AutoCAD ActiveX. При помощи помощника (wizard) ARX это сделать очень просто.

Первый подход:

Код - C++: [Выделить]
  1. void saveDwg()
  2. {
  3.  try
  4.  {
  5.      IAcadApplicationPtr pApp =
  6.        acedGetAcadWinApp()->GetIDispatch(FALSE);
  7.      IAcadDocumentPtr pDoc;
  8.      pApp->get_ActiveDocument(&pDoc);
  9.      pDoc->Save();
  10.  }
  11.  catch(_com_error& e)
  12.  {
  13.    acutPrintf(_T("\nОшибка COM: %s"),
  14.     (ACHAR*)e.Description());
  15.  }
  16. }

Второй подход:

Код - C++: [Выделить]
  1.  
  2. #include <acadi_i.c>
  3. // минимум проверок на ошибки для простоты кода
  4. void saveDwg()
  5. {
  6. CWinApp* pWinApp = acedGetAcadWinApp();
  7.  if(!pWinApp)
  8.   return;
  9. CComPtr<IDispatch> pDisp = pWinApp->GetIDispatch(TRUE);
  10.  if(!pDisp)
  11.   return;
  12.  
  13. CComPtr<IAcadApplication> pComApp;
  14. HRESULT hr = pDisp->QueryInterface(IID_IAcadApplication,
  15.   (void**)&pComApp);
  16.  if(FAILED(hr))
  17.   return;
  18.  
  19. CComPtr<IAcadDocument> pDoc;
  20. hr = pComApp->get_ActiveDocument(&pDoc);
  21.  if(FAILED(hr))
  22.   return;
  23.  
  24. hr = pDoc->Save();
  25.  if(FAILED(hr))
  26.   acutPrintf(_T("\nНе получилось сохранить dwg-файл."));
  27. }
  28.  


Источник: http://adndevblog.typepad.com/autocad/2013/01/programmatically-saving-the-active-document-in-carx-applications.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=76.0

Опубликовано 30.05.2013
Отредактировано 08.06.2013 в 02:00:10