www.mxdraw.com
|
打碎实体
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;