OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::anonymous_namespace{SL1.cpp} Namespace Reference

Classes

struct  PNGBuffer
struct  ArchiveData
struct  RasterParams
struct  SliceParams

Functions

boost::property_tree::ptree read_ini (const mz_zip_archive_file_stat &entry, MZ_Archive &zip)
PNGBuffer read_png (const mz_zip_archive_file_stat &entry, MZ_Archive &zip, const std::string &name)
ArchiveData extract_sla_archive (const std::string &zipfname, const std::string &exclude)
ExPolygons rings_to_expolygons (const std::vector< marchsq::Ring > &rings, double px_w, double px_h)
template<class Fn>
void foreach_vertex (ExPolygon &poly, Fn &&fn)
void invert_raster_trafo (ExPolygons &expolys, const sla::RasterBase::Trafo &trafo, coord_t width, coord_t height)
RasterParams get_raster_params (const DynamicPrintConfig &cfg)
SliceParams get_slice_params (const DynamicPrintConfig &cfg)
std::vector< ExPolygons > extract_slices_from_sla_archive (ArchiveData &arch, const RasterParams &rstp, std::function< bool(int)> progr)
std::string to_ini (const ConfMap &m)
std::string get_cfg_value (const DynamicPrintConfig &cfg, const std::string &key)
void fill_iniconf (ConfMap &m, const SLAPrint &print)
void fill_slicerconf (ConfMap &m, const SLAPrint &print)

Variables

static const constexpr char * CONFIG_FNAME = "config.ini"
static const constexpr char * PROFILE_FNAME = "prusaslicer.ini"

Class Documentation

◆ Slic3r::anonymous_namespace{SL1.cpp}::PNGBuffer

struct Slic3r::anonymous_namespace{SL1.cpp}::PNGBuffer
Collaboration diagram for Slic3r::anonymous_namespace{SL1.cpp}::PNGBuffer:
Class Members
vector< uint8_t > buf
string fname

◆ Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData

struct Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData
Collaboration diagram for Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData:
Class Members
ptree config
vector< PNGBuffer > images
ptree profile

◆ Slic3r::anonymous_namespace{SL1.cpp}::RasterParams

struct Slic3r::anonymous_namespace{SL1.cpp}::RasterParams
Collaboration diagram for Slic3r::anonymous_namespace{SL1.cpp}::RasterParams:
Class Members
coord_t height
double px_h
double px_w
Trafo trafo
coord_t width
Coord win

◆ Slic3r::anonymous_namespace{SL1.cpp}::SliceParams

struct Slic3r::anonymous_namespace{SL1.cpp}::SliceParams
Class Members
double initial_layerh = 0.
double layerh = 0.

Function Documentation

◆ extract_sla_archive()

ArchiveData Slic3r::anonymous_namespace{SL1.cpp}::extract_sla_archive ( const std::string & zipfname,
const std::string & exclude )
117{
118 ArchiveData arch;
119
120 // Little RAII
121 struct Arch: public MZ_Archive {
122 Arch(const std::string &fname) {
123 if (!open_zip_reader(&arch, fname))
124 throw Slic3r::FileIOError(get_errorstr());
125 }
126
127 ~Arch() { close_zip_reader(&arch); }
128 } zip (zipfname);
129
130 mz_uint num_entries = mz_zip_reader_get_num_files(&zip.arch);
131
132 for (mz_uint i = 0; i < num_entries; ++i)
133 {
134 mz_zip_archive_file_stat entry;
135
136 if (mz_zip_reader_file_stat(&zip.arch, i, &entry))
137 {
138 std::string name = entry.m_filename;
139 boost::algorithm::to_lower(name);
140
141 if (boost::algorithm::contains(name, exclude)) continue;
142
143 if (name == CONFIG_FNAME) arch.config = read_ini(entry, zip);
144 if (name == PROFILE_FNAME) arch.profile = read_ini(entry, zip);
145
146 if (boost::filesystem::path(name).extension().string() == ".png") {
147 auto it = std::lower_bound(
148 arch.images.begin(), arch.images.end(), PNGBuffer{{}, name},
149 [](const PNGBuffer &r1, const PNGBuffer &r2) {
150 return std::less<std::string>()(r1.fname, r2.fname);
151 });
152
153 arch.images.insert(it, read_png(entry, zip, name));
154 }
155 }
156 }
157
158 return arch;
159}
Definition miniz_extension.hpp:22
std::string get_errorstr() const
Definition miniz_extension.hpp:30
mz_zip_archive arch
Definition miniz_extension.hpp:24
std::vector< PNGBuffer > images
Definition SL1.cpp:81
boost::property_tree::ptree read_ini(const mz_zip_archive_file_stat &entry, MZ_Archive &zip)
Definition SL1.cpp:87
boost::property_tree::ptree config
Definition SL1.cpp:80
PNGBuffer read_png(const mz_zip_archive_file_stat &entry, MZ_Archive &zip, const std::string &name)
Definition SL1.cpp:102
static const constexpr char * CONFIG_FNAME
Definition SL1.cpp:84
static const constexpr char * PROFILE_FNAME
Definition SL1.cpp:85
boost::property_tree::ptree profile
Definition SL1.cpp:80
bool open_zip_reader(mz_zip_archive *zip, const std::string &fname)
Definition miniz_extension.cpp:119
bool close_zip_reader(mz_zip_archive *zip)
Definition miniz_extension.cpp:129

References Slic3r::close_zip_reader(), Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData::config, CONFIG_FNAME, extract_sla_archive(), Slic3r::anonymous_namespace{SL1.cpp}::PNGBuffer::fname, Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData::images, Slic3r::open_zip_reader(), Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData::profile, PROFILE_FNAME, read_ini(), and read_png().

Referenced by extract_sla_archive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ extract_slices_from_sla_archive()

std::vector< ExPolygons > Slic3r::anonymous_namespace{SL1.cpp}::extract_slices_from_sla_archive ( ArchiveData & arch,
const RasterParams & rstp,
std::function< bool(int)> progr )
267{
268 auto jobdir = arch.config.get<std::string>("jobDir");
269 for (auto &c : jobdir) c = std::tolower(c);
270
271 std::vector<ExPolygons> slices(arch.images.size());
272
273 struct Status
274 {
275 double incr, val, prev;
276 bool stop = false;
277 tbb::spin_mutex mutex = {};
278 } st {100. / slices.size(), 0., 0.};
279
280 tbb::parallel_for(size_t(0), arch.images.size(),
281 [&arch, &slices, &st, &rstp, progr](size_t i) {
282 // Status indication guarded with the spinlock
283 {
284 std::lock_guard<tbb::spin_mutex> lck(st.mutex);
285 if (st.stop) return;
286
287 st.val += st.incr;
288 double curr = std::round(st.val);
289 if (curr > st.prev) {
290 st.prev = curr;
291 st.stop = !progr(int(curr));
292 }
293 }
294
296 png::ReadBuf rb{arch.images[i].buf.data(), arch.images[i].buf.size()};
297 if (!png::decode_png(rb, img)) return;
298
299 uint8_t isoval = 128;
300 auto rings = marchsq::execute(img, isoval, rstp.win);
301 ExPolygons expolys = rings_to_expolygons(rings, rstp.px_w, rstp.px_h);
302
303 // Invert the raster transformations indicated in the profile metadata
304 invert_raster_trafo(expolys, rstp.trafo, rstp.width, rstp.height);
305
306 slices[i] = std::move(expolys);
307 });
308
309 if (st.stop) slices = {};
310
311 return slices;
312}
marchsq::Coord win
Definition SL1.cpp:217
ExPolygons rings_to_expolygons(const std::vector< marchsq::Ring > &rings, double px_w, double px_h)
Definition SL1.cpp:161
void invert_raster_trafo(ExPolygons &expolys, const sla::RasterBase::Trafo &trafo, coord_t width, coord_t height)
Definition SL1.cpp:187
sla::RasterBase::Trafo trafo
Definition SL1.cpp:214
bool decode_png(IStream &in_buf, ImageGreyscale &out_img)
Definition PNGReadWrite.cpp:102
Image< uint8_t > ImageGreyscale
Definition PNGReadWrite.hpp:28
std::vector< ExPolygon > ExPolygons
Definition ExPolygon.hpp:20
TRasterValue< T > isoval(const T &rst, const Coord &crd)
Definition MarchingSquares.hpp:175
std::vector< marchsq::Ring > execute(const Raster &raster, TRasterValue< Raster > isoval, Coord windowsize={})
Definition MarchingSquares.hpp:645

References Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData::config, Slic3r::png::decode_png(), marchsq::execute(), extract_slices_from_sla_archive(), Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::height, Slic3r::anonymous_namespace{SL1.cpp}::ArchiveData::images, invert_raster_trafo(), Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::px_h, Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::px_w, rings_to_expolygons(), Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::trafo, Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::width, and Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::win.

Referenced by extract_slices_from_sla_archive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_iniconf()

void Slic3r::anonymous_namespace{SL1.cpp}::fill_iniconf ( ConfMap & m,
const SLAPrint & print )
404{
405 CNumericLocalesSetter locales_setter; // for to_string
406 auto &cfg = print.full_print_config();
407 m["layerHeight"] = get_cfg_value(cfg, "layer_height");
408 m["expTime"] = get_cfg_value(cfg, "exposure_time");
409 m["expTimeFirst"] = get_cfg_value(cfg, "initial_exposure_time");
410 m["expUserProfile"] = get_cfg_value(cfg, "material_print_speed") == "slow" ? "1" : "0";
411 m["materialName"] = get_cfg_value(cfg, "sla_material_settings_id");
412 m["printerModel"] = get_cfg_value(cfg, "printer_model");
413 m["printerVariant"] = get_cfg_value(cfg, "printer_variant");
414 m["printerProfile"] = get_cfg_value(cfg, "printer_settings_id");
415 m["printProfile"] = get_cfg_value(cfg, "sla_print_settings_id");
416 m["fileCreationTimestamp"] = Utils::utc_timestamp();
417 m["prusaSlicerVersion"] = SLIC3R_BUILD_ID;
418
419 SLAPrintStatistics stats = print.print_statistics();
420 // Set statistics values to the printer
421
422 double used_material = (stats.objects_used_material +
423 stats.support_used_material) / 1000;
424
425 int num_fade = print.default_object_config().faded_layers.getInt();
426 num_fade = num_fade >= 0 ? num_fade : 0;
427
428 m["usedMaterial"] = std::to_string(used_material);
429 m["numFade"] = std::to_string(num_fade);
430 m["numSlow"] = std::to_string(stats.slow_layers_count);
431 m["numFast"] = std::to_string(stats.fast_layers_count);
432 m["printTime"] = std::to_string(stats.estimated_print_time);
433
434 bool hollow_en = false;
435 auto it = print.objects().begin();
436 while (!hollow_en && it != print.objects().end())
437 hollow_en = (*it++)->config().hollowing_enable;
438
439 m["hollow"] = hollow_en ? "1" : "0";
440
441 m["action"] = "print";
442}
Definition LocalesUtils.hpp:19
const DynamicPrintConfig & full_print_config() const
Definition PrintBase.hpp:518
const PrintObjects & objects() const
Definition SLAPrint.hpp:482
const SLAPrintObjectConfig & default_object_config() const
Definition SLAPrint.hpp:499
const SLAPrintStatistics & print_statistics() const
Definition SLAPrint.hpp:509
std::string utc_timestamp()
Definition Time.hpp:30
std::string get_cfg_value(const DynamicPrintConfig &cfg, const std::string &key)
Definition SL1.cpp:391
Definition SLAPrint.hpp:381
double support_used_material
Definition SLAPrint.hpp:385
size_t slow_layers_count
Definition SLAPrint.hpp:386
double estimated_print_time
Definition SLAPrint.hpp:383
size_t fast_layers_count
Definition SLAPrint.hpp:387
double objects_used_material
Definition SLAPrint.hpp:384

