150{
151 GLShaderProgram* shader = wxGetApp().get_current_shader();
152 if (shader == nullptr)
153 return;
154
155 if (!
s_cube.model.is_initialized()) {
156
157
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()) {
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
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
189 GLCanvas3D &canvas = *wxGetApp().plater()->canvas3D();
191 } else {
193 }
194 };
195
198 render_extension(0,
s_cone, model_matrix);
199 } else {
201 render_extension(0,
s_cube, model_matrix);
202
204 const Vec3d extension_scale(0.75 * extension_size, 0.75 * extension_size, 3.0 * extension_size);
207 }
210 }
213 }
216 }
219 }
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