27/03/2018
Как удалить переменную из Диспетчера параметров AutoCAD средствами ARX
Следующий код покажет как это можно сделать:
Код - C++: [Выделить]
- //-----------------------------------------------------------------------------
- //----- acrxEntryPoint.cpp
- //-----------------------------------------------------------------------------
- #include "StdAfx.h"
- #include "AcDbAssocNetwork.h"
- #include "AcDbAssocVariable.h"
- #include "resource.h"
- //-----------------------------------------------------------------------------
- #define szRDS _RXST("")
- //-----------------------------------------------------------------------------
- //----- ObjectARX EntryPoint
- class CAssocParameterApp : public AcRxArxApp {
- public:
- CAssocParameterApp() : 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 RivilisRemoveVariable() {
- ACHAR paramName[256];
- if (acedGetString(TRUE, _T("\nУкажите имя удаляемой переменной: "), paramName) != RTNORM)
- return;
- AcDbObjectId networkId =
- AcDbAssocNetwork::getInstanceFromObject(acdbCurDwg()->currentSpaceId(), false, true, _T("ACAD_ASSOCNETWORK"));
- if (networkId.isNull()) return;
- AcDbObjectPointer<AcDbAssocNetwork> pNetwork(networkId, AcDb::kForRead);
- if (pNetwork.openStatus() != Acad::eOk) return;
- AcDbObjectIdArray idsActions = pNetwork->getActions();
- for (int i = 0; i < idsActions.length(); i++)
- {
- if (idsActions[i].objectClass()->isDerivedFrom(AcDbAssocVariable::desc()))
- {
- AcDbObjectPointer<AcDbAssocVariable> pVar(idsActions[i], AcDb::kForRead);
- if (pVar->name().compareNoCase(paramName) == 0)
- {
- if (pVar->upgradeOpen() == Acad::eOk)
- pVar->erase();
- }
- }
- }
- }
- };
- //-----------------------------------------------------------------------------
- IMPLEMENT_ARX_ENTRYPOINT(CAssocParameterApp)
- ACED_ARXCOMMAND_ENTRY_AUTO(CAssocParameterApp, Rivilis, RemoveVariable, RemoveVariable, ACRX_CMD_MODAL, NULL)
Автор: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 27.03.2018