OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::GLGizmoBrimEars Class Reference

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

Inheritance diagram for Slic3r::GUI::GLGizmoBrimEars:
Collaboration diagram for Slic3r::GUI::GLGizmoBrimEars:

Classes

class  CacheEntry

Public Types

enum class  EGrabberExtension {
  None = 0 , PosX = 1 << 0 , NegX = 1 << 1 , PosY = 1 << 2 ,
  NegY = 1 << 3 , PosZ = 1 << 4 , NegZ = 1 << 5
}
enum  EState { Off , On , Num_States }

Public Member Functions

 GLGizmoBrimEars (GLCanvas3D &parent, const std::string &icon_filename, unsigned int sprite_id)
virtual ~GLGizmoBrimEars ()=default
void data_changed (bool is_serializing) override
 Is called when data (Selection) is changed.
void set_brim_data ()
bool on_mouse (const wxMouseEvent &mouse_event) override
 Implement when want to process mouse events in gizmo Click, Right click, move, drag, ...
bool gizmo_event (SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down)
void delete_selected_points ()
bool has_selected_points () const
void update_model_object ()
bool is_selection_rectangle_dragging () const override
bool wants_enter_leave_snapshots () const override
std::string get_gizmo_entering_text () const override
std::string get_gizmo_leaving_text () const override
bool init ()
void load (cereal::BinaryInputArchive &ar)
void save (cereal::BinaryOutputArchive &ar) const
std::string get_name (bool include_shortcut=true) const
EState get_state () const
void set_state (EState state)
std::optional< Shortcut > shortcut () const
const std::string & get_icon_filename () const
void set_icon_filename (const std::string &filename)
bool is_activable () const
bool is_selectable () const
CommonGizmosDataID get_requirements () const
virtual std::string get_action_snapshot_name () const
void set_common_data_pool (CommonGizmosDataPool *ptr)
virtual bool apply_clipping_plane ()
unsigned int get_sprite_id () const
int get_hover_id () const
void set_hover_id (int id)
bool is_dragging () const
bool update_items_state ()
void render ()
void render_input_window (float x, float y, float bottom_limit)
virtual void on_change_color_mode (bool is_dark)
virtual std::string get_tooltip () const
 Mouse tooltip text.
int get_count ()
std::string get_gizmo_name ()
void register_raycasters_for_picking ()
void unregister_raycasters_for_picking ()
virtual bool is_in_editing_mode () const

Static Public Member Functions

static void update_render_colors ()
static void load_render_colors ()

Static Public Attributes

static const unsigned int BASE_ID = 255 * 255 * 254
static const unsigned int GRABBER_ELEMENTS_MAX_COUNT = 7
static float INV_ZOOM = 1.0f
static ColorRGBA DEFAULT_BASE_COLOR = { 0.625f, 0.625f, 0.625f, 1.0f }
static ColorRGBA DEFAULT_DRAG_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }
static ColorRGBA DEFAULT_HIGHLIGHT_COLOR = {1.0f, 0.38f, 0.0f, 1.0f}
static std::array< ColorRGBA, 3 > AXES_COLOR
static std::array< ColorRGBA, 3 > AXES_HOVER_COLOR
static ColorRGBA CONSTRAINED_COLOR = {0.5f, 0.5f, 0.5f, 1.0f}
static ColorRGBA FLATTEN_COLOR = {0.96f, 0.93f, 0.93f, 0.5f}
static ColorRGBA FLATTEN_HOVER_COLOR = {1.0f, 1.0f, 1.0f, 0.75f}
static ColorRGBA GRABBER_NORMAL_COL = {1.0f, 1.0f, 1.0f, 1.0f}
static ColorRGBA GRABBER_HOVER_COL = {0.863f, 0.125f, 0.063f, 1.0f}
static ColorRGBA GRABBER_UNIFORM_COL = {0, 1.0, 1.0, 1.0f}
static ColorRGBA GRABBER_UNIFORM_HOVER_COL = {0, 0.7, 0.7, 1.0f}

Protected Member Functions

void on_set_state () override
void on_set_hover_id () override
void on_start_dragging () override
void on_stop_dragging () override
void on_render_input_window (float x, float y, float bottom_limit) override
std::string on_get_name () const override
bool on_is_activable () const override
bool render_follows_cursor () const override
virtual CommonGizmosDataID on_get_requirements () const override
void on_load (cereal::BinaryInputArchive &ar) override
void on_save (cereal::BinaryOutputArchive &ar) const override
virtual void on_register_raycasters_for_picking () override
virtual void on_unregister_raycasters_for_picking () override
void register_single_mesh_pick ()
void reset_all_pick ()
bool add_point_to_cache (Vec3f pos, float head_radius, bool selected, Vec3f normal)
float get_brim_default_radius () const
ExPolygon make_polygon (BrimPoint point, const Geometry::Transformation &trsf)
void find_single ()
bool render_combo (const std::string &label, const std::vector< std::string > &lines, int &selection_idx, float label_width, float item_width)
void render_cross_mark (const Vec3f &target, bool is_single=false)
virtual bool on_is_selectable () const
virtual void on_enable_grabber (unsigned int id)
virtual void on_disable_grabber (unsigned int id)
bool GizmoImguiBegin (const std::string &name, int flags)
void GizmoImguiEnd ()
void GizmoImguiSetNextWIndowPos (float &x, float y, int flag, float pivot_x=0.0f, float pivot_y=0.0f)
void GizmoImguiSetNextWIndowPos (float &x, float y, float w, float h, int flag, float pivot_x=0.0f, float pivot_y=0.0f)
void register_grabbers_for_picking ()
void unregister_grabbers_for_picking ()
void render_grabbers (const BoundingBoxf3 &box) const
void render_grabbers (float size) const
void render_grabbers (size_t first, size_t last, float size, bool force_hover) const
std::string format (float value, unsigned int decimals) const
void set_dirty ()
bool use_grabbers (const wxMouseEvent &mouse_event)
 function which Set up m_dragging and call functions on_start_dragging / on_dragging / on_stop_dragging
void do_stop_dragging (bool perform_mouse_cleanup)

Protected Attributes

GLCanvas3D & m_parent
int m_group_id
EState m_state
std::optional< Shortcut > m_shortcut
std::string m_icon_filename
unsigned int m_sprite_id
int m_hover_id { -1 }
bool m_dragging { false }
std::vector< Grabber > m_grabbers
ImGuiWrapper * m_imgui
bool m_first_input_window_render { true }
CommonGizmosDataPool * m_c { nullptr }
bool m_is_dark_mode = false
float last_input_window_width = 0

Private Types

enum  { AllPoints = -2 , NoPoints }
using PickRaycaster = SceneRaycasterItem

Private Member Functions

bool unproject_on_mesh (const Vec2d &mouse_pos, std::pair< Vec3f, Vec3f > &pos_and_normal)
bool unproject_on_mesh2 (const Vec2d &mouse_pos, std::pair< Vec3f, Vec3f > &pos_and_normal)
bool on_init () override
void on_dragging (const UpdateData &data) override
void on_render () override
void render_points (const Selection &selection)
std::vector< const ConfigOption * > get_config_options (const std::vector< std::string > &keys) const
bool is_mesh_point_clipped (const Vec3d &point) const
void select_point (int i)
void unselect_point (int i)
void reload_cache ()
Points generate_points (Polygon &obj_polygon, float ear_detection_length, float brim_ears_max_angle, bool is_outer)
void auto_generate ()
void first_layer_slicer ()
void get_detection_radius_max ()
void update_raycasters ()
void begin_radius_change (float initial_value)
void update_cache_radius ()
void apply_radius_change ()

Private Attributes

const float RenderPointScale = 1.f
float m_new_point_head_radius
float m_max_angle = 125.f
float m_detection_radius = 1.f
double m_detection_radius_max = .0f
CacheEntry m_point_before_drag
float m_old_point_head_radius = 0.
std::vector< CacheEntry > m_editing_cache
std::map< int, CacheEntry > m_single_brim
ObjectID m_old_mo_id
const Vec3d m_world_normal = {0, 0, 1}
std::map< GLVolume *, std::shared_ptr< PickRaycaster > > m_mesh_raycaster_map
GLVolume * m_last_hit_volume
std::optional< CacheEntry > render_hover_point
bool m_link_text_hover = false
PickingModel m_cylinder
std::map< std::string, wxString > m_desc
std::vector< std::pair< wxString, wxString > > m_shortcuts
GLSelectionRectangle m_selection_rectangle
ExPolygons m_first_layer
bool m_wait_for_up_event = false
bool m_selection_empty = true
EState m_old_state = Off
bool m_dirty { false }
int count = 0

Detailed Description

Member Typedef Documentation

◆ PickRaycaster

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
AllPoints 
NoPoints 
155 {
156 AllPoints = -2,
157 NoPoints,
158 };
@ AllPoints
Definition GLGizmoBrimEars.hpp:156
@ NoPoints
Definition GLGizmoBrimEars.hpp:157

◆ EGrabberExtension

enum class Slic3r::GUI::GLGizmoBase::EGrabberExtension
stronginherited
Enumerator
None 
PosX 
NegX 
PosY 
NegY 
PosZ 
NegZ 
74 {
75 None = 0,
76 PosX = 1 << 0,
77 NegX = 1 << 1,
78 PosY = 1 << 2,
79 NegY = 1 << 3,
80 PosZ = 1 << 4,
81 NegZ = 1 << 5,
82 };
@ PosX
Definition PrintConfig.hpp:350
@ NegY
Definition PrintConfig.hpp:351
@ NegX
Definition PrintConfig.hpp:351
@ PosY
Definition PrintConfig.hpp:350
@ NegZ
Definition PrintConfig.hpp:351
@ PosZ
Definition PrintConfig.hpp:350
@ None
Definition SketchEngine.hpp:180

◆ EState

Enumerator
Off 
On 
Num_States 
126 {
127 Off,
128 On,
130 };
@ On
Definition GLGizmoBase.hpp:128
@ Num_States
Definition GLGizmoBase.hpp:129
@ Off
Definition GLGizmoBase.hpp:127

Constructor & Destructor Documentation

◆ GLGizmoBrimEars()

Slic3r::GUI::GLGizmoBrimEars::GLGizmoBrimEars ( GLCanvas3D & parent,
const std::string & icon_filename,
unsigned int sprite_id )
82 : GLGizmoBase(parent, icon_filename, sprite_id)
83{
84 GLModel::Geometry cylinder_geometry = smooth_cylinder(16, 1.0f, 1.0f);
85 m_cylinder.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(cylinder_geometry.get_as_indexed_triangle_set()));
86 m_cylinder.model.init_from(std::move(cylinder_geometry));
87}
GLGizmoBase(GLCanvas3D &parent, const std::string &icon_filename, unsigned int sprite_id)
Definition GLGizmoBase.cpp:327
PickingModel m_cylinder
Definition GLGizmoBrimEars.hpp:133
GLModel::Geometry smooth_cylinder(unsigned int resolution, float radius, float height)
Definition GLModel.cpp:1356

References Slic3r::GUI::GLGizmoBase::GLGizmoBase(), Slic3r::GUI::GLModel::Geometry::get_as_indexed_triangle_set(), m_cylinder, and Slic3r::GUI::smooth_cylinder().

Here is the call graph for this function:

◆ ~GLGizmoBrimEars()

virtual Slic3r::GUI::GLGizmoBrimEars::~GLGizmoBrimEars ( )
virtualdefault

Member Function Documentation

◆ add_point_to_cache()

bool Slic3r::GUI::GLGizmoBrimEars::add_point_to_cache ( Vec3f pos,
float head_radius,
bool selected,
Vec3f normal )
protected
1092{
1093 BrimPoint point(pos, head_radius);
1094 for (int i = 0; i < m_editing_cache.size(); i++) {
1095 if (m_editing_cache[i].brim_point == point) { return false; }
1096 }
1097 m_editing_cache.emplace_back(point, selected, normal);
1099 return true;
1100}
std::vector< CacheEntry > m_editing_cache
Definition GLGizmoBrimEars.hpp:123
void update_model_object()
Definition GLGizmoBrimEars.cpp:866
Point normal(Point pt, double scale)
Definition TreeSupport.cpp:112

References m_editing_cache, Slic3r::normal(), and update_model_object().

Referenced by auto_generate(), and gizmo_event().

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

◆ apply_clipping_plane()

virtual bool Slic3r::GUI::GLGizmoBase::apply_clipping_plane ( )
inlinevirtualinherited
195{ return true; }

Referenced by Slic3r::GUI::GLCanvas3D::_render_objects(), and Slic3r::GUI::GLCanvas3D::get_raycaster_clipping_plane().

Here is the caller graph for this function:

◆ apply_radius_change()

void Slic3r::GUI::GLGizmoBrimEars::apply_radius_change ( )
private
643{
644 if (m_old_point_head_radius == 0.f) return;
645
646 // momentarily restore the old value to take snapshot
647 for (auto& cache_entry : m_editing_cache)
648 if (cache_entry.selected)
649 cache_entry.brim_point.head_front_radius = m_old_point_head_radius;
650 float backup = m_new_point_head_radius;
652 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Change brim ear radius");
656}
void update_cache_radius()
Definition GLGizmoBrimEars.cpp:628
float m_old_point_head_radius
Definition GLGizmoBrimEars.hpp:122
float m_new_point_head_radius
Definition GLGizmoBrimEars.hpp:117
static Plater * plater()
Definition GUI_Factories.cpp:400

References m_editing_cache, m_new_point_head_radius, m_old_point_head_radius, Slic3r::GUI::plater(), and update_cache_radius().

Referenced by gizmo_event(), and on_render_input_window().

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

◆ auto_generate()

void Slic3r::GUI::GLGizmoBrimEars::auto_generate ( )
private
1016{
1017 const Selection &selection = m_parent.get_selection();
1018 const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin());
1019 Transform3d trsf = volume->get_instance_transformation().get_matrix();
1020 Vec3f normal = (volume->get_instance_transformation().get_matrix_no_offset().inverse() * m_world_normal).cast<float>();
1021 auto add_point = [this, &trsf, &normal](const Point &p) {
1022 Vec3d world_pos = {float(p.x() * SCALING_FACTOR), float(p.y() * SCALING_FACTOR), -0.0001};
1023 Vec3d object_pos = trsf.inverse() * world_pos;
1024 add_point_to_cache(object_pos.cast<float>(), m_new_point_head_radius, false, normal);
1025 };
1026 for (const ExPolygon &ex_poly : m_first_layer) {
1027 Polygon out_poly = ex_poly.contour;
1028 Polygons inner_poly = ex_poly.holes;
1029 polygons_reverse(inner_poly);
1030 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Auto generate brim ear");
1031 Points out_points = generate_points(out_poly, m_detection_radius, m_max_angle, true);
1032 for (Point &p : out_points) { add_point(p); }
1033 for (Polygon &pl : inner_poly) {
1034 Points inner_points = generate_points(pl, m_detection_radius, m_max_angle, false);
1035 for (Point &p : inner_points) { add_point(p); }
1036 }
1037 }
1038 find_single();
1039}
GLCanvas3D & m_parent
Definition GLGizmoBase.hpp:143
float m_max_angle
Definition GLGizmoBrimEars.hpp:118
ExPolygons m_first_layer
Definition GLGizmoBrimEars.hpp:144
const Vec3d m_world_normal
Definition GLGizmoBrimEars.hpp:126
void find_single()
Definition GLGizmoBrimEars.cpp:1194
bool add_point_to_cache(Vec3f pos, float head_radius, bool selected, Vec3f normal)
Definition GLGizmoBrimEars.cpp:1091
float m_detection_radius
Definition GLGizmoBrimEars.hpp:119
Points generate_points(Polygon &obj_polygon, float ear_detection_length, float brim_ears_max_angle, bool is_outer)
Definition GLGizmoBrimEars.cpp:961
double SCALING_FACTOR
Definition libslic3r.cpp:3
@ Selection
Definition Shortcuts.hpp:72
Kernel::Point_3 Point
Definition MeshRepair.cpp:81
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
void polygons_reverse(Polygons &polys)
Definition Polygon.hpp:177
Eigen::Matrix< float, 3, 1, Eigen::DontAlign > Vec3f
Definition Point.hpp:65
std::vector< Polygon, PointsAllocator< Polygon > > Polygons
Definition Polygon.hpp:22
std::vector< Point, PointsAllocator< Point > > Points
Definition Point.hpp:73
Slic3r::Polygon Polygon
Definition Emboss.cpp:101

References add_point_to_cache(), find_single(), generate_points(), Slic3r::GLVolume::get_instance_transformation(), Slic3r::Geometry::Transformation::get_matrix(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), m_detection_radius, m_first_layer, m_max_angle, m_new_point_head_radius, Slic3r::GUI::GLGizmoBase::m_parent, m_world_normal, Slic3r::normal(), Slic3r::GUI::plater(), Slic3r::polygons_reverse(), and SCALING_FACTOR.

Referenced by on_render_input_window().

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

◆ begin_radius_change()

void Slic3r::GUI::GLGizmoBrimEars::begin_radius_change ( float initial_value)
private
623{
624 if (m_old_point_head_radius == 0.f)
625 m_old_point_head_radius = initial_value;
626}

References m_old_point_head_radius.

Referenced by gizmo_event(), and on_render_input_window().

Here is the caller graph for this function:

◆ data_changed()

void Slic3r::GUI::GLGizmoBrimEars::data_changed ( bool is_serializing)
overridevirtual

Is called when data (Selection) is changed.

Reimplemented from Slic3r::GUI::GLGizmoBase.

307{
308 if (!m_c->selection_info()) return;
309
310 ModelObject *mo = m_c->selection_info()->model_object();
311 if (mo) {
314 }
315
317}
CommonGizmosDataPool * m_c
Definition GLGizmoBase.hpp:155
void register_single_mesh_pick()
Definition GLGizmoBrimEars.cpp:1136
void reset_all_pick()
Definition GLGizmoBrimEars.cpp:1165
void set_brim_data()
Definition GLGizmoBrimEars.cpp:116

References Slic3r::GUI::GLGizmoBase::m_c, register_single_mesh_pick(), reset_all_pick(), and set_brim_data().

Here is the call graph for this function:

◆ delete_selected_points()

void Slic3r::GUI::GLGizmoBrimEars::delete_selected_points ( )
563{
564 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Delete brim ear");
565
566 for (unsigned int idx = 0; idx < m_editing_cache.size(); ++idx) {
567 if (m_editing_cache[idx].selected) { m_editing_cache.erase(m_editing_cache.begin() + (idx--)); }
568 }
569
571 find_single();
573}
void select_point(int i)
Definition GLGizmoBrimEars.cpp:927

References find_single(), m_editing_cache, NoPoints, Slic3r::GUI::plater(), select_point(), and update_model_object().

Referenced by gizmo_event(), and on_render_input_window().

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

◆ do_stop_dragging()

void Slic3r::GUI::GLGizmoBase::do_stop_dragging ( bool perform_mouse_cleanup)
protectedinherited
494{
495 for (auto& grabber : m_grabbers) grabber.dragging = false;
496 m_dragging = false;
497
498 // NOTE: This should be part of GLCanvas3D
499 // Reset hover_id when leave window
500 if (perform_mouse_cleanup) m_parent.mouse_up_cleanup();
501
503
504 // There is prediction that after draggign, data are changed
505 // Data are updated twice also by canvas3D::reload_scene.
506 // Should be fixed.
507 m_parent.get_gizmos_manager().update_data();
508
509 wxGetApp().obj_manipul()->set_dirty();
510
511 // Let the plater know that the dragging finished, so a delayed
512 // refresh of the scene with the background processing data should
513 // be performed.
514 m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
515 // updates camera target constraints
516 m_parent.refresh_camera_scene_box();
517}
bool m_dragging
Definition GLGizmoBase.hpp:151
std::vector< Grabber > m_grabbers
Definition GLGizmoBase.hpp:152
virtual void on_stop_dragging()
Definition GLGizmoBase.hpp:254

References m_dragging, m_grabbers, m_parent, and on_stop_dragging().

Referenced by use_grabbers().

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

◆ find_single()

