在编写涵洞翼墙时
翼墙多个面组合成的不规则实体,在ORD中可以采取三种方式生成:
(1)创建多个实体,通过布尔运算和实体剪切的方式生成;
(2)把翼墙实体的分成若干个面,通过面缝合生成体;
(3)使用Mesh体,面构成体。
因编程习惯,不喜欢使用Mesh体,在此重点讨论第二种方式。
先说说第二种方式的手工建模的方法:
选择Modeling—Surface—Stitch/Combine Surfaces,选择缝合曲面,依次点选面,组合面成体,但这个方法很多时候会出现意想不到的效果,往往一会能生成,一会生成不了。
编程的方法:将翼墙体重构分解,分成17个控制点,依次计算17个点的坐标,再通过点组合成体,共生成13个面,将13个面构成体。
17个点的坐标计算和13个平面的生成在此不做赘述,直接放13个面生成体的代码
SolidKernelEntity[] tools = new SolidKernelEntity[13];//申明几何描述的内存对象
Convert1.ElementToBody(out tools[0], shape1, false, true, false);//获取shape1的几何元素信息
Convert1.ElementToBody(out tools[1], shape2, false, true, false);
Convert1.ElementToBody(out tools[2], shape3, false, true, false);
Convert1.ElementToBody(out tools[3], shape4, false, true, false);
Convert1.ElementToBody(out tools[4], shape5, false, true, false);
Convert1.ElementToBody(out tools[5], shape6, false, true, false);
Convert1.ElementToBody(out tools[6], shape7, false, true, false);
Convert1.ElementToBody(out tools[7], shape8, false, true, false);
Convert1.ElementToBody(out tools[8], shape9, false, true, false);
Convert1.ElementToBody(out tools[9], shape10, false, true, false);
Convert1.ElementToBody(out tools[10], shape11, false, true, false);
Convert1.ElementToBody(out tools[11], shape12, false, true, false);
Convert1.ElementToBody(out tools[12], shape13, false, true, false);
SolidKernelEntity[] sewn;
SolidKernelEntity[] unsewn;
Element ehOut;
if (BentleyStatus.Success == Modify.SewBodies(out sewn, out unsewn, ref tools, 13, 0, 1))
for (int i = 0; i < sewn.Length; i++)
{
Convert1.BodyToElement(out ehOut, sewn[i], null, Session.Instance.GetActiveDgnModel());
ehOut.AddToModel();
}
该实体生成时会有多余的线条,目前还未发现原因,不知道是方法的参数里可以控制,还是编程内部的原因,亦或是面顺序的问题,还需要进一步核实其原因。