Mở đầu
Bài viết này sẽ tổng hợp số việc mở rộng liên quan đến việc chọn đối tượng còn khá mới mẻ trong Civil3D khi chưa chỉ mới cho phép chọn 1 đối tượng.Chúng ta có thể mở rộng vấn đề này để giải quyết sự lựa chọn cho nhiều đối tượng hơn
Pick chọn nhiều đối tượng
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
output = [] | |
adoc = Application.DocumentManager.MdiActiveDocument | |
ed = adoc.Editor | |
with adoc.LockDocument(): | |
with adoc.Database as db: | |
with db.TransactionManager.StartTransaction() as t: | |
bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite) | |
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) | |
for objectid in btr: | |
obj1 = t.GetObject(objectid, OpenMode.ForRead) | |
output.append(obj1) | |
OUT = output,ed.WriteMessage("Done") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[CommandMethod("PickObject")] | |
public static List<Entity> SelectedObject() | |
{ | |
Document doc = Application.DocumentManager.MdiActiveDocument; | |
Database db = doc.Database; | |
Editor ed = doc.Editor; | |
List<Entity> objs = new List<Entity>(); | |
using (Transaction tran = db.TransactionManager.StartTransaction()) | |
{ | |
PromptSelectionResult prompt = ed.GetSelection(); | |
if (prompt.Status == PromptStatus.OK) | |
{ | |
SelectionSet selectionSet = prompt.Value; | |
foreach (SelectedObject obj in selectionSet) | |
{ | |
if (obj!=null) | |
{ | |
Entity o = tran.GetObject(obj.ObjectId,OpenMode.ForWrite) as Entity; | |
objs.Add(o); | |
} | |
} | |
} | |
tran.Commit(); | |
} | |
return objs; | |
} |
Chọn đối tượng với layer muốn chọn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
output = [] | |
adoc = Application.DocumentManager.MdiActiveDocument | |
ed = adoc.Editor | |
with adoc.LockDocument(): | |
with adoc.Database as db: | |
with db.TransactionManager.StartTransaction() as t: | |
bt = t.GetObject(db.BlockTableId, OpenMode.ForWrite) | |
btr = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) | |
for objectid in btr: | |
obj1 = t.GetObject(objectid, OpenMode.ForRead) | |
if obj1.Layer == "Layer1": | |
output.append(obj1) | |
else: | |
pass | |
OUT = output |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[CommandMethod("SelectionFilter")] | |
public static void LayerSelection() | |
{ | |
Document doc = Application.DocumentManager.MdiActiveDocument; | |
Database db = doc.Database; | |
Editor ed = doc.Editor; | |
TypedValue[] filterlist = new TypedValue[2]; | |
//select circle and line | |
filterlist[0] = new TypedValue(0, "CIRCLE,LINE"); | |
//8 = DxfCode.LayerName | |
filterlist[1] = new TypedValue(8, "0,Layer1,Layer2"); | |
SelectionFilter filter = | |
new SelectionFilter(filterlist); | |
PromptSelectionResult selRes = ed.SelectAll(filter); | |
if (selRes.Status != PromptStatus.OK) | |
{ | |
ed.WriteMessage( | |
"\nerror in getting the selectAll"); | |
return; | |
} | |
ObjectId[] ids = selRes.Value.GetObjectIds(); | |
ed.WriteMessage("No entity found: " | |
+ ids.Length.ToString() + "\n"); | |
} |
Chọn đối tượng đã chọn sẵn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[CommandMethod("GetSelection")] | |
public static void SelectionTest() | |
{ | |
var ed = Application.DocumentManager.MdiActiveDocument.Editor; | |
var pso = new PromptSelectionOptions(); | |
pso.SingleOnly = true; | |
pso.SinglePickInSpace = true; | |
PromptSelectionResult psr; | |
var ids = new ObjectIdCollection(); | |
while (true) | |
{ | |
psr = ed.GetSelection(pso); | |
if (psr.Status != PromptStatus.OK) | |
break; | |
ids.Add(psr.Value[0].ObjectId); | |
ed.WriteMessage("\n{0} selected objects", ids.Count); | |
} | |
} |
Mở rộng
Việc chọn nhiều hay chọn ít, chọn như thế nào là ở tư duy xử lý của mỗi người, chúng ta có muốn vàn cách lựa chọn để tìm ra đối tượng phù hợp cần xử lý cho mình nhất.Ngoài việc lựa chọn như các cách nêu trên, ta có thể lựa chọn theo hàng loạt đối tượng có sẵn rồi lọc layer hoặc chọn theo thuộc tính, chọn theo vị trí ,...