mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Fixed size of selected single volumes
This commit is contained in:
		
							parent
							
								
									e8325a8e2d
								
							
						
					
					
						commit
						1ca872f81e
					
				
					 1 changed files with 25 additions and 28 deletions
				
			
		|  | @ -65,8 +65,8 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) | |||
|     temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); | ||||
|     if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); | ||||
| 
 | ||||
|     temp->Append(_(L("World coordinates"))); | ||||
|     temp->Append(_(L("Local coordinates"))); | ||||
|     temp->Append(_L("World coordinates")); | ||||
|     temp->Append(_L("Local coordinates")); | ||||
|     temp->SetSelection(0); | ||||
|     temp->SetValue(temp->GetString(0)); | ||||
| 
 | ||||
|  | @ -85,7 +85,7 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) | |||
|     temp->SetItemBitmap(0, empty_bmp); | ||||
| #endif | ||||
| 
 | ||||
|     temp->SetToolTip(_(L("Select coordinate space, in which the transformation will be performed."))); | ||||
|     temp->SetToolTip(_L("Select coordinate space, in which the transformation will be performed.")); | ||||
| 	return temp; | ||||
| } | ||||
| 
 | ||||
|  | @ -108,8 +108,8 @@ void msw_rescale_word_local_combo(wxBitmapComboBox* combo) | |||
|     // Set rescaled size
 | ||||
|     combo->SetSize(size); | ||||
|      | ||||
|     combo->Append(_(L("World coordinates"))); | ||||
|     combo->Append(_(L("Local coordinates"))); | ||||
|     combo->Append(_L("World coordinates")); | ||||
|     combo->Append(_L("Local coordinates")); | ||||
| 
 | ||||
|     wxBitmap empty_bmp(1, combo->GetFont().GetPixelSize().y + 2); | ||||
|     empty_bmp.SetWidth(0); | ||||
|  | @ -158,9 +158,9 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
| 
 | ||||
|     sizer->Add(m_fix_throught_netfab_bitmap); | ||||
| 
 | ||||
|     auto name_label = new wxStaticText(m_parent, wxID_ANY, _(L("Name"))+":"); | ||||
|     auto name_label = new wxStaticText(m_parent, wxID_ANY, _L("Name")+":"); | ||||
|     set_font_and_background_style(name_label, wxGetApp().normal_font()); | ||||
|     name_label->SetToolTip(_(L("Object name"))); | ||||
|     name_label->SetToolTip(_L("Object name")); | ||||
|     sizer->Add(name_label); | ||||
| 
 | ||||
|     m_main_grid_sizer->Add(sizer); | ||||
|  | @ -268,7 +268,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
| 
 | ||||
|         // We will add a button to toggle mirroring to each axis:
 | ||||
|         auto btn = new ScalableButton(parent, wxID_ANY, "mirroring_off", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER | wxTRANSPARENT_WINDOW); | ||||
|         btn->SetToolTip(wxString::Format(_(L("Toggle %c axis mirroring")), (int)label)); | ||||
|         btn->SetToolTip(wxString::Format(_L("Toggle %c axis mirroring"), (int)label)); | ||||
|         btn->SetBitmapDisabled_(m_mirror_bitmap_hidden); | ||||
| 
 | ||||
|         m_mirror_buttons[axis_idx].first = btn; | ||||
|  | @ -342,7 +342,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
| 
 | ||||
|     // Add drop to bed button
 | ||||
