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

06/07/2021

Как выполнить расчленение группы примитивов при помощи ObjectARX

Следующий код показывает как можно расчленить группу, заданную её именем:

Код - C++: [Выделить]
  1. //-----------------------------------------------------------------------------
  2. //----- acrxEntryPoint.cpp
  3. //-----------------------------------------------------------------------------
  4. #include "StdAfx.h"
  5. #include "resource.h"
  6.  
  7. //-----------------------------------------------------------------------------
  8. #define szRDS _RXST("")
  9.  
  10. //-----------------------------------------------------------------------------
  11. //----- ObjectARX EntryPoint
  12. class CGroupExplodeApp : public AcRxArxApp {
  13.  
  14. public:
  15.   CGroupExplodeApp() : AcRxArxApp() {}
  16.  
  17.   virtual AcRx::AppRetCode On_kInitAppMsg(void* pkt) {
  18.     AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
  19.     return (retCode);
  20.   }
  21.  
  22.   virtual AcRx::AppRetCode On_kUnloadAppMsg(void* pkt) {
  23.     AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
  24.     return (retCode);
  25.   }
  26.  
  27.   virtual void RegisterServerComponents() {  }
  28.  
  29.   static void RivilisGroupExplode()
  30.   {
  31.      AcString groupName;
  32.      if (acedGetString(FALSE, _T("\nИмя группы для расчленения: "), groupName) != RTNORM)
  33.        return;
  34.      AcDbObjectId idGroupDict = acdbCurDwg()->groupDictionaryId();
  35.      AcDbDictionaryPointer pGroupDict(idGroupDict, AcDb::kForWrite);
  36.      if (pGroupDict.openStatus() == Acad::eOk)
  37.      {
  38.        AcDbObjectId idGroup;
  39.        if (pGroupDict->getAt(groupName, idGroup) == Acad::eOk)
  40.        {
  41.          AcDbObjectPointer<AcDbGroup> pGroup(idGroup, AcDb::kForWrite);
  42.          if (pGroup.openStatus() == Acad::eOk)
  43.          {
  44.            if (pGroup->numEntities() > 0) pGroup->clear();
  45.            pGroup->erase();
  46.          }
  47.        }
  48.        else
  49.        {
  50.          acutPrintf(_T("\nГруппа '%s' не найдена в этом файле"), groupName.kACharPtr());
  51.        }
  52.      }
  53.   }
  54. };
  55.  
  56. //-----------------------------------------------------------------------------
  57. IMPLEMENT_ARX_ENTRYPOINT(CGroupExplodeApp)
  58.  
  59. ACED_ARXCOMMAND_ENTRY_AUTO(CGroupExplodeApp, Rivilis, GroupExplode, GroupExplode, ACRX_CMD_MODAL, NULL)

 

Автор: Александр Ривилис
Опубликовано 06.07.2021