References Slic3r::SLAPrint::default_object_config(), Slic3r::SLAPrintStatistics::estimated_print_time, Slic3r::SLAPrintStatistics::fast_layers_count, fill_iniconf(), Slic3r::PrintBase::full_print_config(), get_cfg_value(), Slic3r::SLAPrint::objects(), Slic3r::SLAPrintStatistics::objects_used_material, Slic3r::SLAPrint::print_statistics(), Slic3r::SLAPrintStatistics::slow_layers_count, Slic3r::SLAPrintStatistics::support_used_material, and Slic3r::Utils::utc_timestamp().

Referenced by fill_iniconf().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fill_slicerconf()

void Slic3r::anonymous_namespace{SL1.cpp}::fill_slicerconf ( ConfMap & m,
const SLAPrint & print )
445{
446 using namespace std::literals::string_view_literals;
447
448 // Sorted list of config keys, which shall not be stored into the ini.
449 static constexpr auto banned_keys = {
450 "compatible_printers"sv,
451 "compatible_prints"sv
452 };
453
454 assert(std::is_sorted(banned_keys.begin(), banned_keys.end()));
455 auto is_banned = [](const std::string &key) {
456 return std::binary_search(banned_keys.begin(), banned_keys.end(), key);
457 };
458
459 auto &cfg = print.full_print_config();
460 for (const std::string &key : cfg.keys())
461 if (! is_banned(key) && ! cfg.option(key)->is_nil())
462 m[key] = cfg.opt_serialize(key);
463
464}

References fill_slicerconf(), and Slic3r::PrintBase::full_print_config().

Referenced by fill_slicerconf().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ foreach_vertex()

template<class Fn>
void Slic3r::anonymous_namespace{SL1.cpp}::foreach_vertex ( ExPolygon & poly,
Fn && fn )
181{
182 for (auto &p : poly.contour.points) fn(p);
183 for (auto &h : poly.holes)
184 for (auto &p : h.points) fn(p);
185}

References foreach_vertex().

Referenced by foreach_vertex(), and invert_raster_trafo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_cfg_value()

std::string Slic3r::anonymous_namespace{SL1.cpp}::get_cfg_value ( const DynamicPrintConfig & cfg,
const std::string & key )
392{
393 std::string ret;
394
395 if (cfg.has(key)) {
396 auto opt = cfg.option(key);
397 if (opt) ret = opt->serialize();
398 }
399
400 return ret;
401}
ConfigOption * option(const t_config_option_key &opt_key, bool create=false)
Definition Config.hpp:2768
bool has(const t_config_option_key &opt_key) const
Definition Config.hpp:2697
Definition BruteforceOptimizer.hpp:11

References get_cfg_value(), Slic3r::ConfigOptionResolver::has(), and Slic3r::ConfigBase::option().

Referenced by fill_iniconf(), and get_cfg_value().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_raster_params()

RasterParams Slic3r::anonymous_namespace{SL1.cpp}::get_raster_params ( const DynamicPrintConfig & cfg)
221{
222 auto *opt_disp_cols = cfg.option<ConfigOptionInt>("display_pixels_x");
223 auto *opt_disp_rows = cfg.option<ConfigOptionInt>("display_pixels_y");
224 auto *opt_disp_w = cfg.option<ConfigOptionFloat>("display_width");
225 auto *opt_disp_h = cfg.option<ConfigOptionFloat>("display_height");
226 auto *opt_mirror_x = cfg.option<ConfigOptionBool>("display_mirror_x");
227 auto *opt_mirror_y = cfg.option<ConfigOptionBool>("display_mirror_y");
228 auto *opt_orient = cfg.option<ConfigOptionEnum<SLADisplayOrientation>>("display_orientation");
229
230 if (!opt_disp_cols || !opt_disp_rows || !opt_disp_w || !opt_disp_h ||
231 !opt_mirror_x || !opt_mirror_y || !opt_orient)
232 throw MissingProfileError("Invalid SL1 / SL1S file");
233
234 RasterParams rstp;
235
236 rstp.px_w = opt_disp_w->value / (opt_disp_cols->value - 1);
237 rstp.px_h = opt_disp_h->value / (opt_disp_rows->value - 1);
238
239 rstp.trafo = sla::RasterBase::Trafo{opt_orient->value == sladoLandscape ?
242 {opt_mirror_x->value, opt_mirror_y->value}};
243
244 rstp.height = scaled(opt_disp_h->value);
245 rstp.width = scaled(opt_disp_w->value);
246
247 return rstp;
248}
Definition Config.hpp:1908
Definition Config.hpp:2076
Definition Config.hpp:825
Definition Config.hpp:1019
T value
Definition Config.hpp:329
Definition SL1.hpp:69
@ roPortrait
Definition RasterBase.hpp:65
@ roLandscape
Definition RasterBase.hpp:65
@ sladoLandscape
Definition PrintConfig.hpp:444
BoundingBox scaled(const BoundingBoxf &bb)
Definition BoundingBox.hpp:284
Definition RasterBase.hpp:73

