老师好,做二次开发工作遇见个需求,需要根据用户鼠标选择的点,生成包含这个点在内附近墙组成的闭合空间。自己写的计算算法差强人意,对于复杂情况都不生效;
在OBB软件中看到了创建区域,使选择泛填的方式,这个功能很完善了,想直接用这个接口。API文档上描述有限,也没找到实例,这个接口该怎么用啊。
使用代码如下:
DPoint3d Pt = pts[0]; //用户选择的点 EditElementHandle OutEh; ElementAgenda Elems; RegionParams Rep; Rep.SetType(RegionType::Flood); Rep.SetAssociative(true); for (int i = 0; i < (int)allWallInfo.size(); i++) //扫描当前文件中所有的墙 { Elems.Insert(allWallInfo[i].eh.GetElementRef(), ACTIVEMODEL); } BentleyStatus ret = AssocRegionCellHeaderHandler::CreateAssocRegionElement(OutEh, Elems, NULL, 0, &Pt, 1, Rep, NULL); if (ret == SUCCESS) { OutEh.AddToModel(); }
这个函数的第二个参数需要的元素应该是基本曲线或者由基本曲线组合起来的元素(Shape, ComplexShape, ComplexChain),不能是体元素。
好吧,看来不能直接用这个接口了。不过OBD软件中的泛填创建区域是可以在包围墙上直接生成的,那应该是先经过算法处理了。我把墙转换成Shape试试。