c#Autocad Map 3D 2012获取用户绘制的对象



是否可以发送一个字符串执行到Map,并以更容易的方式找出用户绘制了哪些对象?我觉得我做的太多了。。。

这是命令:

acad.DocumentManager.MdiActiveDocument.SendStringToExecute
("_MPOLYGON ", false, false, true);

到目前为止,我所做的是订阅对象附加事件和命令结束事件,然后调用sendStringToExecute,从那里我检查DB中的所有新对象,并保留对用户绘制的对象的引用。

所以首先:

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,即使绘制了许多多边形,也只有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"或类似的东西,一旦用户绘制完新对象,就会将其返回给我?

我认为您不需要所有这些代码,请尝试使用:

ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.SelectLast()

它应该为您提供绘制或使用的最后一个实体。

这里有更多的解释:

http://72.77.202.9/index.php?topic=20267.0

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新