References get_raster_params(), Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::height, Slic3r::ConfigBase::option(), Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::px_h, Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::px_w, Slic3r::sla::RasterBase::roLandscape, Slic3r::sla::RasterBase::roPortrait, Slic3r::scaled(), Slic3r::sladoLandscape, Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::trafo, Slic3r::ConfigOptionSingle< T >::value, and Slic3r::anonymous_namespace{SL1.cpp}::RasterParams::width.

Referenced by get_raster_params().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_slice_params()

SliceParams Slic3r::anonymous_namespace{SL1.cpp}::get_slice_params ( const DynamicPrintConfig & cfg)
253{
254 auto *opt_layerh = cfg.option<ConfigOptionFloat>("layer_height");
255 auto *opt_init_layerh = cfg.option<ConfigOptionFloat>("initial_layer_height");
256
257 if (!opt_layerh || !opt_init_layerh)
258 throw MissingProfileError("Invalid SL1 / SL1S file");
259
260 return SliceParams{opt_layerh->getFloat(), opt_init_layerh->getFloat()};
261}
double getFloat() const override
Definition Config.hpp:832

References get_slice_params(), Slic3r::ConfigOptionFloat::getFloat(), and Slic3r::ConfigBase::option().

Referenced by get_slice_params().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ invert_raster_trafo()

void Slic3r::anonymous_namespace{SL1.cpp}::invert_raster_trafo ( ExPolygons & expolys,
const sla::RasterBase::Trafo & trafo,
coord_t width,
coord_t height )
191{
192 if (trafo.flipXY) std::swap(height, width);
193
194 for (auto &expoly : expolys) {
195 if (trafo.mirror_y)
196 foreach_vertex(expoly, [height](Point &p) {p.y() = height - p.y(); });
197
198 if (trafo.mirror_x)
199 foreach_vertex(expoly, [width](Point &p) {p.x() = width - p.x(); });
200
201 expoly.translate(-trafo.center_x, -trafo.center_y);
202
203 if (trafo.flipXY)
204 foreach_vertex(expoly, [](Point &p) { std::swap(p.x(), p.y()); });
205
206 if ((trafo.mirror_x + trafo.mirror_y + trafo.flipXY) % 2) {
207 expoly.contour.reverse();
208 for (auto &h : expoly.holes) h.reverse();
209 }
210 }
211}
Definition Point.hpp:199
void foreach_vertex(ExPolygon &poly, Fn &&fn)
Definition SL1.cpp:180
bool flipXY
Definition RasterBase.hpp:74
bool mirror_x
Definition RasterBase.hpp:74
coord_t center_y
Definition RasterBase.hpp:75
coord_t center_x
Definition RasterBase.hpp:75
bool mirror_y
Definition RasterBase.hpp:74

References Slic3r::sla::RasterBase::Trafo::center_x, Slic3r::sla::RasterBase::Trafo::center_y, Slic3r::sla::RasterBase::Trafo::flipXY, foreach_vertex(), invert_raster_trafo(), Slic3r::sla::RasterBase::Trafo::mirror_x, and Slic3r::sla::RasterBase::Trafo::mirror_y.

Referenced by extract_slices_from_sla_archive(), and invert_raster_trafo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_ini()

boost::property_tree::ptree Slic3r::anonymous_namespace{SL1.cpp}::read_ini ( const mz_zip_archive_file_stat & entry,
MZ_Archive & zip )
89{
90 std::string buf(size_t(entry.m_uncomp_size), '\0');
91
92 if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename,
93 buf.data(), buf.size(), 0))
94 throw Slic3r::FileIOError(zip.get_errorstr());
95
96 boost::property_tree::ptree tree;
97 std::stringstream ss(buf);
98 boost::property_tree::read_ini(ss, tree);
99 return tree;
100}
static std::string get_errorstr(mz_zip_error mz_err)
Definition miniz_extension.cpp:239

References Slic3r::MZ_Archive::arch, Slic3r::MZ_Archive::get_errorstr(), and read_ini().

Referenced by extract_sla_archive(), and read_ini().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_png()

PNGBuffer Slic3r::anonymous_namespace{SL1.cpp}::read_png ( const mz_zip_archive_file_stat & entry,
MZ_Archive & zip,
const std::string & name )
105{
106 std::vector<uint8_t> buf(entry.m_uncomp_size);
107
108 if (!mz_zip_reader_extract_file_to_mem(&zip.arch, entry.m_filename,
109 buf.data(), buf.size(), 0))
110 throw Slic3r::FileIOError(zip.get_errorstr());
111
112 return {std::move(buf), (name.empty() ? entry.m_filename : name)};
113}

References Slic3r::MZ_Archive::arch, Slic3r::MZ_Archive::get_errorstr(), and read_png().

Referenced by extract_sla_archive(), and read_png().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rings_to_expolygons()

ExPolygons Slic3r::anonymous_namespace{SL1.cpp}::rings_to_expolygons ( const std::vector< marchsq::Ring > & rings,
double px_w,
double px_h )
163{
164 auto polys = reserve_vector<ExPolygon>(rings.size());
165
166 for (const marchsq::Ring &ring : rings) {
167 Polygon poly; Points &pts = poly.points;
168 pts.reserve(ring.size());
169
170 for (const marchsq::Coord &crd : ring)
171 pts.emplace_back(scaled(crd.c * px_w), scaled(crd.r * px_h));
172
173 polys.emplace_back(poly);
174 }
175
176 // TODO: Is a union necessary?
177 return union_ex(polys);
178}
Definition Polygon.hpp:31
IntegerOnly< I, std::vector< T, Args... > > reserve_vector(I capacity)
Definition libslic3r.h:370
std::vector< Point, PointsAllocator< Point > > Points
Definition Point.hpp:73
Slic3r::ExPolygons union_ex(const Slic3r::Polygons &subject, PolyFillType fill_type)
Definition ClipperUtils.cpp:1011
std::vector< Coord > Ring
Definition MarchingSquares.hpp:122
Definition MarchingSquares.hpp:95

References Slic3r::reserve_vector(), rings_to_expolygons(), Slic3r::scaled(), and Slic3r::union_ex().

Referenced by extract_slices_from_sla_archive(), and rings_to_expolygons().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ to_ini()

std::string Slic3r::anonymous_namespace{SL1.cpp}::to_ini ( const ConfMap & m)
384{
385 std::string ret;
386 for (auto &param : m) ret += param.first + " = " + param.second + "\n";
387
388 return ret;
389}

References to_ini().

Referenced by to_ini().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ CONFIG_FNAME

const constexpr char* Slic3r::anonymous_namespace{SL1.cpp}::CONFIG_FNAME = "config.ini"
staticconstexpr

Referenced by extract_sla_archive().

◆ PROFILE_FNAME

const constexpr char* Slic3r::anonymous_namespace{SL1.cpp}::PROFILE_FNAME = "prusaslicer.ini"
staticconstexpr

Referenced by extract_sla_archive().