live preview in simplification
This commit is contained in:
parent
25a3ab255b
commit
80ccb77b00
2 changed files with 34 additions and 4 deletions
|
@ -143,8 +143,8 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
if(ImGui::RadioButton("##use_error", !m_configuration.use_count)) {
|
if(ImGui::RadioButton("##use_error", !m_configuration.use_count)) {
|
||||||
m_is_valid_result = false;
|
|
||||||
m_configuration.use_count = !m_configuration.use_count;
|
m_configuration.use_count = !m_configuration.use_count;
|
||||||
|
live_preview();
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
m_imgui->disabled_begin(m_configuration.use_count);
|
m_imgui->disabled_begin(m_configuration.use_count);
|
||||||
|
@ -160,7 +160,6 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
||||||
static int reduction = 2;
|
static int reduction = 2;
|
||||||
if(ImGui::SliderInt("##ReductionLevel", &reduction, 0, 4, reduce_captions[reduction].c_str())) {
|
if(ImGui::SliderInt("##ReductionLevel", &reduction, 0, 4, reduce_captions[reduction].c_str())) {
|
||||||
m_is_valid_result = false;
|
|
||||||
if (reduction < 0) reduction = 0;
|
if (reduction < 0) reduction = 0;
|
||||||
if (reduction > 4) reduction = 4;
|
if (reduction > 4) reduction = 4;
|
||||||
switch (reduction) {
|
switch (reduction) {
|
||||||
|
@ -170,12 +169,13 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
case 3: m_configuration.max_error = 0.5f; break;
|
case 3: m_configuration.max_error = 0.5f; break;
|
||||||
case 4: m_configuration.max_error = 1.f; break;
|
case 4: m_configuration.max_error = 1.f; break;
|
||||||
}
|
}
|
||||||
|
live_preview();
|
||||||
}
|
}
|
||||||
m_imgui->disabled_end(); // !use_count
|
m_imgui->disabled_end(); // !use_count
|
||||||
|
|
||||||
if (ImGui::RadioButton("##use_count", m_configuration.use_count)) {
|
if (ImGui::RadioButton("##use_count", m_configuration.use_count)) {
|
||||||
m_is_valid_result = false;
|
|
||||||
m_configuration.use_count = !m_configuration.use_count;
|
m_configuration.use_count = !m_configuration.use_count;
|
||||||
|
live_preview();
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
|
@ -192,13 +192,14 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
ImGui::SetNextItemWidth(m_gui_cfg->input_width);
|
||||||
const char * format = (m_configuration.decimate_ratio > 10)? "%.0f %%":
|
const char * format = (m_configuration.decimate_ratio > 10)? "%.0f %%":
|
||||||
((m_configuration.decimate_ratio > 1)? "%.1f %%":"%.2f %%");
|
((m_configuration.decimate_ratio > 1)? "%.1f %%":"%.2f %%");
|
||||||
|
|
||||||
if (ImGui::SliderFloat("##decimate_ratio", &m_configuration.decimate_ratio, 0.f, 100.f, format)) {
|
if (ImGui::SliderFloat("##decimate_ratio", &m_configuration.decimate_ratio, 0.f, 100.f, format)) {
|
||||||
m_is_valid_result = false;
|
|
||||||
if (m_configuration.decimate_ratio < 0.f)
|
if (m_configuration.decimate_ratio < 0.f)
|
||||||
m_configuration.decimate_ratio = 0.01f;
|
m_configuration.decimate_ratio = 0.01f;
|
||||||
if (m_configuration.decimate_ratio > 100.f)
|
if (m_configuration.decimate_ratio > 100.f)
|
||||||
m_configuration.decimate_ratio = 100.f;
|
m_configuration.decimate_ratio = 100.f;
|
||||||
m_configuration.fix_count_by_ratio(triangle_count);
|
m_configuration.fix_count_by_ratio(triangle_count);
|
||||||
|
live_preview();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::NewLine();
|
ImGui::NewLine();
|
||||||
|
@ -221,12 +222,16 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::SameLine(m_gui_cfg->bottom_left_width);
|
ImGui::SameLine(m_gui_cfg->bottom_left_width);
|
||||||
|
|
||||||
|
m_imgui->disabled_begin(m_configuration.live_preview || m_is_valid_result);
|
||||||
if (m_imgui->button(_L("Preview"))) {
|
if (m_imgui->button(_L("Preview"))) {
|
||||||
m_state = State::preview;
|
m_state = State::preview;
|
||||||
// simplify but not apply on mesh
|
// simplify but not apply on mesh
|
||||||
process();
|
process();
|
||||||
}
|
}
|
||||||
|
m_imgui->disabled_end();
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
if (m_imgui->button(_L("Apply"))) {
|
if (m_imgui->button(_L("Apply"))) {
|
||||||
if (!m_is_valid_result) {
|
if (!m_is_valid_result) {
|
||||||
m_state = State::close_on_end;
|
m_state = State::close_on_end;
|
||||||
|
@ -238,6 +243,11 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Checkbox(_L("Live").c_str(), &m_configuration.live_preview)) {
|
||||||
|
if (m_configuration.live_preview && !m_is_valid_result)
|
||||||
|
live_preview();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m_imgui->disabled_begin(m_state == State::canceling);
|
m_imgui->disabled_begin(m_state == State::canceling);
|
||||||
if (m_imgui->button(_L("Cancel"))) m_state = State::canceling;
|
if (m_imgui->button(_L("Cancel"))) m_state = State::canceling;
|
||||||
|
@ -280,6 +290,23 @@ void GLGizmoSimplify::close() {
|
||||||
gizmos_mgr.open_gizmo(GLGizmosManager::EType::Simplify);
|
gizmos_mgr.open_gizmo(GLGizmosManager::EType::Simplify);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoSimplify::live_preview() {
|
||||||
|
m_is_valid_result = false;
|
||||||
|
if (!m_configuration.live_preview) return;
|
||||||
|
|
||||||
|
if (m_state != State::settings) {
|
||||||
|
if (m_state == State::canceling) return;
|
||||||
|
|
||||||
|
// wait until cancel
|
||||||
|
if (m_worker.joinable()) {
|
||||||
|
m_state = State::canceling;
|
||||||
|
m_worker.join();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_state = State::preview;
|
||||||
|
process();
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoSimplify::process()
|
void GLGizmoSimplify::process()
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,6 +39,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
void after_apply();
|
void after_apply();
|
||||||
void close();
|
void close();
|
||||||
|
void live_preview();
|
||||||
void process();
|
void process();
|
||||||
void set_its(indexed_triangle_set &its);
|
void set_its(indexed_triangle_set &its);
|
||||||
void create_gui_cfg();
|
void create_gui_cfg();
|
||||||
|
@ -73,6 +74,8 @@ private:
|
||||||
|
|
||||||
struct Configuration
|
struct Configuration
|
||||||
{
|
{
|
||||||
|
bool live_preview = false;
|
||||||
|
|
||||||
bool use_count = false;
|
bool use_count = false;
|
||||||
// minimal triangle count
|
// minimal triangle count
|
||||||
float decimate_ratio = 50.f; // in percent
|
float decimate_ratio = 50.f; // in percent
|
||||||
|
|
Loading…
Reference in a new issue