无法在VS 2010中编译VCG库

Cannot compile Vcg library in VS 2010

本文关键字:编译 VCG 2010 VS      更新时间:2023-10-16

我正在尝试使用VCG库编写简单程序但是我什至无法通过vs 2010中的汇编。我从官方页面复制了示例文件,但在此行上失败了

class MyMesh    : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > {};

编译器说 Error 10 error C2248: 'vcg::tri::TriMesh<Container0,Container1,Container2>::TriMesh' : cannot access private member declared in class 'vcg::tri::TriMesh<Container0,Container1,Container2>'...meshesmeshprocessing.h 24 1 Meshes

这是我的完整网格处理。h代码

#include<vcg/complex/complex.h>
#include<vcg/complex/append.h>
#include<vcg/complex/algorithms/clean.h>
#include<vcg/complex/algorithms/hole.h>
#include<vcg/container/container_allocation_table.h>
#include<wrapio_trimeshimport.h>
#include<wrapio_trimeshexport.h>
#include <vector>
#include<iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
class MyVertex; class MyEdge; class MyFace;
struct MyUsedTypes : public vcg::UsedTypes<vcg::Use<MyVertex>   ::AsVertexType,
                                           vcg::Use<MyEdge>     ::AsEdgeType,
                                           vcg::Use<MyFace>     ::AsFaceType>{};
class MyVertex  : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags  >{};
class MyFace    : public vcg::Face<   MyUsedTypes, vcg::face::FFAdj,  vcg::face::VertexRef, vcg::face::BitFlags > {};
class MyEdge    : public vcg::Edge<   MyUsedTypes> {};
class MyMesh    : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> , std::vector<MyEdge>  > {};

class MeshProcessing
{
private:
    MyMesh mesh;
    pcl::PolygonMesh polygonMesh;
public:
    MeshProcessing(pcl::PolygonMesh mesh);
    MyMesh pclMeshtoVcgMesh();
    MyMesh reorientNormals(MyMesh mesh);
};

我不知道该怎么办,任何帮助将不胜感激。

编辑:

#include "MeshProcessing.h"
MeshProcessing::MeshProcessing(pcl::PolygonMesh mesh){
    MeshProcessing::polygonMesh=mesh;
}
MyMesh MeshProcessing::pclMeshtoVcgMesh(){
    MyMesh vcgMesh;
    int verticeCount;
    int triangleCount;
    pcl::PointCloud<pcl::PointXYZ> tmp_cloud; 
    pcl:fromROSMsg(polygonMesh.cloud,tmp_cloud);
    vcgMesh.Clear();
    verticeCount=tmp_cloud.width*tmp_cloud.height;
    vcg::tri::Allocator<MyMesh>::AddVertices(vcgMesh,verticeCount);
    for(int i=0;i<verticeCount;i++){
        vcgMesh.vert[i].P()=vcg::Point3f(tmp_cloud.points[i].x,tmp_cloud.points[i].y,tmp_cloud.points[i].z);
    }
    triangleCount=polygonMesh.polygons.size();
    vcg::tri::Allocator<MyMesh>::AddFaces(vcgMesh, triangleCount);
    for(int i=0;i<triangleCount;i++){
        vcgMesh.face[i].V(0)=&vcgMesh.vert[polygonMesh.polygons[i].vertices[0]];
        vcgMesh.face[i].V(1)=&vcgMesh.vert[polygonMesh.polygons[i].vertices[1]];
        vcgMesh.face[i].V(2)=&vcgMesh.vert[polygonMesh.polygons[i].vertices[2]];
    }
    printf("Input mesh  vn:%i fn:%in",vcgMesh.VN(),vcgMesh.FN());

    return vcgMesh;

}
MyMesh reorientNormals(MyMesh mesh){
    bool orientable=true;
    bool oriented=false;
    vcg::tri::Clean<MyMesh>::RemoveNonManifoldFace(mesh);
    vcg::tri::Clean<MyMesh>::OrientCoherentlyMesh(mesh,oriented,orientable);
    vcg::tri::UpdateNormal<MyMesh>::PerVertexNormalizedPerFace(mesh);
    vcg::tri::UpdateNormal<MyMesh>::PerVertexFromCurrentFaceNormal(mesh);
    return mesh;
}
private:
     // TriMesh cannot be copied. Use Append (see vcg/complex/trimesh/append.h)
     TriMesh operator =(const TriMesh &  m){assert(0);return TriMesh();}
     TriMesh(const TriMesh & ){}

从vcg库中的base.h复制/粘贴。这是一个标准技巧,带有一个非常糟糕的错误消息,启发了C 11的= delete Synax。由于您来自Trimeh,因此您必须声明自己的编译器生成的编译器无法正常工作。修复:

class MyMesh : public yadayada...
{
private:
    MyMesh operator=(const TriMesh &) /* = delete */;
    MyMesh(const TriMesh &) /* = delete */;
};