From 015a4a37dc8697725128d6e4107a5ea546b5c558 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Tue, 24 Mar 2020 11:52:43 +0100
Subject: [PATCH] Fix of a wrong order of processing the config sources when
 slicing from command line. Fixes PrusaSlicer Console --load my_config.ini
 doesnt overwrites the 3mf profiles or not used. #3893

The priority of config values is now:

1) Config keys from command line, for example --fill-pattern=stars
   (highest priority, overwrites everything below)
2) Config files loaded with --load
3) Config from 3mf
   (lowest priority)
---
 src/PrusaSlicer.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
index 048aea886..3611b1c04 100644
--- a/src/PrusaSlicer.cpp
+++ b/src/PrusaSlicer.cpp
@@ -132,14 +132,18 @@ int CLI::run(int argc, char **argv)
         Model model;
         try {
             // When loading an AMF or 3MF, config is imported as well, including the printer technology.
-            model = Model::read_from_file(file, &m_print_config, true);
-            PrinterTechnology other_printer_technology = get_printer_technology(m_print_config);
+            DynamicPrintConfig config;
+            model = Model::read_from_file(file, &config, true);
+            PrinterTechnology other_printer_technology = get_printer_technology(config);
             if (printer_technology == ptUnknown) {
                 printer_technology = other_printer_technology;
             } else if (printer_technology != other_printer_technology && other_printer_technology != ptUnknown) {
                 boost::nowide::cerr << "Mixing configurations for FFF and SLA technologies" << std::endl;
                 return 1;
             }
+            // config is applied to m_print_config before the current m_config values.
+            config += std::move(m_print_config);
+            m_print_config = std::move(config);
         } catch (std::exception &e) {
             boost::nowide::cerr << file << ": " << e.what() << std::endl;
             return 1;