C++ 使用 TopoDS_Shape 提升 rtree

问题描述

我用 IfcSpaces 的形状填充了 TopoDS_listofShape。现在我想使用 Boost rtree 来比较空间并查看它们中的一些是否重叠。我不知道我是否可以立即使用这些形状。我认为我的形状是 rtree 的框,但我不知道如何将 TopoDs_Shape 声明为树的输入。 这是我的形状列表:

TopoDS_Shape geom_object_to_shape(IfcGeom::Element<double> *geom_object) {
const auto *o = dynamic_cast<const IfcGeom::BRepElement<double> *>(geom_object);
TopoDS_Shape shape = o->geometry().as_compound();
gp_Trsf trsf = o->transformation().data();
shape.Move(trsf);
return shape; }
int main() {
....

TopoDS_listofShape SpaceShapes;

do {
    IfcGeom::Element<double> *geom_object = geom_iterator.get();
    auto S = geom_object_to_shape(geom_object);
    SpaceShapes.Append(S);
    std::cout << "New Shape (IfcSpace) " << geom_object->guid() << "\t" << S.HashCode(INT_MAX) << std::endl;
} while (geom_iterator.next());

namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
typedef bgi::rtree<?Value?,bgi::linear<16>> RTree; 

RTree rt1;
rt1.insert(SpaceShapes.begin(),SpaceShapes.end());

此时我不知道如何定义值 (?Value?)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)