mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-12-10 15:28:45 -07:00
Merged branch 'dev_native' into lm_sla_supports_auto
Added igl library files
This commit is contained in:
commit
7681d00ee5
2865 changed files with 142806 additions and 22325 deletions
106
src/igl/guess_extension.cpp
Normal file
106
src/igl/guess_extension.cpp
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
#include "guess_extension.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "is_stl.h"
|
||||
#include "ply.h"
|
||||
|
||||
IGL_INLINE void igl::guess_extension(FILE * fp, std::string & guess)
|
||||
{
|
||||
const auto is_off = [](FILE * fp)-> bool
|
||||
{
|
||||
char header[1000];
|
||||
const std::string OFF("OFF");
|
||||
const std::string NOFF("NOFF");
|
||||
const std::string COFF("COFF");
|
||||
bool f = (fscanf(fp,"%s\n",header)==1 && (
|
||||
std::string(header).compare(0, OFF.length(), OFF)==0 ||
|
||||
std::string(header).compare(0, COFF.length(), COFF)==0 ||
|
||||
std::string(header).compare(0,NOFF.length(),NOFF)==0));
|
||||
rewind(fp);
|
||||
return f;
|
||||
};
|
||||
const auto is_ply = [](FILE * ply_file) -> bool
|
||||
{
|
||||
int nelems;
|
||||
char ** elem_names;
|
||||
igl::ply::PlyFile * in_ply = igl::ply::ply_read(ply_file,&nelems,&elem_names);
|
||||
if(in_ply==NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
free(in_ply);
|
||||
rewind(ply_file);
|
||||
return true;
|
||||
};
|
||||
const auto is_wrl = [](FILE * wrl_file)->bool
|
||||
{
|
||||
bool still_comments = true;
|
||||
char line[1000];
|
||||
std::string needle("point [");
|
||||
std::string haystack;
|
||||
while(still_comments)
|
||||
{
|
||||
if(fgets(line,1000,wrl_file) == NULL)
|
||||
{
|
||||
rewind(wrl_file);
|
||||
return false;
|
||||
}
|
||||
haystack = std::string(line);
|
||||
still_comments = std::string::npos == haystack.find(needle);
|
||||
}
|
||||
rewind(wrl_file);
|
||||
return true;
|
||||
};
|
||||
const auto is_mesh = [](FILE * mesh_file )->bool
|
||||
{
|
||||
char line[2048];
|
||||
// eat comments at beginning of file
|
||||
bool still_comments= true;
|
||||
while(still_comments)
|
||||
{
|
||||
if(fgets(line,2048,mesh_file) == NULL)
|
||||
{
|
||||
rewind(mesh_file);
|
||||
return false;
|
||||
}
|
||||
still_comments = (line[0] == '#' || line[0] == '\n');
|
||||
}
|
||||
char str[2048];
|
||||
sscanf(line," %s",str);
|
||||
// check that first word is MeshVersionFormatted
|
||||
if(0!=strcmp(str,"MeshVersionFormatted"))
|
||||
{
|
||||
rewind(mesh_file);
|
||||
return false;
|
||||
}
|
||||
rewind(mesh_file);
|
||||
return true;
|
||||
};
|
||||
guess = "obj";
|
||||
if(is_mesh(fp))
|
||||
{
|
||||
guess = "mesh";
|
||||
}else if(is_off(fp))
|
||||
{
|
||||
guess = "off";
|
||||
}else if(is_ply(fp))
|
||||
{
|
||||
guess = "ply";
|
||||
}else if(igl::is_stl(fp))
|
||||
{
|
||||
guess = "stl";
|
||||
}else if(is_wrl(fp))
|
||||
{
|
||||
guess = "wrl";
|
||||
}
|
||||
// else obj
|
||||
rewind(fp);
|
||||
}
|
||||
|
||||
IGL_INLINE std::string igl::guess_extension(FILE * fp)
|
||||
{
|
||||
std::string guess;
|
||||
guess_extension(fp,guess);
|
||||
return guess;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue