SLA gizmo now turns off in case someone adds an object/instance (to prevent rendering points in thin air, etc.)
Also, a bug appering when adding an object larger than the bed and scaling it down was fixed (sla gizmo did not work correctly in that case)
This commit is contained in:
parent
1e9e378659
commit
490074a2dd
@ -2114,6 +2114,7 @@ wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_GEOMETRY, Vec3dsEvent<2>);
|
|||||||
wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
||||||
|
wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
||||||
|
|
||||||
GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar)
|
GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar)
|
||||||
: m_canvas(canvas)
|
: m_canvas(canvas)
|
||||||
|
@ -116,6 +116,7 @@ wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_GEOMETRY, Vec3dsEvent<2>);
|
|||||||
wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
||||||
|
wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
||||||
|
|
||||||
// this describes events being passed from GLCanvas3D to SlaSupport gizmo
|
// this describes events being passed from GLCanvas3D to SlaSupport gizmo
|
||||||
enum class SLAGizmoEventType {
|
enum class SLAGizmoEventType {
|
||||||
@ -712,6 +713,7 @@ public:
|
|||||||
void set_camera_zoom(float zoom);
|
void set_camera_zoom(float zoom);
|
||||||
|
|
||||||
void update_gizmos_on_off_state();
|
void update_gizmos_on_off_state();
|
||||||
|
void reset_all_gizmos() { m_gizmos.reset_all_states(); }
|
||||||
|
|
||||||
void handle_sidebar_focus_event(const std::string& opt_key, bool focus_on);
|
void handle_sidebar_focus_event(const std::string& opt_key, bool focus_on);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& ic
|
|||||||
GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id)
|
GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id)
|
||||||
: GLGizmoBase(parent, sprite_id)
|
: GLGizmoBase(parent, sprite_id)
|
||||||
#endif // ENABLE_SVG_ICONS
|
#endif // ENABLE_SVG_ICONS
|
||||||
, m_starting_center(Vec3d::Zero()), m_quadric(nullptr)
|
, m_quadric(nullptr)
|
||||||
{
|
{
|
||||||
m_quadric = ::gluNewQuadric();
|
m_quadric = ::gluNewQuadric();
|
||||||
if (m_quadric != nullptr)
|
if (m_quadric != nullptr)
|
||||||
@ -44,12 +44,11 @@ bool GLGizmoSlaSupports::on_init()
|
|||||||
|
|
||||||
void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const Selection& selection)
|
void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const Selection& selection)
|
||||||
{
|
{
|
||||||
m_starting_center = Vec3d::Zero();
|
if (selection.is_empty())
|
||||||
|
return;
|
||||||
|
|
||||||
m_old_model_object = m_model_object;
|
m_old_model_object = m_model_object;
|
||||||
m_model_object = model_object;
|
m_model_object = model_object;
|
||||||
if (selection.is_empty())
|
|
||||||
m_old_instance_id = -1;
|
|
||||||
|
|
||||||
m_active_instance = selection.get_instance_idx();
|
m_active_instance = selection.get_instance_idx();
|
||||||
|
|
||||||
if (model_object && selection.is_from_single_instance())
|
if (model_object && selection.is_from_single_instance())
|
||||||
@ -74,6 +73,14 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S
|
|||||||
|
|
||||||
void GLGizmoSlaSupports::on_render(const Selection& selection) const
|
void GLGizmoSlaSupports::on_render(const Selection& selection) const
|
||||||
{
|
{
|
||||||
|
// If current m_model_object does not match selection, ask GLCanvas3D to turn us off
|
||||||
|
if (m_state == On
|
||||||
|
&& (m_model_object != selection.get_model()->objects[selection.get_object_idx()]
|
||||||
|
|| m_active_instance != selection.get_instance_idx())) {
|
||||||
|
m_parent.post_event(SimpleEvent(EVT_GLCANVAS_RESETGIZMOS));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
::glEnable(GL_BLEND);
|
::glEnable(GL_BLEND);
|
||||||
::glEnable(GL_DEPTH_TEST);
|
::glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
@ -717,6 +724,7 @@ std::string GLGizmoSlaSupports::on_get_name() const
|
|||||||
void GLGizmoSlaSupports::on_set_state()
|
void GLGizmoSlaSupports::on_set_state()
|
||||||
{
|
{
|
||||||
if (m_state == On && m_old_state != On) { // the gizmo was just turned on
|
if (m_state == On && m_old_state != On) { // the gizmo was just turned on
|
||||||
|
|
||||||
if (is_mesh_update_necessary())
|
if (is_mesh_update_necessary())
|
||||||
update_mesh();
|
update_mesh();
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ private:
|
|||||||
ModelObject* m_model_object = nullptr;
|
ModelObject* m_model_object = nullptr;
|
||||||
ModelObject* m_old_model_object = nullptr;
|
ModelObject* m_old_model_object = nullptr;
|
||||||
int m_active_instance = -1;
|
int m_active_instance = -1;
|
||||||
int m_old_instance_id = -1;
|
|
||||||
std::pair<Vec3f, Vec3f> unproject_on_mesh(const Vec2d& mouse_pos);
|
std::pair<Vec3f, Vec3f> unproject_on_mesh(const Vec2d& mouse_pos);
|
||||||
|
|
||||||
const float RenderPointScale = 1.f;
|
const float RenderPointScale = 1.f;
|
||||||
@ -32,10 +31,6 @@ private:
|
|||||||
Eigen::MatrixXi m_F; // facets indices
|
Eigen::MatrixXi m_F; // facets indices
|
||||||
igl::AABB<Eigen::MatrixXf,3> m_AABB;
|
igl::AABB<Eigen::MatrixXf,3> m_AABB;
|
||||||
|
|
||||||
struct SourceDataSummary {
|
|
||||||
Geometry::Transformation transformation;
|
|
||||||
};
|
|
||||||
|
|
||||||
class CacheEntry {
|
class CacheEntry {
|
||||||
public:
|
public:
|
||||||
CacheEntry(const sla::SupportPoint& point, bool sel, const Vec3f& norm = Vec3f::Zero()) :
|
CacheEntry(const sla::SupportPoint& point, bool sel, const Vec3f& norm = Vec3f::Zero()) :
|
||||||
@ -46,11 +41,6 @@ private:
|
|||||||
Vec3f normal;
|
Vec3f normal;
|
||||||
};
|
};
|
||||||
|
|
||||||
// This holds information to decide whether recalculation is necessary:
|
|
||||||
SourceDataSummary m_source_data;
|
|
||||||
|
|
||||||
mutable Vec3d m_starting_center;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#if ENABLE_SVG_ICONS
|
#if ENABLE_SVG_ICONS
|
||||||
GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
|
GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
|
||||||
|
@ -1191,6 +1191,7 @@ struct Plater::priv
|
|||||||
void select_view(const std::string& direction);
|
void select_view(const std::string& direction);
|
||||||
void select_view_3D(const std::string& name);
|
void select_view_3D(const std::string& name);
|
||||||
void select_next_view_3D();
|
void select_next_view_3D();
|
||||||
|
void reset_all_gizmos();
|
||||||
void update_ui_from_settings();
|
void update_ui_from_settings();
|
||||||
ProgressStatusBar* statusbar();
|
ProgressStatusBar* statusbar();
|
||||||
std::string get_config(const std::string &key) const;
|
std::string get_config(const std::string &key) const;
|
||||||
@ -1396,6 +1397,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
|||||||
view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this);
|
view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this);
|
||||||
view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, &priv::on_3dcanvas_mouse_dragging_finished, this);
|
view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, &priv::on_3dcanvas_mouse_dragging_finished, this);
|
||||||
view3D_canvas->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
|
view3D_canvas->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
|
||||||
|
view3D_canvas->Bind(EVT_GLCANVAS_RESETGIZMOS, [this](SimpleEvent&) { reset_all_gizmos(); });
|
||||||
// 3DScene/Toolbar:
|
// 3DScene/Toolbar:
|
||||||
view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this);
|
view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this);
|
||||||
view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); });
|
view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); });
|
||||||
@ -1478,6 +1480,11 @@ void Plater::priv::select_next_view_3D()
|
|||||||
set_current_panel(view3D);
|
set_current_panel(view3D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plater::priv::reset_all_gizmos()
|
||||||
|
{
|
||||||
|
view3D->get_canvas3d()->reset_all_gizmos();
|
||||||
|
}
|
||||||
|
|
||||||
// Called after the Preferences dialog is closed and the program settings are saved.
|
// Called after the Preferences dialog is closed and the program settings are saved.
|
||||||
// Update the UI based on the current preferences.
|
// Update the UI based on the current preferences.
|
||||||
void Plater::priv::update_ui_from_settings()
|
void Plater::priv::update_ui_from_settings()
|
||||||
|
Loading…
Reference in New Issue
Block a user