Extension of libigl which allows to also read the texture of wrl-files in Python as igl.read_triangle_mesh(wrFilePath, V, F, TC)

jalec c66820d5e3 clean up all around 13 年 前
examples 618e148359 cat and .mesh reader writer 13 年 前
EPS.h c66820d5e3 clean up all around 13 年 前
ONE.h c66820d5e3 clean up all around 13 年 前
PI.h 9f4b4acd36 per corner normals, texture mapping 13 年 前
ReAntTweakBar.h c66820d5e3 clean up all around 13 年 前
Timer.h c66820d5e3 clean up all around 13 年 前
ZERO.h c66820d5e3 clean up all around 13 年 前
adjacency_list.h c66820d5e3 clean up all around 13 年 前
adjacency_matrix.h 3a7e857da3 added reserves to functions using DynamicSparseMatrix, where appropriate 13 年 前
all_pairs_distances.h c66820d5e3 clean up all around 13 年 前
axis_angle_to_quat.h 8df094f330 cleaned up verbose outputs 13 年 前
basename.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
canonical_quaternions.h 4dfd20d527 Templatized (or began to at least) canonical_quaternions 14 年 前
cat.h c66820d5e3 clean up all around 13 年 前
cocoa_key_to_anttweakbar_key.h c66820d5e3 clean up all around 13 年 前
colon.h 8df094f330 cleaned up verbose outputs 13 年 前
concat.h 2ec5601563 added missing inlines 13 年 前
cotangent.h c66820d5e3 clean up all around 13 年 前
cotmatrix.h 4be1028505 Fixed and generalized cotmatrix, write .mesh file, cat like matlab's cat 13 年 前
create_index_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
create_mesh_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
create_shader_program.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
create_vector_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
cross.h abd98b398b added a bunch of quaternion math, vector math and trackball 14 年 前
destroy_shader_program.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
diag.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
dirname.h 0289f43a50 missing inlines and organization 14 年 前
dot.h abd98b398b added a bunch of quaternion math, vector math and trackball 14 年 前
edges.h c976e54f83 upsample, limit faces to subset of indices, reorder vertex and face list so face'd indices are first, all pairs distances 13 年 前
edgetopology.h c66820d5e3 clean up all around 13 年 前
faces_first.h c66820d5e3 clean up all around 13 年 前
file_contents_as_string.h c66820d5e3 clean up all around 13 年 前
file_exists.h 8fc2d636da Added more php-like file permissions/existence checkers. And an example which tests them against their php cousins. 14 年 前
find.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
full.h a62d483b1c colon, full and speye functions to match matlab 13 年 前
get_seconds.h c66820d5e3 clean up all around 13 年 前
get_seconds_hires.h c66820d5e3 clean up all around 13 年 前
gl_type_size.h c66820d5e3 clean up all around 13 年 前
grad.h c66820d5e3 clean up all around 13 年 前
is_border_vertex.h c66820d5e3 clean up all around 13 年 前
is_dir.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
is_file.h 8fc2d636da Added more php-like file permissions/existence checkers. And an example which tests them against their php cousins. 14 年 前
is_manifold.h c66820d5e3 clean up all around 13 年 前
is_readable.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
is_symmetric.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
is_writable.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
limit_faces.h c66820d5e3 clean up all around 13 年 前
list_to_matrix.h c66820d5e3 clean up all around 13 年 前
load_shader.h c66820d5e3 clean up all around 13 年 前
lu_lagrange.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
mat_max.h c66820d5e3 clean up all around 13 年 前
mat_min.h c66820d5e3 clean up all around 13 年 前
material_colors.h c66820d5e3 clean up all around 13 年 前
matlab-to-eigen.html 618e148359 cat and .mesh reader writer 13 年 前
matlabinterface.h c66820d5e3 clean up all around 13 年 前
max_size.h c66820d5e3 clean up all around 13 年 前
min_quad_dense.h c66820d5e3 clean up all around 13 年 前
min_quad_with_fixed.h 8df094f330 cleaned up verbose outputs 13 年 前
min_size.h c66820d5e3 clean up all around 13 年 前
mode.h c66820d5e3 clean up all around 13 年 前
moveFV.h c66820d5e3 clean up all around 13 年 前
mvc.h c66820d5e3 clean up all around 13 年 前
normalize_quat.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 年 前
normalize_rows.h c66820d5e3 clean up all around 13 年 前
orth.h c66820d5e3 clean up all around 13 年 前
pathinfo.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
per_corner_normals.h 9f4b4acd36 per corner normals, texture mapping 13 年 前
per_face_normals.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
per_vertex_normals.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
plot_vector.h c66820d5e3 clean up all around 13 年 前
point_in_circle.h b7e523aec7 project/unproject wrappers, 2d point in circle test and eigen affine matrix example 14 年 前
pos.h c66820d5e3 clean up all around 13 年 前
print_gl_get.h c66820d5e3 clean up all around 13 年 前
print_ijv.h 19fc88d42f bug fixes and clean up for cotmatrix, 14 年 前
print_program_info_log.h c66820d5e3 clean up all around 13 年 前
print_shader_info_log.h c66820d5e3 clean up all around 13 年 前
project.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
quat_conjugate.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 年 前
quat_mult.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 年 前
quat_to_mat.h c66820d5e3 clean up all around 13 年 前
read.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
readDMAT.h b7e523aec7 project/unproject wrappers, 2d point in circle test and eigen affine matrix example 14 年 前
readMESH.h 618e148359 cat and .mesh reader writer 13 年 前
readOBJ.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 13 年 前
readOFF.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
readme.txt c66820d5e3 clean up all around 13 年 前
removeDuplicates.h c66820d5e3 clean up all around 13 年 前
removeUnreferenced.h c66820d5e3 clean up all around 13 年 前
reorder.h 206e6bc0eb fixed some template issues and strict warnings, gl type to string, type to size, matlab to eigen html doc 14 年 前
repdiag.h 4be1028505 Fixed and generalized cotmatrix, write .mesh file, cat like matlab's cat 13 年 前
repmat.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
report_gl_error.h c66820d5e3 clean up all around 13 年 前
rotate_by_quat.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 年 前
rows_to_matrix.h c66820d5e3 clean up all around 13 年 前
slice.h 1e33670556 fixed bug in slice>sparse 13 年 前
slice_into.h 8302a36e26 slice into 13 年 前
snap_to_canonical_view_quat.h 206e6bc0eb fixed some template issues and strict warnings, gl type to string, type to size, matlab to eigen html doc 14 年 前
sort.h c66820d5e3 clean up all around 13 年 前
sparse.h 8df094f330 cleaned up verbose outputs 13 年 前
speye.h c66820d5e3 clean up all around 13 年 前
stdin_to_temp.h c66820d5e3 clean up all around 13 年 前
sum.h c66820d5e3 clean up all around 13 年 前
texture_from_tga.h c66820d5e3 clean up all around 13 年 前
tga.h c66820d5e3 clean up all around 13 年 前
todos.txt c66820d5e3 clean up all around 13 年 前
trackball.h c66820d5e3 clean up all around 13 年 前
transpose_blocks.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
tt.h c66820d5e3 clean up all around 13 年 前
uniform_type_to_string.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
unproject.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 13 年 前
upsample.h c66820d5e3 clean up all around 13 年 前
verbose.h 0abb7a4d3c changed interfaces of read*.h to return bool, 14 年 前
vf.h c976e54f83 upsample, limit faces to subset of indices, reorder vertex and face list so face'd indices are first, all pairs distances 13 年 前
write.h c66820d5e3 clean up all around 13 年 前
writeDMAT.h 8df094f330 cleaned up verbose outputs 13 年 前
writeMESH.h 8bcd85c89d fixed warnings in writeMESH 13 年 前
writeOBJ.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 13 年 前
writeOFF.h c66820d5e3 clean up all around 13 年 前

