mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-21 13:47:59 -06:00
Merge branch 'dev' of https://github.com/prusa3d/Slic3r into dev
This commit is contained in:
commit
02a325556d
11 changed files with 81 additions and 175 deletions
|
@ -194,18 +194,6 @@ sub new {
|
||||||
$self->decrease;
|
$self->decrease;
|
||||||
};
|
};
|
||||||
|
|
||||||
my $on_action_ccw45 = sub {
|
|
||||||
$self->rotate(45, Z, 'relative');
|
|
||||||
};
|
|
||||||
|
|
||||||
my $on_action_cw45 = sub {
|
|
||||||
$self->rotate(-45, Z, 'relative');
|
|
||||||
};
|
|
||||||
|
|
||||||
my $on_action_scale = sub {
|
|
||||||
$self->changescale(undef);
|
|
||||||
};
|
|
||||||
|
|
||||||
my $on_action_split = sub {
|
my $on_action_split = sub {
|
||||||
$self->split_object;
|
$self->split_object;
|
||||||
};
|
};
|
||||||
|
@ -248,9 +236,6 @@ sub new {
|
||||||
Slic3r::GUI::_3DScene::register_action_arrange_callback($self->{canvas3D}, $on_action_arrange);
|
Slic3r::GUI::_3DScene::register_action_arrange_callback($self->{canvas3D}, $on_action_arrange);
|
||||||
Slic3r::GUI::_3DScene::register_action_more_callback($self->{canvas3D}, $on_action_more);
|
Slic3r::GUI::_3DScene::register_action_more_callback($self->{canvas3D}, $on_action_more);
|
||||||
Slic3r::GUI::_3DScene::register_action_fewer_callback($self->{canvas3D}, $on_action_fewer);
|
Slic3r::GUI::_3DScene::register_action_fewer_callback($self->{canvas3D}, $on_action_fewer);
|
||||||
Slic3r::GUI::_3DScene::register_action_ccw45_callback($self->{canvas3D}, $on_action_ccw45);
|
|
||||||
Slic3r::GUI::_3DScene::register_action_cw45_callback($self->{canvas3D}, $on_action_cw45);
|
|
||||||
Slic3r::GUI::_3DScene::register_action_scale_callback($self->{canvas3D}, $on_action_scale);
|
|
||||||
Slic3r::GUI::_3DScene::register_action_split_callback($self->{canvas3D}, $on_action_split);
|
Slic3r::GUI::_3DScene::register_action_split_callback($self->{canvas3D}, $on_action_split);
|
||||||
Slic3r::GUI::_3DScene::register_action_cut_callback($self->{canvas3D}, $on_action_cut);
|
Slic3r::GUI::_3DScene::register_action_cut_callback($self->{canvas3D}, $on_action_cut);
|
||||||
Slic3r::GUI::_3DScene::register_action_settings_callback($self->{canvas3D}, $on_action_settings);
|
Slic3r::GUI::_3DScene::register_action_settings_callback($self->{canvas3D}, $on_action_settings);
|
||||||
|
@ -388,23 +373,10 @@ sub new {
|
||||||
|
|
||||||
# export_gcode cog_go.png
|
# export_gcode cog_go.png
|
||||||
my %icons = qw(
|
my %icons = qw(
|
||||||
add brick_add.png
|
|
||||||
remove brick_delete.png
|
|
||||||
reset cross.png
|
|
||||||
arrange bricks.png
|
|
||||||
print arrow_up.png
|
print arrow_up.png
|
||||||
send_gcode arrow_up.png
|
send_gcode arrow_up.png
|
||||||
reslice reslice.png
|
reslice reslice.png
|
||||||
export_stl brick_go.png
|
export_stl brick_go.png
|
||||||
|
|
||||||
increase add.png
|
|
||||||
decrease delete.png
|
|
||||||
rotate45cw arrow_rotate_clockwise.png
|
|
||||||
rotate45ccw arrow_rotate_anticlockwise.png
|
|
||||||
changescale arrow_out.png
|
|
||||||
split shape_ungroup.png
|
|
||||||
cut package.png
|
|
||||||
settings cog.png
|
|
||||||
);
|
);
|
||||||
for (grep $self->{"btn_$_"}, keys %icons) {
|
for (grep $self->{"btn_$_"}, keys %icons) {
|
||||||
$self->{"btn_$_"}->SetBitmap(Wx::Bitmap->new(Slic3r::var($icons{$_}), wxBITMAP_TYPE_PNG));
|
$self->{"btn_$_"}->SetBitmap(Wx::Bitmap->new(Slic3r::var($icons{$_}), wxBITMAP_TYPE_PNG));
|
||||||
|
@ -2331,8 +2303,8 @@ sub selection_changed {
|
||||||
# $self->{"btn_decrease"}->Disable;
|
# $self->{"btn_decrease"}->Disable;
|
||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
|
|
||||||
for my $toolbar_item (qw(delete more fewer ccw45 cw45 scale split cut settings)) {
|
for my $toolbar_item (qw(delete more fewer split cut settings)) {
|
||||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, $toolbar_item, $have_sel);
|
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, $toolbar_item, $have_sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 20 KiB |
|
@ -2051,21 +2051,6 @@ void _3DScene::register_action_fewer_callback(wxGLCanvas* canvas, void* callback
|
||||||
s_canvas_mgr.register_action_fewer_callback(canvas, callback);
|
s_canvas_mgr.register_action_fewer_callback(canvas, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _3DScene::register_action_ccw45_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
s_canvas_mgr.register_action_ccw45_callback(canvas, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _3DScene::register_action_cw45_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
s_canvas_mgr.register_action_cw45_callback(canvas, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _3DScene::register_action_scale_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
s_canvas_mgr.register_action_scale_callback(canvas, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _3DScene::register_action_split_callback(wxGLCanvas* canvas, void* callback)
|
void _3DScene::register_action_split_callback(wxGLCanvas* canvas, void* callback)
|
||||||
{
|
{
|
||||||
s_canvas_mgr.register_action_split_callback(canvas, callback);
|
s_canvas_mgr.register_action_split_callback(canvas, callback);
|
||||||
|
|
|
@ -551,9 +551,6 @@ public:
|
||||||
static void register_action_arrange_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_arrange_callback(wxGLCanvas* canvas, void* callback);
|
||||||
static void register_action_more_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_more_callback(wxGLCanvas* canvas, void* callback);
|
||||||
static void register_action_fewer_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_fewer_callback(wxGLCanvas* canvas, void* callback);
|
||||||
static void register_action_ccw45_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
static void register_action_cw45_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
static void register_action_scale_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
static void register_action_split_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_split_callback(wxGLCanvas* canvas, void* callback);
|
||||||
static void register_action_cut_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_cut_callback(wxGLCanvas* canvas, void* callback);
|
||||||
static void register_action_settings_callback(wxGLCanvas* canvas, void* callback);
|
static void register_action_settings_callback(wxGLCanvas* canvas, void* callback);
|
||||||
|
|
|
@ -1131,12 +1131,12 @@ GLCanvas3D::Gizmos::~Gizmos()
|
||||||
_reset();
|
_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLCanvas3D::Gizmos::init()
|
bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
|
||||||
{
|
{
|
||||||
#if ENABLE_GIZMOS_3D
|
#if ENABLE_GIZMOS_3D
|
||||||
GLGizmoBase* gizmo = new GLGizmoScale3D;
|
GLGizmoBase* gizmo = new GLGizmoScale3D(parent);
|
||||||
#else
|
#else
|
||||||
GLGizmoBase* gizmo = new GLGizmoScale;
|
GLGizmoBase* gizmo = new GLGizmoScale(parent);
|
||||||
#endif // ENABLE_GIZMOS_3D
|
#endif // ENABLE_GIZMOS_3D
|
||||||
if (gizmo == nullptr)
|
if (gizmo == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1147,9 +1147,9 @@ bool GLCanvas3D::Gizmos::init()
|
||||||
m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
|
m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
|
||||||
|
|
||||||
#if ENABLE_GIZMOS_3D
|
#if ENABLE_GIZMOS_3D
|
||||||
gizmo = new GLGizmoRotate3D;
|
gizmo = new GLGizmoRotate3D(parent);
|
||||||
#else
|
#else
|
||||||
gizmo = new GLGizmoRotate(GLGizmoRotate::Z);
|
gizmo = new GLGizmoRotate(parent, GLGizmoRotate::Z);
|
||||||
#endif // ENABLE_GIZMOS_3D
|
#endif // ENABLE_GIZMOS_3D
|
||||||
if (gizmo == nullptr)
|
if (gizmo == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -1938,7 +1938,7 @@ bool GLCanvas3D::init(bool useVBOs, bool use_legacy_opengl)
|
||||||
if (!m_volumes.empty())
|
if (!m_volumes.empty())
|
||||||
m_volumes.finalize_geometry(m_use_VBOs);
|
m_volumes.finalize_geometry(m_use_VBOs);
|
||||||
|
|
||||||
if (m_gizmos.is_enabled() && !m_gizmos.init())
|
if (m_gizmos.is_enabled() && !m_gizmos.init(*this))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_init_toolbar())
|
if (!_init_toolbar())
|
||||||
|
@ -2720,24 +2720,6 @@ void GLCanvas3D::register_action_fewer_callback(void* callback)
|
||||||
m_action_fewer_callback.register_callback(callback);
|
m_action_fewer_callback.register_callback(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::register_action_ccw45_callback(void* callback)
|
|
||||||
{
|
|
||||||
if (callback != nullptr)
|
|
||||||
m_action_ccw45_callback.register_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3D::register_action_cw45_callback(void* callback)
|
|
||||||
{
|
|
||||||
if (callback != nullptr)
|
|
||||||
m_action_cw45_callback.register_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3D::register_action_scale_callback(void* callback)
|
|
||||||
{
|
|
||||||
if (callback != nullptr)
|
|
||||||
m_action_scale_callback.register_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3D::register_action_split_callback(void* callback)
|
void GLCanvas3D::register_action_split_callback(void* callback)
|
||||||
{
|
{
|
||||||
if (callback != nullptr)
|
if (callback != nullptr)
|
||||||
|
@ -3129,6 +3111,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
}
|
}
|
||||||
else if (evt.Dragging() && m_gizmos.is_dragging())
|
else if (evt.Dragging() && m_gizmos.is_dragging())
|
||||||
{
|
{
|
||||||
|
m_canvas->CaptureMouse();
|
||||||
|
|
||||||
m_mouse.dragging = true;
|
m_mouse.dragging = true;
|
||||||
m_gizmos.update(mouse_ray(pos));
|
m_gizmos.update(mouse_ray(pos));
|
||||||
|
|
||||||
|
@ -3307,6 +3291,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
m_mouse.dragging = false;
|
m_mouse.dragging = false;
|
||||||
m_toolbar_action_running = false;
|
m_toolbar_action_running = false;
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
|
|
||||||
|
if (m_canvas->HasCapture())
|
||||||
|
m_canvas->ReleaseMouse();
|
||||||
}
|
}
|
||||||
else if (evt.Moving())
|
else if (evt.Moving())
|
||||||
{
|
{
|
||||||
|
@ -3462,33 +3449,9 @@ bool GLCanvas3D::_init_toolbar()
|
||||||
if (!m_toolbar.add_separator())
|
if (!m_toolbar.add_separator())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
item.name = "ccw45";
|
|
||||||
item.tooltip = GUI::L_str("Rotate CCW 45 degrees");
|
|
||||||
item.sprite_id = 6;
|
|
||||||
item.is_toggable = false;
|
|
||||||
item.action_callback = &m_action_ccw45_callback;
|
|
||||||
if (!m_toolbar.add_item(item))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
item.name = "cw45";
|
|
||||||
item.tooltip = GUI::L_str("Rotate CW 45 degrees");
|
|
||||||
item.sprite_id = 7;
|
|
||||||
item.is_toggable = false;
|
|
||||||
item.action_callback = &m_action_cw45_callback;
|
|
||||||
if (!m_toolbar.add_item(item))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
item.name = "scale";
|
|
||||||
item.tooltip = GUI::L_str("Scale...");
|
|
||||||
item.sprite_id = 8;
|
|
||||||
item.is_toggable = false;
|
|
||||||
item.action_callback = &m_action_scale_callback;
|
|
||||||
if (!m_toolbar.add_item(item))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
item.name = "split";
|
item.name = "split";
|
||||||
item.tooltip = GUI::L_str("Split");
|
item.tooltip = GUI::L_str("Split");
|
||||||
item.sprite_id = 9;
|
item.sprite_id = 6;
|
||||||
item.is_toggable = false;
|
item.is_toggable = false;
|
||||||
item.action_callback = &m_action_split_callback;
|
item.action_callback = &m_action_split_callback;
|
||||||
if (!m_toolbar.add_item(item))
|
if (!m_toolbar.add_item(item))
|
||||||
|
@ -3496,7 +3459,7 @@ bool GLCanvas3D::_init_toolbar()
|
||||||
|
|
||||||
item.name = "cut";
|
item.name = "cut";
|
||||||
item.tooltip = GUI::L_str("Cut...");
|
item.tooltip = GUI::L_str("Cut...");
|
||||||
item.sprite_id = 10;
|
item.sprite_id = 7;
|
||||||
item.is_toggable = false;
|
item.is_toggable = false;
|
||||||
item.action_callback = &m_action_cut_callback;
|
item.action_callback = &m_action_cut_callback;
|
||||||
if (!m_toolbar.add_item(item))
|
if (!m_toolbar.add_item(item))
|
||||||
|
@ -3507,7 +3470,7 @@ bool GLCanvas3D::_init_toolbar()
|
||||||
|
|
||||||
item.name = "settings";
|
item.name = "settings";
|
||||||
item.tooltip = GUI::L_str("Settings...");
|
item.tooltip = GUI::L_str("Settings...");
|
||||||
item.sprite_id = 11;
|
item.sprite_id = 8;
|
||||||
item.is_toggable = false;
|
item.is_toggable = false;
|
||||||
item.action_callback = &m_action_settings_callback;
|
item.action_callback = &m_action_settings_callback;
|
||||||
if (!m_toolbar.add_item(item))
|
if (!m_toolbar.add_item(item))
|
||||||
|
@ -3515,7 +3478,7 @@ bool GLCanvas3D::_init_toolbar()
|
||||||
|
|
||||||
item.name = "layersediting";
|
item.name = "layersediting";
|
||||||
item.tooltip = GUI::L_str("Layers editing");
|
item.tooltip = GUI::L_str("Layers editing");
|
||||||
item.sprite_id = 12;
|
item.sprite_id = 9;
|
||||||
item.is_toggable = true;
|
item.is_toggable = true;
|
||||||
item.action_callback = &m_action_layersediting_callback;
|
item.action_callback = &m_action_layersediting_callback;
|
||||||
if (!m_toolbar.add_item(item))
|
if (!m_toolbar.add_item(item))
|
||||||
|
@ -3756,9 +3719,6 @@ void GLCanvas3D::_deregister_callbacks()
|
||||||
m_action_arrange_callback.deregister_callback();
|
m_action_arrange_callback.deregister_callback();
|
||||||
m_action_more_callback.deregister_callback();
|
m_action_more_callback.deregister_callback();
|
||||||
m_action_fewer_callback.deregister_callback();
|
m_action_fewer_callback.deregister_callback();
|
||||||
m_action_ccw45_callback.deregister_callback();
|
|
||||||
m_action_cw45_callback.deregister_callback();
|
|
||||||
m_action_scale_callback.deregister_callback();
|
|
||||||
m_action_split_callback.deregister_callback();
|
m_action_split_callback.deregister_callback();
|
||||||
m_action_cut_callback.deregister_callback();
|
m_action_cut_callback.deregister_callback();
|
||||||
m_action_settings_callback.deregister_callback();
|
m_action_settings_callback.deregister_callback();
|
||||||
|
|
|
@ -352,7 +352,7 @@ public:
|
||||||
Gizmos();
|
Gizmos();
|
||||||
~Gizmos();
|
~Gizmos();
|
||||||
|
|
||||||
bool init();
|
bool init(GLCanvas3D& parent);
|
||||||
|
|
||||||
bool is_enabled() const;
|
bool is_enabled() const;
|
||||||
void set_enabled(bool enable);
|
void set_enabled(bool enable);
|
||||||
|
@ -505,9 +505,6 @@ private:
|
||||||
PerlCallback m_action_arrange_callback;
|
PerlCallback m_action_arrange_callback;
|
||||||
PerlCallback m_action_more_callback;
|
PerlCallback m_action_more_callback;
|
||||||
PerlCallback m_action_fewer_callback;
|
PerlCallback m_action_fewer_callback;
|
||||||
PerlCallback m_action_ccw45_callback;
|
|
||||||
PerlCallback m_action_cw45_callback;
|
|
||||||
PerlCallback m_action_scale_callback;
|
|
||||||
PerlCallback m_action_split_callback;
|
PerlCallback m_action_split_callback;
|
||||||
PerlCallback m_action_cut_callback;
|
PerlCallback m_action_cut_callback;
|
||||||
PerlCallback m_action_settings_callback;
|
PerlCallback m_action_settings_callback;
|
||||||
|
@ -625,9 +622,6 @@ public:
|
||||||
void register_action_arrange_callback(void* callback);
|
void register_action_arrange_callback(void* callback);
|
||||||
void register_action_more_callback(void* callback);
|
void register_action_more_callback(void* callback);
|
||||||
void register_action_fewer_callback(void* callback);
|
void register_action_fewer_callback(void* callback);
|
||||||
void register_action_ccw45_callback(void* callback);
|
|
||||||
void register_action_cw45_callback(void* callback);
|
|
||||||
void register_action_scale_callback(void* callback);
|
|
||||||
void register_action_split_callback(void* callback);
|
void register_action_split_callback(void* callback);
|
||||||
void register_action_cut_callback(void* callback);
|
void register_action_cut_callback(void* callback);
|
||||||
void register_action_settings_callback(void* callback);
|
void register_action_settings_callback(void* callback);
|
||||||
|
|
|
@ -737,27 +737,6 @@ void GLCanvas3DManager::register_action_fewer_callback(wxGLCanvas* canvas, void*
|
||||||
it->second->register_action_fewer_callback(callback);
|
it->second->register_action_fewer_callback(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3DManager::register_action_ccw45_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
CanvasesMap::iterator it = _get_canvas(canvas);
|
|
||||||
if (it != m_canvases.end())
|
|
||||||
it->second->register_action_ccw45_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3DManager::register_action_cw45_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
CanvasesMap::iterator it = _get_canvas(canvas);
|
|
||||||
if (it != m_canvases.end())
|
|
||||||
it->second->register_action_cw45_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3DManager::register_action_scale_callback(wxGLCanvas* canvas, void* callback)
|
|
||||||
{
|
|
||||||
CanvasesMap::iterator it = _get_canvas(canvas);
|
|
||||||
if (it != m_canvases.end())
|
|
||||||
it->second->register_action_scale_callback(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3DManager::register_action_split_callback(wxGLCanvas* canvas, void* callback)
|
void GLCanvas3DManager::register_action_split_callback(wxGLCanvas* canvas, void* callback)
|
||||||
{
|
{
|
||||||
CanvasesMap::iterator it = _get_canvas(canvas);
|
CanvasesMap::iterator it = _get_canvas(canvas);
|
||||||
|
|
|
@ -167,9 +167,6 @@ public:
|
||||||
void register_action_arrange_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_arrange_callback(wxGLCanvas* canvas, void* callback);
|
||||||
void register_action_more_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_more_callback(wxGLCanvas* canvas, void* callback);
|
||||||
void register_action_fewer_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_fewer_callback(wxGLCanvas* canvas, void* callback);
|
||||||
void register_action_ccw45_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
void register_action_cw45_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
void register_action_scale_callback(wxGLCanvas* canvas, void* callback);
|
|
||||||
void register_action_split_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_split_callback(wxGLCanvas* canvas, void* callback);
|
||||||
void register_action_cut_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_cut_callback(wxGLCanvas* canvas, void* callback);
|
||||||
void register_action_settings_callback(wxGLCanvas* canvas, void* callback);
|
void register_action_settings_callback(wxGLCanvas* canvas, void* callback);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "GLGizmo.hpp"
|
#include "GLGizmo.hpp"
|
||||||
|
|
||||||
#include "../../libslic3r/Utils.hpp"
|
#include "../../libslic3r/Utils.hpp"
|
||||||
|
#include "../../slic3r/GUI/GLCanvas3D.hpp"
|
||||||
|
|
||||||
#include <Eigen/Dense>
|
#include <Eigen/Dense>
|
||||||
|
|
||||||
|
@ -157,8 +158,9 @@ void GLGizmoBase::Grabber::render_face(float half_size) const
|
||||||
}
|
}
|
||||||
#endif // ENABLE_GIZMOS_3D
|
#endif // ENABLE_GIZMOS_3D
|
||||||
|
|
||||||
GLGizmoBase::GLGizmoBase()
|
GLGizmoBase::GLGizmoBase(GLCanvas3D& parent)
|
||||||
: m_group_id(-1)
|
: m_parent(parent)
|
||||||
|
, m_group_id(-1)
|
||||||
, m_state(Off)
|
, m_state(Off)
|
||||||
, m_hover_id(-1)
|
, m_hover_id(-1)
|
||||||
, m_is_container(false)
|
, m_is_container(false)
|
||||||
|
@ -195,6 +197,8 @@ void GLGizmoBase::start_dragging()
|
||||||
|
|
||||||
void GLGizmoBase::stop_dragging()
|
void GLGizmoBase::stop_dragging()
|
||||||
{
|
{
|
||||||
|
set_tooltip("");
|
||||||
|
|
||||||
for (int i = 0; i < (int)m_grabbers.size(); ++i)
|
for (int i = 0; i < (int)m_grabbers.size(); ++i)
|
||||||
{
|
{
|
||||||
m_grabbers[i].dragging = false;
|
m_grabbers[i].dragging = false;
|
||||||
|
@ -234,6 +238,18 @@ void GLGizmoBase::render_grabbers_for_picking() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::set_tooltip(const std::string& tooltip) const
|
||||||
|
{
|
||||||
|
m_parent.set_tooltip(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GLGizmoBase::format(float value, unsigned int decimals) const
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
::sprintf(buf, "%.*f", decimals, value);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
const float GLGizmoRotate::Offset = 5.0f;
|
const float GLGizmoRotate::Offset = 5.0f;
|
||||||
const unsigned int GLGizmoRotate::CircleResolution = 64;
|
const unsigned int GLGizmoRotate::CircleResolution = 64;
|
||||||
const unsigned int GLGizmoRotate::AngleResolution = 64;
|
const unsigned int GLGizmoRotate::AngleResolution = 64;
|
||||||
|
@ -245,8 +261,8 @@ const float GLGizmoRotate::ScaleShortTooth = 1.0f;
|
||||||
const unsigned int GLGizmoRotate::SnapRegionsCount = 8;
|
const unsigned int GLGizmoRotate::SnapRegionsCount = 8;
|
||||||
const float GLGizmoRotate::GrabberOffset = 5.0f;
|
const float GLGizmoRotate::GrabberOffset = 5.0f;
|
||||||
|
|
||||||
GLGizmoRotate::GLGizmoRotate(GLGizmoRotate::Axis axis)
|
GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
|
||||||
: GLGizmoBase()
|
: GLGizmoBase(parent)
|
||||||
, m_axis(axis)
|
, m_axis(axis)
|
||||||
, m_angle(0.0f)
|
, m_angle(0.0f)
|
||||||
, m_center(0.0, 0.0, 0.0)
|
, m_center(0.0, 0.0, 0.0)
|
||||||
|
@ -327,6 +343,9 @@ void GLGizmoRotate::on_update(const Linef3& mouse_ray)
|
||||||
|
|
||||||
void GLGizmoRotate::on_render(const BoundingBoxf3& box) const
|
void GLGizmoRotate::on_render(const BoundingBoxf3& box) const
|
||||||
{
|
{
|
||||||
|
if (m_grabbers[0].dragging)
|
||||||
|
set_tooltip(format(m_angle * 180.0f / (float)PI, 4));
|
||||||
|
|
||||||
#if ENABLE_GIZMOS_3D
|
#if ENABLE_GIZMOS_3D
|
||||||
::glEnable(GL_DEPTH_TEST);
|
::glEnable(GL_DEPTH_TEST);
|
||||||
#else
|
#else
|
||||||
|
@ -577,11 +596,11 @@ Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray) cons
|
||||||
return Linef3(Vec3d(local_ray(0, 0), local_ray(1, 0), local_ray(2, 0)), Vec3d(local_ray(0, 1), local_ray(1, 1), local_ray(2, 1))).intersect_plane(0.0);
|
return Linef3(Vec3d(local_ray(0, 0), local_ray(1, 0), local_ray(2, 0)), Vec3d(local_ray(0, 1), local_ray(1, 1), local_ray(2, 1))).intersect_plane(0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLGizmoRotate3D::GLGizmoRotate3D()
|
GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent)
|
||||||
: GLGizmoBase()
|
: GLGizmoBase(parent)
|
||||||
, m_x(GLGizmoRotate::X)
|
, m_x(parent, GLGizmoRotate::X)
|
||||||
, m_y(GLGizmoRotate::Y)
|
, m_y(parent, GLGizmoRotate::Y)
|
||||||
, m_z(GLGizmoRotate::Z)
|
, m_z(parent, GLGizmoRotate::Z)
|
||||||
{
|
{
|
||||||
m_is_container = true;
|
m_is_container = true;
|
||||||
|
|
||||||
|
@ -682,8 +701,8 @@ void GLGizmoRotate3D::on_render(const BoundingBoxf3& box) const
|
||||||
|
|
||||||
const float GLGizmoScale::Offset = 5.0f;
|
const float GLGizmoScale::Offset = 5.0f;
|
||||||
|
|
||||||
GLGizmoScale::GLGizmoScale()
|
GLGizmoScale::GLGizmoScale(GLCanvas3D& parent)
|
||||||
: GLGizmoBase()
|
: GLGizmoBase(parent)
|
||||||
, m_scale(1.0f)
|
, m_scale(1.0f)
|
||||||
, m_starting_scale(1.0f)
|
, m_starting_scale(1.0f)
|
||||||
{
|
{
|
||||||
|
@ -733,6 +752,9 @@ void GLGizmoScale::on_update(const Linef3& mouse_ray)
|
||||||
|
|
||||||
void GLGizmoScale::on_render(const BoundingBoxf3& box) const
|
void GLGizmoScale::on_render(const BoundingBoxf3& box) const
|
||||||
{
|
{
|
||||||
|
if (m_grabbers[0].dragging || m_grabbers[1].dragging || m_grabbers[2].dragging || m_grabbers[3].dragging)
|
||||||
|
set_tooltip(format(100.0f * m_scale, 4) + "%");
|
||||||
|
|
||||||
::glDisable(GL_DEPTH_TEST);
|
::glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
double min_x = box.min(0) - (double)Offset;
|
double min_x = box.min(0) - (double)Offset;
|
||||||
|
@ -779,8 +801,8 @@ void GLGizmoScale::on_render_for_picking(const BoundingBoxf3& box) const
|
||||||
|
|
||||||
const float GLGizmoScale3D::Offset = 5.0f;
|
const float GLGizmoScale3D::Offset = 5.0f;
|
||||||
|
|
||||||
GLGizmoScale3D::GLGizmoScale3D()
|
GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent)
|
||||||
: GLGizmoBase()
|
: GLGizmoBase(parent)
|
||||||
, m_scale_x(1.0f)
|
, m_scale_x(1.0f)
|
||||||
, m_scale_y(1.0f)
|
, m_scale_y(1.0f)
|
||||||
, m_scale_z(1.0f)
|
, m_scale_z(1.0f)
|
||||||
|
@ -847,6 +869,20 @@ void GLGizmoScale3D::on_update(const Linef3& mouse_ray)
|
||||||
|
|
||||||
void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
|
void GLGizmoScale3D::on_render(const BoundingBoxf3& box) const
|
||||||
{
|
{
|
||||||
|
if (m_grabbers[0].dragging || m_grabbers[1].dragging)
|
||||||
|
set_tooltip("X: " + format(100.0f * m_scale_x, 4) + "%");
|
||||||
|
else if (m_grabbers[2].dragging || m_grabbers[3].dragging)
|
||||||
|
set_tooltip("Y: " + format(100.0f * m_scale_y, 4) + "%");
|
||||||
|
else if (m_grabbers[4].dragging || m_grabbers[5].dragging)
|
||||||
|
set_tooltip("Z: " + format(100.0f * m_scale_z, 4) + "%");
|
||||||
|
else if (m_grabbers[6].dragging || m_grabbers[7].dragging || m_grabbers[8].dragging || m_grabbers[9].dragging)
|
||||||
|
{
|
||||||
|
std::string tooltip = "X: " + format(100.0f * m_scale_x, 4) + "%\n";
|
||||||
|
tooltip += "Y: " + format(100.0f * m_scale_y, 4) + "%\n";
|
||||||
|
tooltip += "Z: " + format(100.0f * m_scale_z, 4) + "%";
|
||||||
|
set_tooltip(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
::glEnable(GL_DEPTH_TEST);
|
::glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
Vec3d offset_vec = (double)Offset * Vec3d::Ones();
|
Vec3d offset_vec = (double)Offset * Vec3d::Ones();
|
||||||
|
@ -1013,7 +1049,7 @@ void GLGizmoScale3D::do_scale_y(const Linef3& mouse_ray)
|
||||||
double ratio = calc_ratio(2, mouse_ray, m_starting_center);
|
double ratio = calc_ratio(2, mouse_ray, m_starting_center);
|
||||||
|
|
||||||
if (ratio > 0.0)
|
if (ratio > 0.0)
|
||||||
m_scale_x = m_starting_scale_y * (float)ratio;
|
m_scale_x = m_starting_scale_y * (float)ratio; // << this is temporary
|
||||||
// m_scale_y = m_starting_scale_y * (float)ratio;
|
// m_scale_y = m_starting_scale_y * (float)ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,7 +1058,7 @@ void GLGizmoScale3D::do_scale_z(const Linef3& mouse_ray)
|
||||||
double ratio = calc_ratio(1, mouse_ray, m_starting_center);
|
double ratio = calc_ratio(1, mouse_ray, m_starting_center);
|
||||||
|
|
||||||
if (ratio > 0.0)
|
if (ratio > 0.0)
|
||||||
m_scale_x = m_starting_scale_z * (float)ratio;
|
m_scale_x = m_starting_scale_z * (float)ratio; // << this is temporary
|
||||||
// m_scale_z = m_starting_scale_z * (float)ratio;
|
// m_scale_z = m_starting_scale_z * (float)ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@ class Linef3;
|
||||||
|
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
|
class GLCanvas3D;
|
||||||
|
|
||||||
class GLGizmoBase
|
class GLGizmoBase
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
@ -61,6 +63,8 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
GLCanvas3D& m_parent;
|
||||||
|
|
||||||
int m_group_id;
|
int m_group_id;
|
||||||
EState m_state;
|
EState m_state;
|
||||||
// textures are assumed to be square and all with the same size in pixels, no internal check is done
|
// textures are assumed to be square and all with the same size in pixels, no internal check is done
|
||||||
|
@ -73,7 +77,7 @@ protected:
|
||||||
bool m_is_container;
|
bool m_is_container;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GLGizmoBase();
|
explicit GLGizmoBase(GLCanvas3D& parent);
|
||||||
virtual ~GLGizmoBase() {}
|
virtual ~GLGizmoBase() {}
|
||||||
|
|
||||||
bool init() { return on_init(); }
|
bool init() { return on_init(); }
|
||||||
|
@ -114,6 +118,9 @@ protected:
|
||||||
float picking_color_component(unsigned int id) const;
|
float picking_color_component(unsigned int id) const;
|
||||||
void render_grabbers() const;
|
void render_grabbers() const;
|
||||||
void render_grabbers_for_picking() const;
|
void render_grabbers_for_picking() const;
|
||||||
|
|
||||||
|
void set_tooltip(const std::string& tooltip) const;
|
||||||
|
std::string format(float value, unsigned int decimals) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GLGizmoRotate : public GLGizmoBase
|
class GLGizmoRotate : public GLGizmoBase
|
||||||
|
@ -146,7 +153,7 @@ private:
|
||||||
mutable bool m_keep_initial_values;
|
mutable bool m_keep_initial_values;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GLGizmoRotate(Axis axis);
|
GLGizmoRotate(GLCanvas3D& parent, Axis axis);
|
||||||
|
|
||||||
float get_angle() const { return m_angle; }
|
float get_angle() const { return m_angle; }
|
||||||
void set_angle(float angle);
|
void set_angle(float angle);
|
||||||
|
@ -179,7 +186,7 @@ class GLGizmoRotate3D : public GLGizmoBase
|
||||||
GLGizmoRotate m_z;
|
GLGizmoRotate m_z;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GLGizmoRotate3D();
|
explicit GLGizmoRotate3D(GLCanvas3D& parent);
|
||||||
|
|
||||||
float get_angle_x() const { return m_x.get_angle(); }
|
float get_angle_x() const { return m_x.get_angle(); }
|
||||||
void set_angle_x(float angle) { m_x.set_angle(angle); }
|
void set_angle_x(float angle) { m_x.set_angle(angle); }
|
||||||
|
@ -237,7 +244,7 @@ class GLGizmoScale : public GLGizmoBase
|
||||||
Vec2d m_starting_drag_position;
|
Vec2d m_starting_drag_position;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GLGizmoScale();
|
explicit GLGizmoScale(GLCanvas3D& parent);
|
||||||
|
|
||||||
float get_scale() const { return m_scale; }
|
float get_scale() const { return m_scale; }
|
||||||
void set_scale(float scale) { m_starting_scale = scale; }
|
void set_scale(float scale) { m_starting_scale = scale; }
|
||||||
|
@ -268,7 +275,7 @@ class GLGizmoScale3D : public GLGizmoBase
|
||||||
Vec3d m_starting_center;
|
Vec3d m_starting_center;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GLGizmoScale3D();
|
explicit GLGizmoScale3D(GLCanvas3D& parent);
|
||||||
|
|
||||||
float get_scale_x() const { return m_scale_x; }
|
float get_scale_x() const { return m_scale_x; }
|
||||||
void set_scale_x(float scale) { m_starting_scale_x = scale; }
|
void set_scale_x(float scale) { m_starting_scale_x = scale; }
|
||||||
|
|
|
@ -692,27 +692,6 @@ register_action_fewer_callback(canvas, callback)
|
||||||
CODE:
|
CODE:
|
||||||
_3DScene::register_action_fewer_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback);
|
_3DScene::register_action_fewer_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback);
|
||||||
|
|
||||||
void
|
|
||||||
register_action_ccw45_callback(canvas, callback)
|
|
||||||
SV *canvas;
|
|
||||||
SV *callback;
|
|
||||||
CODE:
|
|
||||||
_3DScene::register_action_ccw45_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback);
|
|
||||||
|
|
||||||
void
|
|
||||||
register_action_cw45_callback(canvas, callback)
|
|
||||||
SV *canvas;
|
|
||||||
SV *callback;
|
|
||||||
CODE:
|
|
||||||
_3DScene::register_action_cw45_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback);
|
|
||||||
|
|
||||||
void
|
|
||||||
register_action_scale_callback(canvas, callback)
|
|
||||||
SV *canvas;
|
|
||||||
SV *callback;
|
|
||||||
CODE:
|
|
||||||
_3DScene::register_action_scale_callback((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), (void*)callback);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
register_action_split_callback(canvas, callback)
|
register_action_split_callback(canvas, callback)
|
||||||
SV *canvas;
|
SV *canvas;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue