OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::SLAPrint Class Reference

This class is the high level FSM for the SLA printing process. More...

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/SLAPrint.hpp>

Inheritance diagram for Slic3r::SLAPrint:
Collaboration diagram for Slic3r::SLAPrint:

Classes

class  PrintLayer
class  StatusReporter
class  Steps

Public Types

enum  ApplyStatus
enum  CancelStatus
typedef std::function< void(const SlicingStatus &)> status_callback_type
typedef std::function< void()> cancel_callback_type
using Timestamp

Public Member Functions

 SLAPrint ()
virtual ~SLAPrint () override
PrinterTechnology technology () const noexcept override
void clear () override
bool empty () const override
std::vector< ObjectID > print_object_ids () const override
ApplyStatus apply (const Model &model, DynamicPrintConfig config, bool extruder_applied=false) override
void set_task (const TaskParams &params) override
void process (long long *time_cost_with_cache=nullptr, bool use_cache=false) override
void finalize () override
bool is_step_done (SLAPrintObjectStep step) const
bool finished () const override
const PrintObjects & objects () const
const SLAPrintObject * get_print_object_by_model_object_id (ObjectID object_id) const
const SLAPrintObject * get_object (ObjectID object_id) const
const SLAPrintConfig & print_config () const
const SLAPrinterConfig & printer_config () const
const SLAMaterialConfig & material_config () const
const SLAPrintObjectConfig & default_object_config () const
Vec3d relative_correction () const
Transform3d sla_trafo (const ModelObject &model_object) const
std::string output_filename (const std::string &filename_base=std::string()) const override
const SLAPrintStatistics & print_statistics () const
StringObjectException validate (std::vector< StringObjectException > *warnings=nullptr, Polygons *collison_polygons=nullptr, std::vector< std::pair< Polygon, float > > *height_polygons=nullptr) const override
const std::vector< PrintLayer > & print_layers () const
void set_printer (SLAArchive *archiver)
bool is_step_done (SLAPrintStep step) const
PrintStateBase::StateWithTimeStamp step_state_with_timestamp (SLAPrintStep step) const
PrintStateBase::StateWithWarnings step_state_with_warnings (SLAPrintStep step) const
void active_step_add_warning (PrintStateBase::WarningLevel warning_level, const std::string &message, PrintStateBase::SlicingNotificationType message_id=PrintStateBase::SlicingDefaultNotification)
const Model & model () const
virtual int export_cached_data (const std::string &dir_path, bool with_space=false)
virtual int load_cached_data (const std::string &directory)
void set_status_default ()
void set_status_silent ()
void set_status_callback (status_callback_type cb)
void set_status (int percent, const std::string &message, unsigned int flags=SlicingStatus::DEFAULT, int warning_step=-1) const
void set_cancel_callback (cancel_callback_type cancel_callback)
CancelStatus cancel_status () const
bool canceled () const
void cancel ()
void cancel_internal ()
void restart ()
const PlaceholderParser & placeholder_parser () const
const DynamicPrintConfig & full_print_config () const
std::string output_filepath (const std::string &path, const std::string &filename_base=std::string()) const
int get_plate_index () const
void set_plate_index (int index)
bool get_no_check_flag () const
void set_no_check_flag (bool no_check)
std::string get_plate_name () const
void set_plate_name (const std::string &name)
ObjectID id () const
virtual Timestamp timestamp () const

Protected Member Functions

bool set_started (SLAPrintStep step)
PrintStateBase::TimeStamp set_done (SLAPrintStep step)
bool invalidate_steps (StepTypeIterator step_begin, StepTypeIterator step_end)
bool invalidate_steps (std::initializer_list< SLAPrintStep > il)
bool invalidate_all_steps ()
bool is_step_started_unguarded (SLAPrintStep step) const
bool is_step_done_unguarded (SLAPrintStep step) const
std::string output_filename (const std::string &format, const std::string &default_ext, const std::string &filename_base, const DynamicConfig *config_override=nullptr) const
std::mutex & state_mutex () const
std::function< void()> cancel_callback ()
void call_cancel_callback ()
void status_update_warnings (int step, PrintStateBase::WarningLevel warning_level, const std::string &message, const PrintObjectBase *print_object=nullptr, PrintStateBase::SlicingNotificationType message_id=PrintStateBase::SlicingDefaultNotification)
void status_update_warnings (int step, PrintStateBase::WarningLevel warning_level, const std::string &message, PrintObjectBase &object, PrintStateBase::SlicingNotificationType message_id=PrintStateBase::SlicingDefaultNotification)
void throw_if_canceled () const
PrintTryCancel make_try_cancel () const
void update_object_placeholders (DynamicConfig &config, const std::string &default_ext) const
void set_new_unique_id ()
void set_invalid_id ()
void copy_id (const ObjectBase &rhs)
virtual void assign_new_unique_ids_recursive ()

Protected Attributes

Model m_model
DynamicPrintConfig m_full_print_config
DynamicPrintConfig m_ori_full_print_config
PlaceholderParser m_placeholder_parser
int m_plate_index
bool m_no_check
std::string m_plate_name
status_callback_type m_status_callback

Private Types

typedef PrintBaseWithState< SLAPrintStep, slapsCount > Inherited

Private Member Functions

bool invalidate_step (SLAPrintStep st)
bool invalidate_state_by_config_options (const std::vector< t_config_option_key > &opt_keys, bool &invalidate_all_model_objects)
void serialize (Archive &ar)

Static Private Member Functions

static ObjectID generate_new_id ()
static void load_and_construct (Archive &ar, cereal::construct< ObjectBase > &construct)

Private Attributes

SLAPrintConfig m_print_config
SLAPrinterConfig m_printer_config
SLAMaterialConfig m_material_config
SLAPrintObjectConfig m_default_object_config
PrintObjects m_objects
std::vector< bool > m_stepmask
std::vector< PrintLayer > m_printer_input
SLAArchive * m_printer = nullptr
SLAPrintStatistics m_print_statistics
class Slic3r::SLAPrint::StatusReporter m_report_status
friend SLAPrintObject
PrintState< SLAPrintStep, COUNT > m_state
std::atomic< CancelStatus > m_cancel_status
cancel_callback_type m_cancel_callback
std::mutex m_state_mutex
friend PrintTryCancel
ObjectID m_id

Static Private Attributes

static size_t s_last_id

Detailed Description

This class is the high level FSM for the SLA printing process.

It should support the background processing framework and contain the metadata for the support geometries and their slicing. It should also dispatch the SLA printing configuration values to the appropriate calculation steps.

Member Typedef Documentation

◆ cancel_callback_type

typedef std::function<void()> Slic3r::PrintBase::cancel_callback_type
inherited

◆ Inherited

◆ status_callback_type

typedef std::function<void(const SlicingStatus&)> Slic3r::PrintBase::status_callback_type
inherited

◆ Timestamp

Member Enumeration Documentation

◆ ApplyStatus

410 {
411 // No change after the Print::apply() call.
413 // Some of the Print / PrintObject / PrintObjectInstance data was changed,
414 // but no result was invalidated (only data influencing not yet calculated results were changed).
416 // Some data was changed, which in turn invalidated already calculated steps.
418 };
Definition PrintBase.hpp:592

◆ CancelStatus

498 {
499 // No cancelation, background processing should run.
500 NOT_CANCELED = 0,
501 // Canceled by user from the user interface (user pressed the "Cancel" button or user closed the application).
503 // Canceled internally from Print::apply() through the Print/PrintObject::invalidate_step() or ::invalidate_all_steps().
505 };

Constructor & Destructor Documentation

◆ SLAPrint()

Slic3r::SLAPrint::SLAPrint ( )
inline
463: m_stepmask(slapsCount, true) {}
std::vector< bool > m_stepmask
Definition SLAPrint.hpp:573
@ slapsCount
Definition SLAPrint.hpp:39

References m_stepmask, and Slic3r::slapsCount.

Referenced by Slic3r::SLAPrint::Steps::Steps(), and Slic3r::SLAPrint::StatusReporter::operator()().

Here is the caller graph for this function:

◆ ~SLAPrint()

virtual Slic3r::SLAPrint::~SLAPrint ( )
inlineoverridevirtual
465{ this->clear(); }
void clear() override
Definition SLAPrint.cpp:143

References clear().

Here is the call graph for this function:

Member Function Documentation

◆ active_step_add_warning()

void Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::active_step_add_warning ( PrintStateBase::WarningLevel warning_level,
const std::string & message,
PrintStateBase::SlicingNotificationType message_id = PrintStateBase::SlicingDefaultNotification )
inlineinherited
601 {
603 if (active_step.second)
604 // Update UI.
605 this->status_update_warnings(static_cast<int>(active_step.first), warning_level, message, nullptr, message_id);
606 }
void active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, PrintStateBase::SlicingNotificationType message_id=PrintStateBase::SlicingDefaultNotification)
Definition PrintBase.hpp:599
std::mutex & state_mutex() const
Definition PrintBase.hpp:538
void status_update_warnings(int step, PrintStateBase::WarningLevel warning_level, const std::string &message, const PrintObjectBase *print_object=nullptr, PrintStateBase::SlicingNotificationType message_id=PrintStateBase::SlicingDefaultNotification)
Definition PrintBase.cpp:131

◆ apply()

SLAPrint::ApplyStatus Slic3r::SLAPrint::apply ( const Model & model,
DynamicPrintConfig config,
bool extruder_applied = false )
overridevirtual

