openmesh的安装及其在vs2015中的配置--备忘
一、openmesh的安装
1.在下载openmesh之前,首先查看电脑操作系统,如图:
2.得到系统类型之后,结合自己安装的vs的版本,我的是vs2015,到www.openmesh.org下载指定的版本(我安装的是64位 with apps)
3.下载之后是exe文件,直接安装,记下安装的目录(D:/openmesh 7.0)
二、openmesh在vs2015中的配置
1.在vs中新建win32的控制台空项目,新建一个源文件test.cpp,然后配置项目属性
(1)首先在上方选择模式 ,本文配置时Release,x64的结构如下
(2)在项目属性中配置包含目录和库目录
(3)项目属性中配置预处理_USE_MATH_DEFINES
(4)项目属性链接器-》输入中配置附加依赖项OpenMeshCore.lib;OpenMeshTools.lib;
2.上述配置完成之后,在test.cpp中添加输出一个立方体off文件的代码
- /* ========================================================================= *
- * *
- * OpenMesh *
- * Copyright (c) 2001-2015, RWTH-Aachen University *
- * Department of Computer Graphics and Multimedia *
- * All rights reserved. *
- * www.openmesh.org *
- * *
- *---------------------------------------------------------------------------*
- * This file is part of OpenMesh. *
- *---------------------------------------------------------------------------*
- * *
- * Redistribution and use in source and binary forms, with or without *
- * modification, are permitted provided that the following conditions *
- * are met: *
- * *
- * 1. Redistributions of source code must retain the above copyright notice, *
- * this list of conditions and the following disclaimer. *
- * *
- * 2. Redistributions in binary form must reproduce the above copyright *
- * notice, this list of conditions and the following disclaimer in the *
- * documentation and/or other materials provided with the distribution. *
- * *
- * 3. Neither the name of the copyright holder nor the names of its *
- * contributors may be used to endorse or promote products derived from *
- * this software without specific prior written permission. *
- * *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
- * *
- * ========================================================================= */
- /*===========================================================================*\
- * *
- * $Revision$ *
- * $Date$ *
- * *
- \*===========================================================================*/
- #include <iostream>
- // -------------------- OpenMesh
- #include <OpenMesh/Core/IO/MeshIO.hh>
- #include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
- // ----------------------------------------------------------------------------
- typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
- // ----------------------------------------------------------------------------
- // Build a simple cube and write it to std::cout
- int main()
- {
- MyMesh mesh;
- // generate vertices
- MyMesh::VertexHandle vhandle[8];
- vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1));
- vhandle[1] = mesh.add_vertex(MyMesh::Point(1, -1, 1));
- vhandle[2] = mesh.add_vertex(MyMesh::Point(1, 1, 1));
- vhandle[3] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
- vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
- vhandle[5] = mesh.add_vertex(MyMesh::Point(1, -1, -1));
- vhandle[6] = mesh.add_vertex(MyMesh::Point(1, 1, -1));
- vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
- // generate (quadrilateral) faces
- std::vector<MyMesh::VertexHandle> face_vhandles;
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[0]);
- face_vhandles.push_back(vhandle[1]);
- face_vhandles.push_back(vhandle[2]);
- face_vhandles.push_back(vhandle[3]);
- mesh.add_face(face_vhandles);
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[7]);
- face_vhandles.push_back(vhandle[6]);
- face_vhandles.push_back(vhandle[5]);
- face_vhandles.push_back(vhandle[4]);
- mesh.add_face(face_vhandles);
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[1]);
- face_vhandles.push_back(vhandle[0]);
- face_vhandles.push_back(vhandle[4]);
- face_vhandles.push_back(vhandle[5]);
- mesh.add_face(face_vhandles);
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[2]);
- face_vhandles.push_back(vhandle[1]);
- face_vhandles.push_back(vhandle[5]);
- face_vhandles.push_back(vhandle[6]);
- mesh.add_face(face_vhandles);
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[3]);
- face_vhandles.push_back(vhandle[2]);
- face_vhandles.push_back(vhandle[6]);
- face_vhandles.push_back(vhandle[7]);
- mesh.add_face(face_vhandles);
- face_vhandles.clear();
- face_vhandles.push_back(vhandle[0]);
- face_vhandles.push_back(vhandle[3]);
- face_vhandles.push_back(vhandle[7]);
- face_vhandles.push_back(vhandle[4]);
- mesh.add_face(face_vhandles);
- // write mesh to output.obj
- try
- {
- if (!OpenMesh::IO::write_mesh(mesh, "output.off"))
- {
- std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;
- return 1;
- }
- }
- catch (std::exception& x)
- {
- std::cerr << x.what() << std::endl;
- return 1;
- }
- return 0;
- }
出现的问题:第一次执行程序时“计算机中丢失openmeshcore.dll,请重新安装。。。”
可以看到其实是有openmeshcore.dll这个文件的,所以是环境变量配置的问题。
(在编译链接c++带有dll库的应用程序时,如果dll所在的目录和可执行文件所在的目录不在同一个目录,或者是不在系统的环境变量path所在的目录内,这时一般要求修改系统的环境变量,或者将dll库复制到exe文件所在的目录,但是这样感觉不好,可以采用另一种方便的方法,就是通过修改修改vs项目配置里面的环境变量:
xxx具体项目 -> 属性 -> 配置属性 -> 调试 ->环境变量(Environment) -> 添加 ->path=%path%;..\bin\;
其中../bin/就是添加的环境变量,然后项目就会自动在..\bin\查找是否有dll文件)设置好环境变量后重新生成解决方案(我是重开vs)问题解决!
3.执行完成后会在工程目录里面生成一个output.off文件
使用meshviewer查看如下所示
注:mesh viewer在百度即可下载,下载下来是一个压缩包,无需安装解压后找到可执行程序即可打开output.off文件。
注意:一定要在配置属性之前选定模式和位数,然后在进行对应的配置。因为配置完成之后,如果再去修改模式或位数,之前的配置就没了,又需要对应的重新配置