[英]c# Autocad Map 3D 2012 get user drawn object
是否可以發送一個字符串來執行Map並找出用戶以更簡單的方式繪制的對象? 我覺得我正在做的事情太多了......
這是命令:
acad.DocumentManager.MdiActiveDocument.SendStringToExecute
("_MPOLYGON ", false, false, true);
截至目前,我所做的是訂閱對象附加事件和命令結束事件,然后我調用sendStringToExecute並從那里檢查數據庫中的所有新對象並保留對我找到的對象的引用用戶已繪制。
首先:
HostApplicationServices.WorkingDatabase.ObjectAppended +=
new ObjectEventHandler(activeDB_ObjectAppended);
和
acad.DocumentManager.MdiActiveDocument.CommandEnded +=
new CommandEventHandler(MdiActiveDocument_CommandEnded);
執行命令時:
void activeDB_ObjectAppended(object sender, ObjectEventArgs e)
{
polyDessinIds.Add(e.DBObject.Id);
}
Autocad在執行_MPOLYGON命令時將對象添加到數據庫,因此我保留對它們的引用。 在用戶繪圖時,Autocad會向數據庫添加點和線。 例如,對於一行的第一次和第二次單擊似乎放在數據庫中。 此外,當多邊形添加到工作數據庫時,並不意味着它是最后一個。 最后添加的對象也不能保證是真實對象。
然后當命令結束時,我尋找正確的objectId,即使有很多多邊形被繪制,只有一個有效的objectId引用一個或多個繪制的多邊形。
foreach (ObjectId obj in polyDessinIds)
{
if (obj.IsErased == false && obj.ObjectClass.Name == "AcDbMPolygon")
{
mPolygons = obj;
//there should be only one valid at this point
break;
}
}
我想知道是否有更好更可靠的方法來做到這一點? 也許就像你提示選擇對象時一樣,這會返回一個包含所有對象的選擇集。 有沒有辦法“promptForPolygon”或類似的東西,一旦用戶繪制它們只會返回我的新對象?
我認為您不需要所有代碼,請嘗試使用:
ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.SelectLast()
哪個應該為您提供最后繪制或使用的實體。
這里有更多解釋:
http://72.77.202.9/index.php?topic=20267.0
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.