1

OpenMesh 中有没有办法在不同的网格实例之间复制元素属性?确实如此处copy_all_properties()所述将所有元素属性从一个元素复制到另一个元素,但是,它绑定到一个网格实例,并且如果两个元素属于不同的网格对象,它似乎不会复制任何内容。

我尝试了以下方法:

    MyMesh mesh1, mesh2;
    std::vector<MyMesh::VertexHandle> vhandles;
    MyMesh::FaceHandle face1, face2;
        
    auto mesh1_props = OpenMesh::FProp<int>(mesh1, "face_props");
    auto mesh2_props = OpenMesh::FProp<int>(mesh2, "face_props");           

    vhandles.push_back(mesh1.add_vertex(MyMesh::Point(0,0,0)));
    vhandles.push_back(mesh1.add_vertex(MyMesh::Point(0,1,0)));
    vhandles.push_back(mesh1.add_vertex(MyMesh::Point(1,0,0))); 
    face1 = mesh1.add_face(vhandles);
    mesh1_props[face1] = 5;

    vhandles.clear();
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(0,0,0)));
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(0,1,0)));
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(1,0,0)));
    face2 = mesh2.add_face(vhandles);

    mesh1.copy_all_properties(face1, face2);
    std::cout<<"face1 prop "<<mesh1_props[face1]<<std::endl;
    std::cout<<"face2 prop "<<mesh2_props[face2]<<std::endl;

输出:

face1 prop 5
face2 prop 0

所以该属性不会被复制。

4

1 回答 1

1

我认为没有一种方法可以将单个元素的所有属性从一个网格复制到另一个网格。

mesh1.copy_all_properties(face1, face2)将 mesh1 的所有属性从 face1 复制到 face2,其中 face1 和 face2 都被认为是 mesh1 的面。因此,通过您的呼叫,您将第一面的所有属性复制到自身。

您可以将mesh1 分配给mesh2,这将在mesh2 中为您提供mesh1 的副本,该副本还将包含所有属性的副本。

您还可以使用mesh2_props = mesh1_props为所有面复制该属性。

于 2020-12-15T13:45:09.213 回答