天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 68|回复: 0

objectArx 字典

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]一、概述
字典:
功能:CAD图纸中有个全局字典,用来存放图纸中的全局信息
自定义数据:开发者可以通过在字典存放扩展记录方式存放自己的全局数据
内置数据:字典已经内置了一些数据,比如:组,多线样式,布局信息,图片定义,Wipout等数据
二、组字典
组:组就是一个选择集,主要为了方便选择,组中的对象仍是完全独立的
图块:主要应用于图纸中会重复使用的一些图形,例如机械零件、建筑的门窗等等,图块相当于一个由多个图形组成的集合
初始生成CAD组字典

2.1 测试代码
Commands.h
#include "stdafx.h"

void AddCommands();

void create();
void append();
void remove();

Commands.cpp
#include "stdafx.h"
#include "Commands.h"
#include "Editor.h"

void AddCommands()
{        // 新增组字典记录
        Editor::AddCommand(L"c-create", ACRX_CMD_MODAL, create);
        // 向组字典记录中添加实体
        Editor::AddCommand(L"c-append", ACRX_CMD_MODAL, append);
        // 剔除组中实体:非线实体
        Editor::AddCommand(L"c-remove", ACRX_CMD_MODAL, remove);       
}

// 新增组字典记录
void create()
{
        Acad::ErrorStatus es;
        // 组字典记录指针
        AcDbGroup *pGroup = new AcDbGroup();
        AcDbDictionary *pDict;
        // 获得当前活动数据库的 组字典指针
        acdbHostApplicationServices()->workingDatabase()->
                                        getGroupDictionary(pDict, AcDb::kForWrite);
        AcDbObjectId groupId;
        // setAt:设置组字典记录的名称、返回 组记录 对象指针、返回 组记录 对象id
        es = pDict->setAt(_T("组字典记录名称"), pGroup, groupId);
        // 获取到对象id后尽早关闭 记录
        pGroup->close();
        // 纠错函数:防止未处理错误引起CAD崩溃
        if (es != Acad::eOk)
        {       
                acutPrintf(_T("\n错误代码为:%s"), acadErrorStatusText(es));
                pDict->close();
                return ;
        }
        // 清理工作
        pDict->close();               
}

// 向组字典记录中添加选择集
void append()
{        // 框选获取选择集
        ads_name sset;
        if (acedSSGet(NULL, NULL, NULL, NULL, sset) != RTNORM)
        {
                return;
        }
        // 获取组字典记录 对象id
        AcDbDictionary *pDict;
        acdbHostApplicationServices()->workingDatabase()->
                                        getGroupDictionary(pDict, AcDb::kForWrite);
        AcDbObjectId groupId;
        pDict->getAt(_T("组字典记录名称"),groupId);
        pDict->close();

        // 获取组字典记录 对象指针
        AcDbGroup *pGroup = NULL;
        acdbOpenObject(pGroup, groupId, AcDb::kForWrite);

        // 获取选择集长度 =》 遍历选择集每个 实体元素 =》获取实体元素 对象id
        Adesk::Int32 len;
        if (acedSSLength(sset, &len) == RTNORM)
        {
                AcDbObjectId id;
                ads_name en;
                for (Adesk::Int32 i = 0; i < len; i++)
                {
                        acedSSName(sset, i, en);
                        acdbGetObjectId(id, en);
                        // append:向组字典记录添加实体 对象id
                        pGroup->append(id);
                }
        }
        // 关闭组记录、释放选择集
        pGroup->close();
        acedSSFree(sset);
}

// 剔除组中非线实体
void remove()
{
        // 获取组字典记录 对象id
        AcDbDictionary *pDict;
        acdbHostApplicationServices()->workingDatabase()->
                                        getGroupDictionary(pDict, AcDb::kForWrite);
        AcDbObjectId groupId;
        pDict->getAt(_T("组字典记录名称"), groupId);
        pDict->close();

        // 获取组字典记录 对象指针
        AcDbGroup *pGroup;
        acdbOpenObject(pGroup, groupId, AcDb::kForWrite);
        // 组字典迭代器,遍历组字典记录中每个元素
        AcDbGroupIterator *pItr = pGroup->newIterator();
        for (;!pItr->done();pItr->next())
        {        // 获取组字典记录中每个元素
                AcDbObject *pObj;
                pItr->getObject(pObj, AcDb::kForRead);
                // 判断如果是非线类实体
                if (!pObj->isKindOf(AcDbLine::desc()))
                {
                        // 必须先关闭实体,才可以从组字典记录中移除
                        pObj->close();
                        // 剔除符合筛选条件的实体:传入对象id
                        pGroup->remove(pItr->objectId());       
                }
                else
                {
                        pObj->close();
                }
        }
        delete pItr;
        // 设置组内的元素为红色
        pGroup->setColorIndex(1);
        // 关闭组
        pGroup->close();
}
[/code]

 

 

 

 

objectArx 字典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 09:26 , Processed in 0.145561 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表