private void Test()
{
// 擷取目前文檔和資料庫
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
Editor ed = acDoc.Editor;
//啟動事務
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
//使用選擇過濾器定義選擇集規則
TypedValue[] typedValue = new TypedValue[1];
//TestLayer為圖層名字 DxfCode.LayerName為篩選類型 詳情見下面的DXF組碼
typedValue.SetValue(new TypedValue((int)DxfCode.LayerName, "TestLayer"), 0);
SelectionFilter filter = new SelectionFilter(typedValue);
//根據條件 選擇目前空間内所有未鎖定及未當機的對象。
//從圖形中選擇對象有幾種方式,詳情見下表
PromptSelectionResult result = ed.SelectAll(filter);
// 如果提示狀态OK,表示已選擇到對象 反之則沒有對象
if (result.Status != PromptStatus.OK) { return; }
SelectionSet acSSet = result.Value;
// 周遊選擇集内的對象
foreach (ObjectId id in acSSet.GetObjectIds())
{
Entity hatchobj = acTrans.GetObject(id, OpenMode.ForWrite) as Entity;
hatchobj.Erase();//删除
}
acTrans.Commit();
}
}
常見過濾器DXF組碼:
DXF組碼 | 過濾器類型 |
0 (或 DxfCode.Start) | 對象類型(字元串格式),例如“Line”、 “Circle”、 “Arc”等等 |
2 (或 DxfCode.BlockName) | 塊名(字元串格式),插入引用的塊名 |
8 (或 DxfCode.LayerName) | 圖層名(字元串格式),例如“Layer 0” |
60 (或 DxfCode.Visibility) | 對象可見性(整型),0 = 可見, 1 = 不可見. |
62 (或 DxfCode.Color) | 顔色号(整型),0~256數字索引值。0代表随塊 BYBLOCK, 256代表随層BYLAYER,負值表示圖層關閉 了。 |
67 | 模型空間/圖紙空間訓示符(整型),0或忽略 = 模 型空間;1 = 圖紙空間 |
從圖形中選擇對象的幾種方式:
GetSelection :提示使用者從螢幕拾取對象。
SelectAll :選擇目前空間内所有未鎖定及未當機的對象。
SelectCrossingPolygon :選擇由給定點定義的多邊形内的所有對象以及與多邊形相交的對象。多邊形可以是任意形狀,但不能與自己交叉或接觸。
SelectCrossingWindow :選擇由兩個點定義的視窗内的對象以及與視窗相交的對象。
SelectFence :選擇與選擇圍欄相交的所有對象。圍欄選擇與多邊形選擇類似,所不同的是圍欄不是封閉的,圍欄同樣不能與自己相交。
SelectLast :選擇目前空間中最後建立的那個對象。
SelectPrevious :選擇前一個“選擇對象:”提示符期間已標明的所有對象。
SelectWindow :選擇完全框入由兩個點定義的矩形内的所有對象。
SelectWindowPolygon :選擇完全框入由點定義的多邊形内的對象。多邊形可以是任意形狀,但不能與自己交叉或接觸。
SelectAtPoint :選擇通過給定點的對象,并将其放入活動選擇集。
SelectByPolygon :選擇圍欄裡面的對象,并将其添加到活動選擇集。提示選擇螢幕上的對象并周遊選擇集