1. 得到所有圖塊
(1)下面代碼,周遊塊表的每條記錄,然後得到塊名,C#如下:
MxDrawDatabase databae = (MxDrawDatabase)axMxDrawX1.GetDatabase();
MxDrawBlockTable blkTab = databae.GetBlockTable();
MxDrawBlockTableIterator iter = blkTab.NewIterator();
for (; !iter.Done(); iter.Step())
{
MxDrawBlockTableRecord blkRec = iter.GetRecord();
MessageBox.Show(blkRec.Name);
}
(2)判斷目前資料庫中,是有指定的塊名
MxDrawDatabase data = (MxDrawDatabase)axMxDrawX1.GetDatabase();
if (data.GetBlockTable().Has("BlkName"))
{
// 已經插入.
}
(3)周遊某名稱圖塊下所有實體
MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
MxDrawBlockTableRecord blkRec = database.GetBlockTable().GetAt(sBlkName);
MxDrawBlockTableRecordIterator iter = blkRec.NewIterator();
if (iter == null)
return;
int iNum = 0;
// 循環得到所有實體
for (; !iter.Done(); iter.Step(true, false))
{
// 得到周遊器目前的實體
MxDrawEntity ent = iter.GetEntity();
MessageBox.Show(ent.ObjectName);
iNum++;
}
MessageBox.Show(iNum.ToString());
2.得到目前空間中所有實體
下面代碼示範如何得到目前塊表記錄,然後周遊塊表記錄,取到每個對象,判斷對象類型,然後得到對象的屬性資料。
private void GetAllEntity()
{
MxDrawApplication app = new MxDrawApplication();
MxDrawUtility mxUtility = new MxDrawUtility();
// 得到目前圖紙空間
MxDrawBlockTableRecord blkRec = app.WorkingDatabase().CurrentSpace();
// 建立一個用于周遊目前圖紙空間的周遊器
MxDrawBlockTableRecordIterator iter = blkRec.NewIterator();
if (iter == null)
return;
// 所有實體的id數組。
List<Int32> aryId = new List<Int32>();
int iLineNum = 0;
// 循環得到所有實體
for (; !iter.Done(); iter.Step(true, false))
{
// 得到周遊器目前的實體
MxDrawEntity ent = iter.GetEntity();
if (ent == null)
continue;
// 得到實體的id
aryId.Add(ent.ObjectID);
if (ent is MxDrawLine)
{
// 目前實體是一個直線
MxDrawLine line = (MxDrawLine)ent;
iLineNum++;
}
else if (ent is MxDrawBlockReference)
{
// 目前實體是一個塊引用
MxDrawBlockReference blkRef = (MxDrawBlockReference)ent;
for (int j = 0; j < blkRef.AttributeCount; j++)
{
// 得到塊引用中所有的屬性
MxDrawAttribute attrib = blkRef.AttributeItem(j);
mxUtility.Prompt("n Tag: " + attrib.Tag + "Text:" + attrib.TextString);
}
}
// else if (ent is 其它類型)
//{
// ... ....
//}
}
String sT;
sT = "發現" + aryId.Count + "個實體,其中有" + iLineNum + "個直線";
MessageBox.Show(sT);
}
3. 添加塊表記錄
(1)下面代碼,判斷塊表中是否有指定名稱的塊表記錄,如果沒有就增一個塊表記錄。
// sName 是新增加的塊名。
// blkOriginPoint 是圖塊的插入基點。
public bool AddBlockRrecord(String sName, MxDrawPoint blkOriginPoint)
{
// 取目前資料庫.
MxDrawDatabase curDatabase = (MxDrawDatabase)(axMxDrawX1.GetDatabase());
// 得到塊表
MxDrawBlockTable blkTable = curDatabase.GetBlockTable();
// 判斷塊表是否已經有該名稱的塊名。
if (blkTable.Has(sName))
{
MxDrawBlockTableRecord blkRec = blkTable.GetAt(sName, true);
// 如果塊被删除,就反删除。
blkRec.SetProp("unErase", null);
return true;
}
// 新增一個塊表記錄.
MxDrawBlockTableRecord blkNewRec = blkTable.Add(sName);
if (blkNewRec == null)
return false;
// 設定塊表記錄的插入基點
blkNewRec.Origin = blkOriginPoint;
return true;
}
MxDrawPoint pt = new MxDrawPoint();
pt.x = 100;
pt.y = 100;
AddBlockRrecord("MyBlkName", pt);