Implements Slic3r::PrintBase.

214{
215#ifdef _DEBUG
217#endif /* _DEBUG */
218
219 // Normalize the config.
220 config.option("sla_print_settings_id", true);
221 config.option("sla_material_settings_id", true);
222 config.option("printer_settings_id", true);
223 // Collect changes to print config.
224 t_config_option_keys print_diff = m_print_config.diff(config);
225 t_config_option_keys printer_diff = m_printer_config.diff(config);
226 t_config_option_keys material_diff = m_material_config.diff(config);
227 t_config_option_keys object_diff = m_default_object_config.diff(config);
228 t_config_option_keys placeholder_parser_diff = m_placeholder_parser.config_diff(config);
229
230 // Do not use the ApplyStatus as we will use the max function when updating apply_status.
231 unsigned int apply_status = APPLY_STATUS_UNCHANGED;
232 auto update_apply_status = [&apply_status](bool invalidated)
233 { apply_status = std::max<unsigned int>(apply_status, invalidated ? APPLY_STATUS_INVALIDATED : APPLY_STATUS_CHANGED); };
234 if (! (print_diff.empty() && printer_diff.empty() && material_diff.empty() && object_diff.empty()))
235 update_apply_status(false);
236
237 // Grab the lock for the Print / PrintObject milestones.
238 std::scoped_lock<std::mutex> lock(this->state_mutex());
239
240 // The following call may stop the background processing.
241 bool invalidate_all_model_objects = false;
242 if (! print_diff.empty())
243 update_apply_status(this->invalidate_state_by_config_options(print_diff, invalidate_all_model_objects));
244 if (! printer_diff.empty())
245 update_apply_status(this->invalidate_state_by_config_options(printer_diff, invalidate_all_model_objects));
246 if (! material_diff.empty())
247 update_apply_status(this->invalidate_state_by_config_options(material_diff, invalidate_all_model_objects));
248
249 // Apply variables to placeholder parser. The placeholder parser is currently used
250 // only to generate the output file name.
251 if (! placeholder_parser_diff.empty()) {
252 // update_apply_status(this->invalidate_step(slapsRasterize));
253 m_placeholder_parser.apply_config(config);
254 // Set the profile aliases for the PrintBase::output_filename()
255 m_placeholder_parser.set("print_preset", config.option("sla_print_settings_id")->clone());
256 m_placeholder_parser.set("material_preset", config.option("sla_material_settings_id")->clone());
257 m_placeholder_parser.set("printer_preset", config.option("printer_settings_id")->clone());
258 }
259
260 // It is also safe to change m_config now after this->invalidate_state_by_config_options() call.
261 m_print_config.apply_only(config, print_diff, true);
262 m_printer_config.apply_only(config, printer_diff, true);
263 // Handle changes to material config.
264 m_material_config.apply_only(config, material_diff, true);
265 // Handle changes to object config defaults
266 m_default_object_config.apply_only(config, object_diff, true);
267
269
270 struct ModelObjectStatus {
271 enum Status {
272 Unknown,
273 Old,
274 New,
275 Moved,
276 Deleted,
277 };
278 ModelObjectStatus(ObjectID id, Status status = Unknown) : id(id), status(status) {}
279 ObjectID id;
280 Status status;
281 // Search by id.
282 bool operator<(const ModelObjectStatus &rhs) const { return id < rhs.id; }
283 };
284 std::set<ModelObjectStatus> model_object_status;
285
286 // 1) Synchronize model objects.
287 if (model.id() != m_model.id() || invalidate_all_model_objects) {
288 // Kill everything, initialize from scratch.
289 // Stop background processing.
290 this->call_cancel_callback();
291 update_apply_status(this->invalidate_all_steps());
292 for (SLAPrintObject *object : m_objects) {
293 model_object_status.emplace(object->model_object()->id(), ModelObjectStatus::Deleted);
294 update_apply_status(object->invalidate_all_steps());
295 delete object;
296 }
297 m_objects.clear();
298 m_model.assign_copy(model);
299 for (const ModelObject *model_object : m_model.objects)
300 model_object_status.emplace(model_object->id(), ModelObjectStatus::New);
301 } else {
303 // The object list did not change.
304 for (const ModelObject *model_object : m_model.objects)
305 model_object_status.emplace(model_object->id(), ModelObjectStatus::Old);
307 // Add new objects. Their volumes and configs will be synchronized later.
308 update_apply_status(this->invalidate_step(slapsMergeSlicesAndEval));
309 for (const ModelObject *model_object : m_model.objects)
310 model_object_status.emplace(model_object->id(), ModelObjectStatus::Old);
311 for (size_t i = m_model.objects.size(); i < model.objects.size(); ++ i) {
312 model_object_status.emplace(model.objects[i]->id(), ModelObjectStatus::New);
313 m_model.objects.emplace_back(ModelObject::new_copy(*model.objects[i]));
314 m_model.objects.back()->set_model(&m_model);
315 }
316 } else {
317 // Reorder the objects, add new objects.
318 // First stop background processing before shuffling or deleting the PrintObjects in the object list.
319 this->call_cancel_callback();
320 update_apply_status(this->invalidate_step(slapsMergeSlicesAndEval));
321 // Second create a new list of objects.
322 std::vector<ModelObject*> model_objects_old(std::move(m_model.objects));
323 m_model.objects.clear();
324 m_model.objects.reserve(model.objects.size());
325 auto by_id_lower = [](const ModelObject *lhs, const ModelObject *rhs){ return lhs->id() < rhs->id(); };
326 std::sort(model_objects_old.begin(), model_objects_old.end(), by_id_lower);
327 for (const ModelObject *mobj : model.objects) {
328 auto it = std::lower_bound(model_objects_old.begin(), model_objects_old.end(), mobj, by_id_lower);
329 if (it == model_objects_old.end() || (*it)->id() != mobj->id()) {
330 // New ModelObject added.
331 m_model.objects.emplace_back(ModelObject::new_copy(*mobj));
332 m_model.objects.back()->set_model(&m_model);
333 model_object_status.emplace(mobj->id(), ModelObjectStatus::New);
334 } else {
335 // Existing ModelObject re-added (possibly moved in the list).
336 m_model.objects.emplace_back(*it);
337 model_object_status.emplace(mobj->id(), ModelObjectStatus::Moved);
338 }
339 }
340 bool deleted_any = false;
341 for (ModelObject *&model_object : model_objects_old) {
342 if (model_object_status.find(ModelObjectStatus(model_object->id())) == model_object_status.end()) {
343 model_object_status.emplace(model_object->id(), ModelObjectStatus::Deleted);
344 deleted_any = true;
345 } else
346 // Do not delete this ModelObject instance.
347 model_object = nullptr;
348 }
349 if (deleted_any) {
350 // Delete PrintObjects of the deleted ModelObjects.
351 std::vector<SLAPrintObject*> print_objects_old = std::move(m_objects);
352 m_objects.clear();
353 m_objects.reserve(print_objects_old.size());
354 for (SLAPrintObject *print_object : print_objects_old) {
355 auto it_status = model_object_status.find(ModelObjectStatus(print_object->model_object()->id()));
356 assert(it_status != model_object_status.end());
357 if (it_status->status == ModelObjectStatus::Deleted) {
358 update_apply_status(print_object->invalidate_all_steps());
359 delete print_object;
360 } else
361 m_objects.emplace_back(print_object);
362 }
363 for (ModelObject *model_object : model_objects_old)
364 delete model_object;
365 }
366 }
367 }
368
369 // 2) Map print objects including their transformation matrices.
370 struct PrintObjectStatus {
371 enum Status {
372 Unknown,
373 Deleted,
374 Reused,
375 New
376 };
377 PrintObjectStatus(SLAPrintObject *print_object, Status status = Unknown) :
378 id(print_object->model_object()->id()),
379 print_object(print_object),
380 trafo(print_object->trafo()),
381 status(status) {}
382 PrintObjectStatus(ObjectID id) : id(id), print_object(nullptr), trafo(Transform3d::Identity()), status(Unknown) {}
383 // ID of the ModelObject & PrintObject
384 ObjectID id;
385 // Pointer to the old PrintObject
386 SLAPrintObject *print_object;
387 // Trafo generated with model_object->world_matrix(true)
388 Transform3d trafo;
389 Status status;
390 // Search by id.
391 bool operator<(const PrintObjectStatus &rhs) const { return id < rhs.id; }
392 };
393 std::multiset<PrintObjectStatus> print_object_status;
394 for (SLAPrintObject *print_object : m_objects)
395 print_object_status.emplace(PrintObjectStatus(print_object));
396
397 // 3) Synchronize ModelObjects & PrintObjects.
398 std::vector<SLAPrintObject*> print_objects_new;
399 print_objects_new.reserve(std::max(m_objects.size(), m_model.objects.size()));
400 bool new_objects = false;
401 for (size_t idx_model_object = 0; idx_model_object < model.objects.size(); ++ idx_model_object) {
402 ModelObject &model_object = *m_model.objects[idx_model_object];
403 auto it_status = model_object_status.find(ModelObjectStatus(model_object.id()));
404 assert(it_status != model_object_status.end());
405 assert(it_status->status != ModelObjectStatus::Deleted);
406 // PrintObject for this ModelObject, if it exists.
407 auto it_print_object_status = print_object_status.end();
408 if (it_status->status != ModelObjectStatus::New) {
409 // Update the ModelObject instance, possibly invalidate the linked PrintObjects.
410 assert(it_status->status == ModelObjectStatus::Old || it_status->status == ModelObjectStatus::Moved);
411 const ModelObject &model_object_new = *model.objects[idx_model_object];
412 it_print_object_status = print_object_status.lower_bound(PrintObjectStatus(model_object.id()));
413 if (it_print_object_status != print_object_status.end() && it_print_object_status->id != model_object.id())
414 it_print_object_status = print_object_status.end();
415 // Check whether a model part volume was added or removed, their transformations or order changed.
416 bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::MODEL_PART);
417 bool sla_trafo_differs =
418 model_object.instances.empty() != model_object_new.instances.empty() ||
419 (! model_object.instances.empty() &&
420 (! sla_trafo(model_object).isApprox(sla_trafo(model_object_new)) ||
421 model_object.instances.front()->is_left_handed() != model_object_new.instances.front()->is_left_handed()));
422 if (model_parts_differ || sla_trafo_differs) {
423 // The very first step (the slicing step) is invalidated. One may freely remove all associated PrintObjects.
424 if (it_print_object_status != print_object_status.end()) {
425 update_apply_status(it_print_object_status->print_object->invalidate_all_steps());
426 const_cast<PrintObjectStatus&>(*it_print_object_status).status = PrintObjectStatus::Deleted;
427 }
428 // Copy content of the ModelObject including its ID, do not change the parent.
429 model_object.assign_copy(model_object_new);
430 } else {
431 // Synchronize Object's config.
432 bool object_config_changed = ! model_object.config.timestamp_matches(model_object_new.config);
433 if (object_config_changed)
434 model_object.config.assign_config(model_object_new.config);
435 if (! object_diff.empty() || object_config_changed) {
436 SLAPrintObjectConfig new_config = m_default_object_config;
437 new_config.apply(model_object.config.get(), true);
438 if (it_print_object_status != print_object_status.end()) {
439 t_config_option_keys diff = it_print_object_status->print_object->config().diff(new_config);
440 if (! diff.empty()) {
441 update_apply_status(it_print_object_status->print_object->invalidate_state_by_config_options(diff));
442 it_print_object_status->print_object->config_apply_only(new_config, diff, true);
443 }
444 }
445 }
446
447 bool old_user_modified = model_object.sla_points_status == sla::PointsStatus::UserModified;
448 bool new_user_modified = model_object_new.sla_points_status == sla::PointsStatus::UserModified;
449 if ((old_user_modified && ! new_user_modified) || // switching to automatic supports from manual supports
450 (! old_user_modified && new_user_modified) || // switching to manual supports from automatic supports
451 (new_user_modified && model_object.sla_support_points != model_object_new.sla_support_points)) {
452 if (it_print_object_status != print_object_status.end())
453 update_apply_status(it_print_object_status->print_object->invalidate_step(slaposSupportPoints));
454
455 model_object.sla_support_points = model_object_new.sla_support_points;
456 }
457 model_object.sla_points_status = model_object_new.sla_points_status;
458
459 // Invalidate hollowing if drain holes have changed
460 if (model_object.sla_drain_holes != model_object_new.sla_drain_holes)
461 {
462 model_object.sla_drain_holes = model_object_new.sla_drain_holes;
463 update_apply_status(it_print_object_status->print_object->invalidate_step(slaposDrillHoles));
464 }
465
466 // Copy the ModelObject name, input_file and instances. The instances will compared against PrintObject instances in the next step.
467 model_object.name = model_object_new.name;
468 model_object.input_file = model_object_new.input_file;
469 model_object.clear_instances();
470 model_object.instances.reserve(model_object_new.instances.size());
471 for (const ModelInstance *model_instance : model_object_new.instances) {
472 model_object.instances.emplace_back(new ModelInstance(*model_instance));
473 model_object.instances.back()->set_model_object(&model_object);
474 }
475 }
476 }
477
478 std::vector<SLAPrintObject::Instance> new_instances = sla_instances(model_object);
479 if (it_print_object_status != print_object_status.end() && it_print_object_status->status != PrintObjectStatus::Deleted) {
480 // The SLAPrintObject is already there.
481 if (new_instances.empty()) {
482 const_cast<PrintObjectStatus&>(*it_print_object_status).status = PrintObjectStatus::Deleted;
483 } else {
484 if (new_instances != it_print_object_status->print_object->instances()) {
485 // Instances changed.
486 it_print_object_status->print_object->set_instances(new_instances);
487 update_apply_status(this->invalidate_step(slapsMergeSlicesAndEval));
488 }
489 print_objects_new.emplace_back(it_print_object_status->print_object);
490 const_cast<PrintObjectStatus&>(*it_print_object_status).status = PrintObjectStatus::Reused;
491 }
492 } else if (! new_instances.empty()) {
493 auto print_object = new SLAPrintObject(this, &model_object);
494
495 // FIXME: this invalidates the transformed mesh in SLAPrintObject
496 // which is expensive to calculate (especially the raw_mesh() call)
497 print_object->set_trafo(sla_trafo(model_object), model_object.instances.front()->is_left_handed());
498
499 print_object->set_instances(std::move(new_instances));
500
501 print_object->config_apply(m_default_object_config, true);
502 print_object->config_apply(model_object.config.get(), true);
503 print_objects_new.emplace_back(print_object);
504 new_objects = true;
505 }
506 }
507
508 if (m_objects != print_objects_new) {
509 this->call_cancel_callback();
510 update_apply_status(this->invalidate_all_steps());
511 m_objects = print_objects_new;
512 // Delete the PrintObjects marked as Unknown or Deleted.
513 for (auto &pos : print_object_status)
515 update_apply_status(pos.print_object->invalidate_all_steps());
516 delete pos.print_object;
517 }
518 if (new_objects)
519 update_apply_status(false);
520 }
521
522 if(m_objects.empty()) {
523 m_printer_input = {};
525 }
526
527#ifdef _DEBUG
529#endif /* _DEBUG */
530
531 m_full_print_config = std::move(config);
532 return static_cast<ApplyStatus>(apply_status);
533}
@ Unknown
Definition PresetBundle.hpp:42
static bool operator<(wxColour const &l, wxColour const &r)
Definition StateColor.cpp:11
bool invalidate_all_steps()
Definition PrintBase.hpp:622
void call_cancel_callback()
Definition PrintBase.hpp:540
ApplyStatus
Definition PrintBase.hpp:410
@ APPLY_STATUS_UNCHANGED
Definition PrintBase.hpp:412
@ APPLY_STATUS_CHANGED
Definition PrintBase.hpp:415
@ APPLY_STATUS_INVALIDATED
Definition PrintBase.hpp:417
const Model & model() const
Definition PrintBase.hpp:420
DynamicPrintConfig m_full_print_config
Definition PrintBase.hpp:562
Model m_model
Definition PrintBase.hpp:561
PlaceholderParser m_placeholder_parser
Definition PrintBase.hpp:564
bool invalidate_step(SLAPrintStep st)
Definition SLAPrint.cpp:703
SLAPrinterConfig m_printer_config
Definition SLAPrint.hpp:568
friend SLAPrintObject
Definition SLAPrint.hpp:598
bool invalidate_state_by_config_options(const std::vector< t_config_option_key > &opt_keys, bool &invalidate_all_model_objects)
Definition SLAPrint.cpp:826
SLAPrintConfig m_print_config
Definition SLAPrint.hpp:567
PrintObjects m_objects
Definition SLAPrint.hpp:572
SLAPrintObjectConfig m_default_object_config
Definition SLAPrint.hpp:570
Transform3d sla_trafo(const ModelObject &model_object) const
Definition SLAPrint.cpp:155
std::vector< PrintLayer > m_printer_input
Definition SLAPrint.hpp:576
SLAArchive * m_printer
Definition SLAPrint.hpp:579
SLAPrintStatistics m_print_statistics
Definition SLAPrint.hpp:582
SLAMaterialConfig m_material_config
Definition SLAPrint.hpp:569
@ Status
Definition PluginSort.hpp:19
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
@ UserModified
Definition SupportPoint.hpp:17
void check_model_ids_validity(const Model &model)
Definition Model.cpp:4375
bool model_object_list_extended(const Model &model_old, const Model &model_new)
Definition Model.cpp:4187
void check_model_ids_equal(const Model &model1, const Model &model2)
Definition Model.cpp:4399
Eigen::Transform< double, 3, Eigen::Affine, Eigen::DontAlign > Transform3d
Definition Point.hpp:96
@ MODEL_PART
Definition Model.hpp:357
std::vector< std::string > t_config_option_keys
Definition Config.hpp:97
@ New
Definition CadDocument.hpp:31
@ slaposSupportPoints
Definition SLAPrint.hpp:46
@ slaposDrillHoles
Definition SLAPrint.hpp:44
static std::vector< SLAPrintObject::Instance > sla_instances(const ModelObject &model_object)
Definition SLAPrint.cpp:185
bool model_volume_list_changed(const ModelObject &model_object_old, const ModelObject &model_object_new, TypeFilterFn type_filter)
Definition Model.cpp:4198
@ slapsMergeSlicesAndEval
Definition SLAPrint.hpp:37
bool model_object_list_equal(const Model &model_old, const Model &model_new)
Definition Model.cpp:4175
Slic3r::Polygons diff(const Slic3r::Polygon &subject, const Slic3r::Polygon &clip, ApplySafetyOffset do_safety_offset)
Definition ClipperUtils.cpp:731
@ lock
Definition GLGizmoEmboss.cpp:209
@ New
Definition PrintApply.cpp:486
@ Old
Definition PrintApply.cpp:485
@ Moved
Definition PrintApply.cpp:487
@ Deleted
Definition PrintApply.cpp:488
@ Deleted
Definition PrintApply.cpp:549
@ Reused
Definition PrintApply.cpp:550
@ Unknown
Definition PrintApply.cpp:548

References Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::APPLY_STATUS_CHANGED, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::APPLY_STATUS_INVALIDATED, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::APPLY_STATUS_UNCHANGED, Slic3r::ModelConfig::assign_config(), Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::call_cancel_callback(), Slic3r::check_model_ids_equal(), Slic3r::check_model_ids_validity(), Slic3r::ModelObject::clear_instances(), Slic3r::ConfigOption::clone(), Slic3r::ModelObject::config, Slic3r::ModelObjectStatus::Deleted, Slic3r::PrintObjectStatus::Deleted, Slic3r::diff(), Slic3r::ModelConfig::get(), Slic3r::ModelObjectStatus::id, Slic3r::ObjectBase::id(), Slic3r::ObjectID::id, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::id(), Slic3r::PrintObjectStatus::id, Slic3r::ModelObject::input_file, Slic3r::ModelObject::instances, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::invalidate_all_steps(), invalidate_state_by_config_options(), invalidate_step(), m_default_object_config, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::m_full_print_config, m_material_config, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::m_model, m_objects, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::m_placeholder_parser, m_print_config, m_print_statistics, m_printer, m_printer_config, m_printer_input, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::model(), Slic3r::PrintObjectBase::model_object(), Slic3r::model_object_list_equal(), Slic3r::model_object_list_extended(), Slic3r::MODEL_PART, Slic3r::model_volume_list_changed(), Slic3r::ModelObjectStatus::Moved, Slic3r::ModelObject::name, Slic3r::New, Slic3r::ModelObjectStatus::New, Slic3r::ModelObjectStatus::Old, operator<(), Slic3r::ConfigBase::option(), Slic3r::PrintObjectStatus::Reused, Slic3r::ModelObject::sla_drain_holes, Slic3r::sla_instances(), Slic3r::ModelObject::sla_points_status, Slic3r::ModelObject::sla_support_points, sla_trafo(), Slic3r::slaposDrillHoles, Slic3r::slaposSupportPoints, SLAPrintObject, Slic3r::slapsMergeSlicesAndEval, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::state_mutex(), Slic3r::PrintObjectStatus::status, Slic3r::ModelConfig::timestamp_matches(), Slic3r::SLAPrintObject::trafo(), Slic3r::CustomGCode::Unknown, Slic3r::PrintObjectStatus::Unknown, and Slic3r::sla::UserModified.

