in src/PreprocessMesh.cpp [228:280]
void writeSDFToPLY(
std::vector<Eigen::Vector3f>& xyz,
std::vector<float>& sdfs,
std::string filename,
bool neg_only = true,
bool pos_only = false) {
int num_verts;
if (neg_only) {
num_verts = 0;
for (int i = 0; i < (int)sdfs.size(); i++) {
float s = sdfs[i];
if (s <= 0)
num_verts++;
}
} else if (pos_only) {
num_verts = 0;
for (int i = 0; i < (int)sdfs.size(); i++) {
float s = sdfs[i];
if (s >= 0)
num_verts++;
}
} else {
num_verts = xyz.size();
}
std::ofstream plyFile;
plyFile.open(filename);
plyFile << "ply\n";
plyFile << "format ascii 1.0\n";
plyFile << "element vertex " << num_verts << "\n";
plyFile << "property float x\n";
plyFile << "property float y\n";
plyFile << "property float z\n";
plyFile << "property uchar red\n";
plyFile << "property uchar green\n";
plyFile << "property uchar blue\n";
plyFile << "end_header\n";
for (int i = 0; i < (int)sdfs.size(); i++) {
Eigen::Vector3f v = xyz[i];
float sdf = sdfs[i];
bool neg = (sdf <= 0);
bool pos = (sdf >= 0);
if (neg)
sdf = -sdf;
int sdf_i = std::min((int)(sdf * 255), 255);
if (!neg_only && pos)
plyFile << v[0] << " " << v[1] << " " << v[2] << " " << 0 << " " << 0 << " " << sdf_i << "\n";
if (!pos_only && neg)
plyFile << v[0] << " " << v[1] << " " << v[2] << " " << sdf_i << " " << 0 << " " << 0 << "\n";
}
plyFile.close();
}