框选我现在是没问题的,只是我想特定选中一类元素,比如管线,不知道如何对结果集筛选,看到文档说通过重写 FilterAgendaEntries,但是我里面设置不需要的元素Invalidate,但是无效,好像得到的只是个副本,如下:
protected override bool FilterAgendaEntries() { bool changed = false; for (uint i = 0; i < ElementAgenda.GetCount(); i++) { Bentley.DgnPlatformNET.Elements.Element ele = ElementAgenda.GetEntry(i); IDgnECInstance ec = ToolsUtils.GetECInstanceByClassName(ConstValues.PIPE, ele); if (ec == null) { ele.Invalidate(); changed = true; } } return changed; }
然后又看到有地方说重写 ModifyAgendaEntries 这个方法,但是怎么操作ElementAgenda这个集合呢,没有看到remove类似的方法啊?应该如何做呢?
c#的DgnElementSetTool类,其ElementAgenda属性(存放选中元素的集合)封装的不够完善,这个属性是对c++的DgnElementSetiTool返回的ElementAgenda的拷贝,先前发现过在c#中往DgnElementSetTool的ElementAgenda的属性中插入元素时,后面再通过这个属性去迭代处理元素时,并不能访问到前面插入的元素。您试试用c/c++来实现应该是没有问题的。
yajing.fu said:但是怎么操作ElementAgenda这个集合呢,没有看到remove类似的方法啊?
遍历ElementAgenda集合,对于想要移除的EditElementHandle,可以调用EditElementHandle下的Invalidate()函数。
不过,正如郭老师所说,由于C# 封装的问题,这些高级功能需要切换到C++才能工作正常。