3D三角形网格模型补洞源代码


3D三角形网格模型补洞算法源代码,原为linux平台下编译,现已改为Windows环境下;由于使用了C++11新特性,需通过VS2013或更高版本编译。
资源截图
代码片段和文件信息
#pragma warning(disable:4996)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using Eigen::VectorXi;
using Eigen::MatrixXd;
using Eigen::MatrixXi;
using Eigen::VectorXd;
typedef Eigen::SparseMatrix SpMat;
typedef Eigen::Triplet Tri;

void printHelpExit() {
printf(“Invalid command line arguments specified!

“);

printf(“USAGE: hole_fixer [options]

“);

printf(“OPTIONS: 
“);

printf(“  -in target mesh file in .off-format with a hole
“);
printf(“  -out output mesh file in .off-format
“);
printf(“  -outfaces How many faces to decimate the mesh to
“);
printf(“  -upsample How much upsampling to use when creating the patch
“);

exit(1);
}

const char* findToken(const char* param int argc char* argv[]) {
const char* token = nullptr;
for (int i = 0; i < argc; ++i) {
if (strcmp(argv[i] param) == 0) {
if (i + 1 < argc) {
token = argv[i + 1];
break;
}
}
}

if (token == nullptr) {
printf(“Could not find command-line parameter %s
“ param);
return nullptr;
}

return token;
}

const char* parseStringParam(const char* param int argc char* argv[]) {
const char* token = findToken(param argc argv);
return token;
}

bool parseIntParam(const char* param int argc char* argv[] unsigned int& out) {
const char* token = findToken(param argc argv);
if (token == nullptr)
return false;

int r = sscanf(token “%u“ &out);
if (r != 1 || r == EOF) {
return false;
}
else {
return true;
}
}

int main(/*int argc char *argv[]*/)
{

//
// command line parsing.
//
int argc = 2;
char* argv[] = { “hole_fixer“ “-in“ “bunnyhole.off“ “-out“ “out.off“ “-outfaces“ “8000“ “-upsample“ “2“ };
const char* inFile = “bunnyhole.off“;
/*const char* inFile = parseStringParam(“-in“ argc argv);*/
if (inFile == nullptr) printHelpExit();
const char* outFile = “example.off“;
//const char* outFile = parseStringParam(“-out“ argc argv);
if (outFile == nullptr) printHelpExit();

unsigned int outFacesN = 8000;
//if (!parseIntParam(“-outfaces“ argc argv outFacesN)) printHelpExit();

unsigned int upsampleN = 2;
//if (!parseIntParam(“-upsample“ argc argv upsampleN)) printHelpExit();

// original mesh vertices and indices. This is the original mesh which has a hole.
MatrixXd originalV;
MatrixXi originalF;

if (!igl::readOFF(inFile originalV originalF)) {
printHelpExit();
}
VectorXi originalLoop; // indices of the boundary of the hole. 
igl::boundary_loop(originalF originalLoop);


if (originalLoop.size() == 0) {
printf(“Mesh has no hole!“);
printHelpExit();
}

// upsample the original mesh. this makes fusing the original mesh with the patch much easier.
igl::upsample(Eigen::MatrixXd(originalV) Eigen::MatrixXi(originalF) originalV

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     40448  2018-06-28 21:41  MeshFixer.vsMeshFixerv14.suo

     文件     365818  2018-02-27 05:24  MeshFixerunnyhole.off

     文件    2189824  2018-06-28 21:36  MeshFixerDebugMeshFixer.exe

     文件   12838568  2018-06-28 21:36  MeshFixerDebugMeshFixer.ilk

     文件   50393088  2018-06-28 21:36  MeshFixerDebugMeshFixer.pdb

     文件     365818  2018-02-27 05:24  MeshFixerhole_fixer-masterunnyhole.off

     文件        137  2018-02-27 05:24  MeshFixerhole_fixer-masterCMakeLists.txt

     文件     338153  2018-02-27 05:24  MeshFixerhole_fixer-masterimgunnymontage.png

     文件     221121  2018-02-27 05:24  MeshFixerhole_fixer-masterimgspheremontage.png

     文件        304  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenArray

     文件        775  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenCholesky

     文件       1670  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenCholmodSupport

     文件        607  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenCMakeLists.txt

     文件      12826  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenCore

     文件        122  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenDense

     文件         37  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenEigen

     文件       3295  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenEigen2Support

     文件       1394  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenEigenvalues

     文件       1605  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenGeometry

     文件        580  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenHouseholder

     文件       1594  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenIterativeLinearSolvers

     文件        645  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenJacobi

     文件        712  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenLeastSquares

     文件        983  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenLU

     文件        697  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenMetisSupport

     文件       2189  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenOrderingMethods

     文件        864  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenPardisoSupport

     文件       1467  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenPaStiXSupport

     文件        926  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenQR

     文件        637  2018-02-27 05:24  MeshFixerhole_fixer-masterlibigleigenEigenQtAlignedMalloc

............此处省略1697个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)