调试一个使用了openmesh的vs2019程序得到以下错误:
C2440“初始化":无法从"OpenMesh:VectorT<float,3>"转换为"OpenMesh:VectorT<double,3>"
E0312 不存在用户定义的从 "OpenMesh DefaultTraits:Point到 "OpenMesh:Vec3d”的适当转换
其实它们是同一个错误,都是因为没有将OpenMesh 中默认的 float 类型改为 double 类型
参考https://blog.csdn.net/u011446464/article/details/121988053(OpenMesh 将默认的 float 类型改为 double 类型)
以及
https://blog.csdn.net/morgan777/article/details/108698291(OpenMesh 教程:使用网格属性和特性)
得到如下解决方案(在自己的代码中加入以下代码段):
struct MeshTraits : public OpenMesh::DefaultTraits
{
typedef OpenMesh::Vec3d Point;
typedef OpenMesh::Vec3d Normal;
//VertexTraits{
// color col; // 存储顶点的颜色
//};
VertexAttributes(OpenMesh::Attributes::Status | OpenMesh::Attributes::Normal | OpenMesh::Attributes::Color);
FaceAttributes(OpenMesh::Attributes::Status | OpenMesh::Attributes::Normal);
EdgeAttributes(OpenMesh::Attributes::Status);
HalfedgeAttributes(OpenMesh::Attributes::Status);
VertexTraits{
Eigen::MatrixXd Ksum; // store anything you want
bool deleted;
};
};
typedef OpenMesh::TriMesh_ArrayKernelT<MeshTraits> Mesh;
Mesh mesh;