ENH:upgrade render_combo and calc_projection api

Jira: STUDIO-4227
Change-Id: I0cfcca0c7b845fe84647ed017a5f8cf757b3e46a
This commit is contained in:
zhou.xu 2023-09-20 17:29:56 +08:00 committed by Lane.Wei
parent eea3e32d0d
commit 67a4457b30
2 changed files with 13 additions and 15 deletions

View File

@ -505,7 +505,7 @@ void GLGizmoAdvancedCut::on_update(const UpdateData& data)
//m_move_grabber.angles = m_current_base_rotation + m_rotation;
if (m_hover_id == get_group_id()) {
double move = calc_projection(data.mouse_ray);
double move = calc_projection(m_drag_pos,data.mouse_ray,get_plane_normal());
set_movement(m_start_movement + move);
Vec3d plane_normal = get_plane_normal();
m_height = m_start_height + plane_normal(2) * move;
@ -773,14 +773,12 @@ Vec3d GLGizmoAdvancedCut::calc_plane_center(const std::array<Vec3d, 4>& plane_po
return plane_center / (float)m_cut_plane_points.size();
}
double GLGizmoAdvancedCut::calc_projection(const Linef3& mouse_ray) const
double GLGizmoAdvancedCut::calc_projection(const Vec3d &drag_pos, const Linef3 &mouse_ray, const Vec3d &project_dir) const
{
Vec3d mouse_dir = mouse_ray.unit_vector();
Vec3d inters = mouse_ray.a + (m_drag_pos - mouse_ray.a).dot(mouse_dir) / mouse_dir.squaredNorm() * mouse_dir;
Vec3d inters_vec = inters - m_drag_pos;
Vec3d plane_normal = get_plane_normal();
return inters_vec.dot(plane_normal);
Vec3d inters = mouse_ray.a + (drag_pos - mouse_ray.a).dot(mouse_dir) / mouse_dir.squaredNorm() * mouse_dir;
Vec3d inters_vec = inters - drag_pos;
return inters_vec.dot(project_dir);
}
Vec3d GLGizmoAdvancedCut::get_plane_normal() const
@ -1591,7 +1589,7 @@ void GLGizmoAdvancedCut::render_connectors_input_window(float x, float y, float
}
ImGuiWrapper::push_combo_style(m_parent.get_scale());
if (render_combo(_u8L("Style"), connector_styles, m_connector_style))
if (render_combo(_u8L("Style"), connector_styles, m_connector_style, m_label_width, m_editing_window_width))
apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.style = CutConnectorStyle(m_connector_style); });
ImGuiWrapper::pop_combo_style();
m_imgui->disabled_end();
@ -1602,7 +1600,7 @@ void GLGizmoAdvancedCut::render_connectors_input_window(float x, float y, float
apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.shape = CutConnectorShape(m_connector_shape_id); });
}
ImGuiWrapper::push_combo_style(m_parent.get_scale());
if (render_combo(_u8L("Shape"), connector_shapes, m_connector_shape_id))
if (render_combo(_u8L("Shape"), connector_shapes, m_connector_shape_id, m_label_width, m_editing_window_width))
apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.shape = CutConnectorShape(m_connector_shape_id); });
ImGuiWrapper::pop_combo_style();
m_imgui->disabled_end();
@ -1727,12 +1725,12 @@ bool GLGizmoAdvancedCut::render_connect_type_radio_button(CutConnectorType type)
return false;
}
bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vector<std::string> &lines, size_t &selection_idx)
bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vector<std::string> &lines, size_t &selection_idx, float label_width, float item_width)
{
ImGui::AlignTextToFramePadding();
m_imgui->text(label);
ImGui::SameLine(m_label_width);
ImGui::PushItemWidth(m_editing_window_width);
ImGui::SameLine(label_width);
ImGui::PushItemWidth(item_width);
size_t selection_out = selection_idx;

View File

@ -237,7 +237,7 @@ private:
bool is_selection_changed(bool alt_down, bool shift_down);
void select_connector(int idx, bool select);
double calc_projection(const Linef3& mouse_ray) const;
double calc_projection(const Vec3d &drag_pos, const Linef3 &mouse_ray, const Vec3d &project_dir) const;
Vec3d calc_plane_normal(const std::array<Vec3d, 4>& plane_points) const;
Vec3d calc_plane_center(const std::array<Vec3d, 4>& plane_points) const;
Vec3d get_plane_normal() const;
@ -280,7 +280,7 @@ private:
bool render_reset_button(const std::string &label_id, const std::string &tooltip) const;
bool render_connect_type_radio_button(CutConnectorType type);
bool render_combo(const std::string &label, const std::vector<std::string> &lines, size_t &selection_idx);
bool render_combo(const std::string &label, const std::vector<std::string> &lines, size_t &selection_idx, float label_width, float item_width);
bool render_slider_double_input(const std::string &label, float &value_in, float &tolerance_in);
enum DoubleShowType {
Normal, // origin data