readMESH.h

#ifndef IGL_READMESH_H
#define IGL_READMESH_H

#include
#include

namespace igl
{
// load a tetrahedral volume mesh from a .mesh file
//
// Templates:
// Scalar type for positions and vectors (will be read as double and cast
// to Scalar)
// Index type for indices (will be read as int and cast to Index)
// Input:
// mesh_file_name path of .mesh file
// Outputs:
// V double matrix of vertex positions #V by 3
// T #T list of tet indices into vertex positions
// F #F list of face indices into vertex positions
template
inline bool readMESH(
const std::string mesh_file_name,
std::vector > & V,
std::vector > & T,
std::vector > & F);

// Input:
// mesh_file_name path of .mesh file
// Outputs:
// V eigen double matrix #V by 3
// T eigen int matrix #T by 4
// F eigen int matrix #F by 3
inline bool readMESH(
const std::string str,
Eigen::MatrixXd& V,
Eigen::MatrixXi& T,
Eigen::MatrixXi& F);
}

// Implementation
#include
#include

template
inline bool igl::readMESH(
const std::string mesh_file_name,
std::vector > & V,
std::vector > & T,
std::vector > & F)
{
using namespace std;
using namespace igl;
FILE * mesh_file = fopen(mesh_file_name.c_str(),"r");
if(NULL==mesh_file)
{
fprintf(stderr,"IOError: %s could not be opened...",mesh_file_name.c_str());
return false;
}
#ifndef LINE_MAX
# define LINE_MAX 2048
#endif
char line[LINE_MAX];
bool still_comments;
V.clear();
T.clear();
F.clear();

// eat comments at beginning of file
still_comments= true;
while(still_comments)
{
fgets(line,LINE_MAX,mesh_file);
still_comments = (line[0] == '#' || line[0] == '\n');
}

char str[LINE_MAX];
sscanf(line," %s",str);
// check that first word is MeshVersionFormatted
if(0!=strcmp(str,"MeshVersionFormatted"))
{
fprintf(stderr,
"Error: first word should be MeshVersionFormatted not %s\n",str);
fclose(mesh_file);
return false;
}
int one = -1;
if(2 != sscanf(line,"%s %d",str,&one))
{
// 1 appears on next line?
fscanf(mesh_file," %d",&one);
}
if(one != 1)
{
fprintf(stderr,"Error: second word should be 1 not %d\n",one);
fclose(mesh_file);
return false;
}

// eat comments
still_comments= true;
while(still_comments)
{
fgets(line,LINE_MAX,mesh_file);
still_comments = (line[0] == '#' || line[0] == '\n');
}

sscanf(line," %s",str);
// check that third word is Dimension
if(0!=strcmp(str,"Dimension"))
{
fprintf(stderr,"Error: third word should be Dimension not %s\n",str);
fclose(mesh_file);
return false;
}
int three = -1;
if(2 != sscanf(line,"%s %d",str,&three))
{
// 1 appears on next line?
fscanf(mesh_file," %d",&three);
}
if(three != 3)
{
fprintf(stderr,"Error: only Dimension 3 supported not %d\n",three);
fclose(mesh_file);
return false;
}

// eat comments
still_comments= true;
while(still_comments)
{
fgets(line,LINE_MAX,mesh_file);
still_comments = (line[0] == '#' || line[0] == '\n');
}

sscanf(line," %s",str);
// check that fifth word is Vertices
if(0!=strcmp(str,"Vertices"))
{
fprintf(stderr,"Error: fifth word should be Vertices not %s\n",str);
fclose(mesh_file);
return false;
}
size_t number_of_vertices;
if(1 != fscanf(mesh_file," %ld",&number_of_vertices))
{
fprintf(stderr,"Error: expecting number of vertices...\n");
fclose(mesh_file);
return false;
}
// allocate space for vertices
V.resize(number_of_vertices,vector(3,0));
size_t extra;
for(size_t i = 0;i {
double x,y,z;
if(4 != fscanf(mesh_file," %lg %lg %lg %ld",&x,&y,&z,&extra))
{
fprintf(stderr,"Error: expecting vertex position...\n");
fclose(mesh_file);
return false;
}
V[i][0] = x;
V[i][1] = y;
V[i][2] = z;
}

// eat comments
still_comments= true;
while(still_comments)
{
fgets(line,LINE_MAX,mesh_file);
still_comments = (line[0] == '#' || line[0] == '\n');
}

sscanf(line," %s",str);
// check that sixth word is Triangles
if(0!=strcmp(str,"Triangles"))
{
fprintf(stderr,"Error: sixth word should be Triangles not %s\n",str);
fclose(mesh_file);
return false;
}
size_t number_of_triangles;
if(1 != fscanf(mesh_file," %ld",&number_of_triangles))
{
fprintf(stderr,"Error: expecting number of triangles...\n");
fclose(mesh_file);
return false;
}
// allocate space for triangles
F.resize(number_of_triangles,vector(3));
// triangle indices
size_t tri[3];
for(size_t i = 0;i {
if(4 != fscanf(mesh_file," %ld %ld %ld %ld",&tri[0],&tri[1],&tri[2],&extra))
{
printf("Error: expecting triangle indices...\n");
return false;
}
for(size_t j = 0;j<3;j++)
{
F[i][j] = tri[j]-1;
}
}

// eat comments
still_comments= true;
while(still_comments)
{
fgets(line,LINE_MAX,mesh_file);
still_comments = (line[0] == '#' || line[0] == '\n');
}

sscanf(line," %s",str);
// check that sixth word is Triangles
if(0!=strcmp(str,"Tetrahedra"))
{
fprintf(stderr,"Error: seventh word should be Tetrahedra not %s\n",str);
fclose(mesh_file);
return false;
}
size_t number_of_tetrahedra;
if(1 != fscanf(mesh_file," %ld",&number_of_tetrahedra))
{
fprintf(stderr,"Error: expecting number of tetrahedra...\n");
fclose(mesh_file);
return false;
}
// allocate space for tetrahedra
T.resize(number_of_tetrahedra,vector(4));
// tet indices
size_t a,b,c,d;
for(size_t i = 0;i {
if(5 != fscanf(mesh_file," %ld %ld %ld %ld %ld",&a,&b,&c,&d,&extra))
{
fprintf(stderr,"Error: expecting tetrahedra indices...\n");
fclose(mesh_file);
return false;
}
T[i][0] = a-1;
T[i][1] = b-1;
T[i][2] = c-1;
T[i][3] = d-1;
}
fclose(mesh_file);
return true;
}

#include
#include "list_to_matrix.h"

inline bool igl::readMESH(
const std::string str,
Eigen::MatrixXd& V,
Eigen::MatrixXi& T,
Eigen::MatrixXi& F)
{
std::vector > vV,vT,vF;
bool success = igl::readMESH(str,vV,vT,vF);
if(!success)
{
// readOBJ(str,vV,vTC,vN,vF,vFTC,vFN) should have already printed an error
// message to stderr
return false;
}
bool V_rect = igl::list_to_matrix(vV,V);
if(!V_rect)
{
// igl::list_to_matrix(vV,V) already printed error message to std err
return false;
}
bool T_rect = igl::list_to_matrix(vT,T);
if(!T_rect)
{
// igl::list_to_matrix(vT,T) already printed error message to std err
return false;
}
bool F_rect = igl::list_to_matrix(vF,F);
if(!F_rect)
{
// igl::list_to_matrix(vF,F) already printed error message to std err
return false;
}
assert(V.cols() == 3);
assert(T.cols() == 4);
assert(F.cols() == 3);
return true;
}

#endif