OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::GLGizmoBase::Grabber Struct Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp>

Collaboration diagram for Slic3r::GUI::GLGizmoBase::Grabber:

Public Member Functions

 Grabber ()=default
 ~Grabber ()
void render (bool hover, float size)
float get_half_size (float size) const
float get_dragging_half_size (float size) const
PickingModel & get_cube ()
void register_raycasters_for_picking (int id)
void unregister_raycasters_for_picking ()

Public Attributes

bool enabled { true }
bool dragging { false }
Vec3d center { Vec3d::Zero() }
Vec3d angles { Vec3d::Zero() }
Transform3d matrix { Transform3d::Identity() }
ColorRGBA color {GRABBER_NORMAL_COL}
ColorRGBA hover_color {GRABBER_HOVER_COL}
EGrabberExtension extensions { EGrabberExtension::None }
int picking_id { -1 }
std::array< std::shared_ptr< SceneRaycasterItem >, GRABBER_ELEMENTS_MAX_COUNT > raycasters = { nullptr }

Static Public Attributes

static const float SizeFactor = 0.05f
static const float MinHalfSize = 4.0f
static const float DraggingScaleFactor = 1.25f
static const float FixedGrabberSize = 16.0f
static const float FixedRadiusSize = 80.0f

Private Member Functions

void render (float size, const ColorRGBA &render_color)

Static Private Attributes

static PickingModel s_cube
static PickingModel s_cone

Detailed Description

Constructor & Destructor Documentation

◆ Grabber()

Slic3r::GUI::GLGizmoBase::Grabber::Grabber ( )
default

◆ ~Grabber()

Slic3r::GUI::GLGizmoBase::Grabber::~Grabber ( )
105{
106 //if (s_cube.model.is_initialized())
107 // s_cube.model.reset();
108
109 //if (s_cone.model.is_initialized())
110 // s_cone.model.reset();
111}

Member Function Documentation

◆ get_cube()

PickingModel & Slic3r::GUI::GLGizmoBase::Grabber::get_cube ( )
124{
125 if (!s_cube.model.is_initialized()) {
126 // This cannot be done in constructor, OpenGL is not yet
127 // initialized at that point (on Linux at least).
128 indexed_triangle_set its = its_make_cube(1.0, 1.0, 1.0);
129 its_translate(its, -0.5f * Vec3f::Ones());
130 s_cube.model.init_from(its);
131 s_cube.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
132 }
133 return s_cube;
134}
indexed_triangle_set its_make_cube(double xd, double yd, double zd)
Definition TriangleMesh.cpp:902
static PickingModel s_cube
Definition GLGizmoBase.hpp:120

References Slic3r::its_make_cube(), and s_cube.

Here is the call graph for this function:

◆ get_dragging_half_size()

float Slic3r::GUI::GLGizmoBase::Grabber::get_dragging_half_size ( float size) const
119{
120 return get_half_size(size) * DraggingScaleFactor;
121}
float get_half_size(float size) const
Definition GLGizmoBase.cpp:113
static const float DraggingScaleFactor
Definition GLGizmoBase.hpp:89

References DraggingScaleFactor, and Slic3r::GUI::get_half_size().

Here is the call graph for this function:

◆ get_half_size()

float Slic3r::GUI::GLGizmoBase::Grabber::get_half_size ( float size) const
114{
115 return std::max(size * SizeFactor, MinHalfSize);
116}
static const float SizeFactor
Definition GLGizmoBase.hpp:87
static const float MinHalfSize
Definition GLGizmoBase.hpp:88

References MinHalfSize, and SizeFactor.

◆ register_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBase::Grabber::register_raycasters_for_picking ( int id)
137{
138 picking_id = id;
139 // registration will happen on next call to render()
140}
int picking_id
Definition GLGizmoBase.hpp:102

References picking_id.

◆ render() [1/2]

void Slic3r::GUI::GLGizmoBase::Grabber::render ( bool hover,
float size )
inline
108{ render(size, hover ? hover_color : color); }
void render()
Definition GLGizmoBase.hpp:214
ColorRGBA hover_color
Definition GLGizmoBase.hpp:99
ColorRGBA color
Definition GLGizmoBase.hpp:98

References color, hover_color, and render().

Referenced by render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render() [2/2]

