在 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++。
在 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++。