如何在c#Autocad插件应用程序中获取活动Autocad绘图中的所有选定对象?
我试图获得如下选择集:
SelectionSet Selection = AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value;
foreach (SelectedObject Instance in Selection) ...
如果我有这样的选择集,似乎我可以获得所选对象。问题是我在行中得到空引用异常:
AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value
答案 0 :(得分:2)
我认为这就是你要找的东西。我在没有IDE的情况下录制了这个,所以检查它。
using AcApp = Autodesk.Autocad.ApplicationServices.Application;
public class yourclass
{
public Document AcDoc {
get { return AcApp.DocumentManager.MdiActiveDocument;}
}
public static void getSelectionSet()
{
var _editor = AcDoc.Editor;
var _selAll = ed.SelectAll();
var _SelectionSet = _selAll.Value;
using(var trans = AcDoc.TransactionManager.StartTransaction()){
foreach(var ObjId in _SelectionSet.GetObjectIds()){
// apply logic
}
trans.Commit();
}
}
或者如果要返回SelectionSet
public class yourclass
{
public Document AcDoc {
get { return AcApp.DocumentManager.MdiActiveDocument;}
}
public static SelectionSet getSelectionSet()
{
var _editor = AcDoc.Editor;
var _selAll = ed.SelectAll();
return _selAll.Value;
}
}
原谅格式化,我无法让它在堆栈上正常工作
答案 1 :(得分:2)
我得到了解决方案。
AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value
此代码给出了所选对象,但正如我在问题中所提到的,我得到了空引用异常。这是因为我试图在后台线程中获取对象。 http://adndevblog.typepad.com/autocad/2012/06/use-thread-for-background-processing.html提到了这个问题。
当我在主线程中调用MdiActiveDocument然后将结果发送到我的后台线程进行处理时问题解决了。