老师好:
在语雀文档中提到了布尔减运算,MicroStation二次开发基础教学(三) (yuque.com),在MS中的布尔减操作可以操作两个Mesh对象。
我按照语雀的方式对两个MeshHeader元素做布尔减运算,发现MS报错,应该是Convert1的时候失败了。
try { DgnModel dgnModel = Session.Instance.GetActiveDgnModel(); Convert1.ElementToBody(out SolidKernelEntity entity1, land, true, false, false); Convert1.ElementToBody(out SolidKernelEntity entity2, mesh, true, false, false); SolidKernelEntity[] entities = { entity2 }; Modify.BooleanSubtract(ref entity1, ref entities, entities.Count()); Convert1.BodyToElement(out Element resultElem, entity1, null, dgnModel); resultElem.AddToModel(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); }
想请教老师如何用代码实现两个Mesh元素的布尔减运算?
把元素转换成SolidKernelEntity去做操作的话,是使用了ParaSolid算法,这个算法对体有很严格的要求,具体参考这篇wiki:三维实体建模的限制,如果不满足这里的要求的话,就需要调用Mesh布尔运算的API去完成,不过Mesh布尔运算的接口目前c#还没有封装,需要调用c/c++接口来实现:mdlPop_elementDescrFromElementDescrBoolOp
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
郭老师,那么Mesh元素可以整体缩放吗
当然可以了,直接通过旋转变换矩阵就能实现,旋转变换矩阵不仅可以改变元素的方位还可以对元素做缩放,镜像等变换,例如如下所示的变换矩阵就可以将元素缩小为原来的十分之一:
0.1,0,0 0,0.1,0 0,0,0.1
收到,感谢老师!