📅 2011-Aug-18 ⬩ ✍️ Ashwin Nanjappa ⬩ 🏷️ cpp, mesh, ply ⬩ 📚 Archive
The PLY file format is one of the simplest ways to read and write a 3D mesh. There are a few libraries which can be used to read or write PLY files from your code.
However, if you are dealing with a simple triangulated 3D mesh, there is no need to use a library. Writing such a mesh out to a PLY file from your code is very simple. Here is sample code in C++:
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
struct Point
{float _p[ 3 ];
};
typedef vector< Point > PointVec;
struct Triangle
{float _v[ 3 ];
};
typedef vector< Triangle > TriangleVec;
void writeMeshToPLYFile
(const PointVec& pointVec,
const TriangleVec& triangleVec,
const string& outFilename
)
{
ofstream outFile( outFilename.c_str() );
if ( !outFile )
{"Error opening output file: " << outFilename << "!" << endl;
cerr << 1 );
exit(
}
////
// Header
////
const int pointNum = ( int ) pointVec.size();
const int triangleNum = ( int ) triangleVec.size();
"ply" << endl;
outFile << "format ascii 1.0" << endl;
outFile << "element vertex " << pointNum << endl;
outFile << "property float x" << endl;
outFile << "property float y" << endl;
outFile << "property float z" << endl;
outFile << "element face " << triangleNum << endl;
outFile << "property list uchar int vertex_index" << endl;
outFile << "end_header" << endl;
outFile <<
////
// Points
////
for ( int pi = 0; pi < pointNum; ++pi )
{const Point& point = pointVec[ pi ];
for ( int vi = 0; vi < 3; ++vi )
" ";
outFile << point._p[ vi ] <<
outFile << endl;
}
////
// Triangles
////
for ( int ti = 0; ti < triangleNum; ++ti )
{const Triangle& triangle = triangleVec[ ti ];
"3 ";
outFile <<
for ( int vi = 0; vi < 3; ++vi )
" ";
outFile << triangle._v[ vi ] <<
outFile << endl;
}
return;
}