属于不同网格的元素之间的OpenMesh copy_all_properties

问题描述

OpenMesh中是否可以在不同的网格实例之间复制元素属性copy_all_properties()确实按照here的说明将所有元素的属性一个元素复制到另一个元素,但是,它绑定到一个网格实例,并且如果两个元素属于不同的网格对象,似乎并没有复制任何内容。 / p>

我尝试了以下操作:

    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)));
    vhandles.push_back(mesh1.add_vertex(MyMesh::Point(0,1,0)));
    vhandles.push_back(mesh1.add_vertex(MyMesh::Point(1,0))); 
    face1 = mesh1.add_face(vhandles);
    mesh1_props[face1] = 5;

    vhandles.clear();
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(0,0)));
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(0,0)));
    vhandles.push_back(mesh2.add_vertex(MyMesh::Point(1,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

因此该属性不会被复制。

解决方法

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

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

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

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