在 OpenMesh 中按名称删除 属性

Remove a property by name in OpenMesh

在 OpenMesh 中,一旦将命名的 属性 添加到一个元素中,它将是永久性的,因为 属性 在 属性 管理器的范围内仍然存在,如所解释的 here。我的问题是,如何通过名称删除这样的 属性?

到目前为止,我尝试通过 属性 经理删除,甚至这个也失败了:

auto face_props = OpenMesh::FProp<FaceProp>(mesh, "face_props");
mesh.remove_property(face_props);

有错误

error: no matching function for call to ‘OpenMesh::TriMesh_ArrayKernelT<>::remove_property(OpenMesh::PropertyManager<OpenMesh::FPropHandleT<FaceProp>, int>&)’

是否有一个 remove_property 函数,我可以在其中编写 remove_property("face_props")(或类似的)来删除 属性?

编辑: 下面给出同样的错误:

mesh.remove_property( OpenMesh::getProperty<OpenMesh::FaceHandle, FaceProp>(mesh, "face_props") );

我怀疑 mesh.remove_property() 需要一个 属性 句柄对象,但是 getProperty() returns 需要一个 属性 管理器。我不知道如何解决这个问题。

Edit2: 我想另一个问题是:如何从 属性 经理那里得到 属性 的 属性 句柄?

Edit3:查看 source,似乎 PropertyManager 有一个成员函数 deleteProperty() 但是 a) 是私有的并且 b ) 它只删除 属性 如果 retain 没有设置,我假设会为命名属性设置。

显然可以定义一个较低级别的 属性 句柄,然后使用 get_property_handle 将句柄作为参考并将其更新到位。这有效:

    OpenMesh::FPropHandleT< FaceProp > fprop;
    mesh.get_property_handle(fprop, "face_props");
    mesh.remove_property( fprop );

我希望这能得到更好的记录。或者说我更擅长 C++。