天气与日历 切换到窄版

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

ObjectARX 炸开实体程序段

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
/*
        函数名称:AppendEntity()
        创建日期:20160922 LukyRen
        功能描述:获取空间模型实体ID
        参数描述:pEnt :实体
        返回类型:实体Id
        */
        AcDbObjectId McAcad:: AppendEntity(AcDbEntity *pEnt)
        {
                AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
                AcDbBlockTable *pBt;
                pDb->getBlockTable(pBt, AcDb::kForRead);
                AcDbBlockTableRecord *pBtr;
                pBt->getAt(ACDB_MODEL_SPACE, pBtr, AcDb::kForWrite);
                AcDbObjectId entId;
                pBtr->appendAcDbEntity(entId, pEnt);
                pBtr->close();
                pBt->close();
                pEnt->close();
                return entId;
        }

        /*
        函数名称:                    PtToStr
        创建  人:                         LuckyRen
        创建日期:                         2010.08.01
        功能描述:                         将三维的点转化为字符串
        返回类型:                         字符串
        参数意义:           pt:要转化的三维点
        修改记录:         */
        CString McAcad::PtToStr(const AcGePoint3d& pt)
        {
                CString sT;
                sT.Format(_T("%lf,%lf,%lf"),pt.x,pt.y,pt.z);
                return sT;
        }

/*
函数名称: ExplodeEntity()
创建日期:20160922 LuckyRen
功能描述:炸开组装图实体
参数描述:无
*/
        void McAcad::ExplodeEntity()
        {
                ads_name en;
                ads_point pt;
                if(acedEntSel(_T("\n选择所要炸开的实体:"),en,pt) != RTNORM)
                {
                        return;
                }
                AcDbObjectId entId;
                Acad::ErrorStatus es = acdbGetObjectId(entId,en);
                if(es != Acad::eOk)
                        return;
                AcDbEntity *pEnt = NULL;
                acdbOpenAcDbEntity(pEnt,entId,AcDb::kForWrite);
                AcDbVoidPtrArray pExps;
                AcDbEntity *pExpEnt = NULL;
                int count = 0;
                if(pEnt->explode(pExps) == Acad::eOk)
                {
                        count = pExps.length();//炸开实体后的个数
                        for(int i=0; i <pExps.length(); i ++)
                        {
                                pExpEnt = (AcDbEntity*)pExps[i];
                                acutPrintf(_T("\n分解后的实体对象类型是:%s"), pExpEnt->isA()->name());
                                if(AcDbLine::cast(pExpEnt) != NULL)
                                {//直线
                                        AcDbLine* pLine = AcDbLine::cast(pExpEnt);
                                        CString sT1,sT2;
                                        AcGePoint3d P1;
                                        AcGePoint3d P2;
                                        P1 = pLine->startPoint();
                                        P2 = pLine->endPoint();
                                        sT1.Format(_T("\n   开始点:%s"),McAcad::PtToStr(P1));
                                        sT2.Format(_T("\n   结束点:%s"),McAcad::PtToStr(P2));
                                        acutPrintf(_T("\n %s%s%s"),sT1, sT2);
                                }
                                AppendEntity(pExpEnt);
                        }
                        pEnt->erase(true);
                }
                else
                {
                        acutPrintf(_T("\n该实体对象不能被分解!"));
                }
                pEnt->close();
        }

 

 

 

 

ObjectARX 炸开实体程序段
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 10:19 , Processed in 0.135320 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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