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 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
examples 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
EPS.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 ani în urmă
ONE.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
PI.h abd98b398b added a bunch of quaternion math, vector math and trackball 14 ani în urmă
ReAntTweakBar.h 47136a5d14 get_seconds example, still not sure why ctime is not working with GLUT... 14 ani în urmă
Timer.h 32c51f33fa 14 ani în urmă
ZERO.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
adjacency_list.h 8788e9198e 14 ani în urmă
adjacency_matrix.h 3a7e857da3 added reserves to functions using DynamicSparseMatrix, where appropriate 14 ani în urmă
axis_angle_to_quat.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
basename.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
canonical_quaternions.h 4dfd20d527 Templatized (or began to at least) canonical_quaternions 14 ani în urmă
cocoa_key_to_anttweakbar_key.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
colon.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
concat.h 2ec5601563 added missing inlines 14 ani în urmă
cotangent.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
cotmatrix.h 3a7e857da3 added reserves to functions using DynamicSparseMatrix, where appropriate 14 ani în urmă
create_index_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
create_mesh_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
create_shader_program.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
create_vector_vbo.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
cross.h abd98b398b added a bunch of quaternion math, vector math and trackball 14 ani în urmă
destroy_shader_program.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
diag.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
dirname.h 0289f43a50 missing inlines and organization 14 ani în urmă
dot.h abd98b398b added a bunch of quaternion math, vector math and trackball 14 ani în urmă
edges.h 19fc88d42f bug fixes and clean up for cotmatrix, 14 ani în urmă
edgetopology.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
file_contents_as_string.h 57d8e1844b added file -> string function and example, 14 ani în urmă
file_exists.h 8fc2d636da Added more php-like file permissions/existence checkers. And an example which tests them against their php cousins. 14 ani în urmă
find.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
full.h a62d483b1c colon, full and speye functions to match matlab 14 ani în urmă
get_seconds.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
get_seconds_hires.h 62b8064d82 added a fallback in get_seconds_hires to get_seconds 14 ani în urmă
gl_type_size.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
grad.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
is_dir.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
is_file.h 8fc2d636da Added more php-like file permissions/existence checkers. And an example which tests them against their php cousins. 14 ani în urmă
is_readable.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
is_symmetric.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
is_writable.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
ismanifold.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
list_to_matrix.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
load_shader.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
lu_lagrange.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
mat_max.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
mat_min.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
material_colors.h 67da1c1e96 added header files: 14 ani în urmă
matlab-to-eigen.html 8df094f330 cleaned up verbose outputs 14 ani în urmă
matlabinterface.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
max_size.h 84e0ce7b52 replaced buggy readOBJ with wrapper to vector of vectors readobj 14 ani în urmă
min_quad_dense.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
min_quad_with_fixed.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
min_size.h 84e0ce7b52 replaced buggy readOBJ with wrapper to vector of vectors readobj 14 ani în urmă
moveFV.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
mvc.h 9ad2006bba WA cleanup 14 ani în urmă
normalize_quat.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 ani în urmă
normalize_rows.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
orth.h 9ad2006bba WA cleanup 14 ani în urmă
pathinfo.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
per_face_normals.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
per_vertex_normals.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
plot_vector.h 32c51f33fa 14 ani în urmă
point_in_circle.h b7e523aec7 project/unproject wrappers, 2d point in circle test and eigen affine matrix example 14 ani în urmă
pos.h d288720c64 14 ani în urmă
print_gl_get.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
print_ijv.h 19fc88d42f bug fixes and clean up for cotmatrix, 14 ani în urmă
print_program_info_log.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
print_shader_info_log.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
project.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
quat_conjugate.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 ani în urmă
quat_mult.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 ani în urmă
quat_to_mat.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
read.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
readDMAT.h b7e523aec7 project/unproject wrappers, 2d point in circle test and eigen affine matrix example 14 ani în urmă
readMESH.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
readOBJ.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
readOFF.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
readme.txt 3a7e857da3 added reserves to functions using DynamicSparseMatrix, where appropriate 14 ani în urmă
removeDuplicates.h 5c7be51e2e 14 ani în urmă
removeUnreferenced.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
reorder.h 206e6bc0eb fixed some template issues and strict warnings, gl type to string, type to size, matlab to eigen html doc 14 ani în urmă
repdiag.h 3a7e857da3 added reserves to functions using DynamicSparseMatrix, where appropriate 14 ani în urmă
repmat.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
report_gl_error.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
rotate_by_quat.h f9c9115e03 Templated the quaternion functions and EPS, a few more quaternion functions, fixed prototypes and header defines in writeOBJ 14 ani în urmă
rows_to_matrix.h 84e0ce7b52 replaced buggy readOBJ with wrapper to vector of vectors readobj 14 ani în urmă
slice.h 1e33670556 fixed bug in slice>sparse 14 ani în urmă
slice_into.h 8302a36e26 slice into 14 ani în urmă
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 ani în urmă
sort.h 19fc88d42f bug fixes and clean up for cotmatrix, 14 ani în urmă
sparse.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
speye.h a62d483b1c colon, full and speye functions to match matlab 14 ani în urmă
stdin_to_temp.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
sum.h 6cc82477d7 ONE variables, cotangent for each edge of each face, snotes in zum 14 ani în urmă
trackball.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
transpose_blocks.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
tt.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
uniform_type_to_string.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
unproject.h 7e8e5ed1f1 fix unix dependencies and added ifdef include windows around opengl includes 14 ani în urmă
verbose.h 0abb7a4d3c changed interfaces of read*.h to return bool, 14 ani în urmă
vf.h 2b226c2772 WA with typedef for floats -- does not crash (smooth minimum does not produce nan's), but still issues with eigen svd 14 ani în urmă
write.h 58561af806 fixed bug in write.h and writeOFF.h 14 ani în urmă
writeDMAT.h 8df094f330 cleaned up verbose outputs 14 ani în urmă
writeOBJ.h f803e13d06 fixed min_quad_* to handle non positive definite systems (though falls back on dense decomposition) 14 ani în urmă
writeOFF.h 58561af806 fixed bug in write.h and writeOFF.h 14 ani în urmă

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