找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1481|回复: 2

[ARX函数]:请问如何炸开一个块?

[复制链接]
发表于 2005-7-19 13:39:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请问大家如何将插入到当前数据库的实体块炸开?(最好用 ARX实现,实在不行LISP也行)

从外部文件插入一个块到当前实体数据库中,想将其炸开,如何用ARX函数实现?[/COLOR]因为这个块是从外边插入到当前数据库中的,当要显示的时候,才插入实体数据库的,在每次插入块后将其炸开,不希望用户看到的是块的形式。并且将插入的块名定义清空,就是insert看出我插入的是那个块名。谢谢大家。

借用LISP的命令,我没能实现自动处理。 如何自动实现炸开一个刚插入的块? [/COLOR]
acedCommand(RTSTR, "explode", RTENAME, "TWO_RECT", RTNONE);  TWO_RECT" 为块名。 
结果如下:
Enter insertion point:
选择对象: <错误图元名: 5F4F5754>
选择对象:

和使用acedCommand(RTSTR, "explode", RTNONE); 是一样的:
Enter insertion point:
选择对象:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-7-21 16:22:00 | 显示全部楼层
AcDbEntity::explode(
AcDbVoidPtrArray& entitySet)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-23 12:05:19 | 显示全部楼层
已经可以炸开插入的块了,但是炸开块的实体中的AcDbMText文字编成AcDbText文字,而不是想要的AcDbMText文字。[/COLOR]
请各位做过的朋友和大侠指点。

void AppendToModelSpace(AcDbDatabase *pDbNew, AcDbEntity* pEnt, AcDbObjectId &objId)
{
        AcDbBlockTable *pBlkTbl;
        AcDbBlockTableRecord *pBlkTblRcd;

        pDbNew->getSymbolTable(pBlkTbl, AcDb::kForRead);
        pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);
        pBlkTblRcd->appendAcDbEntity(objId, pEnt);
        ((AcDbObject *)pEnt)->downgradeOpen();
        pBlkTbl->close();
        pBlkTblRcd->close();
        return;
}

void ExplodeBlock()
{
        AcDbVoidPtrArray *vparr;
        AcDbObject * pDbO=NULL;
        AcDbObjectId DbOId=NULL;
        vparr = new AcDbVoidPtrArray();
        ads_name ss,se;

        struct resbuf * preb;

        struct resbuf *pcb;
        pcb=acutNewRb(RTDXF0);
        char sbuf[100];
        strcpy(sbuf,"TWO_");

        pcb->resval.rstring=sbuf;
        pcb->rbnext=NULL;

        acedSSGet("X",NULL,NULL,NULL,ss);
        long lLen;
        acedSSLength(ss, &lLen);

        AcDbDatabase *pdbD = acdbHostApplicationServices()->workingDatabase();

        for (int i = 0; i < lLen; i++)
        {
                acedSSName(ss, i, se);
                acdbGetObjectId(DbOId, se);
                acdbOpenObject(pDbO, DbOId, AcDb::kForWrite);
                ((AcDbEntity *)pDbO)->explode(*vparr);
                pDbO->close();

                for(int j = 0; j < vparr->length(); j++)
                {
                        pDbO = (AcDbEntity *)vparr->at(j);
                        AppendToModelSpace(pdbD, (AcDbEntity *)pDbO, DbOId);
                        pDbO->close();
                }
                vparr->removeSubArray(0, vparr->length());
        }

        delete vparr;

        acutRelRb(pcb);
        acedSSFree(ss);

}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 18:32 , Processed in 0.276433 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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