void Slic3r::GUI::GLGizmoBase::Grabber::render ( float size,
const ColorRGBA & render_color )
private
150{
151 GLShaderProgram* shader = wxGetApp().get_current_shader();
152 if (shader == nullptr)
153 return;
154
155 if (!s_cube.model.is_initialized()) {
156 // This cannot be done in constructor, OpenGL is not yet
157 // initialized at that point (on Linux at least).
158 indexed_triangle_set its = its_make_cube(1.0, 1.0, 1.0);
159 its_translate(its, -0.5f * Vec3f::Ones());
160 s_cube.model.init_from(its);
161 s_cube.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
162 }
163
164 if (!s_cone.model.is_initialized()) {
165 indexed_triangle_set its = its_make_cone(1.0, 1.0, double(PI) / 18.0);
166 s_cone.model.init_from(its);
167 s_cone.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
168 }
169
170 //BBS set to fixed size grabber
171 const float grabber_size = FixedGrabberSize * INV_ZOOM;
172 const double extension_size = 0.75 * FixedGrabberSize * INV_ZOOM;
173
174 s_cube.model.set_color(render_color);
175 s_cone.model.set_color(render_color);
176
177 const Camera& camera = wxGetApp().plater()->get_camera();
178 shader->set_uniform("projection_matrix", camera.get_projection_matrix());
179 const Transform3d& view_matrix = camera.get_view_matrix();
180 const Matrix3d view_matrix_no_offset = view_matrix.matrix().block(0, 0, 3, 3);
181
182 auto render_extension = [&view_matrix, &view_matrix_no_offset, shader, this](int idx, PickingModel &model, const Transform3d &model_matrix) {
183 shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
184 const Matrix3d view_normal_matrix = view_matrix_no_offset * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
185 shader->set_uniform("view_normal_matrix", view_normal_matrix);
186 model.model.render();
187
188 if (raycasters[idx] == nullptr) {
189 GLCanvas3D &canvas = *wxGetApp().plater()->canvas3D();
190 raycasters[idx] = canvas.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, picking_id, *model.mesh_raycaster, model_matrix);
191 } else {
192 raycasters[idx]->set_transform(model_matrix);
193 }
194 };
195
197 const Transform3d model_matrix = matrix * Geometry::assemble_transform(center, angles, Vec3d(0.75 * extension_size, 0.75 * extension_size, 2.0 * extension_size));
198 render_extension(0, s_cone, model_matrix);
199 } else {
200 const Transform3d model_matrix = matrix * Geometry::assemble_transform(center, angles, grabber_size * Vec3d::Ones());
201 render_extension(0, s_cube, model_matrix);
202
203 const Transform3d extension_model_matrix_base = matrix * Geometry::assemble_transform(center, angles);
204 const Vec3d extension_scale(0.75 * extension_size, 0.75 * extension_size, 3.0 * extension_size);
205 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) {
206 render_extension(1, s_cone, extension_model_matrix_base * Geometry::assemble_transform(2.0 * extension_size * Vec3d::UnitX(), Vec3d(0.0, 0.5 * double(PI), 0.0), extension_scale));
207 }
208 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegX)) != 0) {
209 render_extension(2, s_cone, extension_model_matrix_base * Geometry::assemble_transform(-2.0 * extension_size * Vec3d::UnitX(), Vec3d(0.0, -0.5 * double(PI), 0.0), extension_scale));
210 }
211 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosY)) != 0) {
212 render_extension(3, s_cone, extension_model_matrix_base * Geometry::assemble_transform(2.0 * extension_size * Vec3d::UnitY(), Vec3d(-0.5 * double(PI), 0.0, 0.0), extension_scale));
213 }
214 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegY)) != 0) {
215 render_extension(4, s_cone, extension_model_matrix_base * Geometry::assemble_transform(-2.0 * extension_size * Vec3d::UnitY(), Vec3d(0.5 * double(PI), 0.0, 0.0), extension_scale));
216 }
217 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosZ)) != 0) {
218 render_extension(5, s_cone, extension_model_matrix_base * Geometry::assemble_transform(2.0 * extension_size * Vec3d::UnitZ(), Vec3d::Zero(), extension_scale));
219 }
220 if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegZ)) != 0) {
221 render_extension(6, s_cone, extension_model_matrix_base * Geometry::assemble_transform(-2.0 * extension_size * Vec3d::UnitZ(), Vec3d(double(PI), 0.0, 0.0), extension_scale));
222 }
223 }
224}
static float INV_ZOOM
Definition GLGizmoBase.hpp:54
@ PosX
Definition GLGizmoBase.hpp:76
@ NegY
Definition GLGizmoBase.hpp:79
@ NegX
Definition GLGizmoBase.hpp:77
@ PosY
Definition GLGizmoBase.hpp:78
@ NegZ
Definition GLGizmoBase.hpp:81
@ PosZ
Definition GLGizmoBase.hpp:80
@ Gizmo
Definition SceneRaycaster.hpp:51
static constexpr double PI
Definition libslic3r.h:81
@ Camera
Definition Shortcuts.hpp:72
void assemble_transform(Transform3d &transform, const Vec3d &translation, const Vec3d &rotation, const Vec3d &scale, const Vec3d &mirror)
Definition Geometry.cpp:319
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68
Eigen::Transform< double, 3, Eigen::Affine, Eigen::DontAlign > Transform3d
Definition Point.hpp:96
Eigen::Matrix< double, 3, 3, Eigen::DontAlign > Matrix3d
Definition Point.hpp:86
indexed_triangle_set its_make_cone(double r, double h, double fa)
Definition TriangleMesh.cpp:1079
static PickingModel s_cone
Definition GLGizmoBase.hpp:121
static const float FixedGrabberSize
Definition GLGizmoBase.hpp:90
Vec3d angles
Definition GLGizmoBase.hpp:96
std::array< std::shared_ptr< SceneRaycasterItem >, GRABBER_ELEMENTS_MAX_COUNT > raycasters
Definition GLGizmoBase.hpp:103
EGrabberExtension extensions
Definition GLGizmoBase.hpp:100
Transform3d matrix
Definition GLGizmoBase.hpp:97
Vec3d center
Definition GLGizmoBase.hpp:95

