在基于OpenPlant CE版的.net二次开发过程中,我定义了一个类继承自DgnElementSetTool,希望实现两个功能:
1.允许选择多个元素,允许单击,框选将元素加入选择集,按住Ctrl键单击、框选将已选择的元素从选择集中排除
2.通过代码访问DgnElementSetTool的选择集,并进行修改(添加、删除元素)
目前我已通过重载
WantAddtionalLocate(...) => true;
WantDynamics(...) => false;
WantAccuSnap(...) => false;
AllowDragSelect (...) => UsesDragSelect.Box;
GetAddtionalLocateNumRequired(...) => int.MaxValue;
实现了选择多个元素,但一旦按住Ctrl键单击已选中的元素(预期将元素从选择集中排除)程序就会崩溃,是否是某些函数也要相应重载?
另外我尝试通过DgnElementSetTool.ElementAgenda访问并修改选择集(调用ElementAgenda.Empty(true)或ElementAgenda.Insert(...)),但在此对象上调用的修改方法都没有效果,是否有特殊的调用方式?
请各位专家同仁指教,谢谢!
能否把您的代码都发上来,我帮您看一下。通过DgnElementSetTool.ElementAgenda访问元素选择的结果,读取是没问题的,但是往这个几何里边插入确实会出现您说的现象,这是因为c#对c/c++封装的接口不是太完善造成的,这种现象已经反馈给开发组了。另外https://communities.bentley.com/communities/other_communities/bdn_other_communities/w/chinabdn-wiki/43485/microstation这个下边有讲解DgnElementSetTool的用法,带着几个例子您可以看看,不过例子都是c/c++的。
您使用的软件版本是多少?我印象中早起版本DgnTool的C#封装是有问题的。请用C++改写一下你的代码再测试一下。另外,有关DgnTool,郭老师写有如下系列文章供学习:
学习Microstation交互式工具开发
建议ElementAgenda实现ICollection<Element>,或将Element集合作为ElementAgenda的一个属性,目前的接口不太适合开发
我安装的是Microstation CE Update 12及OpenPlant CE Update 5,在开发过程中的C#工程引用了Microstation的程序集(Bentley.XXX.dll),开发的addin程序加载到OpenPlant中运行
目前确实也没有时间深入研究C++的代码,精力有限