Here is the call graph for this function:

◆ assign_new_unique_ids_recursive()

virtual void Slic3r::ObjectBase::assign_new_unique_ids_recursive ( )
inlineprotectedvirtualinherited
95{ this->set_new_unique_id(); }
void set_new_unique_id()
Definition ObjectID.hpp:89

◆ call_cancel_callback()

void Slic3r::PrintBase::call_cancel_callback ( )
inlineprotectedinherited
cancel_callback_type m_cancel_callback
Definition PrintBase.hpp:580

Referenced by Slic3r::SLAPrint::apply(), and Slic3r::SLAPrint::set_task().

Here is the caller graph for this function:

◆ cancel()

void Slic3r::PrintBase::cancel ( )
inlineinherited

◆ cancel_callback()

std::function< void()> Slic3r::PrintBase::cancel_callback ( )
inlineprotectedinherited
539{ return m_cancel_callback; }

◆ cancel_internal()

◆ cancel_status()

◆ canceled()

bool Slic3r::PrintBase::canceled ( ) const
inlineinherited

Referenced by Slic3r::SLAPrint::Steps::rasterize(), and Slic3r::SLAPrint::Steps::support_tree().

Here is the caller graph for this function:

◆ clear()

void Slic3r::SLAPrint::clear ( )
overridevirtual

Implements Slic3r::PrintBase.

144{
145 std::scoped_lock<std::mutex> lock(this->state_mutex());
146 // The following call should stop background processing if it is running.
147 this->invalidate_all_steps();
148 for (SLAPrintObject *object : m_objects)
149 delete object;
150 m_objects.clear();
151 m_model.clear_objects();
152}

References Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::invalidate_all_steps(), Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::m_model, m_objects, SLAPrintObject, and Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::state_mutex().

Referenced by ~SLAPrint().

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

◆ copy_id()

void Slic3r::ObjectBase::copy_id ( const ObjectBase & rhs)
inlineprotectedinherited
92{ m_id = rhs.id(); }
ObjectID id() const
Definition ObjectID.hpp:69

◆ default_object_config()

const SLAPrintObjectConfig & Slic3r::SLAPrint::default_object_config ( ) const
inline
499{ return m_default_object_config; }

References m_default_object_config.

Referenced by Slic3r::GUI::GLCanvas3D::_render_sla_slices(), and Slic3r::anonymous_namespace{SL1.cpp}::fill_iniconf().

Here is the caller graph for this function:

◆ empty()

bool Slic3r::SLAPrint::empty ( ) const
inlineoverridevirtual

Implements Slic3r::PrintBase.

470{ return m_objects.empty(); }

References m_objects.

◆ export_cached_data()

virtual int Slic3r::PrintBase::export_cached_data ( const std::string & dir_path,
bool with_space = false )
inlinevirtualinherited
437{ return 0;}

◆ finalize()

void Slic3r::SLAPrint::finalize ( )
overridevirtual

Reimplemented from Slic3r::PrintBase.

625{
626 for (SLAPrintObject *po : m_objects)
627 for (size_t istep = 0; istep < slaposCount; ++ istep)
628 po->m_stepmask[istep] = true;
629 for (size_t istep = 0; istep < slapsCount; ++ istep)
630 m_stepmask[istep] = true;
631}
@ slaposCount
Definition SLAPrint.hpp:50

References m_objects, m_stepmask, Slic3r::slaposCount, SLAPrintObject, and Slic3r::slapsCount.

◆ finished()

bool Slic3r::SLAPrint::finished ( ) const
inlineoverridevirtual

Implements Slic3r::PrintBase.

bool is_step_done(SLAPrintStep step) const
Definition PrintBase.hpp:594
bool is_step_done(SLAPrintObjectStep step) const
Definition SLAPrint.cpp:911
@ slaposSliceSupports
Definition SLAPrint.hpp:49
@ slapsRasterize
Definition SLAPrint.hpp:38

References Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::is_step_done(), is_step_done(), Slic3r::slaposSliceSupports, and Slic3r::slapsRasterize.

Referenced by output_filename().

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

◆ full_print_config()

const DynamicPrintConfig & Slic3r::PrintBase::full_print_config ( ) const
inlineinherited
518{ return m_full_print_config; }

◆ generate_new_id()

ObjectID Slic3r::ObjectBase::generate_new_id ( )
inlinestaticprivateinherited
100{ return ObjectID(++ s_last_id); }

◆ get_no_check_flag()

bool Slic3r::PrintBase::get_no_check_flag ( ) const
inlineinherited
528{ return m_no_check; }

◆ get_object()

const SLAPrintObject * Slic3r::SLAPrint::get_object ( ObjectID object_id) const
inline
490 {
491 auto it = std::find_if(m_objects.begin(), m_objects.end(),
492 [object_id](const SLAPrintObject *obj) { return obj->id() == object_id; });
493 return (it == m_objects.end()) ? nullptr : *it;
494 }

References m_objects, and SLAPrintObject.

Referenced by Slic3r::GUI::Plater::priv::on_slicing_update().

Here is the caller graph for this function:

◆ get_plate_index()

int Slic3r::PrintBase::get_plate_index ( ) const
inlineinherited
526{ return m_plate_index; }

◆ get_plate_name()

std::string Slic3r::PrintBase::get_plate_name ( ) const
inlineinherited
532{ return m_plate_name; }

◆ get_print_object_by_model_object_id()

const SLAPrintObject * Slic3r::SLAPrint::get_print_object_by_model_object_id ( ObjectID object_id) const
inline
485 {
486 auto it = std::find_if(m_objects.begin(), m_objects.end(),
487 [object_id](const SLAPrintObject* obj) { return obj->model_object()->id() == object_id; });
488 return (it == m_objects.end()) ? nullptr : *it;
489 }

References m_objects, and SLAPrintObject.

◆ id()

ObjectID Slic3r::ObjectBase::id ( ) const
inlineinherited
69{ return m_id; }

Referenced by Slic3r::SLAPrint::apply().

Here is the caller graph for this function:

◆ invalidate_all_steps()

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::invalidate_all_steps ( )
inlineprotectedinherited
623 { return m_state.invalidate_all(this->cancel_callback()); }
std::function< void()> cancel_callback()
Definition PrintBase.hpp:539

Referenced by Slic3r::SLAPrint::apply(), Slic3r::SLAPrint::clear(), and Slic3r::SLAPrint::invalidate_step().

Here is the caller graph for this function:

◆ invalidate_state_by_config_options()

