diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
index e6b78fb85d..32c1c7ae8c 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
@@ -202,6 +202,10 @@ bool GLGizmoSVG::create_volume(std::string_view svg_file, ModelVolumeType volume
CreateVolumeParams input = create_input(m_parent, m_raycast_manager, volume_type);
DataBasePtr base = create_emboss_data_base(m_job_cancel, svg_file);
base->is_outside = volume_type == ModelVolumeType::MODEL_PART;
+ // is not a number || is infinity
+ if (mouse_pos.x() != mouse_pos.x() ||
+ mouse_pos.y() != mouse_pos.y())
+ return start_create_volume_without_position(input, std::move(base));
return start_create_volume(input, std::move(base), mouse_pos);
}
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSVG.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSVG.hpp
index fb084e8da2..4e5aa121df 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSVG.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSVG.hpp
@@ -63,7 +63,7 @@ public:
/// Object part / Negative volume / Modifier
/// Position on screen where to create volume
/// True on succesfull start creation otherwise False
- bool create_volume(std::string_view svg_file, ModelVolumeType volume_type = ModelVolumeType::MODEL_PART, const Vec2d &mouse_pos = Vec2d(nan, nan));
+ bool create_volume(std::string_view svg_file, ModelVolumeType volume_type = ModelVolumeType::MODEL_PART, const Vec2d &mouse_pos = Vec2d(std::nan, std::nan));
///
/// Check whether volume is object containing only emboss volume
diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp
index 64640b991e..bc2b3942a5 100644
--- a/src/slic3r/GUI/Jobs/EmbossJob.cpp
+++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp
@@ -719,8 +719,7 @@ bool check(const DataCreateVolume &input, bool is_main_thread)
assert(input.base != nullptr);
bool res = input.base != nullptr;
res &= check(*input.base, check_fontfile);
- assert(input.volume_type != ModelVolumeType::INVALID);
- res &= input.volume_type != ModelVolumeType::INVALID;
+ res &= is_valid(input.volume_type);
res &= check(input.gizmo);
assert(!input.base->shape.projection.use_surface);
res &= !input.base->shape.projection.use_surface;
@@ -1401,7 +1400,12 @@ bool finalize(bool canceled, std::exception_ptr &eptr, const DataBase &input)
bool is_valid(ModelVolumeType volume_type)
{
- if (volume_type == ModelVolumeType::MODEL_PART || volume_type == ModelVolumeType::NEGATIVE_VOLUME ||
+ assert(volume_type != ModelVolumeType::INVALID);
+ assert(volume_type == ModelVolumeType::MODEL_PART ||
+ volume_type == ModelVolumeType::NEGATIVE_VOLUME ||
+ volume_type == ModelVolumeType::PARAMETER_MODIFIER);
+ if (volume_type == ModelVolumeType::MODEL_PART ||
+ volume_type == ModelVolumeType::NEGATIVE_VOLUME ||
volume_type == ModelVolumeType::PARAMETER_MODIFIER)
return true;
@@ -1424,9 +1428,6 @@ bool start_create_volume_job(Worker &worker,
if (sources.empty() || !volume_tr.has_value()) {
use_surface = false;
} else {
- bool is_outside = volume_type == ModelVolumeType::MODEL_PART;
- // check that there is not unexpected volume type
- assert(is_outside || volume_type == ModelVolumeType::NEGATIVE_VOLUME || volume_type == ModelVolumeType::PARAMETER_MODIFIER);
SurfaceVolumeData sfvd{*volume_tr, std::move(sources)};
CreateSurfaceVolumeData surface_data{std::move(sfvd), std::move(data), volume_type, object.id(), gizmo};
job = std::make_unique(std::move(surface_data));