rtree is indexable assertion
这是我的代码的一部分。我正在尝试为顶点类对象RTreeVertex创建一个rtree树。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Entity { public: int num; public: Entity(int nr): num(nr){ } virtual ~Entity(){} bool operator==(const Entity& b) { return num == b.num; } }; class Vertex : public Entity { public : struct Coord{ double X, Y, Z; }Pos; Vertex(int num=0, double X=0., double Y=0., double Z=0.): Entity (num) { Pos.X = X; Pos.Y = Y; Pos.Z = Z; } }; |
这是我声明rtree的方式:
1 2 3 | #include <boost/geometry/index/rtree.hpp> namespace bgi = boost::geometry::index; bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex; |
但是我收到一条错误消息,指出vertec不可索引。
还有一个更普遍的问题:使用rtree来存储与网格相关的数据是一个好主意吗?
您必须将点类注册为Boost几何。它为您的班级创建了许多特征。我对此进行了测试,它可以正常工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Vertex : public Entity { public : double X, Y, Z; Vertex(int num=0, double x=0., double y=0., double z=0.): Entity (num) { X = x; Y = y; Z = z; } }; BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, X, X, X ); #include <boost/geometry/index/rtree.hpp> namespace bgi = boost::geometry::index; bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex; |
我无法在Pos :: X ...的结构中将其与X,Y,Z一起使用,也许有办法。您可以加入boost.org上的几何组。他们是几何专家。
附录:
我很好奇,所以我看了一下REGISTER ..的工作原理。使用:
1 | BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, Pos.X, Pos.Y, Pos.Z ); |
您可以将结构用于x,y,z。
和命名空间bg = boost :: geometry;
是我上面使用的命名空间