#ifndef slic3r_Format_OBJ_hpp_ #define slic3r_Format_OBJ_hpp_ #include "libslic3r/Color.hpp" #include "objparser.hpp" #include namespace Slic3r { class TriangleMesh; class Model; class ModelObject; // Load an OBJ file into a provided model. struct ObjInfo { std::vector vertex_colors; std::vector face_colors; bool is_single_mtl{false}; std::string lost_material_name{""}; std::vector> uvs; std::string obj_dircetory; std::map pngs; std::unordered_map uv_map_pngs; bool has_uv_png{false}; std::vector usemtls; // material spans, for texture import }; struct ObjDialogInOut { // input:colors array std::vector input_colors; bool is_single_color{false}; // colors array output: std::vector filament_ids; unsigned char first_extruder_id; bool deal_vertex_color; Model * model{nullptr}; std::string lost_material_name{""}; }; typedef std::function ObjImportColorFn; extern bool load_obj(const char *path, TriangleMesh *mesh, ObjInfo &vertex_colors, std::string &message, ObjParser::MtlData *out_mtl = nullptr); extern bool load_obj(const char *path, Model *model, ObjInfo &vertex_colors, std::string &message, const char *object_name = nullptr, ObjParser::MtlData *out_mtl = nullptr); struct TexturedMesh; // Build a TexturedMesh (vertices + per-face UVs + the texture files named by map_Kd) from a // parsed OBJ plus its material table, so the texture-to-color importer can sample face colours. extern bool obj_to_textured_mesh( const ObjInfo& obj_info, const indexed_triangle_set& its, const ObjParser::MtlData& mtl_data, const std::string& obj_directory, TexturedMesh& out); extern bool store_obj(const char *path, TriangleMesh *mesh); extern bool store_obj(const char *path, ModelObject *model); extern bool store_obj(const char *path, Model *model); }; // namespace Slic3r #endif /* slic3r_Format_OBJ_hpp_ */