References Slic3r::GUI::GLCanvas3D::add_raycaster_for_picking(), angles, Slic3r::Geometry::assemble_transform(), center, extensions, FixedGrabberSize, Slic3r::GUI::Camera::get_projection_matrix(), Slic3r::GUI::Camera::get_view_matrix(), Slic3r::GUI::SceneRaycaster::Gizmo, Slic3r::GUI::GLGizmoBase::INV_ZOOM, Slic3r::its_make_cone(), Slic3r::its_make_cube(), matrix, Slic3r::GUI::GLGizmoBase::NegX, Slic3r::GUI::GLGizmoBase::NegY, Slic3r::GUI::GLGizmoBase::NegZ, PI, picking_id, Slic3r::GUI::GLGizmoBase::PosX, Slic3r::GUI::GLGizmoBase::PosY, Slic3r::GUI::GLGizmoBase::PosZ, raycasters, s_cone, s_cube, and Slic3r::GLShaderProgram::set_uniform().

Here is the call graph for this function:

◆ unregister_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBase::Grabber::unregister_raycasters_for_picking ( )
143{
144 wxGetApp().plater()->canvas3D()->remove_raycasters_for_picking(SceneRaycaster::EType::Gizmo, picking_id);
145 picking_id = -1;
146 raycasters = { nullptr };
147}

References Slic3r::GUI::SceneRaycaster::Gizmo, picking_id, and raycasters.

Member Data Documentation

◆ angles

Vec3d Slic3r::GUI::GLGizmoBase::Grabber::angles { Vec3d::Zero() }
96{ Vec3d::Zero() };

Referenced by render().

◆ center

Vec3d Slic3r::GUI::GLGizmoBase::Grabber::center { Vec3d::Zero() }
95{ Vec3d::Zero() };

Referenced by render().

◆ color

ColorRGBA Slic3r::GUI::GLGizmoBase::Grabber::color {GRABBER_NORMAL_COL}
static ColorRGBA GRABBER_NORMAL_COL
Definition GLGizmoBase.hpp:65

Referenced by render().

◆ dragging

bool Slic3r::GUI::GLGizmoBase::Grabber::dragging { false }
94{ false };

◆ DraggingScaleFactor

const float Slic3r::GUI::GLGizmoBase::Grabber::DraggingScaleFactor = 1.25f
static

Referenced by get_dragging_half_size().

◆ enabled

bool Slic3r::GUI::GLGizmoBase::Grabber::enabled { true }
93{ true };

◆ extensions

EGrabberExtension Slic3r::GUI::GLGizmoBase::Grabber::extensions { EGrabberExtension::None }

Referenced by render().

◆ FixedGrabberSize

const float Slic3r::GUI::GLGizmoBase::Grabber::FixedGrabberSize = 16.0f
static

◆ FixedRadiusSize

const float Slic3r::GUI::GLGizmoBase::Grabber::FixedRadiusSize = 80.0f
static

◆ hover_color

ColorRGBA Slic3r::GUI::GLGizmoBase::Grabber::hover_color {GRABBER_HOVER_COL}
static ColorRGBA GRABBER_HOVER_COL
Definition GLGizmoBase.hpp:66

Referenced by render().

◆ matrix

Transform3d Slic3r::GUI::GLGizmoBase::Grabber::matrix { Transform3d::Identity() }
97{ Transform3d::Identity() };

Referenced by render().

◆ MinHalfSize

const float Slic3r::GUI::GLGizmoBase::Grabber::MinHalfSize = 4.0f
static

Referenced by get_half_size().

◆ picking_id

int Slic3r::GUI::GLGizmoBase::Grabber::picking_id { -1 }

◆ raycasters

std::array<std::shared_ptr<SceneRaycasterItem>, GRABBER_ELEMENTS_MAX_COUNT> Slic3r::GUI::GLGizmoBase::Grabber::raycasters = { nullptr }
103{ nullptr };

Referenced by render(), and unregister_raycasters_for_picking().

◆ s_cone

PickingModel Slic3r::GUI::GLGizmoBase::Grabber::s_cone
staticprivate

Referenced by render().

◆ s_cube

PickingModel Slic3r::GUI::GLGizmoBase::Grabber::s_cube
staticprivate

Referenced by get_cube(), and render().

◆ SizeFactor

const float Slic3r::GUI::GLGizmoBase::Grabber::SizeFactor = 0.05f
static

Referenced by get_half_size().


The documentation for this struct was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp