www.mxdraw.com
内容索引主面
前一个向上下一个
McDbDatabase 类

控件的数据库对象,图形中的所有信息都存放在该对象中,调用MxDraw::GetDatabase()函数得到控件的数据库,调用acdbCurDwg()得到当前活动控件的数据库

C++
class McDbDatabase : public McRxObject;

McDbDatabase.h

例如: 得到图中有扩展数据的所有文字

        bool GetTextFormXdata(CString sXdataName,AcDbObjectIdArray& aryId)
        {
            aryId.setLogicalLength(0);
            // 设置文字做为过滤条件
            MrxDbgRbList spData = acutBuildList(RTDXF0, _T("TEXT"),0);
            MrxDbgSelSet ss;
            // 得所有文字
            ss.allSelect(spData.data() );
            AcDbObjectIdArray tmpAryId;
            ss.asArray(tmpAryId);

            // 遍历每个文字,看有没有扩展数据名sXdataName的扩展数据。

            for(int i =0; i < tmpAryId.length();i++)
            {
                McDbObjectPointer<McDbEntity> spEnt(tmpAryId[i],McDb::kForRead);
                if(spEnt.openStatus() != Mcad::eOk)
                    continue;

                MrxDbgRbList spXdata = spEnt->xData(sXdataName);
                if(spXdata.isEmpty())
                    continue;

                // 找到有扩展数据的文字
                aryId.append(tmpAryId[i]);
            }

            return !aryId.isEmpty();
        }

例如: 得到对象。

    void CTestCommands::GetCurve()
    {
        // 打开文件。

        BOOL isOK = MxDraw::ReadDwg(MxDraw::GetCurOcxHandle(),_T("G:\cad\23.dxf"));
        if(!isOK)
            return;

        // 构造选择集

        MrxDbgSelSet ss;

        // 得到图上所有对象
        ss.allSelect();

        McDbObjectIdArray aryId;

        // 得到对象id数组
        ss.asArray(aryId);

        // 编历数组,得到每个对象的数据。

        for(int i  = 0; i < aryId.length();i++)
        {
            // 写方式打开对象.
            McDbObjectPointer<McDbEntity> spEntity(aryId[i],McDb::kForRead);
            if(spEntity.openStatus() != Mcad::eOk)
                continue;

            // 得到对象的颜色.
            McCmColor color = spEntity->color();

            // 得到对象的类型.
            McRxClass* pRxClass = spEntity->isA();
            if(pRxClass == McDbLine::desc() )
            {
                // 是个直线。

                McDbLine* pLine = McDbLine::cast(spEntity.object());

                // 得到直线的开始点,结束点 .
                McGePoint3d sPt,eP;
                sPt = pLine->startPoint();
                eP = pLine->endPoint();
            }
            else if(pRxClass == McDbArc::desc())
            {
                // 是圆弧.
                McDbArc* pArc = McDbArc::cast(spEntity.object());

                // 圆弧中的中心点,半径,开始角,结束角.
                McGePoint3d cenPt = pArc->center();
                double dR    = pArc->radius();
                double dSAng = pArc->startAngle();
                double dEAng = pArc->endAngle();
            }
            else if(pRxClass == McDbPolyline::desc())
            {
                // 是PL线

                McDbPolyline* pPL = McDbPolyline::cast(spEntity.object());

                int iNum = pPL->numVerts();
                for(int j = 0; j < iNum;j++)
                {
                    // 得到PL线的端点坐标。

                    McGePoint3d pt;
                    pPL->getPointAt(j,pt);

                    // 得到圆弧的凸度.
                    double dBulge = 0.0;
                    pPL->getBulgeAt(j,dBulge);
        
                }
            }
            /* 基它对象。
            else if(..)
            {
                    ...
            }
            */
        }
    }
Copyright (c) 2010. All rights reserved.
你认为该帮助怎么样? 发送反馈信息!