%module{Slic3r::XS}; %{ #include #include "libslic3r/Print.hpp" %} %name{Slic3r::Print} class Print { Print(); ~Print(); Ref model() %code%{ RETVAL = const_cast(&THIS->model()); %}; Ref config() %code%{ RETVAL = const_cast(static_cast(&THIS->config())); %}; double total_used_filament() %code%{ RETVAL = THIS->print_statistics().total_used_filament; %}; void auto_assign_extruders(ModelObject* model_object); std::string output_filepath(std::string path = "") %code%{ try { RETVAL = THIS->output_filepath(path); } catch (std::exception& e) { croak("%s\n", e.what()); } %}; bool apply(Model *model, DynamicPrintConfig* config) %code%{ // Touching every config as the Perl bindings does not correctly export ModelConfig, // therefore the configs have often invalid timestamps. for (auto obj : model->objects) { obj->config.touch(); for (auto vol : obj->volumes) vol->config.touch(); } for (auto mat : model->materials) mat.second->config.touch(); RETVAL = THIS->apply(*model, *config); %}; std::vector extruders() const; int validate() %code%{ std::string err = THIS->validate(); if (! err.empty()) croak("Configuration is not valid: %s\n", err.c_str()); RETVAL = 1; %}; void set_status_silent(); void process() %code%{ try { THIS->process(); } catch (std::exception& e) { croak("%s\n", e.what()); } %}; void export_gcode(char *path_template) %code%{ try { THIS->export_gcode(path_template, nullptr); } catch (std::exception& e) { croak("%s\n", e.what()); } %}; };