From 847efec2ed71896cdb84e70cac17add166a36154 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 13 Feb 2020 12:13:54 +0100 Subject: [PATCH] ENABLE_6DOF_CAMERA set as default --- src/libslic3r/Technologies.hpp | 3 - src/slic3r/GUI/3DBed.cpp | 10 - src/slic3r/GUI/3DBed.hpp | 4 - src/slic3r/GUI/AppConfig.cpp | 2 - src/slic3r/GUI/Camera.cpp | 328 +++++---------------------- src/slic3r/GUI/Camera.hpp | 36 +-- src/slic3r/GUI/GLCanvas3D.cpp | 55 +---- src/slic3r/GUI/Mouse3DController.cpp | 15 -- src/slic3r/GUI/Preferences.cpp | 2 - src/slic3r/GUI/Selection.cpp | 4 - 10 files changed, 63 insertions(+), 396 deletions(-) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 17adc8d47..1f934b6c8 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -47,9 +47,6 @@ //================== #define ENABLE_2_2_0_BETA1 1 -// Enable 6 degrees of freedom camera -#define ENABLE_6DOF_CAMERA (1 && ENABLE_2_2_0_BETA1) - // Enhance reload from disk to be able to work with 3mf/amf files saved with PrusaSlicer 2.1.0 and earlier #define ENABLE_BACKWARD_COMPATIBLE_RELOAD_FROM_DISK (1 && ENABLE_2_2_0_BETA1) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 00b7f2382..23acd18ef 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -260,11 +260,7 @@ Point Bed3D::point_projection(const Point& point) const return m_polygon.point_projection(point); } -#if ENABLE_6DOF_CAMERA void Bed3D::render(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes) const -#else -void Bed3D::render(GLCanvas3D& canvas, float theta, float scale_factor, bool show_axes) const -#endif // ENABLE_6DOF_CAMERA { m_scale_factor = scale_factor; @@ -275,15 +271,9 @@ void Bed3D::render(GLCanvas3D& canvas, float theta, float scale_factor, bool sho switch (m_type) { -#if ENABLE_6DOF_CAMERA case System: { render_system(canvas, bottom); break; } default: case Custom: { render_custom(canvas, bottom); break; } -#else - case System: { render_system(canvas, theta > 90.0f); break; } - default: - case Custom: { render_custom(canvas, theta > 90.0f); break; } -#endif // ENABLE_6DOF_CAMERA } glsafe(::glDisable(GL_DEPTH_TEST)); diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index b1835a919..3a5f95978 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -107,11 +107,7 @@ public: bool contains(const Point& point) const; Point point_projection(const Point& point) const; -#if ENABLE_6DOF_CAMERA void render(GLCanvas3D& canvas, bool bottom, float scale_factor, bool show_axes) const; -#else - void render(GLCanvas3D& canvas, float theta, float scale_factor, bool show_axes) const; -#endif // ENABLE_6DOF_CAMERA private: void calc_bounding_boxes() const; diff --git a/src/slic3r/GUI/AppConfig.cpp b/src/slic3r/GUI/AppConfig.cpp index 9bf407f93..35799e046 100644 --- a/src/slic3r/GUI/AppConfig.cpp +++ b/src/slic3r/GUI/AppConfig.cpp @@ -88,10 +88,8 @@ void AppConfig::set_defaults() if (get("use_perspective_camera").empty()) set("use_perspective_camera", "1"); -#if ENABLE_6DOF_CAMERA if (get("use_free_camera").empty()) set("use_free_camera", "0"); -#endif // ENABLE_6DOF_CAMERA // Remove legacy window positions/sizes erase("", "main_frame_maximized"); diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index 18075c3f8..d17ba7cd7 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -7,17 +7,11 @@ #include "GUI_App.hpp" #include "AppConfig.hpp" #if ENABLE_CAMERA_STATISTICS -#if ENABLE_6DOF_CAMERA #include "Mouse3DController.hpp" -#endif // ENABLE_6DOF_CAMERA #endif // ENABLE_CAMERA_STATISTICS #include -#if !ENABLE_6DOF_CAMERA -static const float GIMBALL_LOCK_THETA_MAX = 180.0f; -#endif // !ENABLE_6DOF_CAMERA - // phi / theta angles to orient the camera. static const float VIEW_DEFAULT[2] = { 45.0f, 45.0f }; static const float VIEW_LEFT[2] = { 90.0f, 90.0f }; @@ -41,29 +35,17 @@ double Camera::FrustrumZMargin = 10.0; double Camera::MaxFovDeg = 60.0; Camera::Camera() -#if ENABLE_6DOF_CAMERA : requires_zoom_to_bed(false) -#else - : phi(45.0f) - , requires_zoom_to_bed(false) - , inverted_phi(false) -#endif // ENABLE_6DOF_CAMERA , m_type(Perspective) , m_target(Vec3d::Zero()) -#if ENABLE_6DOF_CAMERA , m_zenit(45.0f) -#else - , m_theta(45.0f) -#endif // ENABLE_6DOF_CAMERA , m_zoom(1.0) , m_distance(DefaultDistance) , m_gui_scale(1.0) , m_view_matrix(Transform3d::Identity()) , m_projection_matrix(Transform3d::Identity()) { -#if ENABLE_6DOF_CAMERA set_default_orientation(); -#endif // ENABLE_6DOF_CAMERA } std::string Camera::get_type_as_string() const @@ -103,36 +85,9 @@ void Camera::select_next_type() void Camera::set_target(const Vec3d& target) { -#if ENABLE_6DOF_CAMERA translate_world(target - m_target); -#else - BoundingBoxf3 test_box = m_scene_box; - test_box.translate(-m_scene_box.center()); - // We may let this factor be customizable - static const double ScaleFactor = 1.5; - test_box.scale(ScaleFactor); - test_box.translate(m_scene_box.center()); - - m_target(0) = clamp(test_box.min(0), test_box.max(0), target(0)); - m_target(1) = clamp(test_box.min(1), test_box.max(1), target(1)); - m_target(2) = clamp(test_box.min(2), test_box.max(2), target(2)); -#endif // ENABLE_6DOF_CAMERA } -#if !ENABLE_6DOF_CAMERA -void Camera::set_theta(float theta, bool apply_limit) -{ - if (apply_limit) - m_theta = clamp(0.0f, GIMBALL_LOCK_THETA_MAX, theta); - else - { - m_theta = fmod(theta, 360.0f); - if (m_theta < 0.0f) - m_theta += 360.0f; - } -} -#endif // !ENABLE_6DOF_CAMERA - void Camera::update_zoom(double delta_zoom) { set_zoom(m_zoom / (1.0 - std::max(std::min(delta_zoom, 4.0), -4.0) * 0.1)); @@ -149,7 +104,6 @@ void Camera::set_zoom(double zoom) m_zoom = std::min(zoom, max_zoom()); } -#if ENABLE_6DOF_CAMERA void Camera::select_view(const std::string& direction) { if (direction == "iso") @@ -167,36 +121,6 @@ void Camera::select_view(const std::string& direction) else if (direction == "rear") look_at(m_target + m_distance * Vec3d::UnitY(), m_target, Vec3d::UnitZ()); } -#else -bool Camera::select_view(const std::string& direction) -{ - const float* dir_vec = nullptr; - - if (direction == "iso") - dir_vec = VIEW_DEFAULT; - else if (direction == "left") - dir_vec = VIEW_LEFT; - else if (direction == "right") - dir_vec = VIEW_RIGHT; - else if (direction == "top") - dir_vec = VIEW_TOP; - else if (direction == "bottom") - dir_vec = VIEW_BOTTOM; - else if (direction == "front") - dir_vec = VIEW_FRONT; - else if (direction == "rear") - dir_vec = VIEW_REAR; - - if (dir_vec != nullptr) - { - phi = dir_vec[0]; - set_theta(dir_vec[1], false); - return true; - } - else - return false; -} -#endif // ENABLE_6DOF_CAMERA double Camera::get_fov() const { @@ -218,102 +142,53 @@ void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h) const void Camera::apply_view_matrix() const { -#if !ENABLE_6DOF_CAMERA - double theta_rad = Geometry::deg2rad(-(double)m_theta); - double phi_rad = Geometry::deg2rad((double)phi); - double sin_theta = ::sin(theta_rad); - Vec3d camera_pos = m_target + m_distance * Vec3d(sin_theta * ::sin(phi_rad), sin_theta * ::cos(phi_rad), ::cos(theta_rad)); -#endif // !ENABLE_6DOF_CAMERA - glsafe(::glMatrixMode(GL_MODELVIEW)); glsafe(::glLoadIdentity()); - -#if ENABLE_6DOF_CAMERA glsafe(::glMultMatrixd(m_view_matrix.data())); -#else - glsafe(::glRotatef(-m_theta, 1.0f, 0.0f, 0.0f)); // pitch - glsafe(::glRotatef(phi, 0.0f, 0.0f, 1.0f)); // yaw - - glsafe(::glTranslated(-camera_pos(0), -camera_pos(1), -camera_pos(2))); - - glsafe(::glGetDoublev(GL_MODELVIEW_MATRIX, m_view_matrix.data())); -#endif // ENABLE_6DOF_CAMERA } void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double far_z) const { -#if !ENABLE_6DOF_CAMERA - set_distance(DefaultDistance); -#endif // !ENABLE_6DOF_CAMERA - double w = 0.0; double h = 0.0; -#if ENABLE_6DOF_CAMERA double old_distance = m_distance; m_frustrum_zs = calc_tight_frustrum_zs_around(box); if (m_distance != old_distance) // the camera has been moved re-apply view matrix apply_view_matrix(); -#else - while (true) + + if (near_z > 0.0) + m_frustrum_zs.first = std::max(std::min(m_frustrum_zs.first, near_z), FrustrumMinNearZ); + + if (far_z > 0.0) + m_frustrum_zs.second = std::max(m_frustrum_zs.second, far_z); + + w = 0.5 * (double)m_viewport[2]; + h = 0.5 * (double)m_viewport[3]; + + double inv_zoom = get_inv_zoom(); + w *= inv_zoom; + h *= inv_zoom; + + switch (m_type) { - m_frustrum_zs = calc_tight_frustrum_zs_around(box); -#endif // !ENABLE_6DOF_CAMERA - - if (near_z > 0.0) - m_frustrum_zs.first = std::max(std::min(m_frustrum_zs.first, near_z), FrustrumMinNearZ); - - if (far_z > 0.0) - m_frustrum_zs.second = std::max(m_frustrum_zs.second, far_z); - - w = 0.5 * (double)m_viewport[2]; - h = 0.5 * (double)m_viewport[3]; - - double inv_zoom = get_inv_zoom(); - w *= inv_zoom; - h *= inv_zoom; - - switch (m_type) - { - default: - case Ortho: - { - m_gui_scale = 1.0; - break; - } - case Perspective: - { - // scale near plane to keep w and h constant on the plane at z = m_distance - double scale = m_frustrum_zs.first / m_distance; - w *= scale; - h *= scale; - m_gui_scale = scale; - break; - } - } - -#if !ENABLE_6DOF_CAMERA - if (m_type == Perspective) - { - double fov_deg = Geometry::rad2deg(2.0 * std::atan(h / m_frustrum_zs.first)); - - // adjust camera distance to keep fov in a limited range - if (fov_deg > MaxFovDeg) - { - double delta_z = h / ::tan(0.5 * Geometry::deg2rad(MaxFovDeg)) - m_frustrum_zs.first; - if (delta_z > 0.001) - set_distance(m_distance + delta_z); - else - break; - } - else - break; - } - else - break; + default: + case Ortho: + { + m_gui_scale = 1.0; + break; + } + case Perspective: + { + // scale near plane to keep w and h constant on the plane at z = m_distance + double scale = m_frustrum_zs.first / m_distance; + w *= scale; + h *= scale; + m_gui_scale = scale; + break; + } } -#endif // !ENABLE_6DOF_CAMERA glsafe(::glMatrixMode(GL_PROJECTION)); glsafe(::glLoadIdentity()); @@ -338,22 +213,14 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa } #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA void Camera::zoom_to_box(const BoundingBoxf3& box, double margin_factor) #else -void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor) -#endif // ENABLE_6DOF_CAMERA -#else void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h) #endif // ENABLE_THUMBNAIL_GENERATOR { // Calculate the zoom factor needed to adjust the view around the given box. #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA double zoom = calc_zoom_to_bounding_box_factor(box, margin_factor); -#else - double zoom = calc_zoom_to_bounding_box_factor(box, canvas_w, canvas_h, margin_factor); -#endif // ENABLE_6DOF_CAMERA #else double zoom = calc_zoom_to_bounding_box_factor(box, canvas_w, canvas_h); #endif // ENABLE_THUMBNAIL_GENERATOR @@ -361,36 +228,20 @@ void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h) { m_zoom = zoom; // center view around box center -#if ENABLE_6DOF_CAMERA set_target(box.center()); -#else - m_target = box.center(); -#endif // ENABLE_6DOF_CAMERA } } #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA void Camera::zoom_to_volumes(const GLVolumePtrs& volumes, double margin_factor) -#else -void Camera::zoom_to_volumes(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, double margin_factor) -#endif // ENABLE_6DOF_CAMERA { Vec3d center; -#if ENABLE_6DOF_CAMERA double zoom = calc_zoom_to_volumes_factor(volumes, center, margin_factor); -#else - double zoom = calc_zoom_to_volumes_factor(volumes, canvas_w, canvas_h, center, margin_factor); -#endif // ENABLE_6DOF_CAMERA if (zoom > 0.0) { m_zoom = zoom; // center view around the calculated center -#if ENABLE_6DOF_CAMERA set_target(center); -#else - m_target = center; -#endif // ENABLE_6DOF_CAMERA } } #endif // ENABLE_THUMBNAIL_GENERATOR @@ -402,18 +253,15 @@ void Camera::debug_render() const imgui.begin(std::string("Camera statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); std::string type = get_type_as_string(); -#if ENABLE_6DOF_CAMERA if (wxGetApp().plater()->get_mouse3d_controller().is_running() || (wxGetApp().app_config->get("use_free_camera") == "1")) type += "/free"; else type += "/constrained"; -#endif // ENABLE_6DOF_CAMERA + Vec3f position = get_position().cast(); Vec3f target = m_target.cast(); float distance = (float)get_distance(); -#if ENABLE_6DOF_CAMERA float zenit = (float)m_zenit; -#endif // ENABLE_6DOF_CAMERA Vec3f forward = get_dir_forward().cast(); Vec3f right = get_dir_right().cast(); Vec3f up = get_dir_up().cast(); @@ -430,10 +278,8 @@ void Camera::debug_render() const ImGui::InputFloat3("Position", position.data(), "%.6f", ImGuiInputTextFlags_ReadOnly); ImGui::InputFloat3("Target", target.data(), "%.6f", ImGuiInputTextFlags_ReadOnly); ImGui::InputFloat("Distance", &distance, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly); -#if ENABLE_6DOF_CAMERA ImGui::Separator(); ImGui::InputFloat("Zenit", &zenit, 0.0f, 0.0f, "%.6f", ImGuiInputTextFlags_ReadOnly); -#endif // ENABLE_6DOF_CAMERA ImGui::Separator(); ImGui::InputFloat3("Forward", forward.data(), "%.6f", ImGuiInputTextFlags_ReadOnly); ImGui::InputFloat3("Right", right.data(), "%.6f", ImGuiInputTextFlags_ReadOnly); @@ -453,7 +299,6 @@ void Camera::debug_render() const } #endif // ENABLE_CAMERA_STATISTICS -#if ENABLE_6DOF_CAMERA void Camera::translate_world(const Vec3d& displacement) { Vec3d new_target = validate_target(m_target + displacement); @@ -524,15 +369,10 @@ void Camera::rotate_local_around_pivot(const Vec3d& rotation_rad, const Vec3d& p translate_world(center); update_zenit(); } -#endif // ENABLE_6DOF_CAMERA double Camera::min_zoom() const { -#if ENABLE_6DOF_CAMERA return 0.7 * calc_zoom_to_bounding_box_factor(m_scene_box); -#else - return 0.7 * calc_zoom_to_bounding_box_factor(m_scene_box, m_viewport[2], m_viewport[3]); -#endif // ENABLE_6DOF_CAMERA } std::pair Camera::calc_tight_frustrum_zs_around(const BoundingBoxf3& box) const @@ -540,62 +380,45 @@ std::pair Camera::calc_tight_frustrum_zs_around(const BoundingBo std::pair ret; auto& [near_z, far_z] = ret; -#if !ENABLE_6DOF_CAMERA - while (true) + // box in eye space + BoundingBoxf3 eye_box = box.transformed(m_view_matrix); + near_z = -eye_box.max(2); + far_z = -eye_box.min(2); + + // apply margin + near_z -= FrustrumZMargin; + far_z += FrustrumZMargin; + + // ensure min size + if (far_z - near_z < FrustrumMinZRange) { -#endif // !ENABLE_6DOF_CAMERA - // box in eye space - BoundingBoxf3 eye_box = box.transformed(m_view_matrix); - near_z = -eye_box.max(2); - far_z = -eye_box.min(2); - - // apply margin - near_z -= FrustrumZMargin; - far_z += FrustrumZMargin; - - // ensure min size - if (far_z - near_z < FrustrumMinZRange) - { - double mid_z = 0.5 * (near_z + far_z); - double half_size = 0.5 * FrustrumMinZRange; - near_z = mid_z - half_size; - far_z = mid_z + half_size; - } - -#if ENABLE_6DOF_CAMERA - if (near_z < FrustrumMinNearZ) - { - float delta = FrustrumMinNearZ - near_z; - set_distance(m_distance + delta); - near_z += delta; - far_z += delta; - } - else if ((near_z > 2.0 * FrustrumMinNearZ) && (m_distance > DefaultDistance)) - { - float delta = m_distance - DefaultDistance; - set_distance(DefaultDistance); - near_z -= delta; - far_z -= delta; - } -#else - if (near_z >= FrustrumMinNearZ) - break; - - // ensure min near z - set_distance(m_distance + FrustrumMinNearZ - near_z); + double mid_z = 0.5 * (near_z + far_z); + double half_size = 0.5 * FrustrumMinZRange; + near_z = mid_z - half_size; + far_z = mid_z + half_size; + } + + if (near_z < FrustrumMinNearZ) + { + float delta = FrustrumMinNearZ - near_z; + set_distance(m_distance + delta); + near_z += delta; + far_z += delta; + } + else if ((near_z > 2.0 * FrustrumMinNearZ) && (m_distance > DefaultDistance)) + { + float delta = m_distance - DefaultDistance; + set_distance(DefaultDistance); + near_z -= delta; + far_z -= delta; } -#endif // ENABLE_6DOF_CAMERA return ret; } #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, double margin_factor) const #else -double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor) const -#endif // ENABLE_6DOF_CAMERA -#else double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const #endif // ENABLE_THUMBNAIL_GENERATOR { @@ -606,11 +429,6 @@ double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int ca // project the box vertices on a plane perpendicular to the camera forward axis // then calculates the vertices coordinate on this plane along the camera xy axes -#if !ENABLE_6DOF_CAMERA - // ensure that the view matrix is updated - apply_view_matrix(); -#endif // !ENABLE_6DOF_CAMERA - Vec3d right = get_dir_right(); Vec3d up = get_dir_up(); Vec3d forward = get_dir_forward(); @@ -666,19 +484,11 @@ double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int ca dx *= margin_factor; dy *= margin_factor; -#if ENABLE_6DOF_CAMERA return std::min((double)m_viewport[2] / dx, (double)m_viewport[3] / dy); -#else - return std::min((double)canvas_w / dx, (double)canvas_h / dy); -#endif // ENABLE_6DOF_CAMERA } #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA double Camera::calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, Vec3d& center, double margin_factor) const -#else -double Camera::calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, Vec3d& center, double margin_factor) const -#endif // ENABLE_6DOF_CAMERA { if (volumes.empty()) return -1.0; @@ -686,11 +496,6 @@ double Camera::calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canv // project the volumes vertices on a plane perpendicular to the camera forward axis // then calculates the vertices coordinate on this plane along the camera xy axes -#if !ENABLE_6DOF_CAMERA - // ensure that the view matrix is updated - apply_view_matrix(); -#endif // !ENABLE_6DOF_CAMERA - Vec3d right = get_dir_right(); Vec3d up = get_dir_up(); Vec3d forward = get_dir_forward(); @@ -741,29 +546,19 @@ double Camera::calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canv if ((dx <= 0.0) || (dy <= 0.0)) return -1.0f; -#if ENABLE_6DOF_CAMERA return std::min((double)m_viewport[2] / dx, (double)m_viewport[3] / dy); -#else - return std::min((double)canvas_w / dx, (double)canvas_h / dy); -#endif // ENABLE_6DOF_CAMERA } #endif // ENABLE_THUMBNAIL_GENERATOR void Camera::set_distance(double distance) const { -#if ENABLE_6DOF_CAMERA if (m_distance != distance) { m_view_matrix.translate((distance - m_distance) * get_dir_forward()); m_distance = distance; } -#else - m_distance = distance; - apply_view_matrix(); -#endif // ENABLE_6DOF_CAMERA } -#if ENABLE_6DOF_CAMERA void Camera::look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up) { Vec3d unit_z = (position - target).normalized(); @@ -825,7 +620,6 @@ void Camera::update_zenit() { m_zenit = Geometry::rad2deg(0.5 * M_PI - std::acos(std::clamp(-get_dir_forward().dot(Vec3d::UnitZ()), -1.0, 1.0))); } -#endif // ENABLE_6DOF_CAMERA } // GUI } // Slic3r diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index cda6b77b4..0ddaa8ff3 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -30,20 +30,12 @@ struct Camera Num_types }; -#if !ENABLE_6DOF_CAMERA - float phi; - bool inverted_phi; -#endif // !ENABLE_6DOF_CAMERA bool requires_zoom_to_bed; private: EType m_type; Vec3d m_target; -#if ENABLE_6DOF_CAMERA float m_zenit; -#else - float m_theta; -#endif // ENABLE_6DOF_CAMERA double m_zoom; // Distance between camera position and camera target measured along the camera Z axis mutable double m_distance; @@ -69,18 +61,9 @@ public: const Vec3d& get_target() const { return m_target; } void set_target(const Vec3d& target); -#if ENABLE_6DOF_CAMERA double get_distance() const { return (get_position() - m_target).norm(); } -#else - double get_distance() const { return m_distance; } -#endif // ENABLE_6DOF_CAMERA double get_gui_scale() const { return m_gui_scale; } -#if !ENABLE_6DOF_CAMERA - float get_theta() const { return m_theta; } - void set_theta(float theta, bool apply_limit); -#endif // !ENABLE_6DOF_CAMERA - double get_zoom() const { return m_zoom; } double get_inv_zoom() const { assert(m_zoom != 0.0); return 1.0 / m_zoom; } void update_zoom(double delta_zoom); @@ -89,11 +72,7 @@ public: const BoundingBoxf3& get_scene_box() const { return m_scene_box; } void set_scene_box(const BoundingBoxf3& box) { m_scene_box = box; } -#if ENABLE_6DOF_CAMERA void select_view(const std::string& direction); -#else - bool select_view(const std::string& direction); -#endif // ENABLE_6DOF_CAMERA const std::array& get_viewport() const { return m_viewport; } const Transform3d& get_view_matrix() const { return m_view_matrix; } @@ -117,13 +96,8 @@ public: void apply_projection(const BoundingBoxf3& box, double near_z = -1.0, double far_z = -1.0) const; #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA void zoom_to_box(const BoundingBoxf3& box, double margin_factor = DefaultZoomToBoxMarginFactor); void zoom_to_volumes(const GLVolumePtrs& volumes, double margin_factor = DefaultZoomToVolumesMarginFactor); -#else - void zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToBoxMarginFactor); - void zoom_to_volumes(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToVolumesMarginFactor); -#endif // ENABLE_6DOF_CAMERA #else void zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h); #endif // ENABLE_THUMBNAIL_GENERATOR @@ -132,7 +106,6 @@ public: void debug_render() const; #endif // ENABLE_CAMERA_STATISTICS -#if ENABLE_6DOF_CAMERA // translate the camera in world space void translate_world(const Vec3d& displacement); @@ -149,7 +122,7 @@ public: // returns true if the camera z axis (forward) is pointing in the negative direction of the world z axis bool is_looking_downward() const { return get_dir_forward().dot(Vec3d::UnitZ()) < 0.0; } -#endif // ENABLE_6DOF_CAMERA + double max_zoom() const { return 100.0; } double min_zoom() const; @@ -158,24 +131,17 @@ private: // the camera MUST be outside of the bounding box in eye coordinate of the given box std::pair calc_tight_frustrum_zs_around(const BoundingBoxf3& box) const; #if ENABLE_THUMBNAIL_GENERATOR -#if ENABLE_6DOF_CAMERA double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, double margin_factor = DefaultZoomToBoxMarginFactor) const; double calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, Vec3d& center, double margin_factor = DefaultZoomToVolumesMarginFactor) const; -#else - double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToBoxMarginFactor) const; - double calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, Vec3d& center, double margin_factor = DefaultZoomToVolumesMarginFactor) const; -#endif // ENABLE_6DOF_CAMERA #else double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const; #endif // ENABLE_THUMBNAIL_GENERATOR void set_distance(double distance) const; -#if ENABLE_6DOF_CAMERA void look_at(const Vec3d& position, const Vec3d& target, const Vec3d& up); void set_default_orientation(); Vec3d validate_target(const Vec3d& target) const; void update_zenit(); -#endif // ENABLE_6DOF_CAMERA }; } // GUI diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index ac6071d3f..26d3b14d6 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1809,14 +1809,9 @@ void GLCanvas3D::zoom_to_selection() void GLCanvas3D::select_view(const std::string& direction) { -#if ENABLE_6DOF_CAMERA m_camera.select_view(direction); if (m_canvas != nullptr) m_canvas->Refresh(); -#else - if (m_camera.select_view(direction) && (m_canvas != nullptr)) - m_canvas->Refresh(); -#endif // ENABLE_6DOF_CAMERA } void GLCanvas3D::update_volumes_colors_by_extruder() @@ -1857,13 +1852,11 @@ void GLCanvas3D::render() } const Size& cnv_size = get_canvas_size(); -#if ENABLE_6DOF_CAMERA // Probably due to different order of events on Linux/GTK2, when one switched from 3D scene // to preview, this was called before canvas had its final size. It reported zero width // and the viewport was set incorrectly, leading to tripping glAsserts further down // the road (in apply_projection). That's why the minimum size is forced to 10. m_camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height())); -#endif // ENABLE_6DOF_CAMERA if (m_camera.requires_zoom_to_bed) { @@ -1880,13 +1873,6 @@ void GLCanvas3D::render() GLfloat position_top[4] = { -0.5f, -0.5f, 1.0f, 0.0f }; glsafe(::glLightfv(GL_LIGHT0, GL_POSITION, position_top)); -#if !ENABLE_6DOF_CAMERA - float theta = m_camera.get_theta(); - if (theta > 180.f) - // absolute value of the rotation - theta = 360.f - theta; -#endif // !ENABLE_6DOF_CAMERA - wxGetApp().imgui()->new_frame(); if (m_picking_enabled) @@ -1910,11 +1896,7 @@ void GLCanvas3D::render() _render_objects(); _render_sla_slices(); _render_selection(); -#if ENABLE_6DOF_CAMERA _render_bed(!m_camera.is_looking_downward(), true); -#else - _render_bed(theta, true); -#endif // ENABLE_6DOF_CAMERA #if ENABLE_RENDER_SELECTION_CENTER _render_selection_center(); @@ -3429,11 +3411,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag if (m_selection.contains_volume(get_first_hover_volume_idx())) { -#if ENABLE_6DOF_CAMERA if (std::abs(m_camera.get_dir_forward()(2)) < EPSILON) -#else - if (m_camera.get_theta() == 90.0f) -#endif // ENABLE_6DOF_CAMERA { // side view -> move selected volumes orthogonally to camera view direction Linef3 ray = mouse_ray(pos); @@ -3493,18 +3471,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (m_hover_volume_idxs.empty() && m_mouse.is_start_position_3D_defined()) { const Vec3d& orig = m_mouse.drag.start_position_3D; -#if ENABLE_6DOF_CAMERA double x = Geometry::deg2rad(pos(0) - orig(0)) * (double)TRACKBALLSIZE; double y = Geometry::deg2rad(pos(1) - orig(1)) * (double)TRACKBALLSIZE; if (wxGetApp().plater()->get_mouse3d_controller().is_running() || (wxGetApp().app_config->get("use_free_camera") == "1")) m_camera.rotate_local_around_target(Vec3d(y, x, 0.0)); else m_camera.rotate_on_sphere(x, y, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); -#else - float sign = m_camera.inverted_phi ? -1.0f : 1.0f; - m_camera.phi += sign * ((float)pos(0) - (float)orig(0)) * TRACKBALLSIZE; - m_camera.set_theta(m_camera.get_theta() - ((float)pos(1) - (float)orig(1)) * TRACKBALLSIZE, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); -#endif // ENABLE_6DOF_CAMERA + m_dirty = true; } m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0); @@ -3554,11 +3527,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (!evt.ShiftDown() && m_picking_enabled) deselect_all(); } -#if !ENABLE_6DOF_CAMERA - else if (evt.LeftUp() && m_mouse.dragging) - // Flips X mouse deltas if bed is upside down - m_camera.inverted_phi = (m_camera.get_dir_up()(2) < 0.0); -#endif // !ENABLE_6DOF_CAMERA else if (evt.RightUp()) { m_mouse.position = pos.cast(); @@ -4163,16 +4131,9 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool Camera camera; camera.set_type(Camera::Ortho); -#if ENABLE_6DOF_CAMERA camera.set_scene_box(scene_bounding_box()); -#endif // ENABLE_6DOF_CAMERA -#if ENABLE_6DOF_CAMERA camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height); camera.zoom_to_volumes(visible_volumes); -#else - camera.zoom_to_volumes(visible_volumes, thumbnail_data.width, thumbnail_data.height); - camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height); -#endif // ENABLE_6DOF_CAMERA camera.apply_view_matrix(); double near_z = -1.0; @@ -4221,11 +4182,7 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool glsafe(::glDisable(GL_DEPTH_TEST)); if (show_bed) -#if ENABLE_6DOF_CAMERA _render_bed(!camera.is_looking_downward(), false); -#else - _render_bed(camera.get_theta(), false); -#endif // ENABLE_6DOF_CAMERA if (transparent_background) glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); @@ -4762,11 +4719,6 @@ void GLCanvas3D::_resize(unsigned int w, unsigned int h) // ensures that this canvas is current _set_current(); - -#if !ENABLE_6DOF_CAMERA - // updates camera - m_camera.apply_viewport(0, 0, w, h); -#endif // !ENABLE_6DOF_CAMERA } BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_bed_model) const @@ -4790,12 +4742,7 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be #if ENABLE_THUMBNAIL_GENERATOR void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box, double margin_factor) { -#if ENABLE_6DOF_CAMERA m_camera.zoom_to_box(box, margin_factor); -#else - const Size& cnv_size = get_canvas_size(); - m_camera.zoom_to_box(box, cnv_size.get_width(), cnv_size.get_height(), margin_factor); -#endif // ENABLE_6DOF_CAMERA m_dirty = true; } #else diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index a6d7cbef4..2be017e54 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -162,17 +162,8 @@ bool Mouse3DController::State::apply(Camera& camera) if (has_rotation()) { -#if ENABLE_6DOF_CAMERA Vec3d rotation = (m_rotation_params.scale * m_rotation.queue.front()).cast(); camera.rotate_local_around_target(Vec3d(Geometry::deg2rad(rotation(0)), Geometry::deg2rad(-rotation(2)), Geometry::deg2rad(-rotation(1)))); -#else - const Vec3f& rotation = m_rotation.queue.front(); - float theta = m_rotation_params.scale * rotation(0); - float phi = m_rotation_params.scale * rotation(2); - float sign = camera.inverted_phi ? -1.0f : 1.0f; - camera.phi += sign * phi; - camera.set_theta(camera.get_theta() + theta, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); -#endif // ENABLE_6DOF_CAMERA m_rotation.queue.pop(); ret = true; } @@ -887,15 +878,9 @@ bool Mouse3DController::handle_packet_translation(const DataPacketRaw& packet) bool Mouse3DController::handle_packet_rotation(const DataPacketRaw& packet, unsigned int first_byte) { double deadzone = (double)m_state.get_rotation_deadzone(); -#if ENABLE_6DOF_CAMERA Vec3f rotation((float)convert_input(packet[first_byte + 0], packet[first_byte + 1], deadzone), (float)convert_input(packet[first_byte + 2], packet[first_byte + 3], deadzone), (float)convert_input(packet[first_byte + 4], packet[first_byte + 5], deadzone)); -#else - Vec3f rotation(-(float)convert_input(packet[first_byte + 0], packet[first_byte + 1], deadzone), - (float)convert_input(packet[first_byte + 2], packet[first_byte + 3], deadzone), - -(float)convert_input(packet[first_byte + 4], packet[first_byte + 5], deadzone)); -#endif // ENABLE_6DOF_CAMERA if (!rotation.isApprox(Vec3f::Zero())) { diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 118ecf87a..1299d9a48 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -123,14 +123,12 @@ void PreferencesDialog::build() option = Option(def, "use_perspective_camera"); m_optgroup_camera->append_single_option_line(option); -#if ENABLE_6DOF_CAMERA def.label = L("Use free camera"); def.type = coBool; def.tooltip = L("If enabled, use free camera. If not enabled, use constrained camera."); def.set_default_value(new ConfigOptionBool(app_config->get("use_free_camera") == "1")); option = Option(def, "use_free_camera"); m_optgroup_camera->append_single_option_line(option); -#endif // ENABLE_6DOF_CAMERA m_optgroup_gui = std::make_shared(this, _(L("GUI"))); m_optgroup_gui->label_width = 40; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index a4f5a4126..bb81b56c0 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -2005,11 +2005,7 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) co const float max_y = box.max(1) + Margin; // view dependend order of rendering to keep correct transparency -#if ENABLE_6DOF_CAMERA bool camera_on_top = wxGetApp().plater()->get_camera().is_looking_downward(); -#else - bool camera_on_top = wxGetApp().plater()->get_camera().get_theta() <= 90.0f; -#endif // ENABLE_6DOF_CAMERA float z1 = camera_on_top ? min_z : max_z; float z2 = camera_on_top ? max_z : min_z;