|     m_drop_to_bed_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "drop_to_bed")); | ||||
|     m_drop_to_bed_button->SetToolTip(_(L("Drop to bed"))); | ||||
|     m_drop_to_bed_button->SetToolTip(_L("Drop to bed")); | ||||
|     m_drop_to_bed_button->Bind(wxEVT_BUTTON, [=](wxCommandEvent& e) { | ||||
|         // ???
 | ||||
|         GLCanvas3D* canvas = wxGetApp().plater()->canvas3D(); | ||||
|  | @ -354,7 +354,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
|             const Geometry::Transformation& instance_trafo = volume->get_instance_transformation(); | ||||
|             Vec3d diff = m_cache.position - instance_trafo.get_matrix(true).inverse() * Vec3d(0., 0., get_volume_min_z(volume)); | ||||
| 
 | ||||
|             Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Drop to bed"))); | ||||
|             Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Drop to bed")); | ||||
|             change_position_value(0, diff.x()); | ||||
|             change_position_value(1, diff.y()); | ||||
|             change_position_value(2, diff.z()); | ||||
|  | @ -369,7 +369,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
| 
 | ||||
|     // Add reset rotation button
 | ||||
|     m_reset_rotation_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "undo")); | ||||
|     m_reset_rotation_button->SetToolTip(_(L("Reset rotation"))); | ||||
|     m_reset_rotation_button->SetToolTip(_L("Reset rotation")); | ||||
|     m_reset_rotation_button->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { | ||||
|         GLCanvas3D* canvas = wxGetApp().plater()->canvas3D(); | ||||
|         Selection& selection = canvas->get_selection(); | ||||
|  | @ -404,9 +404,9 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : | |||
| 
 | ||||
|     // Add reset scale button
 | ||||
|     m_reset_scale_button = new ScalableButton(parent, wxID_ANY, ScalableBitmap(parent, "undo")); | ||||
|     m_reset_scale_button->SetToolTip(_(L("Reset scale"))); | ||||
|     m_reset_scale_button->SetToolTip(_L("Reset scale")); | ||||
|     m_reset_scale_button->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { | ||||
|         Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Reset scale"))); | ||||
|         Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Reset scale")); | ||||
|         change_scale_value(0, 100.); | ||||
|         change_scale_value(1, 100.); | ||||
|         change_scale_value(2, 100.); | ||||
|  | @ -509,8 +509,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection) | |||
|         m_world_coordinates = true; | ||||
| 
 | ||||
|     ObjectList* obj_list = wxGetApp().obj_list(); | ||||
|     if (selection.is_single_full_instance()) | ||||
|     { | ||||
|     if (selection.is_single_full_instance()) { | ||||
|         // all volumes in the selection belongs to the same instance, any of them contains the needed instance data, so we take the first one
 | ||||
|         const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); | ||||
|         m_new_position = volume->get_instance_offset(); | ||||
|  | @ -528,7 +527,8 @@ void ObjectManipulation::update_settings_value(const Selection& selection) | |||
| 			m_new_rotation = Vec3d::Zero(); | ||||
| 			m_new_size     = selection.get_scaled_instance_bounding_box().size(); | ||||
| 			m_new_scale    = m_new_size.cwiseProduct(selection.get_unscaled_instance_bounding_box().size().cwiseInverse()) * 100.; | ||||
| 		} else { | ||||
| 		}  | ||||
|         else { | ||||
| 			m_new_rotation = volume->get_instance_rotation() * (180. / M_PI); | ||||
| 			m_new_size     = volume->get_instance_transformation().get_scaling_factor().cwiseProduct(wxGetApp().model().objects[volume->object_idx()]->raw_mesh_bounding_box().size()); | ||||
| 			m_new_scale    = volume->get_instance_scaling_factor() * 100.; | ||||
|  | @ -536,8 +536,7 @@ void ObjectManipulation::update_settings_value(const Selection& selection) | |||
| 
 | ||||
|         m_new_enabled  = true; | ||||
|     } | ||||
|     else if (selection.is_single_full_object() && obj_list->is_selected(itObject)) | ||||
|     { | ||||
|     else if (selection.is_single_full_object() && obj_list->is_selected(itObject)) { | ||||
|         const BoundingBoxf3& box = selection.get_bounding_box(); | ||||
|         m_new_position = box.center(); | ||||
|         m_new_rotation = Vec3d::Zero(); | ||||
|  | @ -547,18 +546,16 @@ void ObjectManipulation::update_settings_value(const Selection& selection) | |||
| 		m_new_scale_label_string  = L("Scale"); | ||||
|         m_new_enabled  = true; | ||||
|     } | ||||
|     else if (selection.is_single_modifier() || selection.is_single_volume()) | ||||
|     { | ||||
|     else if (selection.is_single_modifier() || selection.is_single_volume()) { | ||||
|         // the selection contains a single volume
 | ||||
|         const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); | ||||
|         m_new_position = volume->get_volume_offset(); | ||||
|         m_new_rotation = volume->get_volume_rotation() * (180. / M_PI); | ||||
|         m_new_scale    = volume->get_volume_scaling_factor() * 100.; | ||||
|         m_new_size = volume->get_volume_transformation().get_scaling_factor().cwiseProduct(volume->bounding_box().size()); | ||||
|         m_new_size     = volume->get_instance_transformation().get_scaling_factor().cwiseProduct(volume->get_volume_transformation().get_scaling_factor().cwiseProduct(volume->bounding_box().size())); | ||||
|         m_new_enabled = true; | ||||
|     } | ||||
|     else if (obj_list->multiple_selection() || obj_list->is_selected(itInstanceRoot)) | ||||
|     { | ||||
|     else if (obj_list->multiple_selection() || obj_list->is_selected(itInstanceRoot)) { | ||||
|         reset_settings_value(); | ||||
| 		m_new_move_label_string   = L("Translate"); | ||||
| 		m_new_rotate_label_string = L("Rotate"); | ||||
|  | @ -624,7 +621,7 @@ void ObjectManipulation::update_if_dirty() | |||
| 
 | ||||
|     if (selection.requires_uniform_scale()) { | ||||
|         m_lock_bnt->SetLock(true); | ||||
|         m_lock_bnt->SetToolTip(_(L("You cannot use non-uniform scaling mode for multiple objects/parts selection"))); | ||||
|         m_lock_bnt->SetToolTip(_L("You cannot use non-uniform scaling mode for multiple objects/parts selection")); | ||||
|         m_lock_bnt->disable(); | ||||
|     } | ||||
|     else { | ||||
|  | @ -924,11 +921,11 @@ void ObjectManipulation::set_uniform_scaling(const bool new_value) | |||
| 		if (! Geometry::is_rotation_ninety_degrees(volume->get_instance_rotation())) { | ||||
|             // Cannot apply scaling in the world coordinate system.
 | ||||
| 			wxMessageDialog dlg(GUI::wxGetApp().mainframe, | ||||
|                 _(L("The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n" | ||||
|                 _L("The currently manipulated object is tilted (rotation angles are not multiples of 90°).\n" | ||||
|                     "Non-uniform scaling of tilted objects is only possible in the World coordinate system,\n" | ||||
|                     "once the rotation is embedded into the object coordinates.")) + "\n" + | ||||
|                 _(L("This operation is irreversible.\n" | ||||
|                     "Do you want to proceed?")), | ||||
|                     "once the rotation is embedded into the object coordinates.") + "\n" + | ||||
|                 _L("This operation is irreversible.\n" | ||||
|                     "Do you want to proceed?"), | ||||
|                 SLIC3R_APP_NAME, | ||||
| 				wxYES_NO | wxCANCEL | wxCANCEL_DEFAULT | wxICON_QUESTION); | ||||
|             if (dlg.ShowModal() != wxID_YES) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966