⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exam06a.cpp

📁 ARX/CAD二次开发
💻 CPP
字号:
#include <stdlib.h>
#include <string.h>
#include <rxobject.h>
#include <rxregsvc.h>
#include <aced.h>
#include <dbgroup.h>
#include <dbsymtb.h>
#include <dbents.h>
#include <dbapserv.h>
#include <adslib.h>

void groups();
void makeGroup(AcDbObjectId groupId);
void removeAllButLines(AcDbObjectId groupId);
void initApp();
void unloadApp();
extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode, void*);

void
groups()
{
    AcDbGroup *pGroup = new AcDbGroup("grouptest");

    AcDbDictionary *pGroupDict;
    acdbHostApplicationServices()->workingDatabase()
        ->getGroupDictionary(pGroupDict, AcDb::kForWrite);

    AcDbObjectId groupId;
    pGroupDict->setAt("EXAM06A_GROUPTEST", pGroup, groupId);
    pGroupDict->close();
    pGroup->close();

    makeGroup(groupId);
    removeAllButLines(groupId);
}

void
makeGroup(AcDbObjectId groupId)
{
    ads_name sset;
    int err = acedSSGet(NULL, NULL, NULL, NULL, sset);
    if (err != RTNORM) {
        return;
    }

    AcDbGroup *pGroup;
    acdbOpenObject(pGroup, groupId, AcDb::kForWrite);

    long i, length;
    ads_name ename;
    AcDbObjectId entId;
    acedSSLength(sset, &length);
    for (i = 0; i < length; i++) {
        acedSSName(sset, i, ename);
        acdbGetObjectId(entId, ename);
        pGroup->append(entId);
    }
    pGroup->close();
    acedSSFree(sset);
}

void
removeAllButLines(AcDbObjectId groupId)
{
    AcDbGroup *pGroup;
    acdbOpenObject(pGroup, groupId, AcDb::kForWrite);

    AcDbGroupIterator *pIter = pGroup->newIterator();
    AcDbObject *pObj;
    for (; !pIter->done(); pIter->next()) {
        pIter->getObject(pObj, AcDb::kForRead);

        if (!pObj->isKindOf(AcDbLine::desc())) {
            pObj->close();
            pGroup->remove(pIter->objectId());
        } else {
            pObj->close();
        }
    }
    delete pIter;

    pGroup->setColorIndex(1);

    pGroup->close();
}

void
initApp()
{
    acedRegCmds->addCommand("EXAM06A",
        "GROUPTST","GROUPTST", ACRX_CMD_MODAL, groups);
}

void
unloadApp()
{
    acedRegCmds->removeGroup("EXAM06A");
}


AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
    switch (msg) {
    case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(appId);
		acrxDynamicLinker->registerAppMDIAware(appId);
        initApp();
        break;
    case AcRx::kUnloadAppMsg:
        unloadApp();
    }
    return AcRx::kRetOK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -