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

19/08/2013

Добавление атрибутов к определению блока с использованием C++ COM/ActiveX Automation в ObjectARX

Фокус в том, чтобы сделать это используя интерфейсы I * Ptr интерфейсы (например, IAcadDocumentPtr), так что бы подсчет COM-ссылок осуществлялся автоматически.
А другой фокус в том, чтобы использовать VARIANT как можно реже, настолько насколько это возможно - для этого у нас есть AcAx-классы. Вот код:

Код - C++: [Выделить]
  1. #import "acax19ENU.tlb" no_namespace
  2. #include <rxmfcapi.h>
  3. #include <axpnt3d.h>
  4. void fAddAttribute()
  5. {
  6.   try
  7.   {
  8.     // Получаем объект ActiveX приложения AutoCAD, увеличивая счетчик использования
  9.     IAcadApplicationPtr pAcadApp = acedGetAcadWinApp()->GetIDispatch(TRUE);
  10.     // Теперь получим активный документ
  11.     IAcadDocumentPtr pActiveDoc = pAcadApp->ActiveDocument;
  12.     IAcadBlockPtr pBlock = NULL;
  13.     TCHAR *pBlkName = _T("некоторое_имя_блока ");
  14.     // Создаём ActiveX-совместимую 3D-точку
  15.     AcAxPoint3d axInsPnt(0,0,0);
  16.     // Добавим имя блока
  17.     pBlock = pActiveDoc->Blocks->Add(axInsPnt.asVariantPtr(),_bstr_t(pBlkName));
  18.     // Добавим атрибут к блоку
  19.     IAcadAttributePtr pAttDef;
  20.     pAttDef = pBlock->AddAttribute(1.0, (AcAttributeMode)0 ,
  21.       _bstr_t("Укажите имя сотрудника "), axInsPnt.asVariantPtr(),
  22.       _bstr_t("имя_сотрудника"),_bstr_t(""));
  23.     // Атрибут добавлен
  24.   }
  25.   catch(_com_error &es)
  26.   {
  27.     acutPrintf(L"\nОшибка : %s", es.ErrorMessage());
  28.   }
  29. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/12/adding-an-attribute-to-a-block-definition-using-c-comactivex-automation-in-objectarx.html

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

Опубликовано 19.08.2013