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

27/03/2018

Как удалить переменную из Диспетчера параметров AutoCAD средствами ARX

Следующий код покажет как это можно сделать:

Код - C++: [Выделить]
  1. //-----------------------------------------------------------------------------
  2. //----- acrxEntryPoint.cpp
  3. //-----------------------------------------------------------------------------
  4. #include "StdAfx.h"
  5. #include "AcDbAssocNetwork.h"
  6. #include "AcDbAssocVariable.h"
  7. #include "resource.h"
  8.  
  9. //-----------------------------------------------------------------------------
  10. #define szRDS _RXST("")
  11.  
  12. //-----------------------------------------------------------------------------
  13. //----- ObjectARX EntryPoint
  14. class CAssocParameterApp : public AcRxArxApp {
  15.  
  16. public:
  17.   CAssocParameterApp() : AcRxArxApp() {}
  18.  
  19.   virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) {
  20.     AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
  21.     return (retCode);
  22.   }
  23.  
  24.   virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) {
  25.     AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
  26.     return (retCode);
  27.   }
  28.  
  29.   virtual void RegisterServerComponents() {    }
  30.  
  31.   static void RivilisRemoveVariable() {
  32.     ACHAR paramName[256];
  33.     if (acedGetString(TRUE, _T("\nУкажите имя удаляемой переменной: "), paramName) != RTNORM)
  34.       return;
  35.     AcDbObjectId networkId =
  36.       AcDbAssocNetwork::getInstanceFromObject(acdbCurDwg()->currentSpaceId(), false, true, _T("ACAD_ASSOCNETWORK"));
  37.     if (networkId.isNull()) return;
  38.     AcDbObjectPointer<AcDbAssocNetwork> pNetwork(networkId, AcDb::kForRead);
  39.     if (pNetwork.openStatus() != Acad::eOk) return;
  40.     AcDbObjectIdArray idsActions = pNetwork->getActions();
  41.     for (int i = 0; i < idsActions.length(); i++)
  42.     {
  43.       if (idsActions[i].objectClass()->isDerivedFrom(AcDbAssocVariable::desc()))
  44.       {
  45.         AcDbObjectPointer<AcDbAssocVariable> pVar(idsActions[i], AcDb::kForRead);
  46.         if (pVar->name().compareNoCase(paramName) == 0)
  47.         {
  48.           if (pVar->upgradeOpen() == Acad::eOk)
  49.             pVar->erase();
  50.         }
  51.       }
  52.     }
  53.   }
  54. };
  55.  
  56. //-----------------------------------------------------------------------------
  57. IMPLEMENT_ARX_ENTRYPOINT(CAssocParameterApp)
  58.  
  59. ACED_ARXCOMMAND_ENTRY_AUTO(CAssocParameterApp, Rivilis, RemoveVariable, RemoveVariable, ACRX_CMD_MODAL, NULL)
  60.  
  61.  

 

Автор: Александр Ривилис

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

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