从STL文件高效生成拓扑

时间:2016-08-24 20:55:55

标签: c++ graphics

我有一个可打印3D形状的STL文件。 STL文件基本上是一个包含3个空间中代表3D对象的facet(具有法线的三角形)的包。每个面由3个顶点和法线表示。

使用哈希表我匹配所有等效的顶点并使用该信息来提取拓扑模型,这样我就可以请求一个关系,例如getNearbyFacets()和countNearbyFacets()。在对模型切片进行轮廓加工时,此信息非常重要。

以下是我匹配verticies的方法:

//used to compare pointers to the vertex objects
struct lex_compare {
    bool operator() (CAMu3DPoint const* lhs, CAMu3DPoint const* rhs) const{
        return *lhs == *rhs;
    }
};

//hash function for the verticies
struct lex_hash{
    std::size_t operator()(CAMu3DPoint const* vert) const{
        return
            (std::hash<float>()(vert->x)) ^
            (std::hash<float>()(vert->y)) ^
            (std::hash<float>()(vert->z));
    }
};

当我构造构面列表时,我将所有顶点推入一个unordered_set,然后将此集复制到一个向量中。对顶点的引用存储在构面对象中,这允许我基于相邻构面进行搜索。

此代码运行速度比我想要的慢。我的问题是如何在这个方面之间建立拓扑关系呢?

1 个答案:

答案 0 :(得分:2)

您应该查看针对3D最近邻居搜索进行了优化的数据结构。这是最受欢迎的: