29/03/2017
Как получить имя примитива из Панели свойств?
Вопрос: В панели свойств есть название примитива, который находится в наборе предварительного выбора (pickfirst):
Это название – локализованная строка. Например, в русской локализации – Дуга, в английской – Arc. Как можно имея идентификатор AcDbObjectId этого примитива узнать его имя?
Ответ: Ниже приводится полный код, который печатает имя выбранного примитива:
Код - C++: [Выделить]
- //-----------------------------------------------------------------------------
- //----- acrxEntryPoint.cpp
- //-----------------------------------------------------------------------------
- #include "StdAfx.h"
- #include "opmext.h"
- #include "resource.h"
- //-----------------------------------------------------------------------------
- #define szRDS _RXST("")
- //-----------------------------------------------------------------------------
- //----- ObjectARX EntryPoint
- class CGetOPMNameApp : public AcRxArxApp {
- public:
- CGetOPMNameApp() : AcRxArxApp() {}
- virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) {
- AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
- return (retCode);
- }
- virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) {
- AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
- return (retCode);
- }
- virtual void RegisterServerComponents() { }
- static void RivilisGetOPMName() {
- ads_name en; ads_point pt;
- if (acedEntSel(L"\nSelect entity: ", en, pt) == RTNORM)
- {
- AcDbObjectId id; acdbGetObjectId(id, en);
- AcDbEntityPointer pEnt(id);
- if (pEnt.openStatus() == Acad::eOk)
- {
- CLSID clsid;
- if (pEnt->getClassID(&clsid) == Acad::eOk)
- {
- CComQIPtr<IOPMPropertyExtension> OPEHelper;
- OPEHelper.CoCreateInstance(clsid);
- HRESULT hr = S_OK;
- if (OPEHelper)
- {
- LPOLESTR pbstrName;
- ///////////////////////////////////////////////////////////////
- // Магическое число 0x401 для получения OPM-имени примитива
- ///////////////////////////////////////////////////////////////
- hr = OPEHelper->GetDisplayName(0x401, &pbstrName);
- if (SUCCEEDED(hr) && pbstrName)
- {
- acutPrintf(L"\nИмя = \"%s\"", pbstrName);
- }
- }
- }
- }
- }
- }
- };
- //-----------------------------------------------------------------------------
- IMPLEMENT_ARX_ENTRYPOINT(CGetOPMNameApp)
- ACED_ARXCOMMAND_ENTRY_AUTO(CGetOPMNameApp, Rivilis, GetOPMName, GetOPMName, ACRX_CMD_MODAL, NULL)
Так это выглядит:
Автор: Александр Ривилис
Отредактировано 29.03.2017 в 20:02:51
Обсуждение: http://adn-cis.org/forum/index.php?topic=7716
Опубликовано 29.03.2017Отредактировано 29.03.2017 в 20:02:51