void Slic3r::GUI::GLGizmoBrimEars::find_single ( )
protected
1195{
1197
1198 if (m_editing_cache.size() == 0) {
1199 m_single_brim.clear();
1200 return;
1201 }
1202 const Selection &selection = m_parent.get_selection();
1203 const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin());
1204 Geometry::Transformation trsf = volume->get_instance_transformation();
1205 ExPolygons model_pl = m_first_layer;
1206
1207 m_single_brim.clear();
1208 for (int i = 0; i < m_editing_cache.size(); i++)
1210 unsigned int index = 0;
1211 bool cyc = true;
1212 while (cyc) {
1213 index++;
1214 if (index > 99999999) break; // cycle protection
1215 if (m_single_brim.empty()) {
1216 break;
1217 }
1218 auto end = --m_single_brim.end();
1219 for (auto it = m_single_brim.begin(); it != m_single_brim.end(); ++it) {
1220 ExPolygon point_pl = make_polygon(it->second.brim_point, trsf);
1221 if (overlaps(model_pl, point_pl)) {
1222 model_pl.emplace_back(point_pl);
1223 model_pl = union_ex(model_pl);
1224 it = m_single_brim.erase(it);
1225 break;
1226 } else {
1227 if (it == end) cyc = false;
1228 }
1229 }
1230 }
1231 for (auto& it : m_editing_cache) {
1232 it.is_error = false;
1233 }
1234 for (auto &it : m_single_brim) {
1235 m_editing_cache[it.first].is_error = true;
1236 }
1237}
std::map< int, CacheEntry > m_single_brim
Definition GLGizmoBrimEars.hpp:124
ExPolygon make_polygon(BrimPoint point, const Geometry::Transformation &trsf)
Definition GLGizmoBrimEars.cpp:1177
void update_raycasters()
Definition GLGizmoBrimEars.cpp:1113
T * end(Slic3r::Mat< N, M, T > &mat)
Definition Point.hpp:841
std::vector< ExPolygon > ExPolygons
Definition ExPolygon.hpp:20
Slic3r::ExPolygons union_ex(const Slic3r::Polygons &subject, PolyFillType fill_type)
Definition ClipperUtils.cpp:1011
bool overlaps(const ExPolygons &expolys1, const ExPolygons &expolys2)
Definition ExPolygon.cpp:192

References Slic3r::GLVolume::get_instance_transformation(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), m_editing_cache, m_first_layer, Slic3r::GUI::GLGizmoBase::m_parent, m_single_brim, make_polygon(), Slic3r::overlaps(), Slic3r::union_ex(), and update_raycasters().

Referenced by auto_generate(), delete_selected_points(), gizmo_event(), on_dragging(), reload_cache(), and update_cache_radius().

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

◆ first_layer_slicer()

void Slic3r::GUI::GLGizmoBrimEars::first_layer_slicer ( )
private
980{
981 const Selection &selection = m_parent.get_selection();
982 const Selection::IndicesList &idxs = selection.get_volume_idxs();
983 if (idxs.size() <= 0) return;
984 std::vector<float> slice_height(1, 0.1);
985 MeshSlicingParamsEx params;
987 params.closing_radius = 0.1f;
988 params.extra_offset = 0.05f;
989 params.resolution = 0.01;
990 ExPolygons part_ex;
991 ExPolygons negative_ex;
992 for (auto idx : idxs) {
993 const GLVolume *volume = selection.get_volume(idx);
994 const ModelVolume *model_volume = get_model_volume(*volume, wxGetApp().model());
995 if (model_volume == nullptr) continue;
996 if (model_volume->type() == ModelVolumeType::MODEL_PART || model_volume->type() == ModelVolumeType::NEGATIVE_VOLUME) {
997 indexed_triangle_set volume_its = model_volume->mesh().its;
998 if (volume_its.indices.size() <= 0) continue;
999 Transform3d trsf = volume->get_instance_transformation().get_matrix() * volume->get_volume_transformation().get_matrix();
1000 MeshSlicingParamsEx params_ex(params);
1001 params_ex.trafo = params_ex.trafo * trsf;
1002 if (params_ex.trafo.rotation().determinant() < 0.) its_flip_triangles(volume_its);
1003 ExPolygons sliced_layer = slice_mesh_ex(volume_its, slice_height, params_ex).front();
1004 if (model_volume->type() == ModelVolumeType::MODEL_PART) {
1005 part_ex = union_ex(part_ex, sliced_layer);
1006 } else {
1007 negative_ex = union_ex(negative_ex, sliced_layer);
1008 }
1009 }
1010 }
1011 m_first_layer = diff_ex(part_ex, negative_ex);
1013}
void get_detection_radius_max()
Definition GLGizmoBrimEars.cpp:1041
std::set< unsigned int > IndicesList
Definition Selection.hpp:49
static ModelVolume * get_model_volume(const Selection &selection, Model &model)
Definition GLGizmoBrimEars.cpp:66
Slic3r::ExPolygons diff_ex(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset)
Definition ClipperUtils.cpp:831
@ MODEL_PART
Definition Model.hpp:357
@ NEGATIVE_VOLUME
Definition Model.hpp:358
void its_flip_triangles(indexed_triangle_set &its)
Definition TriangleMesh.cpp:752
std::vector< ExPolygons > slice_mesh_ex(const indexed_triangle_set &mesh, const std::vector< float > &zs, const MeshSlicingParamsEx &params, std::function< void()> throw_on_cancel)
Definition TriangleMeshSlicer.cpp:2142
@ Regular
Definition TriangleMeshSlicer.hpp:22

References Slic3r::MeshSlicingParamsEx::closing_radius, Slic3r::diff_ex(), Slic3r::MeshSlicingParamsEx::extra_offset, get_detection_radius_max(), Slic3r::GLVolume::get_instance_transformation(), Slic3r::Geometry::Transformation::get_matrix(), Slic3r::GUI::get_model_volume(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), Slic3r::GLVolume::get_volume_transformation(), Slic3r::TriangleMesh::its, Slic3r::its_flip_triangles(), m_first_layer, Slic3r::GUI::GLGizmoBase::m_parent, Slic3r::ModelVolume::mesh(), Slic3r::MeshSlicingParams::mode, Slic3r::MODEL_PART, Slic3r::NEGATIVE_VOLUME, Slic3r::MeshSlicingParams::Regular, Slic3r::MeshSlicingParamsEx::resolution, Slic3r::slice_mesh_ex(), Slic3r::MeshSlicingParams::trafo, Slic3r::ModelVolume::type(), and Slic3r::union_ex().

Referenced by on_set_state().

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

◆ format()

std::string Slic3r::GUI::GLGizmoBase::format ( float value,
unsigned int decimals ) const
protectedinherited

◆ generate_points()

Points Slic3r::GUI::GLGizmoBrimEars::generate_points ( Polygon & obj_polygon,
float ear_detection_length,
float brim_ears_max_angle,
bool is_outer )
private
962{
963 const coordf_t angle_threshold = (180 - brim_ears_max_angle) * PI / 180.0;
964 Points pt_ears;
965 if (ear_detection_length > 0) {
966 double detect_length = ear_detection_length / SCALING_FACTOR;
967 Points points = obj_polygon.points;
968 points.push_back(points.front());
969 points = MultiPoint::_douglas_peucker(points, detect_length);
970 if (points.size() > 4) {
971 points.erase(points.end() - 1);
972 }
973 obj_polygon.points = points;
974 }
975 append(pt_ears, is_outer ? obj_polygon.convex_points(angle_threshold) : obj_polygon.concave_points(angle_threshold));
976 return pt_ears;
977}
static Points _douglas_peucker(const Points &points, const double tolerance)
Definition MultiPoint.cpp:175
static constexpr double PI
Definition libslic3r.h:81
double coordf_t
Definition GUI_ObjectLayers.hpp:26
void append(std::vector< T, Alloc > &dest, const std::vector< T, Alloc2 > &src)
Definition libslic3r.h:157

References Slic3r::MultiPoint::_douglas_peucker(), Slic3r::append(), Slic3r::Polygon::concave_points(), Slic3r::Polygon::convex_points(), PI, Slic3r::MultiPoint::points, and SCALING_FACTOR.

Referenced by auto_generate().

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

◆ get_action_snapshot_name()

std::string Slic3r::GUI::GLGizmoBase::get_action_snapshot_name ( ) const
virtualinherited

Reimplemented in Slic3r::GUI::GLGizmoCut3D, Slic3r::GUI::GLGizmoEmboss, Slic3r::GUI::GLGizmoFdmSupports, Slic3r::GUI::GLGizmoFuzzySkin, Slic3r::GUI::GLGizmoMmuSegmentation, Slic3r::GUI::GLGizmoSeam, Slic3r::GUI::GLGizmoSVG, and Slic3r::GUI::GLGizmoTextureDisplacement.

339{
340 return "Gizmo action";
341}

Referenced by Slic3r::GUI::Plater::priv::take_snapshot().

Here is the caller graph for this function:

◆ get_brim_default_radius()

float Slic3r::GUI::GLGizmoBrimEars::get_brim_default_radius ( ) const
protected
1168{
1169 const double nozzle_diameter = wxGetApp().preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0);
1170 const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config;
1171 return std::clamp(
1172 float(print_cfg.get_abs_value("initial_layer_line_width", nozzle_diameter) * 8.0),
1175}
static constexpr float BRIM_EAR_RADIUS_MIN
Definition GLGizmoBrimEars.cpp:63
static constexpr float BRIM_EAR_RADIUS_MAX
Definition GLGizmoBrimEars.cpp:64
zaa_minimize_perimeter_height nozzle_diameter((ConfigOptionBool, reduce_infill_retraction))((ConfigOptionBool
ConfigOptionFloatsTempl< false > ConfigOptionFloats
Definition Config.hpp:1015

References Slic3r::GUI::BRIM_EAR_RADIUS_MAX, Slic3r::GUI::BRIM_EAR_RADIUS_MIN, Slic3r::ConfigBase::get_abs_value(), and Slic3r::nozzle_diameter().

Referenced by on_init().

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

◆ get_config_options()

std::vector< const ConfigOption * > Slic3r::GUI::GLGizmoBrimEars::get_config_options ( const std::vector< std::string > & keys) const
private
598{
599 std::vector<const ConfigOption *> out;
600 const ModelObject *mo = m_c->selection_info()->model_object();
601
602 if (!mo) return out;
603
604 const DynamicPrintConfig &object_cfg = mo->config.get();
605 const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->sla_prints.get_edited_preset().config;
606 std::unique_ptr<DynamicPrintConfig> default_cfg = nullptr;
607
608 for (const std::string &key : keys) {
609 if (object_cfg.has(key))
610 out.push_back(object_cfg.option(key));
611 else if (print_cfg.has(key))
612 out.push_back(print_cfg.option(key));
613 else { // we must get it from defaults
614 if (default_cfg == nullptr) default_cfg.reset(DynamicPrintConfig::new_from_defaults_keys(keys));
615 out.push_back(default_cfg->option(key));
616 }
617 }
618
619 return out;
620}
static DynamicPrintConfig * new_from_defaults_keys(const std::vector< std::string > &keys)
Definition PrintConfig.cpp:10311

References Slic3r::ModelObject::config, Slic3r::ModelConfig::get(), Slic3r::ConfigOptionResolver::has(), Slic3r::GUI::GLGizmoBase::m_c, Slic3r::DynamicPrintConfig::new_from_defaults_keys(), and Slic3r::ConfigBase::option().

Here is the call graph for this function:

◆ get_count()

int Slic3r::GUI::GLGizmoBase::get_count ( )
inlineinherited
224{ return ++count; }
int count
Definition GLGizmoBase.hpp:294

References count.

◆ get_detection_radius_max()

void Slic3r::GUI::GLGizmoBrimEars::get_detection_radius_max ( )
private
1042{
1043 double max_dist = 0.0;
1044 int min_points_num = 0;
1045 for (const ExPolygon &ex_poly : m_first_layer) {
1046 Polygon out_poly = ex_poly.contour;
1047 Polygons inner_poly = ex_poly.holes;
1048 polygons_reverse(inner_poly);
1049
1050 Points out_points = out_poly.points;
1051 out_points.push_back(out_points.front());
1052 double tolerance = 0.0;
1053 min_points_num = MultiPoint::_douglas_peucker(out_points, 0).size();
1054 int repeat = 0;
1055 int loop_protect = 0;
1056 for (;;) {
1057 loop_protect++;
1058 tolerance += 10;
1059 int num = MultiPoint::_douglas_peucker(out_points, tolerance / SCALING_FACTOR).size();
1060 if (num == min_points_num) {
1061 repeat++;
1062 if (repeat > 1)
1063 break;
1064 }
1065 min_points_num = num;
1066 if (loop_protect > 100) break;
1067 }
1068 loop_protect = 0;
1069 for (;;) {
1070 loop_protect++;
1071 tolerance -= 1;
1072 int num = MultiPoint::_douglas_peucker(out_points, tolerance / SCALING_FACTOR).size();
1073 if (num <= min_points_num) {
1074 min_points_num = num;
1075 }else{
1076 break;
1077 }
1078 if (loop_protect > 100) break;
1079 }
1080 tolerance += 1;
1081 if (tolerance > max_dist)
1082 max_dist = tolerance;
1083 }
1084 if (max_dist > 100 || max_dist <= 0) {
1086 } else {
1087 m_detection_radius_max = max_dist;
1088 }
1089}
double m_detection_radius_max
Definition GLGizmoBrimEars.hpp:120

References Slic3r::MultiPoint::_douglas_peucker(), m_detection_radius_max, m_first_layer, Slic3r::MultiPoint::points, Slic3r::polygons_reverse(), and SCALING_FACTOR.

Referenced by first_layer_slicer().

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

◆ get_gizmo_entering_text()

std::string Slic3r::GUI::GLGizmoBrimEars::get_gizmo_entering_text ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

107{ return _u8L("Entering Brim Ears"); }
#define _u8L(s)
Definition I18N.hpp:11

References _u8L.

◆ get_gizmo_leaving_text()

std::string Slic3r::GUI::GLGizmoBrimEars::get_gizmo_leaving_text ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

108{ return _u8L("Leaving Brim Ears"); }

References _u8L.

◆ get_gizmo_name()

std::string Slic3r::GUI::GLGizmoBase::get_gizmo_name ( )
inlineinherited
225{ return on_get_name(); }
virtual std::string on_get_name() const =0

References on_get_name().

Here is the call graph for this function:

◆ get_hover_id()

int Slic3r::GUI::GLGizmoBase::get_hover_id ( ) const
inlineinherited
206{ return m_hover_id; }
int m_hover_id
Definition GLGizmoBase.hpp:150

References m_hover_id.

Referenced by Slic3r::GUI::GLCanvas3D::_scene_cache_key(), Slic3r::GUI::GLGizmosManager::grabber_contains_mouse(), Slic3r::GUI::GLGizmoBrimEars::on_mouse(), Slic3r::GUI::GLGizmoCut3D::on_mouse(), Slic3r::GUI::GLGizmoMeshBoolean::on_mouse(), and Slic3r::GUI::GLGizmoPainterBase::on_mouse().

Here is the caller graph for this function:

◆ get_icon_filename()

const std::string & Slic3r::GUI::GLGizmoBase::get_icon_filename ( ) const
inlineinherited
180{ return m_icon_filename; }
std::string m_icon_filename
Definition GLGizmoBase.hpp:148

References m_icon_filename.

◆ get_name()

std::string Slic3r::GUI::GLGizmoBase::get_name ( bool include_shortcut = true) const
inherited
545{
546 const std::string name = on_get_name();
547 return include_shortcut && m_shortcut.has_value() ? wxGetApp().shortcuts().with_key(name, *m_shortcut) : name;
548}
std::optional< Shortcut > m_shortcut
Definition GLGizmoBase.hpp:147

References m_shortcut, and on_get_name().

Referenced by Slic3r::GUI::GLGizmoAssembly::on_render_input_window(), Slic3r::GUI::GLGizmoBrimEars::on_render_input_window(), Slic3r::GUI::GLGizmoCut3D::on_render_input_window(), Slic3r::GUI::GLGizmoEmboss::on_render_input_window(), Slic3r::GUI::GLGizmoFdmSupports::on_render_input_window(), Slic3r::GUI::GLGizmoFuzzySkin::on_render_input_window(), Slic3r::GUI::GLGizmoMeasure::on_render_input_window(), Slic3r::GUI::GLGizmoMmuSegmentation::on_render_input_window(), Slic3r::GUI::GLGizmoSeam::on_render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::on_render_input_window(), and Slic3r::GUI::GLGizmosManager::update_hover_state().

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

◆ get_requirements()

CommonGizmosDataID Slic3r::GUI::GLGizmoBase::get_requirements ( ) const
inlineinherited
186{ return on_get_requirements(); }
virtual CommonGizmosDataID on_get_requirements() const
Definition GLGizmoBase.hpp:248

References on_get_requirements().

Here is the call graph for this function:

◆ get_sprite_id()

unsigned int Slic3r::GUI::GLGizmoBase::get_sprite_id ( ) const
inlineinherited
204{ return m_sprite_id; }
unsigned int m_sprite_id
Definition GLGizmoBase.hpp:149

References m_sprite_id.

Referenced by Slic3r::GUI::GLGizmosManager::do_render_overlay().

Here is the caller graph for this function:

◆ get_state()

EState Slic3r::GUI::GLGizmoBase::get_state ( ) const
inlineinherited

◆ get_tooltip()

virtual std::string Slic3r::GUI::GLGizmoBase::get_tooltip ( ) const
inlinevirtualinherited

Mouse tooltip text.

Returns
Text to be visible in mouse tooltip

Reimplemented in Slic3r::GUI::GLGizmoCut3D, Slic3r::GUI::GLGizmoMove3D, Slic3r::GUI::GLGizmoRotate3D, Slic3r::GUI::GLGizmoRotate, and Slic3r::GUI::GLGizmoScale3D.

222{ return ""; }

Referenced by Slic3r::GUI::GLGizmosManager::get_tooltip().

Here is the caller graph for this function:

◆ gizmo_event()

bool Slic3r::GUI::GLGizmoBrimEars::gizmo_event ( SLAGizmoEventType action,
const Vec2d & mouse_position,
bool shift_down,
bool alt_down,
bool control_down )
386{
389 }
390
391 ModelObject *mo = m_c->selection_info()->model_object();
392 int active_inst = m_c->selection_info()->get_active_instance();
393
394 if (action == SLAGizmoEventType::Moving) {
395 // First check that the mouse pointer is on an object.
396 const Selection &selection = m_parent.get_selection();
397 const ModelInstance *mi = mo->instances[0];
398 Plater *plater = wxGetApp().plater();
399 if (!plater) return false;
400 const Camera &camera = wxGetApp().plater()->get_camera();
401 const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin());
402 Transform3d inverse_trsf = volume->get_instance_transformation().get_matrix_no_offset().inverse();
403 std::pair<Vec3f, Vec3f> pos_and_normal;
404 if (unproject_on_mesh2(mouse_position, pos_and_normal)) {
405 render_hover_point = CacheEntry(BrimPoint(pos_and_normal.first, m_new_point_head_radius), false, (inverse_trsf * m_world_normal).cast<float>(), true);
406 } else {
407 render_hover_point.reset();
408 }
409 } else if (action == SLAGizmoEventType::LeftDown && (shift_down || alt_down || control_down)) {
410 // left down with shift - show the selection rectangle:
411 if (m_hover_id == -1) {
412 if (shift_down || alt_down) { m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect); }
413 } else {
414 if (m_editing_cache[m_hover_id].selected)
416 else {
417 if (!alt_down) select_point(m_hover_id);
418 }
419 }
420
421 return true;
422 }
423
424 // left down without selection rectangle - place point on the mesh:
425 if (action == SLAGizmoEventType::LeftDown && !m_selection_rectangle.is_dragging() && !shift_down) {
426 // If any point is in hover state, this should initiate its move - return control back to GLCanvas:
427 if (m_hover_id != -1) return false;
428
429 // If there is some selection, don't add new point and deselect everything instead.
430 if (m_selection_empty) {
431 std::pair<Vec3f, Vec3f> pos_and_normal;
432 if (unproject_on_mesh2(mouse_position, pos_and_normal)) {
433 // we got an intersection
434 const Selection &selection = m_parent.get_selection();
435 const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin());
436 Transform3d trsf = volume->get_instance_transformation().get_matrix();
437 Transform3d inverse_trsf = volume->get_instance_transformation().get_matrix_no_offset().inverse();
438 // BBS brim ear postion is placed on the bottom side
439 Vec3d world_pos = trsf * pos_and_normal.first.cast<double>();
440 world_pos[2] = -0.0001;
441 Vec3d object_pos = trsf.inverse() * world_pos;
442 // brim ear always face up
443 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Add brim ear");
444 add_point_to_cache(object_pos.cast<float>(), m_new_point_head_radius, false, (inverse_trsf * m_world_normal).cast<float>());
445 m_parent.set_as_dirty();
446 m_wait_for_up_event = true;
447 find_single();
448 } else
449 return false;
450 } else
452
453 return true;
454 }
455
456 // left up with selection rectangle - select points inside the rectangle:
457 if ((action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::ShiftUp || action == SLAGizmoEventType::AltUp) && m_selection_rectangle.is_dragging()) {
458 // Is this a selection or deselection rectangle?
459 GLSelectionRectangle::EState rectangle_status = m_selection_rectangle.get_state();
460
461 // First collect positions of all the points in world coordinates.
462 Geometry::Transformation trafo = mo->instances[active_inst]->get_transformation();
463 // trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., m_c->selection_info()->get_sla_shift()));
464 std::vector<Vec3d> points;
465 for (unsigned int i = 0; i < m_editing_cache.size(); ++i) points.push_back(trafo.get_matrix() * m_editing_cache[i].brim_point.pos.cast<double>());
466
467 // Now ask the rectangle which of the points are inside.
468 std::vector<Vec3f> points_inside;
469 std::vector<unsigned int> points_idxs = m_selection_rectangle.contains(points);
470 m_selection_rectangle.stop_dragging();
471 for (size_t idx : points_idxs) points_inside.push_back(points[idx].cast<float>());
472
473 // Only select/deselect points that are actually visible. We want to check not only
474 // the point itself, but also the center of base of its cone, so the points don't hide
475 // under every miniature irregularity on the model. Remember the actual number and
476 // append the cone bases.
477 size_t orig_pts_num = points_inside.size();
478 for (size_t idx : points_idxs)
479 points_inside.emplace_back((trafo.get_matrix().cast<float>() * (m_editing_cache[idx].brim_point.pos + m_editing_cache[idx].normal)).cast<float>());
480
481 for (size_t idx :
482 m_c->raycaster()->raycaster()->get_unobscured_idxs(trafo, wxGetApp().plater()->get_camera(), points_inside, m_c->object_clipper()->get_clipping_plane())) {
483 if (idx >= orig_pts_num) // this is a cone-base, get index of point it belongs to
484 idx -= orig_pts_num;
485 if (rectangle_status == GLSelectionRectangle::Deselect)
486 unselect_point(points_idxs[idx]);
487 else
488 select_point(points_idxs[idx]);
489 }
490 return true;
491 }
492
493 // left up with no selection rectangle
494 if (action == SLAGizmoEventType::LeftUp) {
496 return true;
497 }
498
499 // dragging the selection rectangle:
500 if (action == SLAGizmoEventType::Dragging) {
502 return true; // point has been placed and the button not released yet
503 // this prevents GLCanvas from starting scene rotation
504
505 if (m_selection_rectangle.is_dragging()) {
506 m_selection_rectangle.dragging(mouse_position);
507 return true;
508 }
509
510 return false;
511 }
512
513 if (action == SLAGizmoEventType::Delete) {
514 // delete key pressed
516 return true;
517 }
518
519 if (action == SLAGizmoEventType::RightDown) {
520 if (m_hover_id != -1) {
524 return true;
525 }
526 return false;
527 }
528
529 if (action == SLAGizmoEventType::SelectAll) {
531 return true;
532 }
533
534 // mouse wheel up
535 if (action == SLAGizmoEventType::MouseWheelUp) {
536 if (control_down) {
537 float initial_value = m_new_point_head_radius;
538 begin_radius_change(initial_value);
539 m_new_point_head_radius = std::min(BRIM_EAR_RADIUS_MAX, initial_value + 0.1f);
541 return true;
542 }
543
545 }
546
547 if (action == SLAGizmoEventType::MouseWheelDown) {
548 if (control_down) {
549 float initial_value = m_new_point_head_radius;
550 begin_radius_change(initial_value);
551 m_new_point_head_radius = std::max(BRIM_EAR_RADIUS_MIN, initial_value - 0.1f);
553 return true;
554 }
555
557 }
558
559 return false;
560}
Definition GLGizmoBrimEars.hpp:45
GLSelectionRectangle m_selection_rectangle
Definition GLGizmoBrimEars.hpp:142
void unselect_point(int i)
Definition GLGizmoBrimEars.cpp:941
std::optional< CacheEntry > render_hover_point
Definition GLGizmoBrimEars.hpp:129
bool m_wait_for_up_event
Definition GLGizmoBrimEars.hpp:146
void apply_radius_change()
Definition GLGizmoBrimEars.cpp:642
bool m_selection_empty
Definition GLGizmoBrimEars.hpp:147
bool unproject_on_mesh2(const Vec2d &mouse_pos, std::pair< Vec3f, Vec3f > &pos_and_normal)
Definition GLGizmoBrimEars.cpp:249
void begin_radius_change(float initial_value)
Definition GLGizmoBrimEars.cpp:622
void delete_selected_points()
Definition GLGizmoBrimEars.cpp:562
EState
Definition GLSelectionRectangle.hpp:18
@ Select
Definition GLSelectionRectangle.hpp:20
@ Deselect
Definition GLSelectionRectangle.hpp:21
const Camera & get_camera() const
Definition Plater.cpp:22567
@ LeftUp
Definition GLGizmosCommon.hpp:30
@ MouseWheelUp
Definition GLGizmosCommon.hpp:46
@ MouseWheelDown
Definition GLGizmosCommon.hpp:47
@ ShiftUp
Definition GLGizmosCommon.hpp:39
@ SelectAll
Definition GLGizmosCommon.hpp:35
@ Dragging
Definition GLGizmosCommon.hpp:33
@ LeftDown
Definition GLGizmosCommon.hpp:29
@ RightDown
Definition GLGizmosCommon.hpp:31
@ AltUp
Definition GLGizmosCommon.hpp:40
@ Moving
Definition GLGizmosCommon.hpp:49
@ Delete
Definition GLGizmosCommon.hpp:34
@ Camera
Definition Shortcuts.hpp:72
@ Plater
Definition Shortcuts.hpp:21
static bool points_inside(const Line &contour_first, const Line &contour_second, const Point &new_point)
Definition MultiMaterialSegmentation.cpp:1007
auto cast(const BoundingBoxBase< Tin > &b)
Definition BoundingBox.hpp:299

References add_point_to_cache(), AllPoints, Slic3r::GUI::AltUp, apply_radius_change(), begin_radius_change(), Slic3r::GUI::BRIM_EAR_RADIUS_MAX, Slic3r::GUI::BRIM_EAR_RADIUS_MIN, Slic3r::cast(), Slic3r::GUI::Delete, delete_selected_points(), Slic3r::GUI::GLSelectionRectangle::Deselect, Slic3r::GUI::Dragging, find_single(), Slic3r::GLVolume::get_instance_transformation(), Slic3r::Geometry::Transformation::get_matrix(), Slic3r::Geometry::Transformation::get_matrix_no_offset(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), Slic3r::ModelObject::instances, Slic3r::GUI::LeftDown, Slic3r::GUI::LeftUp, Slic3r::GUI::GLGizmoBase::m_c, m_editing_cache, Slic3r::GUI::GLGizmoBase::m_hover_id, m_new_point_head_radius, Slic3r::GUI::GLGizmoBase::m_parent, m_selection_empty, m_selection_rectangle, m_wait_for_up_event, m_world_normal, Slic3r::GUI::MouseWheelDown, Slic3r::GUI::MouseWheelUp, Slic3r::GUI::Moving, NoPoints, Slic3r::GUI::plater(), Slic3r::points_inside(), render_hover_point, Slic3r::GUI::RightDown, Slic3r::GUI::GLSelectionRectangle::Select, select_point(), Slic3r::GUI::SelectAll, Slic3r::GUI::ShiftUp, unproject_on_mesh2(), unselect_point(), and update_cache_radius().

Referenced by Slic3r::GUI::GLGizmosManager::gizmo_event(), and on_mouse().

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

◆ GizmoImguiBegin()

◆ GizmoImguiEnd()

◆ GizmoImguiSetNextWIndowPos() [1/2]

void Slic3r::GUI::GLGizmoBase::GizmoImguiSetNextWIndowPos ( float & x,
float y,
float w,
float h,
int flag,
float pivot_x = 0.0f,
float pivot_y = 0.0f )
protectedinherited
384{
385 if (abs(w) > 0.01f) {
386 if (x + w > m_parent.get_canvas_size().get_width()) {
387 if (w > m_parent.get_canvas_size().get_width()) {
388 x = 0;
389 } else {
390 x = m_parent.get_canvas_size().get_width() - w;
391 }
392 }
393 }
394
395 m_imgui->set_next_window_pos(x, y, flag, pivot_x, pivot_y);
396}

References m_imgui, and m_parent.

◆ GizmoImguiSetNextWIndowPos() [2/2]

void Slic3r::GUI::GLGizmoBase::GizmoImguiSetNextWIndowPos ( float & x,
float y,
int flag,
float pivot_x = 0.0f,
float pivot_y = 0.0f )
protectedinherited

◆ has_selected_points()

bool Slic3r::GUI::GLGizmoBrimEars::has_selected_points ( ) const
576{
577 for (const auto& entry : m_editing_cache) {
578 if (entry.selected)
579 return true;
580 }
581 return false;
582}

References m_editing_cache.

Referenced by on_render_input_window().

Here is the caller graph for this function:

◆ init()

bool Slic3r::GUI::GLGizmoBase::init ( )
inlineinherited
168{ return on_init(); }
virtual bool on_init()=0

References on_init().

Here is the call graph for this function:

◆ is_activable()

bool Slic3r::GUI::GLGizmoBase::is_activable ( ) const
inlineinherited
184{ return on_is_activable(); }
virtual bool on_is_activable() const
Definition GLGizmoBase.hpp:246

References on_is_activable().

Referenced by Slic3r::GUI::GLGizmosManager::activate_gizmo(), Slic3r::GUI::GLGizmosManager::do_render_overlay(), Slic3r::GUI::GLGizmoEmboss::init_create(), and Slic3r::GUI::GLGizmosManager::update_hover_state().

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

◆ is_dragging()

bool Slic3r::GUI::GLGizmoBase::is_dragging ( ) const
inlineinherited
209{ return m_dragging; }

References m_dragging.

Referenced by Slic3r::GUI::GLGizmoCut3D::gizmo_event(), Slic3r::GUI::GLGizmoEmboss::on_mouse_for_translate(), and Slic3r::GUI::GLGizmoSVG::on_mouse_for_translate().

Here is the caller graph for this function:

◆ is_in_editing_mode()

virtual bool Slic3r::GUI::GLGizmoBase::is_in_editing_mode ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::GUI::GLGizmoCut3D.

235{ return false; }

Referenced by Slic3r::GUI::GLGizmosManager::on_key().

Here is the caller graph for this function:

◆ is_mesh_point_clipped()

bool Slic3r::GUI::GLGizmoBrimEars::is_mesh_point_clipped ( const Vec3d & point) const
private
236{
237 if (m_c->object_clipper()->get_position() == 0.) return false;
238
239 auto sel_info = m_c->selection_info();
240 int active_inst = m_c->selection_info()->get_active_instance();
241 const ModelInstance *mi = sel_info->model_object()->instances[active_inst];
242 const Transform3d &trafo = mi->get_transformation().get_matrix();
243
244 Vec3d transformed_point = trafo * point;
245 transformed_point(2) += sel_info->get_sla_shift();
246 return m_c->object_clipper()->get_clipping_plane()->is_point_clipped(transformed_point);
247}

References Slic3r::Geometry::Transformation::get_matrix(), Slic3r::ModelInstance::get_transformation(), and Slic3r::GUI::GLGizmoBase::m_c.

Here is the call graph for this function:

◆ is_selectable()

bool Slic3r::GUI::GLGizmoBase::is_selectable ( ) const
inlineinherited
185{ return on_is_selectable(); }
virtual bool on_is_selectable() const
Definition GLGizmoBase.hpp:247

References on_is_selectable().

Here is the call graph for this function:

◆ is_selection_rectangle_dragging()

bool Slic3r::GUI::GLGizmoBrimEars::is_selection_rectangle_dragging ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

104{ return m_selection_rectangle.is_dragging(); }

References m_selection_rectangle.

Referenced by Slic3r::GUI::GLGizmosManager::on_key().

Here is the caller graph for this function:

◆ load()

void Slic3r::GUI::GLGizmoBase::load ( cereal::BinaryInputArchive & ar)
inlineinherited
170{ m_state = On; on_load(ar); }
virtual void on_load(cereal::BinaryInputArchive &ar)
Definition GLGizmoBase.hpp:241

References m_state, On, and on_load().

Here is the call graph for this function:

◆ load_render_colors()

void Slic3r::GUI::GLGizmoBase::load_render_colors ( )
staticinherited
93{
99}
@ RenderCol_Grabber_Y
Definition GUI_Colors.hpp:27
@ RenderCol_Flatten_Plane
Definition GUI_Colors.hpp:29
@ RenderCol_Grabber_X
Definition GUI_Colors.hpp:26
@ RenderCol_Grabber_Z
Definition GUI_Colors.hpp:28
@ RenderCol_Flatten_Plane_Hover
Definition GUI_Colors.hpp:30
static ColorRGBA FLATTEN_COLOR
Definition GLGizmoBase.hpp:63
static std::array< ColorRGBA, 3 > AXES_COLOR
Definition GLGizmoBase.hpp:60
static ColorRGBA FLATTEN_HOVER_COLOR
Definition GLGizmoBase.hpp:64
static ImVec4 to_ImVec4(const ColorRGB &color)
Definition ImGuiWrapper.cpp:1053
static ImVec4 colors[RenderCol_Count]
Definition GUI_Colors.hpp:40

References AXES_COLOR, Slic3r::RenderColor::colors, FLATTEN_COLOR, FLATTEN_HOVER_COLOR, RenderCol_Flatten_Plane, RenderCol_Flatten_Plane_Hover, RenderCol_Grabber_X, RenderCol_Grabber_Y, RenderCol_Grabber_Z, and Slic3r::GUI::ImGuiWrapper::to_ImVec4().

Referenced by Slic3r::GUI::GLCanvas3D::init().

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

◆ make_polygon()

ExPolygon Slic3r::GUI::GLGizmoBrimEars::make_polygon ( BrimPoint point,
const Geometry::Transformation & trsf )
protected
1178{
1179 ExPolygon point_round;
1180 Transform3d model_trsf = trsf.get_matrix();
1181 Vec3f world_pos = point.transform(trsf.get_matrix());
1182 coord_t size_ear = scale_(point.head_front_radius);
1183 for (size_t i = 0; i < POLY_SIDE_COUNT; i++) {
1184 double angle = (2.0 * PI * i) / POLY_SIDE_COUNT;
1185 point_round.contour.points.emplace_back(size_ear * cos(angle), size_ear * sin(angle));
1186 }
1187 Vec3f pos = point.transform(model_trsf);
1188 int32_t pt_x = scale_(pos.x());
1189 int32_t pt_y = scale_(pos.y());
1190 point_round.translate(Point(pt_x, pt_y));
1191 return point_round;
1192}
#define POLY_SIDE_COUNT
Definition libslic3r.h:82
#define scale_(val)
Definition libslic3r.h:106
int64_t coord_t
Definition libslic3r.h:48
Vec3d pos(const Pt &p)
Definition ReprojectPointsOnMesh.hpp:16
double angle(const Eigen::MatrixBase< Derived > &v1, const Eigen::MatrixBase< Derived2 > &v2)
Definition Point.hpp:138

References Slic3r::angle(), Slic3r::ExPolygon::contour, Slic3r::Geometry::Transformation::get_matrix(), Slic3r::BrimPoint::head_front_radius, PI, Slic3r::MultiPoint::points, POLY_SIDE_COUNT, scale_, Slic3r::BrimPoint::transform(), and Slic3r::ExPolygon::translate().

Referenced by find_single().

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

◆ on_change_color_mode()

virtual void Slic3r::GUI::GLGizmoBase::on_change_color_mode ( bool is_dark)
inlinevirtualinherited
static bool is_dark()
Definition TextureImportDialog.cpp:85
bool m_is_dark_mode
Definition GLGizmoBase.hpp:157

References is_dark(), and m_is_dark_mode.

Here is the call graph for this function:

◆ on_disable_grabber()

virtual void Slic3r::GUI::GLGizmoBase::on_disable_grabber ( unsigned int id)
inlineprotectedvirtualinherited

◆ on_dragging()

void Slic3r::GUI::GLGizmoBrimEars::on_dragging ( const UpdateData & data)
overrideprivatevirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

585{
586 if (m_hover_id != -1) {
587 std::pair<Vec3f, Vec3f> pos_and_normal;
588 if (!unproject_on_mesh2(data.mouse_pos.cast<double>(), pos_and_normal)) return;
589 m_editing_cache[m_hover_id].brim_point.pos[0] = pos_and_normal.first.x();
590 m_editing_cache[m_hover_id].brim_point.pos[1] = pos_and_normal.first.y();
591 //m_editing_cache[m_hover_id].normal = pos_and_normal.second;
592 m_editing_cache[m_hover_id].normal = Vec3f(0, 0, 1);
593 find_single();
594 }
595}

References find_single(), m_editing_cache, Slic3r::GUI::GLGizmoBase::m_hover_id, Slic3r::GUI::GLGizmoBase::UpdateData::mouse_pos, and unproject_on_mesh2().

Here is the call graph for this function:

◆ on_enable_grabber()

virtual void Slic3r::GUI::GLGizmoBase::on_enable_grabber ( unsigned int id)
inlineprotectedvirtualinherited

◆ on_get_name()

std::string Slic3r::GUI::GLGizmoBrimEars::on_get_name ( ) const
overrideprotectedvirtual

Implements Slic3r::GUI::GLGizmoBase.

852{
853 if (!on_is_activable() && m_state == EState::Off) {
854 return _u8L("Brim Ears") + ":\n" + _u8L("Please select single object.");
855 } else {
856 return _u8L("Brim Ears");
857 }
858}
bool on_is_activable() const override
Definition GLGizmoBrimEars.cpp:837

References _u8L, Slic3r::GUI::GLGizmoBase::m_state, Slic3r::GUI::GLGizmoBase::Off, and on_is_activable().

Here is the call graph for this function:

◆ on_get_requirements()

CommonGizmosDataID Slic3r::GUI::GLGizmoBrimEars::on_get_requirements ( ) const
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

861{
864}
CommonGizmosDataID
Definition GLGizmosCommon.hpp:72
@ SelectionInfo
Definition GLGizmosCommon.hpp:74
@ Raycaster
Definition GLGizmosCommon.hpp:76
@ InstancesHider
Definition GLGizmosCommon.hpp:75
@ ObjectClipper
Definition GLGizmosCommon.hpp:77

References Slic3r::GUI::InstancesHider, Slic3r::GUI::ObjectClipper, Slic3r::GUI::Raycaster, and Slic3r::GUI::SelectionInfo.

◆ on_init()

bool Slic3r::GUI::GLGizmoBrimEars::on_init ( )
overrideprivatevirtual

Implements Slic3r::GUI::GLGizmoBase.

