是否有可能發送一個字符串來執行Map並找出用戶以更簡單的方式繪製了哪些對象?我覺得像我做的實在是太多了......c#Autocad Map 3D 2012獲取用戶繪製對象
這是命令:
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);
}
WHILE正在執行_MPOLYGON命令的Autocad添加對象到數據庫中,所以我保留所有的參考。 Autocad在用戶繪製時向數據庫添加點和線。例如,一行的第一次和第二次點擊似乎被放入數據庫中。另外,當多邊形添加到工作分貝時,並不意味着它是最後一個。最後添加的對象也不能保證是真實的對象。
然後,當命令結束時,我查找正確的objectId,即使繪製了很多多邊形,也只有1個有效的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」或類似的東西,一旦用戶已經繪製了它們就會將新對象返回給我?
謝謝!有用!我知道必須有更好的方法。 – Enriquev