mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 12:41:20 -06:00 
			
		
		
		
	Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_experiments
This commit is contained in:
		
						commit
						763576fbc2
					
				
					 13 changed files with 46 additions and 19 deletions
				
			
		|  | @ -13,7 +13,7 @@ use Slic3r::Geometry qw(X Y); | |||
| has '_print' => ( | ||||
|     is      => 'ro', | ||||
|     default => sub { Slic3r::Print->new }, | ||||
|     handles => [qw(apply_config extruders output_filepath | ||||
|     handles => [qw(apply_config_perl_tests_only extruders output_filepath | ||||
|                     total_used_filament total_extruded_volume | ||||
|                     placeholder_parser process)], | ||||
| ); | ||||
|  |  | |||
|  | @ -176,7 +176,7 @@ sub init_print { | |||
|     $config->set('gcode_comments', 1) if $ENV{SLIC3R_TESTS_GCODE}; | ||||
|      | ||||
|     my $print = Slic3r::Print->new; | ||||
|     $print->apply_config($config); | ||||
|     $print->apply_config_perl_tests_only($config); | ||||
|      | ||||
|     $models = [$models] if ref($models) ne 'ARRAY'; | ||||
|     $models = [ map { ref($_) ? $_ : model($_, %params) } @$models ]; | ||||
|  | @ -192,8 +192,8 @@ sub init_print { | |||
|             $print->add_model_object($model_object); | ||||
|         } | ||||
|     } | ||||
|     # Call apply_config one more time, so that the layer height profiles are updated over all PrintObjects. | ||||
|     $print->apply_config($config); | ||||
|     # Call apply_config_perl_tests_only one more time, so that the layer height profiles are updated over all PrintObjects. | ||||
|     $print->apply_config_perl_tests_only($config); | ||||
|     $print->validate; | ||||
|      | ||||
|     # We return a proxy object in order to keep $models alive as required by the Print API. | ||||
|  | @ -250,7 +250,7 @@ sub add_facet { | |||
| package Slic3r::Test::Print; | ||||
| use Moo; | ||||
| 
 | ||||
| has 'print'     => (is => 'ro', required => 1, handles => [qw(process apply_config)]); | ||||
| has 'print'     => (is => 'ro', required => 1, handles => [qw(process apply_config_perl_tests_only)]); | ||||
| has 'models'    => (is => 'ro', required => 1); | ||||
| 
 | ||||
| 1; | ||||
|  |  | |||
|  | @ -327,7 +327,10 @@ void ToolOrdering::fill_wipe_tower_partitions(const PrintConfig &config, coordf_ | |||
|                         LayerTools <_prev  = m_layer_tools[j - 1]; | ||||
|                         LayerTools <_next  = m_layer_tools[j + 1]; | ||||
|                         assert(! lt_prev.extruders.empty() && ! lt_next.extruders.empty()); | ||||
|                         assert(lt_prev.extruders.back() == lt_next.extruders.front()); | ||||
|                         // FIXME: Following assert tripped when running combine_infill.t. I decided to comment it out for now.
 | ||||
|                         // If it is a bug, it's likely not critical, because this code is unchanged for a long time. It might
 | ||||
|                         // still be worth looking into it more and decide if it is a bug or an obsolete assert.
 | ||||
|                         //assert(lt_prev.extruders.back() == lt_next.extruders.front());
 | ||||
| 						lt_extra.has_wipe_tower = true; | ||||
|                         lt_extra.extruders.push_back(lt_next.extruders.front()); | ||||
| 						lt_extra.wipe_tower_partitions = lt_next.wipe_tower_partitions; | ||||
|  |  | |||
|  | @ -51,7 +51,7 @@ void Print::reload_object(size_t /* idx */) | |||
|         this->invalidate_all_steps(); | ||||
| 		/* TODO: this method should check whether the per-object config and per-material configs
 | ||||
| 			have changed in such a way that regions need to be rearranged or we can just apply | ||||
| 			the diff and invalidate something.  Same logic as apply_config() | ||||
| 			the diff and invalidate something.  Same logic as apply() | ||||
| 			For now we just re-add all objects since we haven't implemented this incremental logic yet. | ||||
| 			This should also check whether object volumes (parts) have changed. */ | ||||
| 		// collect all current model objects
 | ||||
|  | @ -83,7 +83,7 @@ PrintRegion* Print::add_region(const PrintRegionConfig &config) | |||
|     return m_regions.back(); | ||||
| } | ||||
| 
 | ||||
| // Called by Print::apply_config().
 | ||||
| // Called by Print::apply().
 | ||||
| // This method only accepts PrintConfig option keys.
 | ||||
| bool Print::invalidate_state_by_config_options(const std::vector<t_config_option_key> &opt_keys) | ||||
| { | ||||
|  | @ -422,10 +422,32 @@ void Print::add_model_object(ModelObject* model_object, int idx) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| bool Print::apply_config(DynamicPrintConfig config) | ||||
| // This function is only called through the Perl-C++ binding from the unit tests, should be
 | ||||
| // removed when unit tests are rewritten to C++.
 | ||||
| bool Print::apply_config_perl_tests_only(DynamicPrintConfig config) | ||||
| { | ||||
| 	tbb::mutex::scoped_lock lock(this->state_mutex()); | ||||
| 
 | ||||
| 
 | ||||
|     // Perl unit tests were failing in case the preset was not normalized (e.g. https://github.com/prusa3d/PrusaSlicer/issues/2288 was caused
 | ||||
|     // by too short max_layer_height vector. Calling the necessary function Preset::normalize(...) is not currently possible because there is no
 | ||||
|     // access to preset. This should be solved when the unit tests are rewritten to C++. For now we just copy-pasted code from Preset.cpp
 | ||||
|     // to make sure the unit tests pass (functions set_num_extruders and nozzle_options()).
 | ||||
|     auto *nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(config.option("nozzle_diameter", true)); | ||||
|     assert(nozzle_diameter != nullptr); | ||||
|     const auto &defaults = FullPrintConfig::defaults(); | ||||
|     for (const std::string &key : { "nozzle_diameter", "min_layer_height", "max_layer_height", "extruder_offset", | ||||
|                                     "retract_length", "retract_lift", "retract_lift_above", "retract_lift_below", "retract_speed", "deretract_speed", | ||||
|                                     "retract_before_wipe", "retract_restart_extra", "retract_before_travel", "wipe", | ||||
|                                     "retract_layer_change", "retract_length_toolchange", "retract_restart_extra_toolchange", "extruder_colour" }) | ||||
|     { | ||||
|         auto *opt = config.option(key, true); | ||||
|         assert(opt != nullptr); | ||||
|         assert(opt->is_vector()); | ||||
|         unsigned int num_extruders = (unsigned int)nozzle_diameter->values.size(); | ||||
|         static_cast<ConfigOptionVectorBase*>(opt)->resize(num_extruders, defaults.option(key)); | ||||
|     } | ||||
| 
 | ||||
|     // we get a copy of the config object so we can modify it safely
 | ||||
|     config.normalize(); | ||||
|      | ||||
|  |  | |||
|  | @ -294,7 +294,7 @@ public: | |||
|     // The following three methods are used by the Perl tests only. Get rid of them!
 | ||||
|     void                reload_object(size_t idx); | ||||
|     void                add_model_object(ModelObject* model_object, int idx = -1); | ||||
|     bool                apply_config(DynamicPrintConfig config); | ||||
|     bool                apply_config_perl_tests_only(DynamicPrintConfig config); | ||||
| 
 | ||||
|     void                process() override; | ||||
|     // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file.
 | ||||
|  |  | |||
|  | @ -84,7 +84,7 @@ public: | |||
| 
 | ||||
|     // Set the step as started. Block on mutex while the Print / PrintObject / PrintRegion objects are being
 | ||||
|     // modified by the UI thread.
 | ||||
|     // This is necessary to block until the Print::apply_config() updates its state, which may
 | ||||
|     // This is necessary to block until the Print::apply() updates its state, which may
 | ||||
|     // influence the processing step being entered.
 | ||||
|     template<typename ThrowIfCanceled> | ||||
|     bool set_started(StepType step, tbb::mutex &mtx, ThrowIfCanceled throw_if_canceled) { | ||||
|  |  | |||
|  | @ -435,7 +435,7 @@ SupportLayerPtrs::const_iterator PrintObject::insert_support_layer(SupportLayerP | |||
|     return m_support_layers.insert(pos, new SupportLayer(id, this, height, print_z, slice_z)); | ||||
| } | ||||
| 
 | ||||
| // Called by Print::apply_config().
 | ||||
| // Called by Print::apply().
 | ||||
| // This method only accepts PrintObjectConfig and PrintRegionConfig option keys.
 | ||||
| bool PrintObject::invalidate_state_by_config_options(const std::vector<t_config_option_key> &opt_keys) | ||||
| { | ||||
|  |  | |||
|  | @ -1552,7 +1552,7 @@ SLAPrintObject::SLAPrintObject(SLAPrint *print, ModelObject *model_object): | |||
| 
 | ||||
| SLAPrintObject::~SLAPrintObject() {} | ||||
| 
 | ||||
| // Called by SLAPrint::apply_config().
 | ||||
| // Called by SLAPrint::apply().
 | ||||
| // This method only accepts SLAPrintObjectConfig option keys.
 | ||||
| bool SLAPrintObject::invalidate_state_by_config_options(const std::vector<t_config_option_key> &opt_keys) | ||||
| { | ||||
|  |  | |||
|  | @ -1646,6 +1646,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ | |||
|         const bool type_prusa = std::regex_match(path.string(), pattern_prusa); | ||||
| 
 | ||||
|         Slic3r::Model model; | ||||
|         bool is_project_file = type_prusa; | ||||
|         try { | ||||
|             if (type_3mf || type_zip_amf) { | ||||
|                 DynamicPrintConfig config; | ||||
|  | @ -1669,6 +1670,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ | |||
|                         Preset::normalize(config); | ||||
|                         wxGetApp().preset_bundle->load_config_model(filename.string(), std::move(config)); | ||||
|                         wxGetApp().load_current_presets(); | ||||
|                         is_project_file = true; | ||||
|                     } | ||||
|                     wxGetApp().app_config->update_config_dir(path.parent_path().string()); | ||||
|                 } | ||||
|  | @ -1688,7 +1690,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ | |||
|         { | ||||
|             // The model should now be initialized
 | ||||
| 
 | ||||
|             if (!type_3mf && !type_any_amf && !type_prusa) { | ||||
|             if (! is_project_file) { | ||||
|                 if (model.looks_like_multipart_object()) { | ||||
|                     wxMessageDialog dlg(q, _(L( | ||||
|                         "This file contains several objects positioned at multiple heights. " | ||||
|  |  | |||
|  | @ -89,7 +89,7 @@ plan tests => 8; | |||
|      | ||||
|     # we disable combination after infill has been generated | ||||
|     $config->set('infill_every_layers', 1); | ||||
|     $print->apply_config($config); | ||||
|     $print->apply_config_perl_tests_only($config); | ||||
|     $print->process; | ||||
|      | ||||
|     ok !(defined first { @{$_->get_region(0)->fill_surfaces} == 0 } | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ use Slic3r::Test; | |||
|     is $print->print->regions->[0]->config->fill_density, 100, 'region config inherits model object config'; | ||||
|      | ||||
|     # user exports G-code, thus the default config is reapplied | ||||
|     $print->print->apply_config($config); | ||||
|     $print->print->apply_config_perl_tests_only($config); | ||||
|      | ||||
|     is $print->print->regions->[0]->config->fill_density, 100, 'apply_config() does not override per-object settings'; | ||||
|      | ||||
|  |  | |||
|  | @ -106,7 +106,7 @@ use Slic3r::Test; | |||
|      | ||||
|     # we enable support material after skirt has been generated | ||||
|     $config->set('support_material', 1); | ||||
|     $print->apply_config($config); | ||||
|     $print->apply_config_perl_tests_only($config); | ||||
|      | ||||
|     my $skirt_length = 0; | ||||
|     my @extrusion_points = (); | ||||
|  |  | |||
|  | @ -142,8 +142,8 @@ _constant() | |||
|         %}; | ||||
|          | ||||
|     void add_model_object(ModelObject* model_object, int idx = -1); | ||||
|     bool apply_config(DynamicPrintConfig* config) | ||||
|         %code%{ RETVAL = THIS->apply_config(*config); %}; | ||||
|     bool apply_config_perl_tests_only(DynamicPrintConfig* config) | ||||
|         %code%{ RETVAL = THIS->apply_config_perl_tests_only(*config); %}; | ||||
|     bool has_infinite_skirt(); | ||||
|     std::vector<unsigned int> extruders() const; | ||||
|     int validate() %code%{  | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Enrico Turri
						Enrico Turri