90{
92
94
95 const wxString ctrl = GUI::shortkey_ctrl_prefix();
96
97 m_desc["brim_ear_radius"] = _L("Brim ear radius");
98 m_desc["max_angle"] = _L("Max angle");
99 m_desc["detection_radius"] = _L("Detection radius");
100 m_desc["remove"] = _L("Remove");
101 m_desc["remove_selected"] = _L("Selected");
102 m_desc["remove_all"] = _L("All");
103 m_desc["create"] = _L("Create");
104 m_desc["auto_generate"] = _L("Auto-generate");
105 m_desc["auto-generate-tooltip"] = _L("Generate brim ears using Max angle and Detection radius");
106
107 m_shortcuts = {
108 {_L("Left mouse button"), _L("Add or Select")},
109 {_L("Right mouse button"), _L("Remove")},
110 {ctrl + _L("Mouse wheel"), m_desc["brim_ear_radius"]},
111 };
112
113 return true;
114}
#define _L(s)
Definition OBJ.cpp:34
float get_brim_default_radius() const
Definition GLGizmoBrimEars.cpp:1167
std::vector< std::pair< wxString, wxString > > m_shortcuts
Definition GLGizmoBrimEars.hpp:139
std::map< std::string, wxString > m_desc
Definition GLGizmoBrimEars.hpp:137
@ GizmoBrimEars
Definition Shortcuts.hpp:41
const std::string & shortkey_ctrl_prefix()
Definition GUI.cpp:115

References _L, get_brim_default_radius(), Slic3r::GUI::GizmoBrimEars, m_desc, m_new_point_head_radius, Slic3r::GUI::GLGizmoBase::m_shortcut, m_shortcuts, and Slic3r::GUI::shortkey_ctrl_prefix().

Here is the call graph for this function:

◆ on_is_activable()

bool Slic3r::GUI::GLGizmoBrimEars::on_is_activable ( ) const
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

838{
839 const Selection &selection = m_parent.get_selection();
840
841 if (!selection.is_single_full_instance()) return false;
842
843 // Check that none of the selected volumes is outside. Only SLA auxiliaries (supports) are allowed outside.
844 // const Selection::IndicesList &list = selection.get_volume_idxs();
845 // for (const auto &idx : list)
846 // if (selection.get_volume(idx)->is_outside && selection.get_volume(idx)->composite_id.volume_id >= 0) return false;
847
848 return true;
849}

References Slic3r::GUI::Selection::is_single_full_instance(), and Slic3r::GUI::GLGizmoBase::m_parent.

Referenced by on_get_name().

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

◆ on_is_selectable()

virtual bool Slic3r::GUI::GLGizmoBase::on_is_selectable ( ) const
inlineprotectedvirtualinherited

Reimplemented in Slic3r::GUI::GLGizmoCut3D, Slic3r::GUI::GLGizmoMmuSegmentation, Slic3r::GUI::GLGizmoPainterBase, Slic3r::GUI::GLGizmoSimplify, and Slic3r::GUI::GLGizmoSVG.

247{ return true; }

Referenced by is_selectable().

Here is the caller graph for this function:

◆ on_load()

void Slic3r::GUI::GLGizmoBrimEars::on_load ( cereal::BinaryInputArchive & ar)
overrideprotectedvirtual

◆ on_mouse()

bool Slic3r::GUI::GLGizmoBrimEars::on_mouse ( const wxMouseEvent & mouse_event)
overridevirtual

Implement when want to process mouse events in gizmo Click, Right click, move, drag, ...

Parameters
mouse_eventKeep information about mouse click
Returns
Return True when use the information and don't want to propagate it otherwise False.

Reimplemented from Slic3r::GUI::GLGizmoBase.

321{
322 // wxCoord == int --> wx/types.h
323 Vec2i32 mouse_coord(mouse_event.GetX(), mouse_event.GetY());
324 Vec2d mouse_pos = mouse_coord.cast<double>();
325
326 if (mouse_event.Moving()) {
327 gizmo_event(SLAGizmoEventType::Moving, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false);
328 }
329
330 // when control is down we allow scene pan and rotation even when clicking
331 // over some object
332 bool control_down = mouse_event.CmdDown();
333 bool grabber_contains_mouse = (get_hover_id() != -1);
334
335 const Selection &selection = m_parent.get_selection();
336 int selected_object_idx = selection.get_object_idx();
337 if (mouse_event.LeftDown()) {
338 if ((!control_down || grabber_contains_mouse) &&
339 gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), false))
340 // the gizmo got the event and took some action, there is no need
341 // to do anything more
342 return true;
343 } else if (mouse_event.RightDown()){
344 if (!control_down && selected_object_idx != -1 &&
345 gizmo_event(SLAGizmoEventType::RightDown, mouse_pos, false, false, false))
346 // event was taken care of
347 return true;
348 } else if (mouse_event.Dragging()) {
349 if (m_parent.get_move_volume_id() != -1)
350 // don't allow dragging objects with the Sla gizmo on
351 return true;
352 if (!control_down && gizmo_event(SLAGizmoEventType::Dragging,
353 mouse_pos, mouse_event.ShiftDown(),
354 mouse_event.AltDown(), false)) {
355 // the gizmo got the event and took some action, no need to do
356 // anything more here
357 m_parent.set_as_dirty();
358 return true;
359 }
360 if(control_down && (mouse_event.LeftIsDown() || mouse_event.RightIsDown()))
361 {
362 // CTRL has been pressed while already dragging -> stop current action
363 if (mouse_event.LeftIsDown())
364 gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true);
365 else if (mouse_event.RightIsDown())
366 gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true);
367 return false;
368 }
369 } else if (mouse_event.LeftUp()) {
370 if (gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), control_down)
371 && !m_parent.is_mouse_dragging()) {
372 // in case SLA/FDM gizmo is selected, we just pass the LeftUp
373 // event and stop processing - neither object moving or selecting
374 // is suppressed in that case
375 return true;
376 }
377 }
378 return use_grabbers(mouse_event);
379}
bool use_grabbers(const wxMouseEvent &mouse_event)
function which Set up m_dragging and call functions on_start_dragging / on_dragging / on_stop_draggin...
Definition GLGizmoBase.cpp:444
int get_hover_id() const
Definition GLGizmoBase.hpp:206
bool gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down)
Definition GLGizmoBrimEars.cpp:385
@ RightUp
Definition GLGizmosCommon.hpp:32
Eigen::Matrix< int32_t, 2, 1, Eigen::DontAlign > Vec2i32
Definition Point.hpp:57
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > Vec2d
Definition Point.hpp:67

References Slic3r::GUI::Dragging, Slic3r::GUI::GLGizmoBase::get_hover_id(), Slic3r::GUI::Selection::get_object_idx(), gizmo_event(), Slic3r::GUI::LeftDown, Slic3r::GUI::LeftUp, Slic3r::GUI::GLGizmoBase::m_parent, Slic3r::GUI::Moving, Slic3r::GUI::RightDown, Slic3r::GUI::RightUp, Slic3r::GUI::GLGizmoBase::use_grabbers(), and Slic3r::GUI::wxMouseEvent.

Here is the call graph for this function:

◆ on_register_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBrimEars::on_register_raycasters_for_picking ( )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

1103 {
1105}

References update_raycasters().

Here is the call graph for this function:

◆ on_render()

void Slic3r::GUI::GLGizmoBrimEars::on_render ( )
overrideprivatevirtual

Implements Slic3r::GUI::GLGizmoBase.

129{
130 ModelObject *mo = m_c->selection_info()->model_object();
131 const Selection &selection = m_parent.get_selection();
132
133 // If current m_c->m_model_object does not match selection, ask GLCanvas3D to turn us off
134 if (m_state == On && (mo != selection.get_model()->objects[selection.get_object_idx()] || m_c->selection_info()->get_active_instance() != selection.get_instance_idx())) {
135 m_parent.post_event(SimpleEvent(EVT_GLCANVAS_RESETGIZMOS));
136 return;
137 }
138
141
142 if (selection.is_from_single_instance()) render_points(selection);
143
145 m_c->object_clipper()->render_cut();
146
148}
#define glsafe(cmd)
Definition OpenGLUtils.hpp:25
void render_points(const Selection &selection)
Definition GLGizmoBrimEars.cpp:150
#define glEnable
Definition gl.h:3667
#define GL_DEPTH_TEST
Definition gl.h:574
#define GL_BLEND
Definition gl.h:275
#define glDisable
Definition gl.h:3607

References Slic3r::GUI::Selection::get_instance_idx(), Slic3r::GUI::Selection::get_model(), Slic3r::GUI::Selection::get_object_idx(), GL_BLEND, GL_DEPTH_TEST, glDisable, glEnable, glsafe, Slic3r::GUI::Selection::is_from_single_instance(), Slic3r::GUI::GLGizmoBase::m_c, Slic3r::GUI::GLGizmoBase::m_parent, m_selection_rectangle, Slic3r::GUI::GLGizmoBase::m_state, Slic3r::Model::objects, Slic3r::GUI::GLGizmoBase::On, and render_points().

Here is the call graph for this function:

◆ on_render_input_window()

void Slic3r::GUI::GLGizmoBrimEars::on_render_input_window ( float x,
float y,
float bottom_limit )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

659{
660 static float last_y = 0.0f;
661 static float last_h = 0.0f;
662
663 ModelObject *mo = m_c->selection_info()->model_object();
664
665 if (!mo) return;
666
667 const DynamicPrintConfig& obj_cfg = mo->config.get();
668 const DynamicPrintConfig& glb_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config;
669 const float win_h = ImGui::GetWindowHeight();
670 y = std::min(y, bottom_limit - win_h);
671 GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f);
672
673 const float f_scale = m_parent.get_scale();
675 ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale));
677 ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar);
678
679 float space_size = m_imgui->get_style_scaling() * 8;
680 std::vector<wxString> text_list = {m_desc["brim_ear_radius"], m_desc["max_angle"], m_desc["detection_radius"], m_desc["create"],
681 m_desc["remove"]};
682 float widest_text = m_imgui->find_widest_text(text_list);
683 float caption_size = widest_text + space_size + ImGui::GetStyle().WindowPadding.x;
684 float input_text_size = m_imgui->scaled(10.0f);
685 float button_size = ImGui::GetFrameHeight();
686
687 float list_width = input_text_size + ImGui::GetStyle().ScrollbarSize + 2 * f_scale;
688
689 const float slider_icon_width = m_imgui->get_slider_icon_size().x;
690 const float slider_width = list_width - space_size;
691 const float drag_left_width = caption_size + slider_width + space_size;
692
693 // adjust window position to avoid overlap the view toolbar
694 if (last_h != win_h || last_y != y) {
695 // ask canvas for another frame to render the window in the correct position
696 m_imgui->set_requires_extra_frame();
697 if (last_h != win_h) last_h = win_h;
698 if (last_y != y) last_y = y;
699 }
700
701
702 // Following is a nasty way to:
703 // - save the initial value of the slider before one starts messing with it
704 // - keep updating the head radius during sliding so it is continuosly refreshed in 3D scene
705 // - take correct undo/redo snapshot after the user is done with moving the slider
706 ImGui::AlignTextToFramePadding();
707 float initial_value = m_new_point_head_radius;
708 m_imgui->text(m_desc["brim_ear_radius"]);
709 ImGui::SameLine(caption_size);
710 ImGui::PushItemWidth(slider_width);
711 m_imgui->bbl_slider_float_style("##brim_ear_radius", &m_new_point_head_radius, BRIM_EAR_RADIUS_MIN, BRIM_EAR_RADIUS_MAX, "%.1f", 1.0f, true);
712 if (m_imgui->get_last_slider_status().clicked) {
713 begin_radius_change(initial_value);
714 }
715 if (m_imgui->get_last_slider_status().edited)
717 if (m_imgui->get_last_slider_status().deactivated_after_edit) {
719 }
720 ImGui::SameLine(drag_left_width);
721 ImGui::PushItemWidth(1.5 * slider_icon_width);
722 ImGui::BBLDragFloat("##brim_ear_radius_input", &m_new_point_head_radius, 0.05f, BRIM_EAR_RADIUS_MIN, BRIM_EAR_RADIUS_MAX, "%.1f");
723
724 ImGui::Separator();
725
726 ImGui::AlignTextToFramePadding();
727 m_imgui->text(m_desc["max_angle"]);
728 ImGui::SameLine(caption_size);
729 ImGui::PushItemWidth(slider_width);
730 m_imgui->bbl_slider_float_style("##max_angle", &m_max_angle, 0, 180, "%.1f", 1.0f, true);
731 ImGui::SameLine(drag_left_width);
732 ImGui::PushItemWidth(1.5 * slider_icon_width);
733 ImGui::BBLDragFloat("##max_angle_input", &m_max_angle, 0.05f, 0.0f, 180.0f, "%.1f");
734
735 ImGui::AlignTextToFramePadding();
736 m_imgui->text(m_desc["detection_radius"]);
737 ImGui::SameLine(caption_size);
738 ImGui::PushItemWidth(slider_width);
739 m_imgui->bbl_slider_float_style("##detection_radius", &m_detection_radius, 0, static_cast<int>(m_detection_radius_max), "%.1f", 1.0f, true);
740 ImGui::SameLine(drag_left_width);
741 ImGui::PushItemWidth(1.5 * slider_icon_width);
742 ImGui::BBLDragFloat("##detection_radius_input", &m_detection_radius, 0.05f, 0.0f, static_cast<float>(m_detection_radius_max), "%.1f");
743
744 ImGui::Separator();
745
746 ImGui::AlignTextToFramePadding();
747 m_imgui->text(m_desc["create"]);
748 ImGui::SameLine(caption_size);
749 if (m_imgui->button(m_desc["auto_generate"], m_desc["auto-generate-tooltip"])) {
751 }
752
753 ImGui::AlignTextToFramePadding();
754 m_imgui->text(m_desc["remove"]);
755 ImGui::SameLine(caption_size);
756 m_imgui->disabled_begin(has_selected_points() == false);
757 if (m_imgui->button(m_desc["remove_selected"])) {
759 }
760 m_imgui->disabled_end();
761 ImGui::SameLine();
762 m_imgui->disabled_begin(m_editing_cache.empty());
763 if (m_imgui->button(m_desc["remove_all"])) {
764 if (m_editing_cache.size() > 0) {
767 }
768 }
769 m_imgui->disabled_end();
770
771 ImGui::Separator();
772
774
775 ImGui::SameLine();
777 if (m_imgui->button(_L("Done"))) {
778 m_parent.reset_all_gizmos();
779 }
780
781 bool brim_not_painted = (obj_cfg.option("brim_type")) ? (obj_cfg.opt_enum<BrimType>("brim_type") != btPainted) :
782 (glb_cfg.opt_enum<BrimType>("brim_type") != btPainted);
783 bool has_invalid_ears = !m_single_brim.empty();
784
785 if (brim_not_painted || has_invalid_ears) {
786 ImGui::Separator();
787 ImGui::PushStyleColor(ImGuiCol_Text, ImGuiWrapper::COL_WARNING);
788
789 float parent_width = ImGui::GetContentRegionAvail().x;
790 float font_size = ImGui::GetFontSize();
791
792 if (brim_not_painted) {
793 m_imgui->text_wrapped(_L("Warning: The brim type is not set to \"painted\", the brim ears will not take effect!"), parent_width);
794
795 ImColor HyperColor = ImGuiWrapper::COL_ORCA;
796 ImGui::PushStyleColor(ImGuiCol_Text, HyperColor.Value);
797
798 ImGui::Dummy(ImVec2(font_size * 1.8f, 0.0f)); // Horizontal indent
799 ImGui::SameLine();
800 m_imgui->bold_text(_u8L("Set the brim type of this object to \"painted\""));
801
802 ImVec2 min = ImGui::GetItemRectMin();
803 ImVec2 max = ImGui::GetItemRectMax();
804 ImGui::GetWindowDrawList()->AddLine(ImVec2(min.x, max.y - 2.0f), ImVec2(max.x, max.y - 2.0f), HyperColor);
805
806 if (ImGui::IsMouseHoveringRect(min, max)) {
807 m_link_text_hover = true;
808 ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
809 if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) {
810 DynamicPrintConfig new_conf = obj_cfg;
811 new_conf.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btPainted));
812 mo->config.assign_config(new_conf);
813 }
814 } else {
815 m_link_text_hover = false;
816 }
817 ImGui::PopStyleColor(1); // Pop HyperColor
818 }
819
820 if (has_invalid_ears) {
821 const int n_invalid = int(m_single_brim.size());
822 wxString out = _L("Warning") + ": " + wxString::Format(_L_PLURAL("%d invalid brim ear", "%d invalid brim ears", n_invalid), n_invalid);
823 m_imgui->text_wrapped(out, parent_width);
824 }
825
826 ImGui::PopStyleColor(1); // Pop Warning Color
827 } else {
828 // Reset hover state if no warnings are active
829 m_link_text_hover = false;
830 }
831
833 ImGui::PopStyleVar(1); // ImGuiStyleVar_FramePadding
835}
std::string get_name(bool include_shortcut=true) const
Definition GLGizmoBase.cpp:544
void GizmoImguiEnd()
Definition GLGizmoBase.cpp:372
bool GizmoImguiBegin(const std::string &name, int flags)
Definition GLGizmoBase.cpp:367
bool m_link_text_hover
Definition GLGizmoBrimEars.hpp:131
bool has_selected_points() const
Definition GLGizmoBrimEars.cpp:575
void auto_generate()
Definition GLGizmoBrimEars.cpp:1015
static void push_toolbar_style(const float scale)
Definition ImGuiWrapper.cpp:2705
static const ImVec4 COL_ORCA
Definition ImGuiWrapper.hpp:408
static void pop_toolbar_style()
Definition ImGuiWrapper.cpp:2757
static const ImVec4 COL_WARNING
Definition ImGuiWrapper.hpp:413
void begin_right_aligned_buttons(const std::vector< wxString > &labels)
Definition GLGizmoUtils.cpp:135
void render_tooltip_button(ImGuiWrapper *imgui_wrapper, const GLCanvas3D &canvas, const std::vector< std::pair< wxString, wxString > > &shortcuts, float x, float y)
Definition GLGizmoUtils.cpp:48
BrimType
Definition PrintConfig.hpp:454
@ btPainted
Definition PrintConfig.hpp:457
#define _L_PLURAL(s, plural, n)
Definition I18N.hpp:96

References _L, _L_PLURAL, _u8L, AllPoints, apply_radius_change(), Slic3r::ModelConfig::assign_config(), auto_generate(), begin_radius_change(), Slic3r::GUI::GLGizmoUtils::begin_right_aligned_buttons(), Slic3r::GUI::BRIM_EAR_RADIUS_MAX, Slic3r::GUI::BRIM_EAR_RADIUS_MIN, Slic3r::btPainted, Slic3r::GUI::ImGuiWrapper::COL_ORCA, Slic3r::GUI::ImGuiWrapper::COL_WARNING, Slic3r::ModelObject::config, delete_selected_points(), Slic3r::ModelConfig::get(), Slic3r::GUI::GLGizmoBase::get_name(), Slic3r::GUI::GLGizmoBase::GizmoImguiBegin(), Slic3r::GUI::GLGizmoBase::GizmoImguiEnd(), Slic3r::GUI::GLGizmoBase::GizmoImguiSetNextWIndowPos(), has_selected_points(), Slic3r::GUI::GLGizmoBase::m_c, m_desc, m_detection_radius, m_detection_radius_max, m_editing_cache, Slic3r::GUI::GLGizmoBase::m_imgui, m_link_text_hover, m_max_angle, m_new_point_head_radius, Slic3r::GUI::GLGizmoBase::m_parent, m_shortcuts, m_single_brim, Slic3r::DynamicConfig::opt_enum(), Slic3r::ConfigBase::option(), Slic3r::GUI::ImGuiWrapper::pop_toolbar_style(), Slic3r::GUI::ImGuiWrapper::push_toolbar_style(), Slic3r::GUI::GLGizmoUtils::render_tooltip_button(), select_point(), Slic3r::DynamicConfig::set_key_value(), and update_cache_radius().

Here is the call graph for this function:

◆ on_save()

void Slic3r::GUI::GLGizmoBrimEars::on_save ( cereal::BinaryOutputArchive & ar) const
overrideprotectedvirtual

◆ on_set_hover_id()

void Slic3r::GUI::GLGizmoBrimEars::on_set_hover_id ( )
inlineoverrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

176 {
177 if ((int)m_editing_cache.size() <= m_hover_id)
178 m_hover_id = -1;
179 }

References m_editing_cache, and Slic3r::GUI::GLGizmoBase::m_hover_id.

◆ on_set_state()

void Slic3r::GUI::GLGizmoBrimEars::on_set_state ( )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

879{
880 if (m_state == m_old_state) return;
881
882 if (m_state == On && m_old_state != On) {
883 // the gizmo was just turned on
884 wxGetApp().plater()->enter_gizmos_stack();
886 }
887 if (m_state == Off && m_old_state != Off) {
888 // the gizmo was just turned Off
889 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Brim ears edit");
891 wxGetApp().plater()->leave_gizmos_stack();
892 // wxGetApp().mainframe->update_slice_print_status(MainFrame::SlicePrintEventType::eEventSliceUpdate, true, true);
893 }
895}
void first_layer_slicer()
Definition GLGizmoBrimEars.cpp:979
EState m_old_state
Definition GLGizmoBrimEars.hpp:148

References first_layer_slicer(), m_old_state, Slic3r::GUI::GLGizmoBase::m_state, Slic3r::GUI::GLGizmoBase::Off, Slic3r::GUI::GLGizmoBase::On, Slic3r::GUI::plater(), and update_model_object().

Here is the call graph for this function:

◆ on_start_dragging()

void Slic3r::GUI::GLGizmoBrimEars::on_start_dragging ( )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

898{
899 if (m_hover_id != -1) {
903 } else
905}
CacheEntry m_point_before_drag
Definition GLGizmoBrimEars.hpp:121

References m_editing_cache, Slic3r::GUI::GLGizmoBase::m_hover_id, m_point_before_drag, NoPoints, and select_point().

Here is the call graph for this function:

◆ on_stop_dragging()

void Slic3r::GUI::GLGizmoBrimEars::on_stop_dragging ( )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

908{
909 if (m_hover_id != -1) {
911
912 if (m_point_before_drag.brim_point.pos != Vec3f::Zero() // some point was touched
913 && backup.brim_point.pos != m_point_before_drag.brim_point.pos) // and it was moved, not just selected
914 {
916 Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Move support point");
917 m_editing_cache[m_hover_id] = backup;
918 }
919 }
921}

References Slic3r::GUI::GLGizmoBrimEars::CacheEntry::brim_point, m_editing_cache, Slic3r::GUI::GLGizmoBase::m_hover_id, m_point_before_drag, Slic3r::GUI::plater(), and Slic3r::BrimPoint::pos.

Here is the call graph for this function:

◆ on_unregister_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBrimEars::on_unregister_raycasters_for_picking ( )
overrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

1108{
1109 m_parent.remove_raycasters_for_picking(SceneRaycaster::EType::Gizmo);
1110 m_grabbers.clear();
1111}
@ Gizmo
Definition SceneRaycaster.hpp:51

References Slic3r::GUI::SceneRaycaster::Gizmo, Slic3r::GUI::GLGizmoBase::m_grabbers, and Slic3r::GUI::GLGizmoBase::m_parent.

◆ register_grabbers_for_picking()

void Slic3r::GUI::GLGizmoBase::register_grabbers_for_picking ( )
protectedinherited
399{
400 for (size_t i = 0; i < m_grabbers.size(); ++i) {
401 m_grabbers[i].register_raycasters_for_picking((m_group_id >= 0) ? m_group_id : i);
402 }
403}
int m_group_id
Definition GLGizmoBase.hpp:145

References m_grabbers, and m_group_id.

Referenced by register_raycasters_for_picking().

Here is the caller graph for this function:

◆ register_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBase::register_raycasters_for_picking ( )
inlineinherited
void register_grabbers_for_picking()
Definition GLGizmoBase.cpp:398
virtual void on_register_raycasters_for_picking()
Definition GLGizmoBase.hpp:267

References on_register_raycasters_for_picking(), and register_grabbers_for_picking().

Referenced by Slic3r::GUI::GLGizmosManager::activate_gizmo(), and Slic3r::GUI::GLCanvas3D::reload_scene().

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

◆ register_single_mesh_pick()

void Slic3r::GUI::GLGizmoBrimEars::register_single_mesh_pick ( )
protected
1137{
1138 Selection &selection = m_parent.get_selection();
1139 const Selection::IndicesList &idxs = selection.get_volume_idxs();
1140 if (idxs.size() > 0) {
1141 for (unsigned int idx : idxs) {
1142 GLVolume *v = const_cast<GLVolume *>(selection.get_volume(idx));
1143 const ModelVolume* mv = get_model_volume(*v, wxGetApp().model());
1144 if (!mv->is_model_part()) continue;
1145 auto world_tran = v->get_instance_transformation() * v->get_volume_transformation();
1146 if (m_mesh_raycaster_map.find(v) != m_mesh_raycaster_map.end()) {
1147 m_mesh_raycaster_map[v]->set_transform(world_tran.get_matrix());
1148 } else {
1149 auto mesh = mv->mesh_ptr();
1150 m_mesh_raycaster_map[v] = std::make_shared<PickRaycaster>(-1, *v->mesh_raycaster, world_tran.get_matrix());
1151 m_mesh_raycaster_map[v]->set_transform(world_tran.get_matrix());
1152 }
1153 }
1154 }
1155}
std::map< GLVolume *, std::shared_ptr< PickRaycaster > > m_mesh_raycaster_map
Definition GLGizmoBrimEars.hpp:127

References Slic3r::GLVolume::get_instance_transformation(), Slic3r::GUI::get_model_volume(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), Slic3r::GLVolume::get_volume_transformation(), Slic3r::ModelVolume::is_model_part(), m_mesh_raycaster_map, Slic3r::GUI::GLGizmoBase::m_parent, Slic3r::ModelVolume::mesh_ptr(), and Slic3r::GLVolume::mesh_raycaster.

Referenced by data_changed().

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

◆ reload_cache()

void Slic3r::GUI::GLGizmoBrimEars::reload_cache ( )
private
954{
955 const ModelObject *mo = m_c->selection_info()->model_object();
956 m_editing_cache.clear();
957 for (const BrimPoint &point : mo->brim_points) m_editing_cache.emplace_back(point);
958 find_single();
959}

References Slic3r::ModelObject::brim_points, find_single(), Slic3r::GUI::GLGizmoBase::m_c, and m_editing_cache.

Referenced by set_brim_data().

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

◆ render()

void Slic3r::GUI::GLGizmoBase::render ( )
inlineinherited
214{ on_render(); }
virtual void on_render()=0

References on_render().

Here is the call graph for this function:

◆ render_combo()

bool Slic3r::GUI::GLGizmoBase::render_combo ( const std::string & label,
const std::vector< std::string > & lines,
int & selection_idx,
float label_width,
float item_width )
protectedinherited
227{
229 ImGui::AlignTextToFramePadding();
230 m_imgui->text(label);
231 ImGui::SameLine(label_width);
232 ImGui::PushItemWidth(item_width);
233
234 size_t selection_out = selection_idx;
235
236 const char *selected_str = (selection_idx >= 0 && selection_idx < int(lines.size())) ? lines[selection_idx].c_str() : "";
237 if (ImGui::BBLBeginCombo(("##" + label).c_str(), selected_str, 0)) {
238 for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) {
239 ImGui::PushID(int(line_idx));
240 if (ImGui::Selectable("", line_idx == selection_idx)) selection_out = line_idx;
241
242 ImGui::SameLine();
243 ImGui::Text("%s", lines[line_idx].c_str());
244 ImGui::PopID();
245 }
246
247 ImGui::EndCombo();
248 }
249
250 bool is_changed = selection_idx != selection_out;
251 selection_idx = selection_out;
252
253 //if (is_changed) update_connector_shape();
255
256 return is_changed;
257}
static void pop_combo_style()
Definition ImGuiWrapper.cpp:2932
static void push_combo_style(const float scale)
Definition ImGuiWrapper.cpp:2907

References m_imgui, m_parent, Slic3r::GUI::ImGuiWrapper::pop_combo_style(), and Slic3r::GUI::ImGuiWrapper::push_combo_style().

Referenced by Slic3r::GUI::GLGizmoAssembly::render_assembly_mode_combo(), and Slic3r::GUI::GLGizmoCut3D::render_connectors_input_window().

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

◆ render_cross_mark()

void Slic3r::GUI::GLGizmoBase::render_cross_mark ( const Vec3f & target,
bool is_single = false )
protectedinherited
260{
261 const float half_length = 4.0f;
262
263 // ORCA: OpenGL Core Profile
264#if !SLIC3R_OPENGL_ES
265 if (!OpenGLManager::get_gl_info().is_core_profile())
266 glsafe(::glLineWidth(2.0f));
267#endif // !SLIC3R_OPENGL_ES
268
269 auto render_line = [](const Vec3f& p1, const Vec3f& p2, const ColorRGBA& color) {
270 GLModel::Geometry init_data;
272 init_data.color = color;
273 init_data.reserve_vertices(2);
274 init_data.reserve_indices(2);
275
276 // vertices
277 init_data.add_vertex(p1);
278 init_data.add_vertex(p2);
279
280 // indices
281 init_data.add_line(0, 1);
282
283 GLModel model;
284 model.init_from(std::move(init_data));
285 model.render();
286 };
287
288 // draw line for x axis
289 if (!is_single) {
290 render_line(
291 {target(0) - half_length, target(1), target(2)},
292 {target(0) + half_length, target(1), target(2)},
293 ColorRGBA::X()); // ORCA match axis colors
294 }
295 else {
296 render_line(
297 {target(0), target(1), target(2)},
298 {target(0) + half_length, target(1), target(2)},
299 ColorRGBA::X()); // ORCA match axis colors
300 }
301 // draw line for y axis
302 if (!is_single) {
303 render_line(
304 {target(0), target(1) - half_length, target(2)},
305 {target(0), target(1) + half_length, target(2)},
306 ColorRGBA::Y()); // ORCA match axis colors
307 } else {
308 render_line(
309 {target(0), target(1), target(2)},
310 {target(0), target(1) + half_length, target(2)},
311 ColorRGBA::Y()); // ORCA match axis colors
312 }
313 // draw line for z axis
314 if (!is_single) {
315 render_line(
316 {target(0), target(1), target(2) - half_length},
317 {target(0), target(1), target(2) + half_length},
318 ColorRGBA::Z()); // ORCA match axis colors
319 } else {
320 render_line(
321 {target(0), target(1), target(2)},
322 {target(0), target(1), target(2) + half_length},
323 ColorRGBA::Z()); // ORCA match axis colors
324 }
325}
static const ColorRGBA Y()
Definition Color.hpp:146
static const ColorRGBA X()
Definition Color.hpp:145
static const ColorRGBA Z()
Definition Color.hpp:147
static const GLInfo & get_gl_info()
Definition OpenGLManager.hpp:106
#define glLineWidth
Definition gl.h:4215

References Slic3r::GUI::GLModel::Geometry::add_line(), Slic3r::GUI::GLModel::Geometry::add_vertex(), Slic3r::GUI::GLModel::Geometry::color, Slic3r::GUI::GLModel::Geometry::format, Slic3r::GUI::OpenGLManager::get_gl_info(), glLineWidth, glsafe, Slic3r::GUI::GLModel::init_from(), Slic3r::GUI::GLModel::Geometry::Lines, Slic3r::GUI::GLModel::Geometry::P3, Slic3r::GUI::GLModel::render(), Slic3r::GUI::GLModel::Geometry::reserve_indices(), Slic3r::GUI::GLModel::Geometry::reserve_vertices(), Slic3r::ColorRGBA::X(), Slic3r::ColorRGBA::Y(), and Slic3r::ColorRGBA::Z().

Referenced by Slic3r::GUI::GLGizmoMove3D::on_render().

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

◆ render_follows_cursor()

bool Slic3r::GUI::GLGizmoBrimEars::render_follows_cursor ( ) const
inlineoverrideprotectedvirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

187{ return render_hover_point.has_value(); }

References render_hover_point.

◆ render_grabbers() [1/3]

void Slic3r::GUI::GLGizmoBase::render_grabbers ( const BoundingBoxf3 & box) const
protectedinherited
413{
414#if ENABLE_FIXED_GRABBER
416#else
417 render_grabbers((float)((box.size().x() + box.size().y() + box.size().z()) / 3.0));
418#endif
419}
void render_grabbers(const BoundingBoxf3 &box) const
Definition GLGizmoBase.cpp:412
static const float FixedGrabberSize
Definition GLGizmoBase.hpp:90

References Slic3r::GUI::GLGizmoBase::Grabber::FixedGrabberSize, render_grabbers(), and Slic3r::BoundingBox3Base< PointType >::size().

Referenced by Slic3r::GUI::GLGizmoMove3D::on_render(), Slic3r::GUI::GLGizmoScale3D::on_render(), Slic3r::GUI::GLGizmoRotate::render_grabber(), render_grabbers(), and render_grabbers().

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

◆ render_grabbers() [2/3]

void Slic3r::GUI::GLGizmoBase::render_grabbers ( float size) const
protectedinherited
422{
423 render_grabbers(0, m_grabbers.size() - 1, size, false);
424}

References m_grabbers, and render_grabbers().

Here is the call graph for this function:

◆ render_grabbers() [3/3]

void Slic3r::GUI::GLGizmoBase::render_grabbers ( size_t first,
size_t last,
float size,
bool force_hover ) const
protectedinherited
427{
428 GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
429 if (shader == nullptr)
430 return;
431 shader->start_using();
432 shader->set_uniform("emission_factor", 0.1f);
434 for (size_t i = first; i <= last; ++i) {
435 if (m_grabbers[i].enabled)
436 m_grabbers[i].render(force_hover ? true : m_hover_id == (int)i, size);
437 }
439 shader->stop_using();
440}
#define GL_CULL_FACE
Definition gl.h:500

References GL_CULL_FACE, glDisable, glEnable, glsafe, m_grabbers, m_hover_id, Slic3r::GLShaderProgram::set_uniform(), Slic3r::GLShaderProgram::start_using(), and Slic3r::GLShaderProgram::stop_using().

Here is the call graph for this function:

◆ render_input_window()

void Slic3r::GUI::GLGizmoBase::render_input_window ( float x,
float y,
float bottom_limit )
inherited
529{
530 on_render_input_window(x, y, bottom_limit);
532 // imgui windows that don't have an initial size needs to be processed once to get one
533 // and are not rendered in the first frame
534 // so, we forces to render another frame the first time the imgui window is shown
535 // https://github.com/ocornut/imgui/issues/2949
536 m_parent.set_as_dirty();
537 m_parent.request_extra_frame();
539 }
540}
virtual void on_render_input_window(float x, float y, float bottom_limit)
Definition GLGizmoBase.hpp:258
bool m_first_input_window_render
Definition GLGizmoBase.hpp:154

References m_first_input_window_render, m_parent, and on_render_input_window().

Here is the call graph for this function:

◆ render_points()

void Slic3r::GUI::GLGizmoBrimEars::render_points ( const Selection & selection)
private
151{
152 auto editing_cache = m_editing_cache;
153 if (render_hover_point) { editing_cache.push_back(*render_hover_point); }
154
155 size_t cache_size = editing_cache.size();
156
157 bool has_points = (cache_size != 0);
158
159 if (!has_points) return;
160
161 const auto shader = wxGetApp().get_shader("gouraud_light");
162 if (shader == nullptr)
163 return;
164 shader->start_using();
165 ScopeGuard guard([shader]() {
166 shader->stop_using();
167 });
168
169 const Camera& camera = wxGetApp().plater()->get_camera();
170 const Transform3d& view_matrix = camera.get_view_matrix();
171 const GLVolume *vol = selection.get_volume(*selection.get_volume_idxs().begin());
172 const Transform3d &instance_scaling_matrix_inverse = vol->get_instance_transformation().get_scaling_factor_matrix().inverse();
173 const Transform3d &instance_matrix = vol->get_instance_transformation().get_matrix();
174
175 shader->set_uniform("projection_matrix", camera.get_projection_matrix());
176
177 ColorRGBA render_color;
178 for (size_t i = 0; i < cache_size; ++i) {
179 const BrimPoint &brim_point = editing_cache[i].brim_point;
180 const bool &point_selected = editing_cache[i].selected;
181 const bool &hover = editing_cache[i].is_hover;
182 const bool &error = editing_cache[i].is_error;
183 // keep show brim ear
184 // if (is_mesh_point_clipped(brim_point.pos.cast<double>()))
185 // continue;
186
187 // First decide about the color of the point.
188 if (hover) {
189 render_color = HOVER_COLOR;
190 } else {
191 if (size_t(m_hover_id) == i) // ignore hover state unless editing mode is active
192 render_color = {0.f, 1.f, 1.f, 1.f};
193 else { // neigher hover nor picking
194 if (point_selected)
195 render_color = SELECTED_COLOR;
196 else {
197 if (error)
198 render_color = ERR_COLOR;
199 else
200 render_color = DEF_COLOR;
201 }
202 }
203 }
204
205 m_cylinder.model.set_color(render_color);
206 shader->set_uniform("emission_factor", 0.5f);
207
208 if (vol->is_left_handed()) glFrontFace(GL_CW);
209
210 // Matrices set, we can render the point mark now.
211 // If in editing mode, we'll also render a cone pointing to the sphere.
212 if (editing_cache[i].normal == Vec3f::Zero()) m_c->raycaster()->raycaster()->get_closest_point(editing_cache[i].brim_point.pos, &editing_cache[i].normal);
213
214 Eigen::Quaterniond q;
215 q.setFromTwoVectors(Vec3d{0., 0., 1.}, instance_scaling_matrix_inverse * editing_cache[i].normal.cast<double>());
216
217 double radius = (double) brim_point.head_front_radius * RenderPointScale;
218 const Transform3d center_matrix =
219 instance_matrix
220 * Geometry::translation_transform(brim_point.pos.cast<double>())
221 // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
222 * instance_scaling_matrix_inverse
223 * q
224 * Geometry::scale_transform(Vec3d{radius, radius, .2});
225 if (i < m_grabbers.size()) {
226 m_grabbers[i].raycasters[0]->set_transform(center_matrix);
227 }
228 shader->set_uniform("view_model_matrix", view_matrix * center_matrix);
229 m_cylinder.model.render();
230
231 if (vol->is_left_handed()) glFrontFace(GL_CCW);
232 }
233}
const float RenderPointScale
Definition GLGizmoBrimEars.hpp:43
#define GL_CW
Definition gl.h:520
#define GL_CCW
Definition gl.h:317
#define glFrontFace
Definition gl.h:3765
static const ColorRGBA ERR_COLOR
Definition GLGizmoBrimEars.cpp:61
static const ColorRGBA HOVER_COLOR
Definition GLGizmoBrimEars.cpp:62
static const ColorRGBA SELECTED_COLOR
Definition GLGizmoBrimEars.cpp:60
static const ColorRGBA DEF_COLOR
Definition GLGizmoBrimEars.cpp:59
void translation_transform(Transform3d &transform, const Vec3d &translation)
Definition Geometry.cpp:346
void scale_transform(Transform3d &transform, double scale)
Definition Geometry.cpp:372

References Slic3r::GUI::DEF_COLOR, Slic3r::GUI::ERR_COLOR, Slic3r::GLVolume::get_instance_transformation(), Slic3r::Geometry::Transformation::get_matrix(), Slic3r::Geometry::Transformation::get_scaling_factor_matrix(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), GL_CCW, GL_CW, glFrontFace, Slic3r::BrimPoint::head_front_radius, Slic3r::GUI::HOVER_COLOR, Slic3r::GLVolume::is_left_handed(), Slic3r::GUI::GLGizmoBase::m_c, m_cylinder, m_editing_cache, Slic3r::GUI::GLGizmoBase::m_grabbers, Slic3r::GUI::GLGizmoBase::m_hover_id, Slic3r::normal(), Slic3r::BrimPoint::pos, render_hover_point, RenderPointScale, Slic3r::Geometry::scale_transform(), Slic3r::GUI::SELECTED_COLOR, and Slic3r::Geometry::translation_transform().

Referenced by on_render().

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

◆ reset_all_pick()

void Slic3r::GUI::GLGizmoBrimEars::reset_all_pick ( )
protected
1165{ std::map<GLVolume *, std::shared_ptr<PickRaycaster>>().swap(m_mesh_raycaster_map); }

References m_mesh_raycaster_map.

Referenced by data_changed().

Here is the caller graph for this function:

◆ save()

void Slic3r::GUI::GLGizmoBase::save ( cereal::BinaryOutputArchive & ar) const
inlineinherited
171{ on_save(ar); }
virtual void on_save(cereal::BinaryOutputArchive &ar) const
Definition GLGizmoBase.hpp:242

References on_save().

Here is the call graph for this function:

◆ select_point()

void Slic3r::GUI::GLGizmoBrimEars::select_point ( int i)
private
928{
929 if (i == AllPoints || i == NoPoints) {
930 for (auto &point_and_selection : m_editing_cache) point_and_selection.selected = (i == AllPoints);
932
933 if (i == AllPoints) m_new_point_head_radius = m_editing_cache[0].brim_point.head_front_radius;
934 } else {
935 m_editing_cache[i].selected = true;
936 m_selection_empty = false;
937 m_new_point_head_radius = m_editing_cache[i].brim_point.head_front_radius;
938 }
939}

References AllPoints, m_editing_cache, m_new_point_head_radius, m_selection_empty, and NoPoints.

Referenced by delete_selected_points(), gizmo_event(), on_render_input_window(), and on_start_dragging().

Here is the caller graph for this function:

◆ set_brim_data()

void Slic3r::GUI::GLGizmoBrimEars::set_brim_data ( )
117{
118 if (!m_c->selection_info()) return;
119
120 ModelObject *mo = m_c->selection_info()->model_object();
121
122 if (m_state == On && mo && mo->id() != m_old_mo_id) {
123 reload_cache();
124 m_old_mo_id = mo->id();
125 }
126}
void reload_cache()
Definition GLGizmoBrimEars.cpp:953
ObjectID m_old_mo_id
Definition GLGizmoBrimEars.hpp:125

References Slic3r::ObjectBase::id(), Slic3r::GUI::GLGizmoBase::m_c, m_old_mo_id, Slic3r::GUI::GLGizmoBase::m_state, Slic3r::GUI::GLGizmoBase::On, and reload_cache().

Referenced by data_changed().

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

◆ set_common_data_pool()

void Slic3r::GUI::GLGizmoBase::set_common_data_pool ( CommonGizmosDataPool * ptr)
inlineinherited
193{ m_c = ptr; }

References m_c.

◆ set_dirty()

void Slic3r::GUI::GLGizmoBase::set_dirty ( )
protectedinherited
524 {
525 m_dirty = true;
526}
bool m_dirty
Definition GLGizmoBase.hpp:293

References m_dirty.

Referenced by Slic3r::GUI::GLGizmoCut3D::process_cut_line(), and Slic3r::GUI::GLGizmoSimplify::request_rerender().

Here is the caller graph for this function:

◆ set_hover_id()

void Slic3r::GUI::GLGizmoBase::set_hover_id ( int id)
inherited
348{
349 // do not change hover id during dragging
350 assert(!m_dragging);
351
352 // allow empty grabbers when not using grabbers but use hover_id - flatten, rotate
353// if (!m_grabbers.empty() && id >= (int) m_grabbers.size())
354// return;
355
356 m_hover_id = id;
358}
virtual void on_set_hover_id()
Definition GLGizmoBase.hpp:245

References m_dragging, m_hover_id, and on_set_hover_id().

Referenced by Slic3r::GUI::GLGizmoRotate3D::on_set_hover_id().

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

◆ set_icon_filename()

void Slic3r::GUI::GLGizmoBase::set_icon_filename ( const std::string & filename)
inherited
343 {
344 m_icon_filename = filename;
345}

References m_icon_filename.

◆ set_state()

void Slic3r::GUI::GLGizmoBase::set_state ( EState state)
inlineinherited
176{ m_state = state; on_set_state(); }
virtual void on_set_state()
Definition GLGizmoBase.hpp:244

References m_state, and on_set_state().

Referenced by Slic3r::GUI::GLGizmosManager::activate_gizmo().

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

◆ shortcut()

std::optional< Shortcut > Slic3r::GUI::GLGizmoBase::shortcut ( ) const
inlineinherited
178{ return m_shortcut; }

References m_shortcut.

Referenced by Slic3r::GUI::GLGizmoFdmSupports::on_tool_shortcut(), Slic3r::GUI::GLGizmoMmuSegmentation::on_tool_shortcut(), Slic3r::GUI::GLGizmoPainterBase::on_tool_shortcut(), and Slic3r::GUI::GLGizmoSeam::on_tool_shortcut().

Here is the caller graph for this function:

◆ unproject_on_mesh()

bool Slic3r::GUI::GLGizmoBrimEars::unproject_on_mesh ( const Vec2d & mouse_pos,
std::pair< Vec3f, Vec3f > & pos_and_normal )
private
282{
283 if (m_c->raycaster()->raycasters().size() != 1) return false;
284 if (!m_c->raycaster()->raycaster()) return false;
285
286 const Camera &camera = wxGetApp().plater()->get_camera();
287 const Selection &selection = m_parent.get_selection();
288 const GLVolume *volume = selection.get_volume(*selection.get_volume_idxs().begin());
289 Geometry::Transformation trafo = volume->get_instance_transformation();
290 // trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., m_c->selection_info()->get_sla_shift()));//sla shift看起来可以删掉
291
292 double clp_dist = m_c->object_clipper()->get_position();
293 const ClippingPlane *clp = m_c->object_clipper()->get_clipping_plane();
294
295 // The raycaster query
296 Vec3f hit;
298 if (m_c->raycaster()->raycaster()->unproject_on_mesh(mouse_pos, trafo.get_matrix(), camera, hit, normal, clp_dist != 0. ? clp : nullptr)) {
299 pos_and_normal = std::make_pair(hit, normal);
300 return true;
301 }
302
303 return false;
304}

References Slic3r::GLVolume::get_instance_transformation(), Slic3r::Geometry::Transformation::get_matrix(), Slic3r::GUI::Selection::get_volume(), Slic3r::GUI::Selection::get_volume_idxs(), Slic3r::GUI::GLGizmoBase::m_c, Slic3r::GUI::GLGizmoBase::m_parent, and Slic3r::normal().

Here is the call graph for this function:

◆ unproject_on_mesh2()

bool Slic3r::GUI::GLGizmoBrimEars::unproject_on_mesh2 ( const Vec2d & mouse_pos,
std::pair< Vec3f, Vec3f > & pos_and_normal )
private
250{
251 const Camera &camera = wxGetApp().plater()->get_camera();
252 double clp_dist = m_c->object_clipper()->get_position();
253 const ClippingPlane *clp = m_c->object_clipper()->get_clipping_plane();
254 bool mouse_on_object = false;
255 Vec3f position_on_model {};
256 Vec3f normal_on_model {};
257 double closest_hit_distance = std::numeric_limits<double>::max();
258
259 for (auto item : m_mesh_raycaster_map) {
260 auto raycaster = item.second->get_raycaster();
261 auto& world_tran = item.second->get_transform();
262 Vec3f normal = Vec3f::Zero();
263 Vec3f hit = Vec3f::Zero();
264 if (raycaster->unproject_on_mesh(mouse_pos, world_tran, camera, hit, normal, clp_dist != 0. ? clp : nullptr)) {
265 double hit_squared_distance = (camera.get_position() - world_tran * hit.cast<double>()).norm();
266 if (hit_squared_distance < closest_hit_distance) {
267 closest_hit_distance = hit_squared_distance;
268 mouse_on_object = true;
269 m_last_hit_volume = item.first;
270 auto volum_trsf = m_last_hit_volume->get_volume_transformation().get_matrix();
271 position_on_model = (m_last_hit_volume->get_volume_transformation().get_matrix() * hit.cast<double>()).cast<float>();
272 normal_on_model = normal;
273 }
274 }
275 }
276 pos_and_normal = std::make_pair(position_on_model, normal_on_model);
277 return mouse_on_object;
278}
GLVolume * m_last_hit_volume
Definition GLGizmoBrimEars.hpp:128

References Slic3r::GUI::Camera::get_position(), Slic3r::GUI::GLGizmoBase::m_c, m_last_hit_volume, m_mesh_raycaster_map, and Slic3r::normal().

Referenced by gizmo_event(), and on_dragging().

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

◆ unregister_grabbers_for_picking()

void Slic3r::GUI::GLGizmoBase::unregister_grabbers_for_picking ( )
protectedinherited
406{
407 for (size_t i = 0; i < m_grabbers.size(); ++i) {
408 m_grabbers[i].unregister_raycasters_for_picking();
409 }
410}

References m_grabbers.

Referenced by unregister_raycasters_for_picking().

Here is the caller graph for this function:

◆ unregister_raycasters_for_picking()

void Slic3r::GUI::GLGizmoBase::unregister_raycasters_for_picking ( )
inlineinherited
virtual void on_unregister_raycasters_for_picking()
Definition GLGizmoBase.hpp:268
void unregister_grabbers_for_picking()
Definition GLGizmoBase.cpp:405

References on_unregister_raycasters_for_picking(), and unregister_grabbers_for_picking().

Referenced by Slic3r::GUI::GLGizmosManager::activate_gizmo(), and Slic3r::GUI::GLCanvas3D::reload_scene().

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

◆ unselect_point()

void Slic3r::GUI::GLGizmoBrimEars::unselect_point ( int i)
private
942{
943 m_editing_cache[i].selected = false;
944 m_selection_empty = true;
945 for (const CacheEntry &ce : m_editing_cache) {
946 if (ce.selected) {
947 m_selection_empty = false;
948 break;
949 }
950 }
951}

References m_editing_cache, and m_selection_empty.

Referenced by gizmo_event().

Here is the caller graph for this function:

◆ update_cache_radius()

void Slic3r::GUI::GLGizmoBrimEars::update_cache_radius ( )
private
629{
631 render_hover_point->brim_point.head_front_radius = m_new_point_head_radius;
632
633 for (auto &cache_entry : m_editing_cache)
634 if (cache_entry.selected) {
635 cache_entry.brim_point.head_front_radius = m_new_point_head_radius;
636 find_single();
638 }
639 m_parent.set_as_dirty();
640}

References find_single(), m_editing_cache, m_new_point_head_radius, Slic3r::GUI::GLGizmoBase::m_parent, render_hover_point, and update_model_object().

Referenced by apply_radius_change(), gizmo_event(), and on_render_input_window().

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

◆ update_items_state()

bool Slic3r::GUI::GLGizmoBase::update_items_state ( )
inherited
361{
362 bool res = m_dirty;
363 m_dirty = false;
364 return res;
365}

References m_dirty.

◆ update_model_object()

void Slic3r::GUI::GLGizmoBrimEars::update_model_object ( )
867{
868 ModelObject* mo = m_c->selection_info()->model_object();
869 if (mo) {
870 mo->brim_points.clear();
871 for (const CacheEntry& ce : m_editing_cache) mo->brim_points.emplace_back(ce.brim_point);
872 wxGetApp().plater()->set_plater_dirty(true);
873 }
874 m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
875}

References Slic3r::ModelObject::brim_points, Slic3r::GUI::GLGizmoBase::m_c, m_editing_cache, and Slic3r::GUI::GLGizmoBase::m_parent.

Referenced by add_point_to_cache(), delete_selected_points(), on_set_state(), and update_cache_radius().

Here is the caller graph for this function:

◆ update_raycasters()

void Slic3r::GUI::GLGizmoBrimEars::update_raycasters ( )
private
1114{
1115 // Remove extra raycasters
1116 if (m_editing_cache.size() < m_grabbers.size()) {
1117 for (auto it = m_grabbers.begin() + m_editing_cache.size(); it != m_grabbers.end(); ++it) {
1118 if (it->picking_id >= 0) {
1119 it->unregister_raycasters_for_picking();
1120 }
1121 }
1122 m_grabbers.erase(m_grabbers.begin() + m_editing_cache.size(), m_grabbers.end());
1123 } else if (m_editing_cache.size() > m_grabbers.size()) {
1124 auto remaining = m_editing_cache.size() - m_grabbers.size();
1125 while (remaining > 0) {
1126 const auto id = m_grabbers.size();
1127 auto& g = m_grabbers.emplace_back();
1128 g.register_raycasters_for_picking(id);
1129 g.raycasters[0] = m_parent.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, id,
1130 *m_cylinder.mesh_raycaster, Transform3d::Identity());
1131 remaining--;
1132 }
1133 }
1134}

References Slic3r::GUI::SceneRaycaster::Gizmo, m_cylinder, m_editing_cache, Slic3r::GUI::GLGizmoBase::m_grabbers, and Slic3r::GUI::GLGizmoBase::m_parent.

Referenced by find_single(), and on_register_raycasters_for_picking().

Here is the caller graph for this function:

◆ update_render_colors()

void Slic3r::GUI::GLGizmoBase::update_render_colors ( )
staticinherited

References AXES_COLOR, Slic3r::RenderColor::colors, FLATTEN_COLOR, FLATTEN_HOVER_COLOR, Slic3r::GUI::ImGuiWrapper::from_ImVec4(), RenderCol_Flatten_Plane, RenderCol_Flatten_Plane_Hover, RenderCol_Grabber_X, RenderCol_Grabber_Y, and RenderCol_Grabber_Z.

Referenced by Slic3r::GUI::GLCanvas3D::_render_style_editor().

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

◆ use_grabbers()

bool Slic3r::GUI::GLGizmoBase::use_grabbers ( const wxMouseEvent & mouse_event)
protectedinherited

function which Set up m_dragging and call functions on_start_dragging / on_dragging / on_stop_dragging

Parameters
mouse_eventKeep information about mouse click
Returns
same as on_mouse
444 {
445 bool is_dragging_finished = false;
446 if (mouse_event.Moving()) {
447 // it should not happen but for sure
448 assert(!m_dragging);
449 if (m_dragging) is_dragging_finished = true;
450 else return false;
451 }
452
453 if (mouse_event.LeftDown()) {
454 Selection &selection = m_parent.get_selection();
455 if (!selection.is_empty() && m_hover_id != -1 /* &&
456 (m_grabbers.empty() || m_hover_id < static_cast<int>(m_grabbers.size()))*/) {
457 selection.setup_cache();
458
459 m_dragging = true;
460 for (auto &grabber : m_grabbers) grabber.dragging = false;
461// if (!m_grabbers.empty() && m_hover_id < int(m_grabbers.size()))
462// m_grabbers[m_hover_id].dragging = true;
463
465
466 // Let the plater know that the dragging started
467 m_parent.post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_STARTED));
468 m_parent.set_as_dirty();
469 return true;
470 }
471 } else if (m_dragging) {
472 // when mouse cursor leave window than finish actual dragging operation
473 bool is_leaving = mouse_event.Leaving() && !m_parent.has_mouse_capture(); // ORCA keep tracking mouse position while drag active and cursor not in window bounds
474 if (mouse_event.Dragging()) {
475 Point mouse_coord(mouse_event.GetX(), mouse_event.GetY());
476 auto ray = m_parent.mouse_ray(mouse_coord);
477 UpdateData data(ray, mouse_coord);
478
479 on_dragging(data);
480
481 wxGetApp().obj_manipul()->set_dirty();
482 m_parent.set_as_dirty();
483 return true;
484 }
485 else if (mouse_event.LeftUp() || is_leaving || is_dragging_finished) {
486 do_stop_dragging(is_leaving);
487 return true;
488 }
489 }
490 return false;
491}
virtual void on_dragging(const UpdateData &data)
Definition GLGizmoBase.hpp:255
virtual void on_start_dragging()
Definition GLGizmoBase.hpp:253
void do_stop_dragging(bool perform_mouse_cleanup)
Definition GLGizmoBase.cpp:493
Definition GLGizmoBase.hpp:133

References do_stop_dragging(), Slic3r::GUI::Selection::is_empty(), m_dragging, m_grabbers, m_hover_id, m_parent, on_dragging(), on_start_dragging(), Slic3r::GUI::Selection::setup_cache(), and Slic3r::GUI::wxMouseEvent.

Referenced by Slic3r::GUI::GLGizmoBrimEars::on_mouse(), Slic3r::GUI::GLGizmoCut3D::on_mouse(), Slic3r::GUI::GLGizmoMove3D::on_mouse(), Slic3r::GUI::GLGizmoRotate3D::on_mouse(), Slic3r::GUI::GLGizmoRotate::on_mouse(), Slic3r::GUI::GLGizmoScale3D::on_mouse(), Slic3r::GUI::GLGizmoEmboss::on_mouse_for_rotation(), and Slic3r::GUI::GLGizmoSVG::on_mouse_for_rotation().

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

◆ wants_enter_leave_snapshots()

bool Slic3r::GUI::GLGizmoBrimEars::wants_enter_leave_snapshots ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::GUI::GLGizmoBase.

106{ return true; }

Member Data Documentation

◆ AXES_COLOR

◆ AXES_HOVER_COLOR

std::array< ColorRGBA, 3 > Slic3r::GUI::GLGizmoBase::AXES_HOVER_COLOR
staticinherited
Initial value:
= {{
{ColorRGBA::X().r() * 1.2f, ColorRGBA::X().g() * 1.4f, ColorRGBA::X().b() * 1.4f, 1.0f},
{ColorRGBA::Y().r() * 1.2f, ColorRGBA::Y().g() * 1.2f, ColorRGBA::Y().b() * 1.2f, 1.0f},
{ColorRGBA::Z().r() * 1.2f, ColorRGBA::Z().g() * 1.2f, ColorRGBA::Z().b() * 1.2f, 1.0f},
}}
float b() const
Definition Color.hpp:107
float r() const
Definition Color.hpp:105
float g() const
Definition Color.hpp:106

Referenced by Slic3r::GUI::GLGizmoMove3D::on_render(), Slic3r::GUI::GLGizmoRotate::on_render(), and Slic3r::GUI::GLGizmoScale3D::update_grabbers_data().

◆ BASE_ID

const unsigned int Slic3r::GUI::GLGizmoBase::BASE_ID = 255 * 255 * 254
staticinherited

◆ CONSTRAINED_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::CONSTRAINED_COLOR = {0.5f, 0.5f, 0.5f, 1.0f}
staticinherited

◆ count

◆ DEFAULT_BASE_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::DEFAULT_BASE_COLOR = { 0.625f, 0.625f, 0.625f, 1.0f }
staticinherited

◆ DEFAULT_DRAG_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::DEFAULT_DRAG_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }
staticinherited

◆ DEFAULT_HIGHLIGHT_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::DEFAULT_HIGHLIGHT_COLOR = {1.0f, 0.38f, 0.0f, 1.0f}
staticinherited

◆ FLATTEN_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::FLATTEN_COLOR = {0.96f, 0.93f, 0.93f, 0.5f}
staticinherited

◆ FLATTEN_HOVER_COLOR

ColorRGBA Slic3r::GUI::GLGizmoBase::FLATTEN_HOVER_COLOR = {1.0f, 1.0f, 1.0f, 0.75f}
staticinherited

◆ GRABBER_ELEMENTS_MAX_COUNT

const unsigned int Slic3r::GUI::GLGizmoBase::GRABBER_ELEMENTS_MAX_COUNT = 7
staticinherited

◆ GRABBER_HOVER_COL

ColorRGBA Slic3r::GUI::GLGizmoBase::GRABBER_HOVER_COL = {0.863f, 0.125f, 0.063f, 1.0f}
staticinherited

◆ GRABBER_NORMAL_COL

ColorRGBA Slic3r::GUI::GLGizmoBase::GRABBER_NORMAL_COL = {1.0f, 1.0f, 1.0f, 1.0f}
staticinherited

◆ GRABBER_UNIFORM_COL

ColorRGBA Slic3r::GUI::GLGizmoBase::GRABBER_UNIFORM_COL = {0, 1.0, 1.0, 1.0f}
staticinherited

◆ GRABBER_UNIFORM_HOVER_COL

