mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-15 17:42:14 +00:00
Fixing dep build script on Windows and removing some warnings. Use bundled igl by default. Not building with the dependency scripts if not explicitly stated. This way, it will stay in Fix the libigl patch to include C source files in header only mode.
107 lines
2.3 KiB
C++
107 lines
2.3 KiB
C++
#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;
|
|
}
|