Tech ENABLE_RAYCAST_PICKING - Refactoring to allow for easier update of raycasters transform

(cherry picked from commit prusa3d/PrusaSlicer@9ac5ab857b)
This commit is contained in:
enricoturri1966 2023-10-29 00:06:43 +08:00 committed by Noisyfox
parent 29be4cc9a3
commit ab090bf20d
6 changed files with 64 additions and 73 deletions

View file

@ -37,6 +37,7 @@ public:
// Starting value for ids to avoid clashing with ids used by GLVolumes
// (254 is choosen to leave some space for forward compatibility)
static const unsigned int BASE_ID = 255 * 255 * 254;
static const unsigned int GRABBER_ELEMENTS_MAX_COUNT = 7;
static float INV_ZOOM;
@ -86,8 +87,8 @@ protected:
ColorRGBA hover_color{GRABBER_HOVER_COL};
EGrabberExtension extensions{ EGrabberExtension::None };
// the picking id shared by all the elements
int picking_id{ -1 };
bool elements_registered_for_picking{ false };
PickingId picking_id{ -1 };
std::array<std::shared_ptr<SceneRaycasterItem>, GRABBER_ELEMENTS_MAX_COUNT> raycasters = { nullptr };
Grabber() = default;
~Grabber();
@ -98,7 +99,7 @@ protected:
float get_dragging_half_size(float size) const;
PickingModel &get_cube();
void register_raycasters_for_picking(int id);
void register_raycasters_for_picking(PickingId id);
void unregister_raycasters_for_picking();
private:
@ -212,7 +213,7 @@ public:
int get_count() { return ++count; }
std::string get_gizmo_name() { return on_get_name(); }
void register_raycasters_for_picking(bool use_group_id = false) { register_grabbers_for_picking(use_group_id); on_register_raycasters_for_picking(); }
void register_raycasters_for_picking() { register_grabbers_for_picking(); on_register_raycasters_for_picking(); }
void unregister_raycasters_for_picking() { unregister_grabbers_for_picking(); on_unregister_raycasters_for_picking(); }
protected:
@ -238,7 +239,7 @@ protected:
void GizmoImguiEnd();
void GizmoImguiSetNextWIndowPos(float &x, float y, int flag, float pivot_x = 0.0f, float pivot_y = 0.0f);
void register_grabbers_for_picking(bool use_group_id = false);
void register_grabbers_for_picking();
void unregister_grabbers_for_picking();
virtual void on_register_raycasters_for_picking() {}
virtual void on_unregister_raycasters_for_picking() {}