ColorRGBA Slic3r::GUI::GLGizmoBase::GRABBER_UNIFORM_HOVER_COL = {0, 0.7, 0.7, 1.0f}
staticinherited

◆ INV_ZOOM

◆ last_input_window_width

float Slic3r::GUI::GLGizmoBase::last_input_window_width = 0
protectedinherited

◆ m_c

CommonGizmosDataPool* Slic3r::GUI::GLGizmoBase::m_c { nullptr }
protectedinherited
155{ nullptr };

Referenced by Slic3r::GUI::GLGizmoTextureDisplacement::apply_projection_frame(), Slic3r::GUI::GLGizmoTextureDisplacement::bake(), Slic3r::GUI::GLGizmoTextureDisplacement::capture_view_projection(), Slic3r::GUI::GLGizmoCut3D::check_and_update_connectors_state(), Slic3r::GUI::GLGizmoBrimEars::data_changed(), Slic3r::GUI::GLGizmoCut3D::data_changed(), Slic3r::GUI::GLGizmoMmuSegmentation::data_changed(), Slic3r::GUI::GLGizmoPainterBase::data_changed(), Slic3r::GUI::GLGizmoCut3D::dragging_connector(), Slic3r::GUI::GLGizmoMeshBoolean::generate_new_volume(), Slic3r::GUI::GLGizmoPainterBase::get_clipping_plane_data(), Slic3r::GUI::GLGizmoPainterBase::get_clipping_plane_in_volume_coordinates(), Slic3r::GUI::GLGizmoBrimEars::get_config_options(), Slic3r::GUI::GLGizmoPainterBase::get_projected_height_range(), Slic3r::GUI::GLGizmoPainterBase::get_projected_mouse_positions(), Slic3r::GUI::GLGizmoFdmSupports::get_selection_support_threshold_angle(), Slic3r::GUI::GLGizmoBrimEars::gizmo_event(), Slic3r::GUI::GLGizmoCut3D::gizmo_event(), Slic3r::GUI::GLGizmoMeshBoolean::gizmo_event(), Slic3r::GUI::GLGizmoPainterBase::gizmo_event(), Slic3r::GUI::GLGizmoCut3D::has_valid_contour(), Slic3r::GUI::GLGizmoSimplify::init_model(), Slic3r::GUI::GLGizmoMmuSegmentation::init_model_triangle_selectors(), Slic3r::GUI::GLGizmoFdmSupports::init_print_instance(), Slic3r::GUI::GLGizmoBrimEars::is_mesh_point_clipped(), Slic3r::GUI::GLGizmoPainterBase::is_mesh_point_clipped(), Slic3r::GUI::GLGizmoCut3D::is_outside_of_cut_contour(), Slic3r::GUI::GLGizmoFlatten::is_plane_update_necessary(), Slic3r::GUI::GLGizmoPainterBase::mesh_trafo_matrices(), Slic3r::GUI::GLGizmoFdmSupports::need_regenerate_support_volumes(), Slic3r::GUI::GLGizmoMeshBoolean::on_get_requirements(), Slic3r::GUI::GLGizmoMeshBoolean::on_load(), Slic3r::GUI::GLGizmoTextureDisplacement::on_mouse_adjust_texture(), Slic3r::GUI::GLGizmoCut3D::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoBrimEars::on_render(), Slic3r::GUI::GLGizmoMeshBoolean::on_render(), Slic3r::GUI::GLGizmoBrimEars::on_render_input_window(), Slic3r::GUI::GLGizmoCut3D::on_render_input_window(), Slic3r::GUI::GLGizmoFdmSupports::on_render_input_window(), Slic3r::GUI::GLGizmoFuzzySkin::on_render_input_window(), Slic3r::GUI::GLGizmoMmuSegmentation::on_render_input_window(), Slic3r::GUI::GLGizmoSeam::on_render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::on_render_input_window(), Slic3r::GUI::GLGizmoCut3D::on_set_state(), Slic3r::GUI::GLGizmoFdmSupports::on_set_state(), Slic3r::GUI::GLGizmoMmuSegmentation::on_set_state(), Slic3r::GUI::GLGizmoSeam::on_set_state(), Slic3r::GUI::GLGizmoTextureDisplacement::preview_part(), Slic3r::GUI::GLGizmoCut3D::process_contours(), Slic3r::GUI::GLGizmoCut3D::process_selection_rectangle(), Slic3r::GUI::GLGizmoCut3D::put_connectors_on_cut_plane(), Slic3r::GUI::GLGizmoTextureDisplacement::queue_prepare(), Slic3r::GUI::GLGizmoBrimEars::reload_cache(), Slic3r::GUI::GLGizmoMmuSegmentation::remap_filament_assignments(), Slic3r::GUI::GLGizmoTextureDisplacement::render_adjust_texture_gizmo(), Slic3r::GUI::GLGizmoCut3D::render_clipper_cut(), Slic3r::GUI::GLGizmoCut3D::render_connectors(), Slic3r::GUI::GLGizmoCut3D::render_debug_input_window(), Slic3r::GUI::GLGizmoPainterBase::render_follows_cursor(), Slic3r::GUI::GLGizmoTextureDisplacement::render_island_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_paint_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_painted_colors(), Slic3r::GUI::GLGizmoFdmSupports::render_painter_gizmo(), Slic3r::GUI::GLGizmoFuzzySkin::render_painter_gizmo(), Slic3r::GUI::GLGizmoMmuSegmentation::render_painter_gizmo(), Slic3r::GUI::GLGizmoSeam::render_painter_gizmo(), Slic3r::GUI::GLGizmoTextureDisplacement::render_painter_gizmo(), Slic3r::GUI::GLGizmoBrimEars::render_points(), Slic3r::GUI::GLGizmoTextureDisplacement::render_preview_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_seam_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_shaded_preview_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_subdivide_preview(), Slic3r::GUI::GLGizmoPainterBase::render_triangles(), Slic3r::GUI::GLGizmoTextureDisplacement::render_uvcheck_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_wireframe_overlay(), Slic3r::GUI::GLGizmoCut3D::reset_connectors(), Slic3r::GUI::GLGizmoFdmSupports::run_thread(), Slic3r::GUI::GLGizmoTextureDisplacement::seam_edge_at(), Slic3r::GUI::GLGizmoTextureDisplacement::seam_vertex_at(), Slic3r::GUI::GLGizmoFdmSupports::select_facets_by_angle(), Slic3r::GUI::GLGizmoTextureDisplacement::select_visible_faces(), Slic3r::GUI::GLGizmoTextureDisplacement::select_whole_model(), Slic3r::GUI::GLGizmoBrimEars::set_brim_data(), set_common_data_pool(), Slic3r::GUI::GLGizmoCut3D::set_connectors_editing(), Slic3r::GUI::GLGizmoTextureDisplacement::shaded_preview_ready(), Slic3r::GUI::GLGizmoTextureDisplacement::smooth_model(), Slic3r::GUI::GLGizmoTextureDisplacement::subdivide_model(), Slic3r::GUI::GLGizmoTextureDisplacement::swap_layer_slots(), Slic3r::GUI::GLGizmoCut3D::switch_to_mode(), Slic3r::GUI::GLGizmoTextureDisplacement::texture_parts(), Slic3r::GUI::GLGizmoTextureDisplacement::texture_volume(), Slic3r::GUI::GLGizmoTextureDisplacement::texture_volume_raycaster_index(), Slic3r::GUI::GLGizmoCut3D::unproject_on_cut_plane(), Slic3r::GUI::GLGizmoBrimEars::unproject_on_mesh(), Slic3r::GUI::GLGizmoBrimEars::unproject_on_mesh2(), Slic3r::GUI::GLGizmoCut3D::update_bb(), Slic3r::GUI::GLGizmoCut3D::update_clipper(), Slic3r::GUI::GLGizmoFdmSupports::update_from_model_object(), Slic3r::GUI::GLGizmoFuzzySkin::update_from_model_object(), Slic3r::GUI::GLGizmoSeam::update_from_model_object(), Slic3r::GUI::GLGizmoTextureDisplacement::update_from_model_object(), Slic3r::GUI::GLGizmoBrimEars::update_model_object(), Slic3r::GUI::GLGizmoFdmSupports::update_model_object(), Slic3r::GUI::GLGizmoFuzzySkin::update_model_object(), Slic3r::GUI::GLGizmoMmuSegmentation::update_model_object(), Slic3r::GUI::GLGizmoSeam::update_model_object(), Slic3r::GUI::GLGizmoTextureDisplacement::update_model_object(), Slic3r::GUI::GLGizmoFlatten::update_planes(), Slic3r::GUI::GLGizmoPainterBase::update_raycast_cache(), and Slic3r::GUI::GLGizmoCut3D::update_raycasters_for_picking_transform().

◆ m_cylinder

PickingModel Slic3r::GUI::GLGizmoBrimEars::m_cylinder
private

◆ m_desc

std::map<std::string, wxString> Slic3r::GUI::GLGizmoBrimEars::m_desc
private

Referenced by on_init(), and on_render_input_window().

◆ m_detection_radius

float Slic3r::GUI::GLGizmoBrimEars::m_detection_radius = 1.f
private

◆ m_detection_radius_max

double Slic3r::GUI::GLGizmoBrimEars::m_detection_radius_max = .0f
private

◆ m_dirty

bool Slic3r::GUI::GLGizmoBase::m_dirty { false }
privateinherited
293{ false };

Referenced by set_dirty(), and update_items_state().

◆ m_dragging

◆ m_editing_cache

◆ m_first_input_window_render

bool Slic3r::GUI::GLGizmoBase::m_first_input_window_render { true }
protectedinherited
154{ true };

Referenced by render_input_window().

◆ m_first_layer

ExPolygons Slic3r::GUI::GLGizmoBrimEars::m_first_layer
private

◆ m_grabbers

◆ m_group_id

int Slic3r::GUI::GLGizmoBase::m_group_id
protectedinherited

◆ m_hover_id

int Slic3r::GUI::GLGizmoBase::m_hover_id { -1 }
protectedinherited
150{ -1 };

Referenced by Slic3r::GUI::GLGizmoScale3D::calc_ratio(), Slic3r::GUI::GLGizmoScale3D::do_scale_along_axis(), Slic3r::GUI::GLGizmoScale3D::do_scale_uniform(), Slic3r::GUI::GLGizmoCut3D::dragging_connector(), Slic3r::GUI::GLGizmoCut3D::dragging_grabber_move(), Slic3r::GUI::GLGizmoCut3D::dragging_grabber_rotation(), get_hover_id(), Slic3r::GUI::GLGizmoCut3D::get_tooltip(), Slic3r::GUI::GLGizmoMove3D::get_tooltip(), Slic3r::GUI::GLGizmoRotate::get_tooltip(), Slic3r::GUI::GLGizmoScale3D::get_tooltip(), Slic3r::GUI::GLGizmoBrimEars::gizmo_event(), Slic3r::GUI::GLGizmoCut3D::gizmo_event(), Slic3r::GUI::GLGizmoCut3D::is_selection_changed(), Slic3r::GUI::GLGizmoBrimEars::on_dragging(), Slic3r::GUI::GLGizmoCut3D::on_dragging(), Slic3r::GUI::GLGizmoMove3D::on_dragging(), Slic3r::GUI::GLGizmoRotate3D::on_dragging(), Slic3r::GUI::GLGizmoScale3D::on_dragging(), Slic3r::GUI::GLGizmoCut3D::on_mouse(), Slic3r::GUI::GLGizmoFlatten::on_mouse(), Slic3r::GUI::GLGizmoMeasure::on_mouse(), Slic3r::GUI::GLGizmoFlatten::on_render(), Slic3r::GUI::GLGizmoMeasure::on_render(), Slic3r::GUI::GLGizmoMove3D::on_render(), Slic3r::GUI::GLGizmoRotate3D::on_render(), Slic3r::GUI::GLGizmoRotate::on_render(), Slic3r::GUI::GLGizmoScale3D::on_render(), Slic3r::GUI::GLGizmoBrimEars::on_set_hover_id(), Slic3r::GUI::GLGizmoEmboss::on_set_hover_id(), Slic3r::GUI::GLGizmoRotate3D::on_set_hover_id(), Slic3r::GUI::GLGizmoSVG::on_set_hover_id(), Slic3r::GUI::GLGizmoMeasure::on_set_state(), Slic3r::GUI::GLGizmoBrimEars::on_start_dragging(), Slic3r::GUI::GLGizmoCut3D::on_start_dragging(), Slic3r::GUI::GLGizmoMove3D::on_start_dragging(), Slic3r::GUI::GLGizmoRotate3D::on_start_dragging(), Slic3r::GUI::GLGizmoScale3D::on_start_dragging(), Slic3r::GUI::GLGizmoBrimEars::on_stop_dragging(), Slic3r::GUI::GLGizmoCut3D::on_stop_dragging(), Slic3r::GUI::GLGizmoRotate3D::on_stop_dragging(), Slic3r::GUI::GLGizmoCut3D::render_connectors(), Slic3r::GUI::GLGizmoCut3D::render_cut_plane_grabbers(), Slic3r::GUI::GLGizmoCut3D::render_flip_plane_button(), render_grabbers(), Slic3r::GUI::GLGizmoBrimEars::render_points(), set_hover_id(), Slic3r::GUI::GLGizmoMeasure::show_selection_ui(), Slic3r::GUI::GLGizmoScale3D::update_grabbers_data(), and use_grabbers().

◆ m_icon_filename

std::string Slic3r::GUI::GLGizmoBase::m_icon_filename
protectedinherited

◆ m_imgui

ImGuiWrapper* Slic3r::GUI::GLGizmoBase::m_imgui
protectedinherited

Referenced by GLGizmoBase(), Slic3r::GUI::GLGizmoEmboss::GLGizmoEmboss(), Slic3r::GUI::GLGizmoCut3D::add_horizontal_scaled_interval(), Slic3r::GUI::GLGizmoCut3D::add_vertical_scaled_interval(), Slic3r::GUI::GLGizmoSimplify::create_gui_cfg(), Slic3r::GUI::GLGizmoEmboss::draw_advanced(), Slic3r::GUI::GLGizmoEmboss::draw_bold_button(), Slic3r::GUI::GLGizmoEmboss::draw_delete_style_button(), Slic3r::GUI::GLGizmoSVG::draw_depth(), Slic3r::GUI::GLGizmoSVG::draw_distance(), Slic3r::GUI::GLGizmoSVG::draw_filename(), Slic3r::GUI::GLGizmoEmboss::draw_font_list(), Slic3r::GUI::GLGizmoEmboss::draw_font_list_line(), Slic3r::GUI::GLGizmoEmboss::draw_italic_button(), Slic3r::GUI::GLGizmoSVG::draw_mirroring(), Slic3r::GUI::GLGizmoEmboss::draw_model_type(), Slic3r::GUI::GLGizmoSVG::draw_model_type(), Slic3r::GUI::GLGizmoSVG::draw_rotation(), Slic3r::GUI::GLGizmoSVG::draw_size(), Slic3r::GUI::GLGizmoEmboss::draw_style_add_button(), Slic3r::GUI::GLGizmoEmboss::draw_style_list(), Slic3r::GUI::GLGizmoEmboss::draw_style_rename_button(), Slic3r::GUI::GLGizmoEmboss::draw_style_rename_popup(), Slic3r::GUI::GLGizmoEmboss::draw_style_save_as_popup(), Slic3r::GUI::GLGizmoEmboss::draw_style_save_button(), Slic3r::GUI::GLGizmoEmboss::draw_text_input(), Slic3r::GUI::GLGizmoSVG::draw_use_surface(), Slic3r::GUI::GLGizmoEmboss::draw_window(), GizmoImguiBegin(), GizmoImguiEnd(), GizmoImguiSetNextWIndowPos(), Slic3r::GUI::GLGizmoCut3D::init_input_window_data(), Slic3r::GUI::GLGizmoMeasure::on_mouse(), Slic3r::GUI::GLGizmoAssembly::on_render_input_window(), Slic3r::GUI::GLGizmoBrimEars::on_render_input_window(), Slic3r::GUI::GLGizmoEmboss::on_render_input_window(), Slic3r::GUI::GLGizmoFdmSupports::on_render_input_window(), Slic3r::GUI::GLGizmoFuzzySkin::on_render_input_window(), Slic3r::GUI::GLGizmoMeasure::on_render_input_window(), Slic3r::GUI::GLGizmoMeshBoolean::on_render_input_window(), Slic3r::GUI::GLGizmoMmuSegmentation::on_render_input_window(), Slic3r::GUI::GLGizmoMove3D::on_render_input_window(), Slic3r::GUI::GLGizmoRotate3D::on_render_input_window(), Slic3r::GUI::GLGizmoScale3D::on_render_input_window(), Slic3r::GUI::GLGizmoSeam::on_render_input_window(), Slic3r::GUI::GLGizmoSimplify::on_render_input_window(), Slic3r::GUI::GLGizmoSVG::on_render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::on_render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::panel_tooltip(), Slic3r::GUI::GLGizmoCut3D::render_angle_input(), Slic3r::GUI::GLGizmoCut3D::render_build_size(), Slic3r::GUI::GLGizmoCut3D::render_color_marker(), render_combo(), Slic3r::GUI::GLGizmoCut3D::render_connectors_input_window(), Slic3r::GUI::GLGizmoCut3D::render_cut_mode_combo(), Slic3r::GUI::GLGizmoCut3D::render_cut_plane_input_window(), Slic3r::GUI::GLGizmoCut3D::render_debug_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::render_debug_stage_panel(), Slic3r::GUI::GLGizmoMeasure::render_dimensioning(), Slic3r::GUI::GLGizmoCut3D::render_double_input(), Slic3r::GUI::GLGizmoMmuSegmentation::render_filament_remap_ui(), Slic3r::GUI::GLGizmoCut3D::render_flip_plane_button(), Slic3r::GUI::GLGizmoCut3D::render_groove_float_input(), Slic3r::GUI::GLGizmoCut3D::render_groove_int_input(), Slic3r::GUI::GLGizmoCut3D::render_groove_two_float_input(), Slic3r::GUI::GLGizmoTextureDisplacement::render_image_adjust_window(), Slic3r::GUI::GLGizmoAssembly::render_input_window_warning(), Slic3r::GUI::GLGizmoCut3D::render_input_window_warning(), Slic3r::GUI::GLGizmoCut3D::render_move_center_input(), Slic3r::GUI::GLGizmoCut3D::render_reset_button(), Slic3r::GUI::GLGizmoCut3D::render_slider_input(), Slic3r::GUI::GLGizmoCut3D::render_slider_two_input(), Slic3r::GUI::GLGizmoCut3D::render_snap_specific_input(), Slic3r::GUI::GLGizmoTextureDisplacement::render_texture_library_popup(), Slic3r::GUI::GLGizmoTextureDisplacement::render_tip_media(), Slic3r::GUI::GLGizmoCut3D::render_tooltip_button(), Slic3r::GUI::GLGizmoFdmSupports::render_tooltip_button(), Slic3r::GUI::GLGizmoFuzzySkin::render_tooltip_button(), Slic3r::GUI::GLGizmoMmuSegmentation::render_tooltip_button(), Slic3r::GUI::GLGizmoPainterBase::render_triangles(), Slic3r::GUI::GLGizmoEmboss::rev_checkbox(), Slic3r::GUI::GLGizmoEmboss::rev_input(), Slic3r::GUI::GLGizmoEmboss::rev_slider(), Slic3r::GUI::GLGizmoEmboss::rev_slider(), Slic3r::GUI::GLGizmoEmboss::rev_slider(), Slic3r::GUI::GLGizmoEmboss::revertible(), Slic3r::GUI::GLGizmoMeasure::show_distance_xyz_ui(), Slic3r::GUI::GLGizmoMeasure::show_face_face_assembly_common(), Slic3r::GUI::GLGizmoMeasure::show_face_face_assembly_senior(), and Slic3r::GUI::GLGizmoMeasure::show_selection_ui().

◆ m_is_dark_mode

◆ m_last_hit_volume

GLVolume* Slic3r::GUI::GLGizmoBrimEars::m_last_hit_volume
private

Referenced by unproject_on_mesh2().

◆ m_link_text_hover

