各位老师, 现在有这样一个需求:
选中Mesh上的一个点,把这个点的高程增加10m或减少10m,用插值的方法重构Mesh。重构范围R是自定义的,以该点为中心,绘制一个以R为半径的圆圈,在范围内的片面都需要重构。
是否有老师遇到过类似需求?
提前感谢
选择Mesh上的点可以使用DgnElementSetTool来实现,在重写的_OnDataButton函数里边通过参数可以得到用户点击的点坐标,迭代Mesh的所有坐标点,找到用户点的那个坐标点。重构Mesh的话,可以使用PolyfaceHeader,PolyfaceHeader下有各种static类型的Create函数,创建一个PolyfaceHeader的实例,然后调用CopyFrom可以复制出一份所选Mesh的数据,通过PolyfaceHeader下如下所示的中各个成员函数可以获取到Mesh内的所有数据,这个时候想怎么改就怎么改了。前提是修改后的Mesh要符合Mesh的格式。
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: mkt
郭老师,测试发现用户无法选中Mesh体上的一个网格点。我的操作步骤为:先选中一个“Mesh”类型元素,接着试图去选中Mesh体一个网格点,但被告知,无法精确选中点(即使开了snap和locate函数,也没有在Mesh网格上现实snap和locate标记)。所以是否必须要用LocateSubEntity函数?
看您截图中的提醒是否是您重写了_OnPostLocate函数,在这个函数里边过滤掉了Mesh元素。
郭老师,如图一所示,当我选中Mesh,然后把鼠标放到另一个Mesh上,可以看到Locate/Snap的标记。
PostLocate也没有重写内容。
基类DgnElementSetTool的_OnPostLocate实现里边,如果发现当前定位到的元素已经在ElementAgenda里边,而且没有按下Ctrl键的话就返回false了。