在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的情况下才删除该属性,我假设该属性是为命名的属性设置的。
发布于 2020-11-18 18:04:51
显然,您可以定义一个较低级别的属性句柄,然后使用get_property_handle,它将句柄作为引用并在适当的位置进行更新。这样做是可行的:
OpenMesh::FPropHandleT< FaceProp > fprop;
mesh.get_property_handle(fprop, "face_props");
mesh.remove_property( fprop );我希望这能被更好的记录下来。或者说我在C++上做得更好。
https://stackoverflow.com/questions/64884841
复制相似问题