Getting the 'OPM' name of an object

Getting the 'OPM' name of an object

thierry_prince
Advocate Advocate
659 Views
2 Replies
Message 1 of 3

Getting the 'OPM' name of an object

thierry_prince
Advocate
Advocate

Hi,

I'm trying to get the name of an entity like it is shown on top of OPM (from its AcDbObjectId or AcDbEntity pointer).

For example: "Polyline", "3D Solid", "3D Polyline"...

Of course, it should work for all entities, even they come from external applications.

Does somebody have an idea ?

Thanks.

Thierry

0 Likes
Accepted solutions (1)
660 Views
2 Replies
Replies (2)
Message 2 of 3

Alexander.Rivilis
Mentor
Mentor
Accepted solution
//-----------------------------------------------------------------------------
//----- 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;
    CLSID clsid;
    LPOLESTR  pbstrName;
    if (acedEntSel(L"\nSelect entity: ", en, pt) == RTNORM)
    {
      AcDbObjectId id; acdbGetObjectId(id, en);
      AcDbEntityPointer pEnt(id);
      if (pEnt.openStatus() == Acad::eOk)
      {
        if (pEnt->getClassID(&clsid) == Acad::eOk)
        {
          CComQIPtr<IOPMPropertyExtension> OPEHelper;
          OPEHelper.CoCreateInstance(clsid);
          HRESULT hr = S_OK;
          if (OPEHelper)
          {
            // Magic number 0x401
            hr = OPEHelper->GetDisplayName(0x401, &pbstrName);
            if (SUCCEEDED(hr) && pbstrName)
            {
              acutPrintf(L"\nName = \"%s\"", pbstrName);
            }
          }
        }
      }
    }
  }
};

//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CGetOPMNameApp)
ACED_ARXCOMMAND_ENTRY_AUTO(CGetOPMNameApp, Rivilis, GetOPMName, GetOPMName, ACRX_CMD_MODAL, NULL)

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

0 Likes
Message 3 of 3

thierry_prince
Advocate
Advocate

Thanks to you Alexander, that's exactly what I needed.

Cheers.

0 Likes