mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Merge branch 'master' of https://github.com/Prusa3d/Slic3r
This commit is contained in:
		
						commit
						c81ef2f567
					
				
					 5 changed files with 99 additions and 37 deletions
				
			
		|  | @ -10,41 +10,41 @@ | |||
| // Log debug messages to console when changing selection
 | ||||
| #define ENABLE_SELECTION_DEBUG_OUTPUT 0 | ||||
| 
 | ||||
| //=============
 | ||||
| // 1.42.0 techs
 | ||||
| //=============
 | ||||
| #define ENABLE_1_42_0 1 | ||||
| 
 | ||||
| // Uses a unique opengl context
 | ||||
| #define ENABLE_USE_UNIQUE_GLCONTEXT (1 && ENABLE_1_42_0) | ||||
| // Disable synchronization of unselected instances
 | ||||
| #define DISABLE_INSTANCES_SYNCH (0 && ENABLE_1_42_0) | ||||
| // Keeps objects on bed while scaling them using the scale gizmo
 | ||||
| #define ENABLE_ENSURE_ON_BED_WHILE_SCALING (1 && ENABLE_1_42_0) | ||||
| // All rotations made using the rotate gizmo are done with respect to the world reference system
 | ||||
| #define ENABLE_WORLD_ROTATIONS (1 && ENABLE_1_42_0) | ||||
| // Scene's GUI made using imgui library
 | ||||
| #define ENABLE_IMGUI (1 && ENABLE_1_42_0) | ||||
| #define DISABLE_MOVE_ROTATE_SCALE_GIZMOS_IMGUI (1 && ENABLE_IMGUI) | ||||
| // Modified Sla support gizmo
 | ||||
| #define ENABLE_SLA_SUPPORT_GIZMO_MOD (1 && ENABLE_1_42_0) | ||||
| // Removes the wxNotebook from plater
 | ||||
| #define ENABLE_REMOVE_TABS_FROM_PLATER (1 && ENABLE_1_42_0) | ||||
| // Use wxDataViewRender instead of wxDataViewCustomRenderer
 | ||||
| #define ENABLE_NONCUSTOM_DATA_VIEW_RENDERING (0 && ENABLE_1_42_0) | ||||
| // Renders a small sphere in the center of the bounding box of the current selection when no gizmo is active
 | ||||
| #define ENABLE_RENDER_SELECTION_CENTER (0 && ENABLE_1_42_0) | ||||
| // Show visual hints in the 3D scene when sidebar matrix fields have focus
 | ||||
| #define ENABLE_SIDEBAR_VISUAL_HINTS (1 && ENABLE_1_42_0) | ||||
| // Separate rendering for opaque and transparent volumes
 | ||||
| #define ENABLE_IMPROVED_TRANSPARENT_VOLUMES_RENDERING (1 && ENABLE_1_42_0) | ||||
| 
 | ||||
| //====================
 | ||||
| // 1.42.0.alpha1 techs
 | ||||
| //====================
 | ||||
| #define ENABLE_1_42_0_ALPHA1 1 | ||||
| 
 | ||||
| #define ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Uses a unique opengl context
 | ||||
| #define ENABLE_USE_UNIQUE_GLCONTEXT (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Disable synchronization of unselected instances
 | ||||
| #define DISABLE_INSTANCES_SYNCH (0 && ENABLE_1_42_0_ALPHA1) | ||||
| // Keeps objects on bed while scaling them using the scale gizmo
 | ||||
| #define ENABLE_ENSURE_ON_BED_WHILE_SCALING (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // All rotations made using the rotate gizmo are done with respect to the world reference system
 | ||||
| #define ENABLE_WORLD_ROTATIONS (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Scene's GUI made using imgui library
 | ||||
| #define ENABLE_IMGUI (1 && ENABLE_1_42_0_ALPHA1) | ||||
| #define DISABLE_MOVE_ROTATE_SCALE_GIZMOS_IMGUI (1 && ENABLE_IMGUI) | ||||
| // Modified Sla support gizmo
 | ||||
| #define ENABLE_SLA_SUPPORT_GIZMO_MOD (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Removes the wxNotebook from plater
 | ||||
| #define ENABLE_REMOVE_TABS_FROM_PLATER (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Use wxDataViewRender instead of wxDataViewCustomRenderer
 | ||||
| #define ENABLE_NONCUSTOM_DATA_VIEW_RENDERING (0 && ENABLE_1_42_0_ALPHA1) | ||||
| // Renders a small sphere in the center of the bounding box of the current selection when no gizmo is active
 | ||||
| #define ENABLE_RENDER_SELECTION_CENTER (0 && ENABLE_1_42_0_ALPHA1) | ||||
| // Show visual hints in the 3D scene when sidebar matrix fields have focus
 | ||||
| #define ENABLE_SIDEBAR_VISUAL_HINTS (1 && ENABLE_1_42_0_ALPHA1) | ||||
| // Separate rendering for opaque and transparent volumes
 | ||||
| #define ENABLE_IMPROVED_TRANSPARENT_VOLUMES_RENDERING (1 && ENABLE_1_42_0_ALPHA1) | ||||
| 
 | ||||
| //====================
 | ||||
| // 1.42.0.alpha2 techs
 | ||||
| //====================
 | ||||
| #define ENABLE_1_42_0_ALPHA2 1 | ||||
| 
 | ||||
| #define ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION (1 && ENABLE_1_42_0_ALPHA2) | ||||
| 
 | ||||
| #endif // _technologies_h_
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -3648,6 +3648,10 @@ wxDEFINE_EVENT(EVT_GLCANVAS_ARRANGE, SimpleEvent); | |||
| wxDEFINE_EVENT(EVT_GLCANVAS_QUESTION_MARK, SimpleEvent); | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_INCREASE_INSTANCES, Event<int>); | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_INSTANCE_MOVED, SimpleEvent); | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_INSTANCE_ROTATED, SimpleEvent); | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_INSTANCE_SCALED, SimpleEvent); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_WIPETOWER_MOVED, Vec3dEvent); | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, Event<bool>); | ||||
| wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_GEOMETRY, Vec3dsEvent<2>); | ||||
|  | @ -5023,6 +5027,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) | |||
|                     bool already_selected = m_selection.contains_volume(m_hover_volume_id); | ||||
|                     bool shift_down = evt.ShiftDown(); | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|                     Selection::IndicesList curr_idxs = m_selection.get_volume_idxs(); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| 
 | ||||
|                     if (already_selected && shift_down) | ||||
|                         m_selection.remove(m_hover_volume_id); | ||||
|                     else | ||||
|  | @ -5031,11 +5039,21 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) | |||
|                         m_selection.add(m_hover_volume_id, add_as_single); | ||||
|                     } | ||||
| 
 | ||||
|                     m_gizmos.update_on_off_state(m_selection); | ||||
|                     _update_gizmos_data(); | ||||
|                     wxGetApp().obj_manipul()->update_settings_value(m_selection); | ||||
|                     post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); | ||||
|                     m_dirty = true; | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|                     if (curr_idxs != m_selection.get_volume_idxs()) | ||||
|                     { | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| 
 | ||||
|                         m_gizmos.update_on_off_state(m_selection); | ||||
|                         _update_gizmos_data(); | ||||
| #if !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|                         wxGetApp().obj_manipul()->update_settings_value(m_selection); | ||||
| #endif // !ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
|                         post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); | ||||
|                         m_dirty = true; | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|                     } | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  | @ -5408,6 +5426,15 @@ void GLCanvas3D::do_move() | |||
|             ModelObject* model_object = m_model->objects[object_idx]; | ||||
|             if (model_object != nullptr) | ||||
|             { | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|                 if (selection_mode == Selection::Instance) | ||||
|                     model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); | ||||
|                 else if (selection_mode == Selection::Volume) | ||||
|                     model_object->volumes[volume_idx]->set_offset(v->get_volume_offset()); | ||||
| 
 | ||||
|                 object_moved = true; | ||||
|                 model_object->invalidate_bounding_box(); | ||||
| #else | ||||
|                 if (selection_mode == Selection::Instance) | ||||
|                 { | ||||
|                     model_object->instances[instance_idx]->set_offset(v->get_instance_offset()); | ||||
|  | @ -5419,7 +5446,8 @@ void GLCanvas3D::do_move() | |||
|                     object_moved = true; | ||||
|                 } | ||||
|                 if (object_moved) | ||||
|                 model_object->invalidate_bounding_box(); | ||||
|                     model_object->invalidate_bounding_box(); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
|             } | ||||
|         } | ||||
|         else if (object_idx == 1000) | ||||
|  | @ -5490,7 +5518,12 @@ void GLCanvas3D::do_rotate() | |||
|         m->translate_instance(i.second, shift); | ||||
|     } | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     if (!done.empty()) | ||||
|         post_event(SimpleEvent(EVT_GLCANVAS_INSTANCE_ROTATED)); | ||||
| #else | ||||
|     post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| } | ||||
| 
 | ||||
| void GLCanvas3D::do_scale() | ||||
|  | @ -5541,7 +5574,12 @@ void GLCanvas3D::do_scale() | |||
|         m->translate_instance(i.second, shift); | ||||
|     } | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     if (!done.empty()) | ||||
|         post_event(SimpleEvent(EVT_GLCANVAS_INSTANCE_ROTATED)); | ||||
| #else | ||||
|     post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| } | ||||
| 
 | ||||
| void GLCanvas3D::do_flatten() | ||||
|  |  | |||
|  | @ -110,6 +110,10 @@ wxDECLARE_EVENT(EVT_GLCANVAS_QUESTION_MARK, SimpleEvent); | |||
| wxDECLARE_EVENT(EVT_GLCANVAS_INCREASE_INSTANCES, Event<int>); // data: +1 => increase, -1 => decrease
 | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_INSTANCE_MOVED, SimpleEvent); | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_WIPETOWER_MOVED, Vec3dEvent); | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_INSTANCE_ROTATED, SimpleEvent); | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_INSTANCE_SCALED, SimpleEvent); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, Event<bool>); | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_GEOMETRY, Vec3dsEvent<2>); | ||||
| wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent); | ||||
|  |  | |||
|  | @ -413,6 +413,10 @@ void ObjectManipulation::change_rotation_value(const Vec3d& rotation) | |||
|     canvas->get_selection().start_dragging(); | ||||
|     canvas->get_selection().rotate(rad_rotation, selection.is_single_full_instance()); | ||||
|     canvas->do_rotate(); | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     m_cache_rotation = rotation; | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| } | ||||
| 
 | ||||
| void ObjectManipulation::change_scale_value(const Vec3d& scale) | ||||
|  | @ -443,6 +447,10 @@ void ObjectManipulation::change_scale_value(const Vec3d& scale) | |||
|     canvas->get_selection().start_dragging(); | ||||
|     canvas->get_selection().scale(scaling_factor, false); | ||||
|     canvas->do_scale(); | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     m_cache_scale = scale; | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| } | ||||
| 
 | ||||
| void ObjectManipulation::change_size_value(const Vec3d& size) | ||||
|  | @ -457,6 +465,10 @@ void ObjectManipulation::change_size_value(const Vec3d& size) | |||
|     } | ||||
| 
 | ||||
|     change_scale_value(100.0 * Vec3d(size(0) / ref_size(0), size(1) / ref_size(1), size(2) / ref_size(2))); | ||||
| 
 | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     m_cache_size = size; | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
| } | ||||
| 
 | ||||
| } //namespace GUI
 | ||||
|  |  | |||
|  | @ -936,6 +936,7 @@ struct Plater::priv | |||
|     static const std::regex pattern_bundle; | ||||
|     static const std::regex pattern_3mf; | ||||
|     static const std::regex pattern_zip_amf; | ||||
|     static const std::regex pattern_any_amf; | ||||
| 
 | ||||
|     priv(Plater *q, MainFrame *main_frame); | ||||
| 
 | ||||
|  | @ -1051,6 +1052,8 @@ private: | |||
| const std::regex Plater::priv::pattern_bundle(".*[.](amf|amf[.]xml|zip[.]amf|3mf|prusa)", std::regex::icase); | ||||
| const std::regex Plater::priv::pattern_3mf(".*3mf", std::regex::icase); | ||||
| const std::regex Plater::priv::pattern_zip_amf(".*[.]zip[.]amf", std::regex::icase); | ||||
| const std::regex Plater::priv::pattern_any_amf(".*[.](amf|amf[.]xml|zip[.]amf)", std::regex::icase); | ||||
| 
 | ||||
| Plater::priv::priv(Plater *q, MainFrame *main_frame) | ||||
|     : q(q) | ||||
|     , main_frame(main_frame) | ||||
|  | @ -1196,6 +1199,10 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) | |||
|         { if (evt.data == 1) this->q->increase_instances(); else if (this->can_decrease_instances()) this->q->decrease_instances(); }); | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_MOVED, [this](SimpleEvent&) { update(); }); | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_WIPETOWER_MOVED, &priv::on_wipetower_moved, this); | ||||
| #if ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_ROTATED, [this](SimpleEvent&) { update(); }); | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_SCALED, [this](SimpleEvent&) { update(); }); | ||||
| #endif // ENABLE_IMPROVED_SIDEBAR_OBJECTS_MANIPULATION
 | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event<bool> &evt) { this->sidebar->enable_buttons(evt.data); }); | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this); | ||||
|     view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, &priv::on_3dcanvas_mouse_dragging_finished, this); | ||||
|  | @ -1396,6 +1403,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ | |||
| 
 | ||||
|         const bool type_3mf = std::regex_match(path.string(), pattern_3mf); | ||||
|         const bool type_zip_amf = !type_3mf && std::regex_match(path.string(), pattern_zip_amf); | ||||
|         const bool type_any_amf = !type_3mf && std::regex_match(path.string(), pattern_any_amf); | ||||
| 
 | ||||
|         Slic3r::Model model; | ||||
|         try { | ||||
|  | @ -1451,7 +1459,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (type_3mf) { | ||||
|             if (type_3mf || type_any_amf) { | ||||
|                 for (ModelObject* model_object : model.objects) { | ||||
|                     model_object->center_around_origin(); | ||||
|                     model_object->ensure_on_bed(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv