19/08/2013
Добавление атрибутов к определению блока с использованием C++ COM/ActiveX Automation в ObjectARX
Фокус в том, чтобы сделать это используя интерфейсы I * Ptr интерфейсы (например, IAcadDocumentPtr), так что бы подсчет COM-ссылок осуществлялся автоматически.
А другой фокус в том, чтобы использовать VARIANT как можно реже, настолько насколько это возможно - для этого у нас есть AcAx-классы. Вот код:
Код - C++: [Выделить]
- #import "acax19ENU.tlb" no_namespace
- #include <rxmfcapi.h>
- #include <axpnt3d.h>
- void fAddAttribute()
- {
- try
- {
- // Получаем объект ActiveX приложения AutoCAD, увеличивая счетчик использования
- IAcadApplicationPtr pAcadApp = acedGetAcadWinApp()->GetIDispatch(TRUE);
- // Теперь получим активный документ
- IAcadDocumentPtr pActiveDoc = pAcadApp->ActiveDocument;
- IAcadBlockPtr pBlock = NULL;
- TCHAR *pBlkName = _T("некоторое_имя_блока ");
- // Создаём ActiveX-совместимую 3D-точку
- AcAxPoint3d axInsPnt(0,0,0);
- // Добавим имя блока
- pBlock = pActiveDoc->Blocks->Add(axInsPnt.asVariantPtr(),_bstr_t(pBlkName));
- // Добавим атрибут к блоку
- IAcadAttributePtr pAttDef;
- pAttDef = pBlock->AddAttribute(1.0, (AcAttributeMode)0 ,
- _bstr_t("Укажите имя сотрудника "), axInsPnt.asVariantPtr(),
- _bstr_t("имя_сотрудника"),_bstr_t(""));
- // Атрибут добавлен
- }
- catch(_com_error &es)
- {
- acutPrintf(L"\nОшибка : %s", es.ErrorMessage());
- }
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=181
Опубликовано 19.08.2013