根据您的说法,我认为您可能正在使用(或至少应该使用)存储附加信息的自定义边缘属性。理想情况下是这样的:
auto edge_pm = OpenMesh::makePropertyManagerFromExistingOrNew<
OpenMesh::EPropHandleT<std::string> >(mesh, "edge_info");
// Set some random edge info.
edge_pm[mesh.edge_handle(23)] = "foo";
您可以使用 OpenMesh 的本机.om
格式,该格式允许您存储自定义属性。查看 中的单元测试/src/Unittests/unittests_read_write_OM.cc
,特别是WriteTriangleVertexBoolProperty
实现了一个示例,其中具有自定义属性的网格被保存到.om
文件中,然后再次从该文件中读取。对于上面的示例,它看起来像这样:
// Flag property so it gets serialized.
mesh.property(edge_pm.getRawProperty()).set_persistent(true);
bool ok = OpenMesh::IO::write_mesh(mesh, "bar.om");
从文件加载网格时,请务必先创建属性:
Mesh new_mesh;
auto new_edge_pm = OpenMesh::makePropertyManagerFromExistingOrNew<
OpenMesh::EPropHandleT<std::string> >(new_mesh, "edge_info");
bool ok = OpenMesh::IO::read_mesh(new_mesh, "bar.om");
之后您的财产应该被恢复:
std::cout << new_edge_pm[new_mesh.edge_handle(23)] << std::endl;
// Should print "foo"