|
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;