www.mxdraw.com
内容索引主面
前一个向上下一个
MxDrawXCustomFunction::Mx_Explode 方法

打碎实体

IDL
static McDbObjectIdArray Mx_Explode(McDbObjectId id);
参数 
说明 
McDbObjectId id 
实体id. 

返回打碎后的实体的对象id.

例如: VC COM

            void CTestVc2005Dlg::Explode()
            {
                MxDrawXLib::IMxDrawUtilityPtr mxUtility;
                mxUtility.CreateInstance(__uuidof( MxDrawXLib::MxDrawUtility ));
                if(mxUtility == NULL)
                {
                    return;
                }

                CComPtr<IMxDrawPoint> spPickPoint;
                IMxDrawEntityPtr spEntity = mxUtility->GetEntity(&spPickPoint,_T("请选择实体"));

                if(spEntity == NULL)
                    return;


                IMxDrawResbufPtr param;
                param.CreateInstance(__uuidof( MxDrawResbuf ));
                param->AddObjectId(spEntity->ObjectID);

                IDispatchPtr spRet(m_ocx.CallEx(_T("Mx_Explode"),param),false);

                if(spRet == NULL)
                    return;

                IMxDrawResbufPtr retParam;
                spRet->QueryInterface(&retParam);


                CString sRet = retParam->AtString(0);
                if(sRet != _T("Ok") )
                {
                    return;
                }

                // 得到打碎后的实体id.
                std::vector<LONGLONG> aryId;
                for(long i = 1; i < retParam->Count;i++)
                {
                    LONGLONG lId = retParam->AtObjectId(i);
                    aryId.push_back(lId);
                }
            }

例如: C#

            // 打开图纸文件。
            axMxDrawX1.OpenDwgFile("C:\西桥头村.dwg");
    
            // 打碎图纸上的自定义实体。

            MxDrawResbuf filter = new MxDrawResbuf();

            // 设置选择过滤条件,只选择自定义实体。
            filter.AddStringEx("ACAD_PROXY_ENTITY", 5020);
            MxDrawSelectionSet ss = new MxDrawSelectionSet();

            // 得到所有自定义实体。
            ss.AllSelect(filter);

            // 遍历自定义实体

            for (Int32 i = 0; i < ss.Count; i++)
            {
                MxDrawEntity ent = ss.Item(i);
                MxDrawResbuf param = new MxDrawResbuf();
                param.AddObjectId(ent.ObjectID);
                // 打碎自定义实体。
                MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.CallEx("Mx_Explode", param);

                // 删除自定义实体。

                if(ret.AtString(0) == "Ok")
                    ent.Erase();
            }

            // 把图纸所有内容都放到当前视区。

            axMxDrawX1.ZoomAll();

 

例如: Delphi 得到PL线中的圆弧和直线信息

    procedure TForm3.Button1Click(Sender: TObject);
    var ss        : IMxDrawSelectionSet;
    filter        : IMxDrawResbuf;
    ii,jj                    : Integer;
    pEnt                  : IMxDrawEntity;
    pPolyline             : IMxDrawPolyline;
    param        : IMxDrawResbuf;
    line         : IMxDrawLine;
    pts,pte      : IMxDrawPoint;
    arc          : IMxDrawArc;
    begin
            // 创建一个选择集对象
            ss :=  CoMxDrawSelectionSet.Create();

            // 创建一个过滤条件对象
            filter := CoMxDrawResbuf.Create();

            // 选择图上所有实体
            ss.AllSelect(filter);

            // 遍历构造后的选择集实体,找到边界线。

            for ii := 0 to ss.Count -1 do
            begin
                    // 遍历所有实体
                pEnt := ss.Item(ii);
                pEnt.QueryInterface(IMxDrawPolyline, pPolyline);
                if pPolyline <> nil then
                begin
                       // 得到一个PL线对象。

                       // 打碎PL线,把PL线变成直线,和圆弧
                       param :=    CoMxDrawResbuf.Create();
                       param.AddObjectId(pEnt.ObjectID);
                            showmessage('11');
                       // 调用打碎函数,打碎实体.
                       param := MxDrawResbuf(MxDrawX1.CallEx('Mx_Explode', param));
                              showmessage('22');
                       // 遍历打碎后的实体,得到所有曲线。

                       for jj := 1 to param.Count -1 do
                       begin
                            //
                            pEnt := IMxDrawEntity(param.AtObject(jj));
                            pEnt.QueryInterface(IMxDrawLine, line);
                            if(line <> nil) then
                            begin
                                // 这是PL线里的直线

                                // 得到直线的,开始点,和结束点,
                                pts := line.StartPoint;
                                pte := line.EndPoint;
                                  showmessage('line');
                                // 调用Delphi的绘制直线函数,绘直线

                                // ...
                                 continue;
                            end;

                            pEnt.QueryInterface(IMxDrawArc, arc);
                             if(arc <> nil) then
                             begin
                                // 这是PL线里的圆弧

                                // 得到圆弧中点,半径,开始角,结束角,

                                // arc.Center;
                                // arc.StartAngle;
                                // arc.EndAngle;
                                // arc.Radius;

                               showmessage('arc');

                                // 调用Delphi的绘圆弧函数,绘直线
                                // ...
                                 continue;
                            end;


                       end;
                end;
            end;

    end;
Copyright (c) 2010. All rights reserved.
你认为该帮助怎么样? 发送反馈信息!