bool Slic3r::SLAPrint::invalidate_state_by_config_options ( const std::vector< t_config_option_key > & opt_keys,
bool & invalidate_all_model_objects )
private
827{
828 if (opt_keys.empty())
829 return false;
830
831 static std::unordered_set<std::string> steps_full = {
832 "initial_layer_height",
833 "material_correction",
834 "material_correction_x",
835 "material_correction_y",
836 "material_correction_z",
837 "relative_correction",
838 "relative_correction_x",
839 "relative_correction_y",
840 "relative_correction_z",
841 "absolute_correction",
842 "elefant_foot_compensation",
843 "elefant_foot_min_width",
844 "gamma_correction"
845 };
846
847 // Cache the plenty of parameters, which influence the final rasterization only,
848 // or they are only notes not influencing the rasterization step.
849 static std::unordered_set<std::string> steps_rasterize = {
850 "min_exposure_time",
851 "max_exposure_time",
852 "exposure_time",
853 "min_initial_exposure_time",
854 "max_initial_exposure_time",
855 "initial_exposure_time",
856 "display_width",
857 "display_height",
858 "display_pixels_x",
859 "display_pixels_y",
860 "display_mirror_x",
861 "display_mirror_y",
862 "display_orientation"
863 };
864
865 static std::unordered_set<std::string> steps_ignore = {
866 "printable_area",
867 "printable_height",
868 "printer_technology",
869 "filename_format",
870 "fast_tilt_time",
871 "slow_tilt_time",
872 "area_fill",
873 "bottle_cost",
874 "bottle_volume",
875 "bottle_weight",
876 "material_density"
877 };
878
879 std::vector<SLAPrintStep> steps;
880 std::vector<SLAPrintObjectStep> osteps;
881 bool invalidated = false;
882
883 for (const t_config_option_key &opt_key : opt_keys) {
884 if (steps_rasterize.find(opt_key) != steps_rasterize.end()) {
885 // These options only affect the final rasterization, or they are just notes without influence on the output,
886 // so there is nothing to invalidate.
887 steps.emplace_back(slapsMergeSlicesAndEval);
888 } else if (steps_ignore.find(opt_key) != steps_ignore.end()) {
889 // These steps have no influence on the output. Just ignore them.
890 } else if (steps_full.find(opt_key) != steps_full.end()) {
891 steps.emplace_back(slapsMergeSlicesAndEval);
892 osteps.emplace_back(slaposObjectSlice);
893 invalidate_all_model_objects = true;
894 } else {
895 // All values should be covered.
896 assert(false);
897 }
898 }
899
901 for (SLAPrintStep step : steps)
902 invalidated |= this->invalidate_step(step);
904 for (SLAPrintObjectStep ostep : osteps)
905 for (SLAPrintObject *object : m_objects)
906 invalidated |= object->invalidate_step(ostep);
907 return invalidated;
908}
std::string t_config_option_key
Definition Config.hpp:96
SLAPrintObjectStep
Definition SLAPrint.hpp:42
@ slaposObjectSlice
Definition SLAPrint.hpp:45
void sort_remove_duplicates(std::vector< T > &vec)
Definition libslic3r.h:231
SLAPrintStep
Definition SLAPrint.hpp:36

References invalidate_step(), m_objects, Slic3r::slaposObjectSlice, SLAPrintObject, Slic3r::slapsMergeSlicesAndEval, and Slic3r::sort_remove_duplicates().

Referenced by apply().

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

◆ invalidate_step()

bool Slic3r::SLAPrint::invalidate_step ( SLAPrintStep st)
private
704{
705 bool invalidated = Inherited::invalidate_step(step);
706
707 // propagate to dependent steps
708 if (step == slapsMergeSlicesAndEval) {
709 invalidated |= this->invalidate_all_steps();
710 }
711
712 return invalidated;
713}
bool invalidate_step(SLAPrintStep step)
Definition PrintBase.hpp:615

References Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::invalidate_all_steps(), Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::invalidate_step(), and Slic3r::slapsMergeSlicesAndEval.

Referenced by apply(), invalidate_state_by_config_options(), and set_printer().

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

◆ invalidate_steps() [1/2]

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::invalidate_steps ( std::initializer_list< SLAPrintStep > il)
inlineprotectedinherited
621 { return m_state.invalidate_multiple(il.begin(), il.end(), this->cancel_callback()); }

◆ invalidate_steps() [2/2]

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::invalidate_steps ( StepTypeIterator step_begin,
StepTypeIterator step_end )
inlineprotectedinherited
619 { return m_state.invalidate_multiple(step_begin, step_end, this->cancel_callback()); }

◆ is_step_done() [1/2]

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::is_step_done ( SLAPrintStep step) const
inlineinherited
594{ return m_state.is_done(step, this->state_mutex()); }

Referenced by Slic3r::SLAPrint::finished().

Here is the caller graph for this function:

◆ is_step_done() [2/2]

bool Slic3r::SLAPrint::is_step_done ( SLAPrintObjectStep step) const
912{
913 if (m_objects.empty())
914 return false;
915 std::scoped_lock<std::mutex> lock(this->state_mutex());
916 for (const SLAPrintObject *object : m_objects)
917 if (! object->is_step_done_unguarded(step))
918 return false;
919 return true;
920}

References m_objects, SLAPrintObject, and Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::state_mutex().

Referenced by finished().

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

◆ is_step_done_unguarded()

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::is_step_done_unguarded ( SLAPrintStep step) const
inlineprotectedinherited
626{ return m_state.is_done_unguarded(step); }

◆ is_step_started_unguarded()

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::is_step_started_unguarded ( SLAPrintStep step) const
inlineprotectedinherited
625{ return m_state.is_started_unguarded(step); }

◆ load_and_construct()

void Slic3r::ObjectBase::load_and_construct ( Archive & ar,
cereal::construct< ObjectBase > & construct )
inlinestaticprivateinherited
109{ ObjectID id; ar(id); construct(id); }

◆ load_cached_data()

virtual int Slic3r::PrintBase::load_cached_data ( const std::string & directory)
inlinevirtualinherited
438{ return 0;}

◆ make_try_cancel()

PrintTryCancel Slic3r::PrintBase::make_try_cancel ( ) const
inlineprotectedinherited
554{ return PrintTryCancel(this); }
friend PrintTryCancel
Definition PrintBase.hpp:587

◆ material_config()

const SLAMaterialConfig & Slic3r::SLAPrint::material_config ( ) const
inline
498{ return m_material_config; }

References m_material_config.

Referenced by Slic3r::GUI::GLCanvas3D::_render_sla_slices(), Slic3r::SLAPrint::Steps::merge_slices_and_eval_stats(), and relative_correction().

Here is the caller graph for this function:

◆ model()

const Model & Slic3r::PrintBase::model ( ) const
inlineinherited
420{ return m_model; }

Referenced by Slic3r::SLAPrint::apply().

Here is the caller graph for this function:

◆ objects()

const PrintObjects & Slic3r::SLAPrint::objects ( ) const
inline
482{ return m_objects; }

References m_objects.

Referenced by Slic3r::GUI::GLCanvas3D::_load_sla_shells(), Slic3r::GUI::GLCanvas3D::_render_sla_slices(), and Slic3r::anonymous_namespace{SL1.cpp}::fill_iniconf().

Here is the caller graph for this function:

◆ output_filename() [1/2]

std::string Slic3r::PrintBase::output_filename ( const std::string & format,
const std::string & default_ext,
const std::string & filename_base,
const DynamicConfig * config_override = nullptr ) const
protectedinherited
82{
84 if (config_override != nullptr)
86 cfg.set_key_value("version", new ConfigOptionString(std::string(SoftFever_VERSION)));
90 if (! filename_base.empty()) {
91 cfg.set_key_value("input_filename", new ConfigOptionString(filename_base + default_ext));
92 cfg.set_key_value("input_filename_base", new ConfigOptionString(filename_base));
93 }
94 try {
96 cfg.opt_string("input_filename_base") + default_ext :
98 if (filename.extension().empty())
99 filename.replace_extension(default_ext);
100 return filename.string();
101 } catch (std::runtime_error &err) {
102 throw Slic3r::PlaceholderParserError(L("Processing of the filename_format template failed.") + "\n" + err.what());
103 }
104}
#define L(s)
Definition ExtrusionEntity.cpp:25
void update_user_name()
Definition PlaceholderParser.hpp:88
std::string process(const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override, DynamicConfig *config_outputs, ContextData *context) const
Definition PlaceholderParser.cpp:2682
void update_timestamp()
Definition PlaceholderParser.hpp:85
virtual bool empty() const =0
void update_object_placeholders(DynamicConfig &config, const std::string &default_ext) const
Definition PrintBase.cpp:37
const PlaceholderParser & placeholder_parser() const
Definition PrintBase.hpp:517
zaa_minimize_perimeter_height ConfigOptionString
Definition PrintConfig.hpp:1702

◆ output_filename() [2/2]

std::string Slic3r::SLAPrint::output_filename ( const std::string & filename_base = std::string()) const
overridevirtual

Implements Slic3r::PrintBase.

637{
638 DynamicConfig config = this->finished() ? this->print_statistics().config() : this->print_statistics().placeholders();
639 return this->PrintBase::output_filename(m_print_config.filename_format.value, ".sl1", filename_base, &config);
640}
virtual std::string output_filename(const std::string &filename_base=std::string()) const =0
bool finished() const override
Definition SLAPrint.hpp:480
const SLAPrintStatistics & print_statistics() const
Definition SLAPrint.hpp:509
static DynamicConfig placeholders()
Definition SLAPrint.cpp:1247
DynamicConfig config() const
Definition SLAPrint.cpp:1235

