Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenricoturri1966 <enricoturri@seznam.cz>2022-02-16 14:36:41 +0300
committerenricoturri1966 <enricoturri@seznam.cz>2022-06-03 12:45:22 +0300
commit558bccec48ab18797b347aaa334e01214d11db17 (patch)
tree70c51a04acbb996037d327e5a26c5e2ed170b05b
parent912d7814464a331f51c59f6d9b9d03a7ab2be3d3 (diff)
Tech ENABLE_WORLD_COORDINATE_SHOW_AXES - Show axes of the current reference system when sidebar hints are active for non-world reference systems
Fixed conflicts during rebase with master
-rw-r--r--src/libslic3r/Technologies.hpp2
-rw-r--r--src/slic3r/CMakeLists.txt2
-rw-r--r--src/slic3r/GUI/3DBed.cpp10
-rw-r--r--src/slic3r/GUI/3DBed.hpp10
-rw-r--r--src/slic3r/GUI/CoordAxes.cpp79
-rw-r--r--src/slic3r/GUI/CoordAxes.hpp59
-rw-r--r--src/slic3r/GUI/Selection.cpp6
-rw-r--r--src/slic3r/GUI/Selection.hpp13
8 files changed, 179 insertions, 2 deletions
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 303243966..ada35b5ec 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -75,6 +75,8 @@
#define ENABLE_WORLD_COORDINATE_VOLUMES_LOCAL_OFFSET (1 && ENABLE_WORLD_COORDINATE)
// Enable rendering the selection bounding box in the current reference system
#define ENABLE_COORDINATE_DEPENDENT_SELECTION_BOX (1 && ENABLE_WORLD_COORDINATE)
+// Enable showing the axes of the current reference system when sidebar hints are active
+#define ENABLE_WORLD_COORDINATE_SHOW_AXES (1 && ENABLE_WORLD_COORDINATE)
// Enable modified camera control using mouse
#define ENABLE_NEW_CAMERA_MOVEMENTS (1 && ENABLE_2_5_0_ALPHA1)
// Enable modified rectangle selection
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 02d134b29..29b8b7e73 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -131,6 +131,8 @@ set(SLIC3R_GUI_SOURCES
GUI/2DBed.hpp
GUI/3DBed.cpp
GUI/3DBed.hpp
+ GUI/CoordAxes.cpp
+ GUI/CoordAxes.hpp
GUI/Camera.cpp
GUI/Camera.hpp
GUI/wxExtensions.cpp
diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 1ce1af741..132245b4d 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -102,6 +102,7 @@ const float* GeometryBuffer::get_vertices_data() const
}
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
+#if !ENABLE_WORLD_COORDINATE_SHOW_AXES
const float Bed3D::Axes::DefaultStemRadius = 0.5f;
const float Bed3D::Axes::DefaultStemLength = 25.0f;
const float Bed3D::Axes::DefaultTipRadius = 2.5f * Bed3D::Axes::DefaultStemRadius;
@@ -179,6 +180,7 @@ void Bed3D::Axes::render()
glsafe(::glDisable(GL_DEPTH_TEST));
}
+#endif // !ENABLE_WORLD_COORDINATE_SHOW_AXES
bool Bed3D::set_shape(const Pointfs& bed_shape, const double max_print_height, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom)
{
@@ -341,7 +343,11 @@ BoundingBoxf3 Bed3D::calc_extended_bounding_box() const
out.max.z() = 0.0;
// extend to contain axes
out.merge(m_axes.get_origin() + m_axes.get_total_length() * Vec3d::Ones());
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+ out.merge(out.min + Vec3d(-m_axes.get_tip_radius(), -m_axes.get_tip_radius(), out.max.z()));
+#else
out.merge(out.min + Vec3d(-Axes::DefaultTipRadius, -Axes::DefaultTipRadius, out.max.z()));
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
// extend to contain model, if any
BoundingBoxf3 model_bb = m_model.get_bounding_box();
if (model_bb.defined) {
@@ -539,7 +545,11 @@ std::tuple<Bed3D::Type, std::string, std::string> Bed3D::detect_type(const Point
void Bed3D::render_axes()
{
if (m_build_volume.valid())
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+ m_axes.render(0.25f);
+#else
m_axes.render();
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
}
#if ENABLE_GL_SHADERS_ATTRIBUTES
diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp
index 708d186a4..61f01f021 100644
--- a/src/slic3r/GUI/3DBed.hpp
+++ b/src/slic3r/GUI/3DBed.hpp
@@ -3,7 +3,11 @@
#include "GLTexture.hpp"
#include "3DScene.hpp"
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+#include "CoordAxes.hpp"
+#else
#include "GLModel.hpp"
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
#include "libslic3r/BuildVolume.hpp"
#if ENABLE_LEGACY_OPENGL_REMOVAL
@@ -44,6 +48,7 @@ public:
class Bed3D
{
+#if !ENABLE_WORLD_COORDINATE_SHOW_AXES
class Axes
{
public:
@@ -67,6 +72,7 @@ class Bed3D
float get_total_length() const { return m_stem_length + DefaultTipLength; }
void render();
};
+#endif // !ENABLE_WORLD_COORDINATE_SHOW_AXES
public:
enum class Type : unsigned char
@@ -107,7 +113,11 @@ private:
#if !ENABLE_LEGACY_OPENGL_REMOVAL
unsigned int m_vbo_id{ 0 };
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+ CoordAxes m_axes;
+#else
Axes m_axes;
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
float m_scale_factor{ 1.0f };
diff --git a/src/slic3r/GUI/CoordAxes.cpp b/src/slic3r/GUI/CoordAxes.cpp
new file mode 100644
index 000000000..c3cced2f9
--- /dev/null
+++ b/src/slic3r/GUI/CoordAxes.cpp
@@ -0,0 +1,79 @@
+#include "libslic3r/libslic3r.h"
+
+#include "CoordAxes.hpp"
+#include "GUI_App.hpp"
+#include "3DScene.hpp"
+
+#include <GL/glew.h>
+
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+
+namespace Slic3r {
+namespace GUI {
+
+const float CoordAxes::DefaultStemRadius = 0.5f;
+const float CoordAxes::DefaultStemLength = 25.0f;
+const float CoordAxes::DefaultTipRadius = 2.5f * CoordAxes::DefaultStemRadius;
+const float CoordAxes::DefaultTipLength = 5.0f;
+
+void CoordAxes::render(float emission_factor)
+{
+ auto render_axis = [this](const Transform3f& transform) {
+ glsafe(::glPushMatrix());
+ glsafe(::glMultMatrixf(transform.data()));
+ m_arrow.render();
+ glsafe(::glPopMatrix());
+ };
+
+ if (!m_arrow.is_initialized())
+ m_arrow.init_from(stilized_arrow(16, m_tip_radius, m_tip_length, m_stem_radius, m_stem_length));
+
+ GLShaderProgram* curr_shader = wxGetApp().get_current_shader();
+ bool shader_differs = (curr_shader == nullptr || curr_shader->get_name() != "gouraud_light");
+
+ GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
+ if (shader == nullptr)
+ return;
+
+ if (shader_differs) {
+ if (curr_shader != nullptr)
+ curr_shader->stop_using();
+ shader->start_using();
+ }
+ shader->set_uniform("emission_factor", emission_factor);
+
+ // x axis
+#if ENABLE_LEGACY_OPENGL_REMOVAL
+ m_arrow.set_color(ColorRGBA::X());
+#else
+ m_arrow.set_color(-1, ColorRGBA::X());
+#endif // ENABLE_LEGACY_OPENGL_REMOVAL
+ render_axis(Geometry::assemble_transform(m_origin, { 0.0, 0.5 * M_PI, 0.0 }).cast<float>());
+
+ // y axis
+#if ENABLE_LEGACY_OPENGL_REMOVAL
+ m_arrow.set_color(ColorRGBA::Y());
+#else
+ m_arrow.set_color(-1, ColorRGBA::Y());
+#endif // ENABLE_LEGACY_OPENGL_REMOVAL
+ render_axis(Geometry::assemble_transform(m_origin, { -0.5 * M_PI, 0.0, 0.0 }).cast<float>());
+
+ // z axis
+#if ENABLE_LEGACY_OPENGL_REMOVAL
+ m_arrow.set_color(ColorRGBA::Z());
+#else
+ m_arrow.set_color(-1, ColorRGBA::Z());
+#endif // ENABLE_LEGACY_OPENGL_REMOVAL
+ render_axis(Geometry::assemble_transform(m_origin).cast<float>());
+
+ if (shader_differs) {
+ shader->stop_using();
+ if (curr_shader != nullptr)
+ curr_shader->start_using();
+ }
+}
+
+} // GUI
+} // Slic3r
+
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
diff --git a/src/slic3r/GUI/CoordAxes.hpp b/src/slic3r/GUI/CoordAxes.hpp
new file mode 100644
index 000000000..de5472b13
--- /dev/null
+++ b/src/slic3r/GUI/CoordAxes.hpp
@@ -0,0 +1,59 @@
+#ifndef slic3r_CoordAxes_hpp_
+#define slic3r_CoordAxes_hpp_
+
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+#include "GLModel.hpp"
+
+namespace Slic3r {
+namespace GUI {
+
+class CoordAxes
+{
+public:
+ static const float DefaultStemRadius;
+ static const float DefaultStemLength;
+ static const float DefaultTipRadius;
+ static const float DefaultTipLength;
+
+private:
+ Vec3d m_origin{ Vec3d::Zero() };
+ float m_stem_radius{ DefaultStemRadius };
+ float m_stem_length{ DefaultStemLength };
+ float m_tip_radius{ DefaultTipRadius };
+ float m_tip_length{ DefaultTipLength };
+ GLModel m_arrow;
+
+public:
+ const Vec3d& get_origin() const { return m_origin; }
+ void set_origin(const Vec3d& origin) { m_origin = origin; }
+ void set_stem_radius(float radius) {
+ m_stem_radius = radius;
+ m_arrow.reset();
+ }
+ void set_stem_length(float length) {
+ m_stem_length = length;
+ m_arrow.reset();
+ }
+ void set_tip_radius(float radius) {
+ m_tip_radius = radius;
+ m_arrow.reset();
+ }
+ void set_tip_length(float length) {
+ m_tip_length = length;
+ m_arrow.reset();
+ }
+
+ float get_stem_radius() const { return m_stem_radius; }
+ float get_stem_length() const { return m_stem_length; }
+ float get_tip_radius() const { return m_tip_radius; }
+ float get_tip_length() const { return m_tip_length; }
+ float get_total_length() const { return m_stem_length + m_tip_length; }
+ void render(float emission_factor = 0.0f);
+};
+
+} // GUI
+} // Slic3r
+
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
+
+#endif // slic3r_CoordAxes_hpp_
diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp
index cc37ebaa7..b1e48ffe4 100644
--- a/src/slic3r/GUI/Selection.cpp
+++ b/src/slic3r/GUI/Selection.cpp
@@ -117,6 +117,12 @@ Selection::Selection()
, m_scale_factor(1.0f)
{
this->set_bounding_boxes_dirty();
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+ m_axes.set_stem_radius(0.15f);
+ m_axes.set_stem_length(3.0f);
+ m_axes.set_tip_radius(0.45f);
+ m_axes.set_tip_length(1.5f);
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
}
diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp
index 4030a0585..a6dffb033 100644
--- a/src/slic3r/GUI/Selection.hpp
+++ b/src/slic3r/GUI/Selection.hpp
@@ -3,9 +3,15 @@
#include "libslic3r/Geometry.hpp"
#if ENABLE_WORLD_COORDINATE
-#include "slic3r/GUI/GUI_Geometry.hpp"
-#endif // ENABLE_WORLD_COORDINATE
+#include "GUI_Geometry.hpp"
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+#include "CoordAxes.hpp"
+#else
#include "GLModel.hpp"
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
+#else
+#include "GLModel.hpp"
+#endif // ENABLE_WORLD_COORDINATE
#include <set>
#include <optional>
@@ -221,6 +227,9 @@ private:
GLModel m_vbo_sphere;
#endif // ENABLE_RENDER_SELECTION_CENTER
+#if ENABLE_WORLD_COORDINATE_SHOW_AXES
+ CoordAxes m_axes;
+#endif // ENABLE_WORLD_COORDINATE_SHOW_AXES
GLModel m_arrow;
GLModel m_curved_arrow;
#if ENABLE_LEGACY_OPENGL_REMOVAL