选择实体程序在两个文档中执行,一个不异常一个有异常
下面是我写的一个函数,执行一些选择的操作。编译成功之后在AUTOCAD中执行,没有问题。但打开另一个文档同样执行这个命令的时候却出现异常。百思不得其解。请各位老大帮忙看看。private ObjectIdCollection GetSheet()
{
iA3Count = 0;
int iA4Count = 0;
TypedValue[] tv1 = new TypedValue;
TypedValue[] tv2 = new TypedValue;
tv1.SetValue(new TypedValue((int)DxfCode.BlockName, "a4"), 0); //设置选择集,A4
tv2.SetValue(new TypedValue((int)DxfCode.BlockName, "a3"), 0); //设置选择集,A3
// 赋值过滤条件给 SelectionFilter 对象 Assign the filter criteria to a SelectionFilter object
SelectionFilter fltA4 = new SelectionFilter(tv1);
SelectionFilter fltA3 = new SelectionFilter(tv2);
ObjectIdCollection objIdColl = new ObjectIdCollection();
// 要求在图形区域中选择对象,自动全选 Request for objects to be selected in the drawing area
PromptSelectionResult acSSPrompt = ed.SelectAll(fltA4); //在第二个文档中执行出错的就是这行。
// 如果提示状态是 OK,对象就被选择了 If the prompt status is OK, objects were selected
if (acSSPrompt.Status == PromptStatus.OK)
{
SelectionSet set1 = acSSPrompt.Value;
objIdColl = new ObjectIdCollection(set1.GetObjectIds());
iA4Count = objIdColl.Count;
}
acSSPrompt = ed.SelectAll(fltA3);
if (acSSPrompt.Status == PromptStatus.OK)
{
SelectionSet set2 = acSSPrompt.Value;
if (objIdColl.Count == 0)
{
objIdColl = new ObjectIdCollection(set2.GetObjectIds());
}
else
{
foreach (ObjectId objId in set2.GetObjectIds())
{
objIdColl.Add(objId);
}
iA3Count = objIdColl.Count - iA4Count;
Application.ShowAlertDialog("文档 \"" + doc.Name + "\" " + "共有: " + iA3Count + " 张 A3 图纸和 " + iA4Count + " 张 A4 图纸.");
}
}
if (iA4Count == 0 && iA3Count == 0)
{
Application.ShowAlertDialog("文档没有图纸!");
return null;
}
return objIdColl;
}
在前面加一句
ed = ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor 应该加上 Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
另外,SelectionSet对象具有 .count属性,楼主不必再用ObjectIdCollection对象收集选集元素。 谢谢楼上两位大哥。
不过两位大哥说的那两句在我的程序中有。程序太长,我贴的只是其中一段。
我将
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
我将这三句作为公共代码放在类中,独立于每个函数。
上面贴的是一个函数。
不用ObjectIdCollection对象能遍历选择集中的实体不? 问题就出在你的ed独立于每个函数,永远都是第一个文档的editor,所以才导致错误。按2楼修改一下就可以了 sailorcwx兄说的和我今天测试的差不多。不过我发现不是Editor的问题,好像是Document的问题。永远是第一个文档。并且这个Document是静态的。
但如果像二楼那样的话,岂不是要在每个函数中都要声明 Document,Database,Editor?这样好像也有点臃肿啊。
页:
[1]