Density tooltip for whole slider

+ allowe value out of slider range
+ add minimal value
+ slider starts at 50%
This commit is contained in:
Filip Sykala - NTB T15p 2025-01-14 15:10:56 +01:00 committed by Lukas Matena
parent 8e956f68c3
commit 8fe57e5a11
4 changed files with 48 additions and 13 deletions

View File

@ -97,3 +97,24 @@ SampleConfig &SampleConfigFactory::get_sample_config() {
gui_sample_config_opt = sla::SampleConfigFactory::create(.4f); gui_sample_config_opt = sla::SampleConfigFactory::create(.4f);
return *gui_sample_config_opt; return *gui_sample_config_opt;
} }
SampleConfig SampleConfigFactory::get_sample_config(float density) {
const SampleConfig &current = get_sample_config();
if (is_approx(density, 1.f))
return current;
if (density < .1f)
density = .1f; // minimal 10%
SampleConfig result = current; // copy
result.thin_max_distance = static_cast<coord_t>(current.thin_max_distance / density); // linear
result.thick_inner_max_distance = static_cast<coord_t>( // controll radius - quadratic
std::sqrt(sqr((double)current.thick_inner_max_distance) / density));
result.thick_outline_max_distance = static_cast<coord_t>(current.thick_outline_max_distance / density); // linear
// result.head_radius .. no change
// result.minimal_distance_from_outline .. no change
// result.maximal_distance_from_outline .. no change
// result.max_length_for_one_support_point .. no change
// result.max_length_for_two_support_points .. no change
verify(result);
return result;
}

View File

@ -24,6 +24,16 @@ private:
static std::optional<SampleConfig> gui_sample_config_opt; static std::optional<SampleConfig> gui_sample_config_opt;
public: public:
static SampleConfig &get_sample_config(); static SampleConfig &get_sample_config();
/// <summary>
/// Create scaled copy of sample config
/// </summary>
/// <param name="density"> Scale for config values(minimal value is .1f)
/// 1.f .. no scale
/// .9f .. less support points (approx 90%)
/// 1.1f.. extend count of supports (approx to 110%) </param>
/// <returns>Scaled configuration</returns>
static SampleConfig get_sample_config(float density);
}; };
} // namespace Slic3r::sla } // namespace Slic3r::sla
#endif // slic3r_SLA_SuppotstIslands_SampleConfigFactory_hpp_ #endif // slic3r_SLA_SuppotstIslands_SampleConfigFactory_hpp_

View File

@ -680,7 +680,7 @@ void SLAPrint::Steps::support_points(SLAPrintObject &po)
} }
// copy current configuration for sampling islands // copy current configuration for sampling islands
config.island_configuration = SampleConfigFactory::get_sample_config(); // copy config.island_configuration = SampleConfigFactory::get_sample_config(config.density_relative);
// scaling for the sub operations // scaling for the sub operations
double d = objectstep_scale * OBJ_STEP_LEVELS[slaposSupportPoints] / 100.0; double d = objectstep_scale * OBJ_STEP_LEVELS[slaposSupportPoints] / 100.0;

View File

@ -743,10 +743,9 @@ RENDER_AGAIN:
const char *support_points_density = "support_points_density_relative"; const char *support_points_density = "support_points_density_relative";
float density = static_cast<const ConfigOptionInt*>(get_config_options({support_points_density})[0])->value; float density = static_cast<const ConfigOptionInt*>(get_config_options({support_points_density})[0])->value;
if (m_imgui->slider_float("##density", &density, 0.f, 200.f, "%.f %%")){
mo->config.set(support_points_density, (int) density); wxString tooltip = _L(
} else if (ImGui::IsItemHovered()) "Divider for the supported radius\n"
ImGui::SetTooltip("Divider for the supported radius\n"
"Smaller value means less point, supported radius is enlarged.\n" "Smaller value means less point, supported radius is enlarged.\n"
"Larger value means more points, supported radius is reduced.\n" "Larger value means more points, supported radius is reduced.\n"
"-- density percent ----- radisu change from 100 --\n" "-- density percent ----- radisu change from 100 --\n"
@ -755,6 +754,11 @@ RENDER_AGAIN:
"| 125 | 80 |\n" "| 125 | 80 |\n"
"| 150 | 66 |\n" "| 150 | 66 |\n"
"| 200 | 50 |\n"); "| 200 | 50 |\n");
if (m_imgui->slider_float("##density", &density, 50.f, 200.f, "%.f %%", 1.f, false, tooltip)){
if (density < 10.f) // not neccessary, but lower value seems pointless. Zero cause issues inside algorithms.
density = 10.f;
mo->config.set(support_points_density, (int) density);
}
const ImGuiWrapper::LastSliderStatus &density_status = m_imgui->get_last_slider_status(); const ImGuiWrapper::LastSliderStatus &density_status = m_imgui->get_last_slider_status();
static std::optional<int> density_stash; // Value for undo/redo stack is written on stop dragging static std::optional<int> density_stash; // Value for undo/redo stack is written on stop dragging