在 OpenMesh 中,一旦将命名属性添加到元素中,它将是永久的,因为该属性在属性管理器的范围内仍然存在,如此处所述。我的问题是,如何按名称删除此类属性?
到目前为止,我尝试由物业经理删除,甚至这个失败:
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()
返回一个属性管理器。我不知道如何解决这个问题。
Edit2:我想另一个问题是:如何从物业经理那里获得物业的物业句柄?
Edit3:查看源代码,它似乎PropertyManager
有一个成员函数deleteProperty()
,但 a) 是私有的,b) 如果未设置,它只会删除属性retain
,我假设将为命名属性设置。