gpt4 book ai didi

c++ - 无法在 VS 2010 中编译 Vcg 库

转载 作者:行者123 更新时间:2023-11-28 07:07:44 25 4
gpt4 key购买 nike

我正在尝试使用 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>'...meshes\meshprocessing.h 24 1 Meshes

这是我完整的 meshprocessing.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<wrap\io_trimesh\import.h>
#include<wrap\io_trimesh\export.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:%i\n",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 语法。由于您是从 TriMesh 派生的,因此您必须声明自己的,因为编译器生成的无法工作。修复:

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

关于c++ - 无法在 VS 2010 中编译 Vcg 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com