References Slic3r::SLAPrintStatistics::config(), finished(), m_print_config, Slic3r::PrintBase::output_filename(), Slic3r::SLAPrintStatistics::placeholders(), and print_statistics().

Here is the call graph for this function:

◆ output_filepath()

std::string Slic3r::PrintBase::output_filepath ( const std::string & path,
const std::string & filename_base = std::string() ) const
inherited
107{
108 // if we were supplied no path, generate an automatic one based on our first object's input file
109 if (path.empty())
110 // get the first input file name
111 return (boost::filesystem::path(m_model.propose_export_file_name_and_path()).parent_path() / this->output_filename(filename_base)).make_preferred().string();
112
113 // if we were supplied a directory, use it and append our automatically generated filename
116 return (p / this->output_filename(filename_base)).make_preferred().string();
117
118 // if we were supplied a file which is not a directory, use it
119 return path;
120}

◆ placeholder_parser()

const PlaceholderParser & Slic3r::PrintBase::placeholder_parser ( ) const
inlineinherited
517{ return m_placeholder_parser; }

◆ print_config()

const SLAPrintConfig & Slic3r::SLAPrint::print_config ( ) const
inline
496{ return m_print_config; }

References m_print_config.

◆ print_layers()

const std::vector< PrintLayer > & Slic3r::SLAPrint::print_layers ( ) const
inline
555{ return m_printer_input; }

References m_printer_input.

◆ print_object_ids()

std::vector< ObjectID > Slic3r::SLAPrint::print_object_ids ( ) const
overridevirtual

Implements Slic3r::PrintBase.

204{
205 std::vector<ObjectID> out;
206 // Reserve one more for the caller to append the ID of the Print itself.
207 out.reserve(m_objects.size() + 1);
208 for (const SLAPrintObject *print_object : m_objects)
209 out.emplace_back(print_object->id());
210 return out;
211}

References m_objects, and SLAPrintObject.

◆ print_statistics()

const SLAPrintStatistics & Slic3r::SLAPrint::print_statistics ( ) const
inline
509{ return m_print_statistics; }

References m_print_statistics.

Referenced by Slic3r::anonymous_namespace{SL1.cpp}::fill_iniconf(), Slic3r::SLAPrint::Steps::merge_slices_and_eval_stats(), and output_filename().

Here is the caller graph for this function:

◆ printer_config()

const SLAPrinterConfig & Slic3r::SLAPrint::printer_config ( ) const
inline
497{ return m_printer_config; }

References m_printer_config.

Referenced by Slic3r::SLAPrint::Steps::merge_slices_and_eval_stats(), and relative_correction().

Here is the caller graph for this function:

◆ process()

void Slic3r::SLAPrint::process ( long long * time_cost_with_cache = nullptr,
bool use_cache = false )
overridevirtual

Implements Slic3r::PrintBase.

716{
717 if (m_objects.empty())
718 return;
719
721
722 // Assumption: at this point the print objects should be populated only with
723 // the model objects we have to process and the instances are also filtered
724
725 Steps printsteps(this);
726
727 // We want to first process all objects...
728 std::vector<SLAPrintObjectStep> level1_obj_steps = {
730 };
731
732 // and then slice all supports to allow preview to be displayed ASAP
733 std::vector<SLAPrintObjectStep> level2_obj_steps = {
735 };
736
738
739 double st = Steps::min_objstatus;
740
741 BOOST_LOG_TRIVIAL(info) << "Start slicing process.";
742
743#ifdef SLAPRINT_DO_BENCHMARK
744 Benchmark bench;
745#else
746 struct {
747 void start() {} void stop() {} double getElapsedSec() { return .0; }
748 } bench;
749#endif
750
751 std::array<double, slaposCount + slapsCount> step_times {};
752
753 auto apply_steps_on_objects =
754 [this, &st, &printsteps, &step_times, &bench]
755 (const std::vector<SLAPrintObjectStep> &steps)
756 {
757 double incr = 0;
758 for (SLAPrintObject *po : m_objects) {
759 for (SLAPrintObjectStep step : steps) {
760
761 // Cancellation checking. Each step will check for
762 // cancellation on its own and return earlier gracefully.
763 // Just after it returns execution gets to this point and
764 // throws the canceled signal.
766
767 st += incr;
768
769 if (po->m_stepmask[step] && po->set_started(step)) {
770 m_report_status(*this, st, printsteps.label(step));
771 bench.start();
772 printsteps.execute(step, *po);
773 bench.stop();
774 step_times[step] += bench.getElapsedSec();
776 po->set_done(step);
777 }
778
779 incr = printsteps.progressrange(step);
780 }
781 }
782 };
783
784 apply_steps_on_objects(level1_obj_steps);
785 apply_steps_on_objects(level2_obj_steps);
786
787 // this would disable the rasterization step
788 // std::fill(m_stepmask.begin(), m_stepmask.end(), false);
789
791 for(SLAPrintStep currentstep : print_steps) {
793
794 if (m_stepmask[currentstep] && set_started(currentstep)) {
795 m_report_status(*this, st, printsteps.label(currentstep));
796 bench.start();
797 printsteps.execute(currentstep);
798 bench.stop();
799 step_times[slaposCount + currentstep] += bench.getElapsedSec();
801 set_done(currentstep);
802 }
803
804 st += printsteps.progressrange(currentstep);
805 }
806
807 // If everything vent well
808 m_report_status(*this, 100, L("Slicing done"));
809
810#ifdef SLAPRINT_DO_BENCHMARK
811 std::string csvbenchstr;
812 for (size_t i = 0; i < size_t(slaposCount); ++i)
813 csvbenchstr += printsteps.label(SLAPrintObjectStep(i)) + ";";
814
815 for (size_t i = 0; i < size_t(slapsCount); ++i)
816 csvbenchstr += printsteps.label(SLAPrintStep(i)) + ";";
817
818 csvbenchstr += "\n";
819 for (double t : step_times) csvbenchstr += std::to_string(t) + ";";
820
821 std::cout << "Performance stats: \n" << csvbenchstr << std::endl;
822#endif
823
824}
PrintStateBase::TimeStamp set_done(SLAPrintStep step)
Definition PrintBase.hpp:609
bool set_started(SLAPrintStep step)
Definition PrintBase.hpp:608
void throw_if_canceled() const
Definition PrintBase.hpp:552
Definition SLAPrintSteps.hpp:15
static const constexpr unsigned max_objstatus
Definition SLAPrintSteps.hpp:23
static const constexpr unsigned min_objstatus
Definition SLAPrintSteps.hpp:22
class Slic3r::SLAPrint::StatusReporter m_report_status
@ slaposPad
Definition SLAPrint.hpp:48
@ slaposHollowing
Definition SLAPrint.hpp:43
@ slaposSupportTree
Definition SLAPrint.hpp:47
void name_tbb_thread_pool_threads_set_locale()
Definition Thread.cpp:225
void step(Coord &crd, const Dir d, const long n=1)
Definition MarchingSquares.hpp:213

References Slic3r::SLAPrint::Steps::execute(), L, Slic3r::SLAPrint::Steps::label(), m_objects, m_report_status, m_stepmask, Slic3r::SLAPrint::Steps::max_objstatus, Slic3r::SLAPrint::Steps::min_objstatus, Slic3r::name_tbb_thread_pool_threads_set_locale(), Slic3r::SLAPrint::Steps::progressrange(), Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::set_done(), Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::set_started(), Slic3r::slaposCount, Slic3r::slaposDrillHoles, Slic3r::slaposHollowing, Slic3r::slaposObjectSlice, Slic3r::slaposPad, Slic3r::slaposSliceSupports, Slic3r::slaposSupportPoints, Slic3r::slaposSupportTree, SLAPrintObject, Slic3r::slapsCount, Slic3r::slapsMergeSlicesAndEval, Slic3r::slapsRasterize, and Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::throw_if_canceled().

Here is the call graph for this function:

◆ relative_correction()

Vec3d Slic3r::SLAPrint::relative_correction ( ) const
1077{
1078 Vec3d corr(1., 1., 1.);
1079
1080 if(printer_config().relative_correction.values.size() >= 2) {
1081 corr.x() = printer_config().relative_correction_x.value;
1082 corr.y() = printer_config().relative_correction_y.value;
1083 corr.z() = printer_config().relative_correction_z.value;
1084 }
1085
1086 if(material_config().material_correction.values.size() >= 2) {
1087 corr.x() *= material_config().material_correction_x.value;
1088 corr.y() *= material_config().material_correction_y.value;
1089 corr.z() *= material_config().material_correction_z.value;
1090 }
1091
1092 return corr;
1093}
const SLAMaterialConfig & material_config() const
Definition SLAPrint.hpp:498
const SLAPrinterConfig & printer_config() const
Definition SLAPrint.hpp:497
Vec3d relative_correction() const
Definition SLAPrint.cpp:1076
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68

References material_config(), printer_config(), and relative_correction().

Referenced by relative_correction(), and sla_trafo().

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

◆ restart()

void Slic3r::PrintBase::restart ( )
inlineinherited

◆ serialize()

void Slic3r::ObjectBase::serialize ( Archive & ar)
inlineprivateinherited
108{ ar(m_id); }

◆ set_cancel_callback()

◆ set_done()

PrintStateBase::TimeStamp Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::set_done ( SLAPrintStep step)
inlineprotectedinherited
609 {
611 if (status.second)
613 return status.first;
614 }

Referenced by Slic3r::SLAPrint::process().

Here is the caller graph for this function:

◆ set_invalid_id()

void Slic3r::ObjectBase::set_invalid_id ( )
inlineprotectedinherited
90{ m_id = 0; }

◆ set_new_unique_id()

void Slic3r::ObjectBase::set_new_unique_id ( )
inlineprotectedinherited
89{ m_id = generate_new_id(); }
static ObjectID generate_new_id()
Definition ObjectID.hpp:100

◆ set_no_check_flag()

void Slic3r::PrintBase::set_no_check_flag ( bool no_check)
inlineinherited
529{ m_no_check = no_check; }

◆ set_plate_index()

void Slic3r::PrintBase::set_plate_index ( int index)
inlineinherited
527{ m_plate_index = index; }

◆ set_plate_name()

void Slic3r::PrintBase::set_plate_name ( const std::string & name)
inlineinherited
533{ m_plate_name = name; }

◆ set_printer()

void Slic3r::SLAPrint::set_printer ( SLAArchive * archiver)
698{
700 m_printer = arch;
701}

References invalidate_step(), m_printer, and Slic3r::slapsRasterize.

Here is the call graph for this function:

◆ set_started()

bool Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::set_started ( SLAPrintStep step)
inlineprotectedinherited
608{ return m_state.set_started(step, this->state_mutex(), [this](){ this->throw_if_canceled(); }); }

Referenced by Slic3r::SLAPrint::process().

Here is the caller graph for this function:

◆ set_status()

void Slic3r::PrintBase::set_status ( int percent,
const std::string & message,
unsigned int flags = SlicingStatus::DEFAULT,
int warning_step = -1 ) const
inherited
124{
127 else
128 BOOST_LOG_TRIVIAL(debug) <<boost::format("Percent %1%: %2%\n")%percent %message.c_str();
129}
status_callback_type m_status_callback
Definition PrintBase.hpp:574

◆ set_status_callback()

◆ set_status_default()

void Slic3r::PrintBase::set_status_default ( )
inlineinherited
484{ m_status_callback = nullptr; }

◆ set_status_silent()

void Slic3r::PrintBase::set_status_silent ( )
inlineinherited
486{ m_status_callback = [](const SlicingStatus&){}; }

◆ set_task()

void Slic3r::SLAPrint::set_task ( const TaskParams & params)
overridevirtual

Reimplemented from Slic3r::PrintBase.

537{
538 // Grab the lock for the Print / PrintObject milestones.
539 std::scoped_lock<std::mutex> lock(this->state_mutex());
540
541 int n_object_steps = int(params.to_object_step) + 1;
542 if (n_object_steps == 0)
543 n_object_steps = int(slaposCount);
544
545 if (params.single_model_object.valid()) {
546 // Find the print object to be processed with priority.
547 SLAPrintObject *print_object = nullptr;
548 size_t idx_print_object = 0;
549 for (; idx_print_object < m_objects.size(); ++ idx_print_object)
550 if (m_objects[idx_print_object]->model_object()->id() == params.single_model_object) {
551 print_object = m_objects[idx_print_object];
552 break;
553 }
554 assert(print_object != nullptr);
555 // Find out whether the priority print object is being currently processed.
556 bool running = false;
557 for (int istep = 0; istep < n_object_steps; ++ istep) {
558 if (! print_object->m_stepmask[size_t(istep)])
559 // Step was skipped, cancel.
560 break;
561 if (print_object->is_step_started_unguarded(SLAPrintObjectStep(istep))) {
562 // No step was skipped, and a wanted step is being processed. Don't cancel.
563 running = true;
564 break;
565 }
566 }
567 if (! running)
568 this->call_cancel_callback();
569
570 // Now the background process is either stopped, or it is inside one of the print object steps to be calculated anyway.
571 if (params.single_model_instance_only) {
572 // Suppress all the steps of other instances.
573 for (SLAPrintObject *po : m_objects)
574 for (size_t istep = 0; istep < slaposCount; ++ istep)
575 po->m_stepmask[istep] = false;
576 } else if (! running) {
577 // Swap the print objects, so that the selected print_object is first in the row.
578 // At this point the background processing must be stopped, so it is safe to shuffle print objects.
579 if (idx_print_object != 0)
580 std::swap(m_objects.front(), m_objects[idx_print_object]);
581 }
582 // and set the steps for the current object.
583 for (int istep = 0; istep < n_object_steps; ++ istep)
584 print_object->m_stepmask[size_t(istep)] = true;
585 for (int istep = n_object_steps; istep < int(slaposCount); ++ istep)
586 print_object->m_stepmask[size_t(istep)] = false;
587 } else {
588 // Slicing all objects.
589 bool running = false;
590 for (SLAPrintObject *print_object : m_objects)
591 for (int istep = 0; istep < n_object_steps; ++ istep) {
592 if (! print_object->m_stepmask[size_t(istep)]) {
593 // Step may have been skipped. Restart.
594 goto loop_end;
595 }
596 if (print_object->is_step_started_unguarded(SLAPrintObjectStep(istep))) {
597 // This step is running, and the state cannot be changed due to the this->state_mutex() being locked.
598 // It is safe to manipulate m_stepmask of other SLAPrintObjects and SLAPrint now.
599 running = true;
600 goto loop_end;
601 }
602 }
603 loop_end:
604 if (! running)
605 this->call_cancel_callback();
606 for (SLAPrintObject *po : m_objects) {
607 for (int istep = 0; istep < n_object_steps; ++ istep)
608 po->m_stepmask[size_t(istep)] = true;
609 for (auto istep = size_t(n_object_steps); istep < slaposCount; ++ istep)
610 po->m_stepmask[istep] = false;
611 }
612 }
613
614 if (params.to_object_step != -1 || params.to_print_step != -1) {
615 // Limit the print steps.
616 size_t istep = (params.to_object_step != -1) ? 0 : size_t(params.to_print_step) + 1;
617 for (; istep < m_stepmask.size(); ++ istep)
618 m_stepmask[istep] = false;
619 }
620}

References Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::call_cancel_callback(), Slic3r::PrintObjectBaseWithState< PrintType, PrintObjectStepEnum, COUNT >::is_step_started_unguarded(), m_objects, m_stepmask, Slic3r::SLAPrintObject::m_stepmask, Slic3r::PrintBase::TaskParams::single_model_instance_only, Slic3r::PrintBase::TaskParams::single_model_object, Slic3r::slaposCount, SLAPrintObject, Slic3r::PrintBaseWithState< SLAPrintStep, slapsCount >::state_mutex(), Slic3r::PrintBase::TaskParams::to_object_step, Slic3r::PrintBase::TaskParams::to_print_step, and Slic3r::ObjectID::valid().

Here is the call graph for this function:

◆ sla_trafo()

Transform3d Slic3r::SLAPrint::sla_trafo ( const ModelObject & model_object) const
156{
157
158 Vec3d corr = this->relative_correction();
159
160 ModelInstance &model_instance = *model_object.instances.front();
161 Vec3d offset = model_instance.get_offset();
162 Vec3d rotation = model_instance.get_rotation();
163 offset(0) = 0.;
164 offset(1) = 0.;
165 rotation(2) = 0.;
166
167 offset.z() *= corr.z();
168
169 auto trafo = Transform3d::Identity();
170 trafo.translate(offset);
171 trafo.scale(corr);
172 trafo.rotate(Eigen::AngleAxisd(rotation.z(), Vec3d::UnitZ()));
173 trafo.rotate(Eigen::AngleAxisd(rotation.y(), Vec3d::UnitY()));
174 trafo.rotate(Eigen::AngleAxisd(rotation.x(), Vec3d::UnitX()));
175 trafo.scale(model_instance.get_scaling_factor());
176 trafo.scale(model_instance.get_mirror());
177
178 if (model_instance.is_left_handed())
179 trafo = Eigen::Scaling(Vec3d(-1., 1., 1.)) * trafo;
180
181 return trafo;
182}
Slic3r::Polygons offset(const Slic3r::Polygon &polygon, const float delta, JoinType joinType, double miterLimit)
Definition ClipperUtils.cpp:582

References Slic3r::ModelInstance::get_mirror(), Slic3r::ModelInstance::get_offset(), Slic3r::ModelInstance::get_rotation(), Slic3r::ModelInstance::get_scaling_factor(), Slic3r::ModelObject::instances, Slic3r::ModelInstance::is_left_handed(), Slic3r::offset(), and relative_correction().

Referenced by apply().

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

◆ state_mutex()

std::mutex & Slic3r::PrintBase::state_mutex ( ) const
inlineprotectedinherited
538{ return m_state_mutex; }

Referenced by Slic3r::SLAPrint::apply(), Slic3r::SLAPrint::clear(), Slic3r::SLAPrint::is_step_done(), and Slic3r::SLAPrint::set_task().

Here is the caller graph for this function:

◆ status_update_warnings() [1/2]

void Slic3r::PrintBase::status_update_warnings ( int step,
PrintStateBase::WarningLevel warning_level,
const std::string & message,
const PrintObjectBase * print_object = nullptr,
PrintStateBase::SlicingNotificationType message_id = PrintStateBase::SlicingDefaultNotification )
protectedinherited
133{
134 if (this->m_status_callback) {
137 }
138 else if (! message.empty())
139 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Print warning: %1%\n")% message.c_str();
140}

◆ status_update_warnings() [2/2]