bool Slic3r::GUI::GLGizmoBrimEars::m_link_text_hover = false
private

Referenced by on_render_input_window().

◆ m_max_angle

float Slic3r::GUI::GLGizmoBrimEars::m_max_angle = 125.f
private

◆ m_mesh_raycaster_map

std::map<GLVolume*, std::shared_ptr<PickRaycaster> > Slic3r::GUI::GLGizmoBrimEars::m_mesh_raycaster_map
private

◆ m_new_point_head_radius

float Slic3r::GUI::GLGizmoBrimEars::m_new_point_head_radius
private

◆ m_old_mo_id

ObjectID Slic3r::GUI::GLGizmoBrimEars::m_old_mo_id
private

Referenced by set_brim_data().

◆ m_old_point_head_radius

float Slic3r::GUI::GLGizmoBrimEars::m_old_point_head_radius = 0.
private

◆ m_old_state

EState Slic3r::GUI::GLGizmoBrimEars::m_old_state = Off
private

Referenced by on_set_state().

◆ m_parent

GLCanvas3D& Slic3r::GUI::GLGizmoBase::m_parent
protectedinherited

Referenced by GLGizmoBase(), Slic3r::GUI::GLGizmoCut3D::add_connector(), Slic3r::GUI::GLGizmoTextureDisplacement::add_texture_layer(), Slic3r::GUI::GLGizmoCut3D::apply_color_clip_plane_colors(), Slic3r::GUI::GLGizmoTextureDisplacement::apply_projection_frame(), Slic3r::GUI::GLGizmoSimplify::apply_simplify(), Slic3r::GUI::GLGizmoTextureDisplacement::apply_view_mode(), Slic3r::GUI::GLGizmoBrimEars::auto_generate(), Slic3r::GUI::GLGizmoTextureDisplacement::bake(), Slic3r::GUI::GLGizmoCut3D::bounding_box(), Slic3r::GUI::GLGizmoPainterBase::bounding_box(), Slic3r::GUI::GLGizmoEmboss::calculate_scale(), Slic3r::GUI::GLGizmoSVG::calculate_scale(), Slic3r::GUI::GLGizmoTextureDisplacement::capture_view_projection(), Slic3r::GUI::GLGizmoMove3D::change_cs_by_selection(), Slic3r::GUI::GLGizmoScale3D::change_cs_by_selection(), Slic3r::GUI::GLGizmoEmboss::close(), Slic3r::GUI::GLGizmoSimplify::close(), Slic3r::GUI::GLGizmoSVG::close(), Slic3r::GUI::GLGizmoTextureDisplacement::close_image_adjust(), Slic3r::GUI::GLGizmoEmboss::create_volume(), Slic3r::GUI::GLGizmoEmboss::create_volume(), Slic3r::GUI::GLGizmoSVG::create_volume(), Slic3r::GUI::GLGizmoSVG::create_volume(), Slic3r::GUI::GLGizmoSVG::create_volume(), Slic3r::GUI::GLGizmoSVG::create_volume(), Slic3r::GUI::GLGizmoFlatten::data_changed(), Slic3r::GUI::GLGizmoMeasure::data_changed(), Slic3r::GUI::GLGizmoMove3D::data_changed(), Slic3r::GUI::GLGizmoPainterBase::data_changed(), Slic3r::GUI::GLGizmoRotate3D::data_changed(), Slic3r::GUI::GLGizmoScale3D::data_changed(), Slic3r::GUI::GLGizmoCut3D::delete_selected_connectors(), Slic3r::GUI::GLGizmoEmboss::do_mirror(), do_stop_dragging(), Slic3r::GUI::GLGizmoEmboss::draw_advanced(), Slic3r::GUI::GLGizmoSVG::draw_distance(), Slic3r::GUI::GLGizmoSVG::draw_face_the_camera(), Slic3r::GUI::GLGizmoSVG::draw_filename(), Slic3r::GUI::GLGizmoSVG::draw_mirroring(), Slic3r::GUI::GLGizmoEmboss::draw_model_type(), Slic3r::GUI::GLGizmoSVG::draw_model_type(), Slic3r::GUI::GLGizmoSVG::draw_rotation(), Slic3r::GUI::GLGizmoSVG::draw_size(), Slic3r::GUI::GLGizmoEmboss::draw_style_list(), Slic3r::GUI::GLGizmoEmboss::draw_window(), Slic3r::GUI::GLGizmoTextureDisplacement::ease_wheel_scroll(), Slic3r::GUI::GLGizmoBrimEars::find_single(), Slic3r::GUI::GLGizmoBrimEars::first_layer_slicer(), Slic3r::GUI::GLGizmoMeshBoolean::generate_new_volume(), Slic3r::GUI::GLGizmoPainterBase::get_projected_height_range(), Slic3r::GUI::GLGizmoMove3D::get_tooltip(), Slic3r::GUI::GLGizmoScale3D::get_tooltip(), Slic3r::GUI::GLGizmoBrimEars::gizmo_event(), Slic3r::GUI::GLGizmoMeasure::gizmo_event(), Slic3r::GUI::GLGizmoMeshBoolean::gizmo_event(), Slic3r::GUI::GLGizmoPainterBase::gizmo_event(), GizmoImguiSetNextWIndowPos(), Slic3r::GUI::GLGizmoCut3D::has_valid_groove(), Slic3r::GUI::GLGizmoSimplify::init_model(), Slic3r::GUI::GLGizmoMeasure::init_plane_glmodel(), Slic3r::GUI::GLGizmoFdmSupports::init_print_instance(), Slic3r::GUI::GLGizmoPainterBase::mesh_trafo_matrices(), Slic3r::GUI::GLGizmoTextureDisplacement::move_texture_layer(), Slic3r::GUI::GLGizmoMove3D::on_dragging(), Slic3r::GUI::GLGizmoAssembly::on_is_activable(), Slic3r::GUI::GLGizmoBrimEars::on_is_activable(), Slic3r::GUI::GLGizmoCut3D::on_is_activable(), Slic3r::GUI::GLGizmoFlatten::on_is_activable(), Slic3r::GUI::GLGizmoMeasure::on_is_activable(), Slic3r::GUI::GLGizmoMeshBoolean::on_is_activable(), Slic3r::GUI::GLGizmoMmuSegmentation::on_is_activable(), Slic3r::GUI::GLGizmoMove3D::on_is_activable(), Slic3r::GUI::GLGizmoPainterBase::on_is_activable(), Slic3r::GUI::GLGizmoRotate3D::on_is_activable(), Slic3r::GUI::GLGizmoScale3D::on_is_activable(), Slic3r::GUI::GLGizmoSimplify::on_is_activable(), Slic3r::GUI::GLGizmoTextureDisplacement::on_is_activable(), Slic3r::GUI::GLGizmoTextureDisplacement::on_island_edited(), Slic3r::GUI::GLGizmoCut3D::on_load(), Slic3r::GUI::GLGizmoBrimEars::on_mouse(), Slic3r::GUI::GLGizmoCut3D::on_mouse(), Slic3r::GUI::GLGizmoEmboss::on_mouse(), Slic3r::GUI::GLGizmoFlatten::on_mouse(), Slic3r::GUI::GLGizmoMeasure::on_mouse(), Slic3r::GUI::GLGizmoPainterBase::on_mouse(), Slic3r::GUI::GLGizmoRotate3D::on_mouse(), Slic3r::GUI::GLGizmoScale3D::on_mouse(), Slic3r::GUI::GLGizmoSVG::on_mouse(), Slic3r::GUI::GLGizmoTextureDisplacement::on_mouse_adjust_texture(), Slic3r::GUI::GLGizmoEmboss::on_mouse_change_selection(), Slic3r::GUI::GLGizmoEmboss::on_mouse_for_rotation(), Slic3r::GUI::GLGizmoSVG::on_mouse_for_rotation(), Slic3r::GUI::GLGizmoEmboss::on_mouse_for_translate(), Slic3r::GUI::GLGizmoSVG::on_mouse_for_translate(), Slic3r::GUI::GLGizmoTextureDisplacement::on_mouse_seam(), Slic3r::GUI::GLGizmoFdmSupports::on_opening(), Slic3r::GUI::GLGizmoCut3D::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoFlatten::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoMove3D::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoRotate3D::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoScale3D::on_register_raycasters_for_picking(), Slic3r::GUI::GLGizmoBrimEars::on_render(), Slic3r::GUI::GLGizmoCut3D::on_render(), Slic3r::GUI::GLGizmoEmboss::on_render(), Slic3r::GUI::GLGizmoFlatten::on_render(), Slic3r::GUI::GLGizmoMeasure::on_render(), Slic3r::GUI::GLGizmoMeshBoolean::on_render(), Slic3r::GUI::GLGizmoMove3D::on_render(), Slic3r::GUI::GLGizmoRotate::on_render(), Slic3r::GUI::GLGizmoSimplify::on_render(), Slic3r::GUI::GLGizmoSVG::on_render(), Slic3r::GUI::GLGizmoAssembly::on_render_input_window(), Slic3r::GUI::GLGizmoBrimEars::on_render_input_window(), Slic3r::GUI::GLGizmoCut3D::on_render_input_window(), Slic3r::GUI::GLGizmoEmboss::on_render_input_window(), Slic3r::GUI::GLGizmoFdmSupports::on_render_input_window(), Slic3r::GUI::GLGizmoFuzzySkin::on_render_input_window(), Slic3r::GUI::GLGizmoMeasure::on_render_input_window(), Slic3r::GUI::GLGizmoMeshBoolean::on_render_input_window(), Slic3r::GUI::GLGizmoMmuSegmentation::on_render_input_window(), Slic3r::GUI::GLGizmoSeam::on_render_input_window(), Slic3r::GUI::GLGizmoSimplify::on_render_input_window(), Slic3r::GUI::GLGizmoSVG::on_render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::on_render_input_window(), Slic3r::GUI::GLGizmoCut3D::on_set_state(), Slic3r::GUI::GLGizmoEmboss::on_set_state(), Slic3r::GUI::GLGizmoMeasure::on_set_state(), Slic3r::GUI::GLGizmoMmuSegmentation::on_set_state(), Slic3r::GUI::GLGizmoPainterBase::on_set_state(), Slic3r::GUI::GLGizmoSimplify::on_set_state(), Slic3r::GUI::GLGizmoSVG::on_set_state(), Slic3r::GUI::GLGizmoEmboss::on_shortcut_key(), Slic3r::GUI::GLGizmoFdmSupports::on_shutdown(), Slic3r::GUI::GLGizmoFuzzySkin::on_shutdown(), Slic3r::GUI::GLGizmoMmuSegmentation::on_shutdown(), Slic3r::GUI::GLGizmoSeam::on_shutdown(), Slic3r::GUI::GLGizmoTextureDisplacement::on_shutdown(), Slic3r::GUI::GLGizmoMove3D::on_start_dragging(), Slic3r::GUI::GLGizmoRotate::on_start_dragging(), Slic3r::GUI::GLGizmoEmboss::on_stop_dragging(), Slic3r::GUI::GLGizmoMove3D::on_stop_dragging(), Slic3r::GUI::GLGizmoRotate3D::on_stop_dragging(), Slic3r::GUI::GLGizmoScale3D::on_stop_dragging(), Slic3r::GUI::GLGizmoSVG::on_stop_dragging(), Slic3r::GUI::GLGizmoBrimEars::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoCut3D::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoFlatten::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoMove3D::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoRotate3D::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoScale3D::on_unregister_raycasters_for_picking(), Slic3r::GUI::GLGizmoTextureDisplacement::on_uv_command(), Slic3r::GUI::GLGizmoTextureDisplacement::panel_tooltip(), Slic3r::GUI::GLGizmoCut3D::perform_cut(), Slic3r::GUI::GLGizmoEmboss::process(), Slic3r::GUI::GLGizmoSVG::process(), Slic3r::GUI::GLGizmoCut3D::process_contours(), Slic3r::GUI::GLGizmoCut3D::process_cut_line(), Slic3r::GUI::GLGizmoTextureDisplacement::queue_prepare(), Slic3r::GUI::GLGizmoTextureDisplacement::queue_preview_job(), Slic3r::GUI::GLGizmoBrimEars::register_single_mesh_pick(), Slic3r::GUI::GLGizmoMeasure::register_single_mesh_pick(), Slic3r::GUI::GLGizmoEmboss::reinit_text_lines(), Slic3r::GUI::GLGizmoMmuSegmentation::remap_filament_assignments(), Slic3r::GUI::GLGizmoTextureDisplacement::remove_texture_layer(), Slic3r::GUI::GLGizmoTextureDisplacement::render_adjust_texture_gizmo(), Slic3r::GUI::GLGizmoMove3D::render_align_preview(), Slic3r::GUI::GLGizmoAssembly::render_assembly_mode_combo(), render_combo(), Slic3r::GUI::GLGizmoCut3D::render_connectors_input_window(), Slic3r::GUI::GLGizmoPainterBase::render_cursor(), Slic3r::GUI::GLGizmoPainterBase::render_cursor_circle(), Slic3r::GUI::GLGizmoPainterBase::render_cursor_height_range(), Slic3r::GUI::GLGizmoCut3D::render_cut_mode_combo(), Slic3r::GUI::GLGizmoCut3D::render_cut_plane_input_window(), Slic3r::GUI::GLGizmoMeasure::render_dimensioning(), Slic3r::GUI::GLGizmoMeasure::render_follows_cursor(), Slic3r::GUI::GLGizmoPainterBase::render_follows_cursor(), Slic3r::GUI::GLGizmoTextureDisplacement::render_image_adjust_window(), render_input_window(), Slic3r::GUI::GLGizmoTextureDisplacement::render_island_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_paint_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_painted_colors(), Slic3r::GUI::GLGizmoFdmSupports::render_painter_gizmo(), Slic3r::GUI::GLGizmoFuzzySkin::render_painter_gizmo(), Slic3r::GUI::GLGizmoMmuSegmentation::render_painter_gizmo(), Slic3r::GUI::GLGizmoSeam::render_painter_gizmo(), Slic3r::GUI::GLGizmoTextureDisplacement::render_painter_gizmo(), Slic3r::GUI::GLGizmoTextureDisplacement::render_preview_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_seam_overlay(), Slic3r::GUI::GLGizmoTextureDisplacement::render_shaded_preview_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_subdivide_preview(), Slic3r::GUI::GLGizmoTextureDisplacement::render_texture_library_popup(), Slic3r::GUI::GLGizmoTextureDisplacement::render_tip_media(), Slic3r::GUI::GLGizmoCut3D::render_tooltip_button(), Slic3r::GUI::GLGizmoFdmSupports::render_tooltip_button(), Slic3r::GUI::GLGizmoFuzzySkin::render_tooltip_button(), Slic3r::GUI::GLGizmoMmuSegmentation::render_tooltip_button(), Slic3r::GUI::GLGizmoPainterBase::render_triangles(), Slic3r::GUI::GLGizmoTextureDisplacement::render_uvcheck_mesh(), Slic3r::GUI::GLGizmoTextureDisplacement::render_wireframe_overlay(), Slic3r::GUI::GLGizmoSimplify::request_rerender(), Slic3r::GUI::GLGizmoCut3D::reset_cut_plane(), Slic3r::GUI::GLGizmoEmboss::reset_to_default_style(), Slic3r::GUI::GLGizmoTextureDisplacement::run_stage_debug(), Slic3r::GUI::GLGizmoFdmSupports::run_thread(), Slic3r::GUI::GLGizmoTextureDisplacement::run_uv_command(), Slic3r::GUI::GLGizmoTextureDisplacement::seam_edge_at(), Slic3r::GUI::GLGizmoTextureDisplacement::seam_vertex_at(), Slic3r::GUI::GLGizmoFdmSupports::select_facets_by_angle(), Slic3r::GUI::GLGizmoTextureDisplacement::select_visible_faces(), Slic3r::GUI::GLGizmoTextureDisplacement::select_whole_model(), Slic3r::GUI::GLGizmoCut3D::set_connectors_editing(), Slic3r::GUI::GLGizmoMeasure::set_distance(), Slic3r::GUI::GLGizmoTextureDisplacement::set_layer_texture(), Slic3r::GUI::GLGizmoMeasure::set_parallel_distance(), Slic3r::GUI::GLGizmoMeasure::set_to_around_center_of_faces(), Slic3r::GUI::GLGizmoMeasure::set_to_parallel(), Slic3r::GUI::GLGizmoMeasure::set_to_reverse_rotation(), Slic3r::GUI::GLGizmoEmboss::set_volume_by_selection(), Slic3r::GUI::GLGizmoSVG::set_volume_by_selection(), Slic3r::GUI::GLGizmoCut3D::set_volumes_picking_state(), Slic3r::GUI::GLGizmoTextureDisplacement::show_debug_stage(), Slic3r::GUI::GLGizmoTextureDisplacement::show_projector(), Slic3r::GUI::GLGizmoTextureDisplacement::smooth_model(), Slic3r::GUI::GLGizmoTextureDisplacement::subdivide_model(), Slic3r::GUI::GLGizmoCut3D::toggle_model_objects_visibility(), Slic3r::GUI::GLGizmoCut3D::transformed_bounding_box(), Slic3r::GUI::GLGizmoBrimEars::unproject_on_mesh(), Slic3r::GUI::GLGizmoCut3D::update_bb(), Slic3r::GUI::GLGizmoBrimEars::update_cache_radius(), Slic3r::GUI::GLGizmoCut3D::update_clipper(), Slic3r::GUI::GLGizmoPainterBase::update_contours(), Slic3r::GUI::GLGizmoScale3D::update_grabbers_data(), Slic3r::GUI::GLGizmoTextureDisplacement::update_image_adjust_preview(), Slic3r::GUI::GLGizmoBrimEars::update_model_object(), Slic3r::GUI::GLGizmoFdmSupports::update_model_object(), Slic3r::GUI::GLGizmoFuzzySkin::update_model_object(), Slic3r::GUI::GLGizmoMmuSegmentation::update_model_object(), Slic3r::GUI::GLGizmoSeam::update_model_object(), Slic3r::GUI::GLGizmoTextureDisplacement::update_model_object(), Slic3r::GUI::GLGizmoPainterBase::update_raycast_cache(), Slic3r::GUI::GLGizmoBrimEars::update_raycasters(), use_grabbers(), Slic3r::GUI::GLGizmoEmboss::volume_transformation_changed(), Slic3r::GUI::GLGizmoSVG::volume_transformation_changed(), and Slic3r::GUI::GLGizmoEmboss::volume_transformation_changing().

◆ m_point_before_drag

CacheEntry Slic3r::GUI::GLGizmoBrimEars::m_point_before_drag
private

◆ m_selection_empty

bool Slic3r::GUI::GLGizmoBrimEars::m_selection_empty = true
private

◆ m_selection_rectangle

GLSelectionRectangle Slic3r::GUI::GLGizmoBrimEars::m_selection_rectangle
private

◆ m_shortcut

◆ m_shortcuts

std::vector<std::pair<wxString, wxString> > Slic3r::GUI::GLGizmoBrimEars::m_shortcuts
private

Referenced by on_init(), and on_render_input_window().

◆ m_single_brim

std::map<int, CacheEntry> Slic3r::GUI::GLGizmoBrimEars::m_single_brim
private

◆ m_sprite_id

unsigned int Slic3r::GUI::GLGizmoBase::m_sprite_id
protectedinherited

Referenced by GLGizmoBase(), and get_sprite_id().

◆ m_state

◆ m_wait_for_up_event

bool Slic3r::GUI::GLGizmoBrimEars::m_wait_for_up_event = false
private

Referenced by gizmo_event().

◆ m_world_normal

const Vec3d Slic3r::GUI::GLGizmoBrimEars::m_world_normal = {0, 0, 1}
private
126{0, 0, 1};

Referenced by auto_generate(), and gizmo_event().

◆ render_hover_point

std::optional<CacheEntry> Slic3r::GUI::GLGizmoBrimEars::render_hover_point
private

◆ RenderPointScale

const float Slic3r::GUI::GLGizmoBrimEars::RenderPointScale = 1.f
private

Referenced by render_points().


The documentation for this class was generated from the following files: