diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 3c9448791..bd5f4678c 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -16,11 +16,18 @@ #include #include #include +#include "fast_float/fast_float.h" #define CALI_DEBUG namespace pt = boost::property_tree; +float string_to_float(const std::string& str_value) { + float value = 0.0; + fast_float::from_chars(str_value.c_str(), str_value.c_str() + str_value.size(), value); + return value; +} + const int PRINTING_STAGE_COUNT = 32; std::string PRINTING_STAGE_STR[PRINTING_STAGE_COUNT] = { "printing", @@ -3346,7 +3353,7 @@ int MachineObject::parse_json(std::string payload) if (jj["nozzle_diameter"].is_number_float()) { nozzle_diameter = jj["nozzle_diameter"].get(); } else if (jj["nozzle_diameter"].is_string()) { - nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); } } } @@ -4300,7 +4307,7 @@ int MachineObject::parse_json(std::string payload) pa_calib_tab_nozzle_dia = jj["nozzle_diameter"].get(); } else if (jj["nozzle_diameter"].is_string()) { - pa_calib_tab_nozzle_dia = stof(jj["nozzle_diameter"].get().c_str()); + pa_calib_tab_nozzle_dia = string_to_float(jj["nozzle_diameter"].get()); } else { assert(false); @@ -4327,18 +4334,18 @@ int MachineObject::parse_json(std::string payload) if (jj["nozzle_diameter"].is_number_float()) { pa_calib_result.nozzle_diameter = jj["nozzle_diameter"].get(); } else if (jj["nozzle_diameter"].is_string()) { - pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + pa_calib_result.nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); } if ((*it)["k_value"].is_number_float()) pa_calib_result.k_value = (*it)["k_value"].get(); else if ((*it)["k_value"].is_string()) - pa_calib_result.k_value = stof((*it)["k_value"].get().c_str()); + pa_calib_result.k_value = string_to_float((*it)["k_value"].get()); if ((*it)["n_coef"].is_number_float()) pa_calib_result.n_coef = (*it)["n_coef"].get(); else if ((*it)["n_coef"].is_string()) - pa_calib_result.n_coef = stof((*it)["n_coef"].get().c_str()); + pa_calib_result.n_coef = string_to_float((*it)["n_coef"].get()); if (check_pa_result_validation(pa_calib_result)) pa_calib_tab.push_back(pa_calib_result); @@ -4374,18 +4381,18 @@ int MachineObject::parse_json(std::string payload) if (jj["nozzle_diameter"].is_number_float()) { pa_calib_result.nozzle_diameter = jj["nozzle_diameter"].get(); } else if (jj["nozzle_diameter"].is_string()) { - pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + pa_calib_result.nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); } if ((*it)["k_value"].is_number_float()) pa_calib_result.k_value = (*it)["k_value"].get(); else if ((*it)["k_value"].is_string()) - pa_calib_result.k_value = stof((*it)["k_value"].get().c_str()); + pa_calib_result.k_value = string_to_float((*it)["k_value"].get()); if ((*it)["n_coef"].is_number_float()) pa_calib_result.n_coef = (*it)["n_coef"].get(); else if ((*it)["n_coef"].is_string()) - pa_calib_result.n_coef = stof((*it)["n_coef"].get().c_str()); + pa_calib_result.n_coef = string_to_float((*it)["n_coef"].get()); if (it->contains("confidence")) { pa_calib_result.confidence = (*it)["confidence"].get(); @@ -4421,8 +4428,8 @@ int MachineObject::parse_json(std::string payload) flow_ratio_calib_result.tray_id = (*it)["tray_id"].get(); flow_ratio_calib_result.filament_id = (*it)["filament_id"].get(); flow_ratio_calib_result.setting_id = (*it)["setting_id"].get(); - flow_ratio_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); - flow_ratio_calib_result.flow_ratio = stof((*it)["flow_ratio"].get().c_str()); + flow_ratio_calib_result.nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); + flow_ratio_calib_result.flow_ratio = string_to_float((*it)["flow_ratio"].get()); if (it->contains("confidence")) { flow_ratio_calib_result.confidence = (*it)["confidence"].get(); } else { @@ -4721,8 +4728,8 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil FilamentInfo f; f.color = filament["color"].get(); f.type = filament["type"].get(); - f.used_g = stof(filament["used_g"].get()); - f.used_m = stof(filament["used_m"].get()); + f.used_g = string_to_float(filament["used_g"].get()); + f.used_m = string_to_float(filament["used_m"].get()); slice_info->filaments_info.push_back(f); } }