void Slic3r::PrintBase::status_update_warnings ( int step,
PrintStateBase::WarningLevel warning_level,
const std::string & message,
PrintObjectBase & object,
PrintStateBase::SlicingNotificationType message_id = PrintStateBase::SlicingDefaultNotification )
protectedinherited
145{
146 //BBS: add object it into slicing status
147 if (this->m_status_callback) {
149 }
150 else if (!message.empty())
151 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", PrintObject warning: %1%\n")% message.c_str();
152}

◆ step_state_with_timestamp()

PrintStateBase::StateWithTimeStamp Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::step_state_with_timestamp ( SLAPrintStep step) const
inlineinherited
595{ return m_state.state_with_timestamp(step, this->state_mutex()); }

◆ step_state_with_warnings()

PrintStateBase::StateWithWarnings Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::step_state_with_warnings ( SLAPrintStep step) const
inlineinherited
596{ return m_state.state_with_warnings(step, this->state_mutex()); }

◆ technology()

PrinterTechnology Slic3r::SLAPrint::technology ( ) const
inlineoverridevirtualnoexcept

Implements Slic3r::PrintBase.

467{ return ptSLA; }
@ ptSLA
Definition Config.hpp:233

References Slic3r::ptSLA.

◆ throw_if_canceled()

void Slic3r::PrintBase::throw_if_canceled ( ) const
inlineprotectedinherited

Referenced by Slic3r::SLAPrint::Steps::generate_pad(), Slic3r::SLAPrint::process(), Slic3r::SLAPrint::Steps::support_points(), and Slic3r::SLAPrint::Steps::support_tree().

Here is the caller graph for this function:

◆ timestamp()

virtual Timestamp Slic3r::ObjectBase::timestamp ( ) const
inlinevirtualinherited
74{ return 0; }

◆ update_object_placeholders()

void Slic3r::PrintBase::update_object_placeholders ( DynamicConfig & config,
const std::string & default_ext ) const
protectedinherited
38{
39 // get the first input file name
43 int num_objects = 0;
44 int num_instances = 0;
45 for (const ModelObject *model_object : m_model.objects) {
46 ModelInstance *printable = nullptr;
47 for (ModelInstance *model_instance : model_object->instances)
48 if (model_instance->is_printable()) {
51 }
52 if (printable) {
53 ++ num_objects;
54 if (num_objects == 1)
56 // CHECK_ME -> Is the following correct ?
57 v_scale.push_back("x:" + boost::lexical_cast<std::string>(printable->get_scaling_factor(X) * 100) +
58 "% y:" + boost::lexical_cast<std::string>(printable->get_scaling_factor(Y) * 100) +
59 "% z:" + boost::lexical_cast<std::string>(printable->get_scaling_factor(Z) * 100) + "%");
60 if (input_file.empty())
61 input_file = model_object->name.empty() ? model_object->input_file : model_object->name;
62 }
63 }
64
65 config.set_key_value("num_objects", new ConfigOptionInt(num_objects));
66 config.set_key_value("num_instances", new ConfigOptionInt(num_instances));
67
68 config.set_key_value("scale", new ConfigOptionStrings(v_scale));
69 config.set_key_value("first_object_name", new ConfigOptionString(first_object_name));
70 if (! input_file.empty()) {
71 // get basename with and without suffix
73 const std::string input_filename_base = input_filename.substr(0, input_filename.find_last_of("."));
74 config.set_key_value("input_filename", new ConfigOptionString(input_filename_base + default_ext));
75 config.set_key_value("input_filename_base", new ConfigOptionString(input_filename_base));
76 }
77}

◆ validate()

StringObjectException Slic3r::SLAPrint::validate ( std::vector< StringObjectException > * warnings = nullptr,
Polygons * collison_polygons = nullptr,
std::vector< std::pair< Polygon, float > > * height_polygons = nullptr ) const
overridevirtual

Reimplemented from Slic3r::PrintBase.

643{
644 for(SLAPrintObject * po : m_objects) {
645
646 const ModelObject *mo = po->model_object();
647 bool supports_en = po->config().supports_enable.getBool();
648
649 if(supports_en &&
650 mo->sla_points_status == sla::PointsStatus::UserModified &&
651 mo->sla_support_points.empty())
652 return {L("Cannot proceed without support points! "
653 "Add support points or disable support generation."), po};
654
655 sla::SupportTreeConfig cfg = make_support_cfg(po->config());
656
657 double elv = cfg.object_elevation_mm;
658
659 sla::PadConfig padcfg = make_pad_cfg(po->config());
660 sla::PadConfig::EmbedObject &builtinpad = padcfg.embed_object;
661
662 if(supports_en && !builtinpad.enabled && elv < cfg.head_fullwidth())
663 return {L(
664 "Elevation is too low for object. Use the \"Pad around "
665 "object\" feature to print the object without elevation."), po};
666
667 if(supports_en && builtinpad.enabled &&
668 cfg.pillar_base_safety_distance_mm < builtinpad.object_gap_mm) {
669 return {L(
670 "The endings of the support pillars will be deployed on the "
671 "gap between the object and the pad. 'Support base safety "
672 "distance' has to be greater than the 'Pad object gap' "
673 "parameter to avoid this."), po};
674 }
675
676 std::string pval = padcfg.validate();
677 if (!pval.empty()) return {pval, po};
678 }
679
680 double expt_max = m_printer_config.max_exposure_time.getFloat();
681 double expt_min = m_printer_config.min_exposure_time.getFloat();
682 double expt_cur = m_material_config.exposure_time.getFloat();
683
684 if (expt_cur < expt_min || expt_cur > expt_max)
685 return {L("Exposition time is out of printer profile bounds.")};
686
687 double iexpt_max = m_printer_config.max_initial_exposure_time.getFloat();
688 double iexpt_min = m_printer_config.min_initial_exposure_time.getFloat();
689 double iexpt_cur = m_material_config.initial_exposure_time.getFloat();
690
691 if (iexpt_cur < iexpt_min || iexpt_cur > iexpt_max)
692 return {L("Initial exposition time is out of printer profile bounds.")};
693
694 return {};
695}
sla::SupportTreeConfig make_support_cfg(const SLAPrintObjectConfig &c)
Definition SLAPrint.cpp:63
sla::PadConfig make_pad_cfg(const SLAPrintObjectConfig &c)
Definition SLAPrint.cpp:119

References Slic3r::ModelObject::config, Slic3r::sla::PadConfig::embed_object, Slic3r::sla::PadConfig::EmbedObject::enabled, Slic3r::sla::SupportTreeConfig::head_fullwidth(), L, m_material_config, m_objects, m_printer_config, Slic3r::make_pad_cfg(), Slic3r::make_support_cfg(), Slic3r::sla::SupportTreeConfig::object_elevation_mm, Slic3r::sla::PadConfig::EmbedObject::object_gap_mm, Slic3r::sla::SupportTreeConfig::pillar_base_safety_distance_mm, Slic3r::ModelObject::sla_points_status, Slic3r::ModelObject::sla_support_points, SLAPrintObject, Slic3r::sla::UserModified, and Slic3r::sla::PadConfig::validate().

Here is the call graph for this function:

Member Data Documentation

◆ m_cancel_callback

◆ m_cancel_status

std::atomic<CancelStatus> Slic3r::PrintBase::m_cancel_status
privateinherited

◆ m_default_object_config

SLAPrintObjectConfig Slic3r::SLAPrint::m_default_object_config
private

Referenced by apply(), and default_object_config().

◆ m_full_print_config

◆ m_id

◆ m_material_config

SLAMaterialConfig Slic3r::SLAPrint::m_material_config
private

◆ m_model

◆ m_no_check

bool Slic3r::PrintBase::m_no_check
protectedinherited

◆ m_objects

◆ m_ori_full_print_config

◆ m_placeholder_parser

◆ m_plate_index

int Slic3r::PrintBase::m_plate_index
protectedinherited
567{ 0 };

◆ m_plate_name

std::string Slic3r::PrintBase::m_plate_name
protectedinherited

◆ m_print_config

SLAPrintConfig Slic3r::SLAPrint::m_print_config
private

◆ m_print_statistics

SLAPrintStatistics Slic3r::SLAPrint::m_print_statistics
private

Referenced by apply(), and print_statistics().

◆ m_printer

SLAArchive* Slic3r::SLAPrint::m_printer = nullptr
private

Referenced by apply(), and set_printer().

◆ m_printer_config

SLAPrinterConfig Slic3r::SLAPrint::m_printer_config
private

Referenced by apply(), printer_config(), and validate().

◆ m_printer_input

std::vector<PrintLayer> Slic3r::SLAPrint::m_printer_input
private

Referenced by apply(), and print_layers().

◆ m_report_status

class Slic3r::SLAPrint::StatusReporter Slic3r::SLAPrint::m_report_status
private

Referenced by process().

◆ m_state

PrintState<SLAPrintStep, COUNT> Slic3r::PrintBaseWithState< SLAPrintStep, COUNT >::m_state
privateinherited

◆ m_state_mutex

std::mutex Slic3r::PrintBase::m_state_mutex
mutableprivateinherited

◆ m_status_callback

◆ m_stepmask

std::vector<bool> Slic3r::SLAPrint::m_stepmask
private

Referenced by SLAPrint(), finalize(), process(), and set_task().

◆ PrintTryCancel

friend Slic3r::PrintBase::PrintTryCancel
privateinherited

◆ s_last_id

size_t Slic3r::ObjectBase::s_last_id
staticprivateinherited

◆ SLAPrintObject


The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/SLAPrint.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/SLAPrint.cpp