mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Merge remote-tracking branch 'origin/dev2' into lm_sla_supports_ui
This commit is contained in:
		
						commit
						b539a9148a
					
				
					 3 changed files with 45 additions and 29 deletions
				
			
		|  | @ -338,10 +338,9 @@ const unsigned int GLGizmoRotate::AngleResolution = 64; | ||||||
| const unsigned int GLGizmoRotate::ScaleStepsCount = 72; | const unsigned int GLGizmoRotate::ScaleStepsCount = 72; | ||||||
| const float GLGizmoRotate::ScaleStepRad = 2.0f * (float)PI / GLGizmoRotate::ScaleStepsCount; | const float GLGizmoRotate::ScaleStepRad = 2.0f * (float)PI / GLGizmoRotate::ScaleStepsCount; | ||||||
| const unsigned int GLGizmoRotate::ScaleLongEvery = 2; | const unsigned int GLGizmoRotate::ScaleLongEvery = 2; | ||||||
| const float GLGizmoRotate::ScaleLongTooth = 2.0f; | const float GLGizmoRotate::ScaleLongTooth = 0.1f; // in percent of radius
 | ||||||
| const float GLGizmoRotate::ScaleShortTooth = 1.0f; |  | ||||||
| const unsigned int GLGizmoRotate::SnapRegionsCount = 8; | const unsigned int GLGizmoRotate::SnapRegionsCount = 8; | ||||||
| const float GLGizmoRotate::GrabberOffset = 5.0f; | const float GLGizmoRotate::GrabberOffset = 0.15f; // in percent of radius
 | ||||||
| 
 | 
 | ||||||
| GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis) | GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis) | ||||||
|     : GLGizmoBase(parent) |     : GLGizmoBase(parent) | ||||||
|  | @ -349,6 +348,10 @@ GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis) | ||||||
|     , m_angle(0.0) |     , m_angle(0.0) | ||||||
|     , m_center(0.0, 0.0, 0.0) |     , m_center(0.0, 0.0, 0.0) | ||||||
|     , m_radius(0.0f) |     , m_radius(0.0f) | ||||||
|  |     , m_snap_coarse_in_radius(0.0f) | ||||||
|  |     , m_snap_coarse_out_radius(0.0f) | ||||||
|  |     , m_snap_fine_in_radius(0.0f) | ||||||
|  |     , m_snap_fine_out_radius(0.0f) | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -370,6 +373,10 @@ void GLGizmoRotate::on_start_dragging(const BoundingBoxf3& box) | ||||||
| { | { | ||||||
|     m_center = box.center(); |     m_center = box.center(); | ||||||
|     m_radius = Offset + box.radius(); |     m_radius = Offset + box.radius(); | ||||||
|  |     m_snap_coarse_in_radius = m_radius / 3.0f; | ||||||
|  |     m_snap_coarse_out_radius = 2.0f * m_snap_coarse_in_radius; | ||||||
|  |     m_snap_fine_in_radius = m_radius; | ||||||
|  |     m_snap_fine_out_radius = m_snap_fine_in_radius + m_radius * ScaleLongTooth; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GLGizmoRotate::on_update(const Linef3& mouse_ray, const Point* mouse_position) | void GLGizmoRotate::on_update(const Linef3& mouse_ray, const Point* mouse_position) | ||||||
|  | @ -385,20 +392,16 @@ void GLGizmoRotate::on_update(const Linef3& mouse_ray, const Point* mouse_positi | ||||||
| 
 | 
 | ||||||
|     double len = mouse_pos.norm(); |     double len = mouse_pos.norm(); | ||||||
| 
 | 
 | ||||||
|     // snap to snap region
 |     // snap to coarse snap region
 | ||||||
|     double in_radius = (double)m_radius / 3.0; |     if ((m_snap_coarse_in_radius <= len) && (len <= m_snap_coarse_out_radius)) | ||||||
|     double out_radius = 2.0 * (double)in_radius; |  | ||||||
|     if ((in_radius <= len) && (len <= out_radius)) |  | ||||||
|     { |     { | ||||||
|         double step = 2.0 * (double)PI / (double)SnapRegionsCount; |         double step = 2.0 * (double)PI / (double)SnapRegionsCount; | ||||||
|         theta = step * (double)std::round(theta / step); |         theta = step * (double)std::round(theta / step); | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         // snap to scale
 |         // snap to fine snap region (scale)
 | ||||||
|         in_radius = (double)m_radius; |         if ((m_snap_fine_in_radius <= len) && (len <= m_snap_fine_out_radius)) | ||||||
|         out_radius = in_radius + (double)ScaleLongTooth; |  | ||||||
|         if ((in_radius <= len) && (len <= out_radius)) |  | ||||||
|         { |         { | ||||||
|             double step = 2.0 * (double)PI / (double)ScaleStepsCount; |             double step = 2.0 * (double)PI / (double)ScaleStepsCount; | ||||||
|             theta = step * (double)std::round(theta / step); |             theta = step * (double)std::round(theta / step); | ||||||
|  | @ -422,6 +425,10 @@ void GLGizmoRotate::on_render(const BoundingBoxf3& box) const | ||||||
|     { |     { | ||||||
|         m_center = box.center(); |         m_center = box.center(); | ||||||
|         m_radius = Offset + box.radius(); |         m_radius = Offset + box.radius(); | ||||||
|  |         m_snap_coarse_in_radius = m_radius / 3.0f; | ||||||
|  |         m_snap_coarse_out_radius = 2.0f * m_snap_coarse_in_radius; | ||||||
|  |         m_snap_fine_in_radius = m_radius; | ||||||
|  |         m_snap_fine_out_radius = m_radius * (1.0f + ScaleLongTooth); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ::glEnable(GL_DEPTH_TEST); |     ::glEnable(GL_DEPTH_TEST); | ||||||
|  | @ -479,8 +486,8 @@ void GLGizmoRotate::render_circle() const | ||||||
| 
 | 
 | ||||||
| void GLGizmoRotate::render_scale() const | void GLGizmoRotate::render_scale() const | ||||||
| { | { | ||||||
|     float out_radius_long = m_radius + ScaleLongTooth; |     float out_radius_long = m_snap_fine_out_radius; | ||||||
|     float out_radius_short = m_radius + ScaleShortTooth; |     float out_radius_short = m_radius * (1.0f + 0.5f * ScaleLongTooth); | ||||||
| 
 | 
 | ||||||
|     ::glBegin(GL_LINES); |     ::glBegin(GL_LINES); | ||||||
|     for (unsigned int i = 0; i < ScaleStepsCount; ++i) |     for (unsigned int i = 0; i < ScaleStepsCount; ++i) | ||||||
|  | @ -529,14 +536,14 @@ void GLGizmoRotate::render_reference_radius() const | ||||||
| { | { | ||||||
|     ::glBegin(GL_LINES); |     ::glBegin(GL_LINES); | ||||||
|     ::glVertex3f(0.0f, 0.0f, 0.0f); |     ::glVertex3f(0.0f, 0.0f, 0.0f); | ||||||
|     ::glVertex3f((GLfloat)(m_radius + GrabberOffset), 0.0f, 0.0f); |     ::glVertex3f((GLfloat)(m_radius * (1.0f + GrabberOffset)), 0.0f, 0.0f); | ||||||
|     ::glEnd(); |     ::glEnd(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GLGizmoRotate::render_angle() const | void GLGizmoRotate::render_angle() const | ||||||
| { | { | ||||||
|     float step_angle = (float)m_angle / AngleResolution; |     float step_angle = (float)m_angle / AngleResolution; | ||||||
|     float ex_radius = m_radius + GrabberOffset; |     float ex_radius = m_radius * (1.0f + GrabberOffset); | ||||||
| 
 | 
 | ||||||
|     ::glBegin(GL_LINE_STRIP); |     ::glBegin(GL_LINE_STRIP); | ||||||
|     for (unsigned int i = 0; i <= AngleResolution; ++i) |     for (unsigned int i = 0; i <= AngleResolution; ++i) | ||||||
|  | @ -552,7 +559,7 @@ void GLGizmoRotate::render_angle() const | ||||||
| 
 | 
 | ||||||
| void GLGizmoRotate::render_grabber(const BoundingBoxf3& box) const | void GLGizmoRotate::render_grabber(const BoundingBoxf3& box) const | ||||||
| { | { | ||||||
|     double grabber_radius = (double)(m_radius + GrabberOffset); |     double grabber_radius = (double)m_radius * (1.0 + (double)GrabberOffset); | ||||||
|     m_grabbers[0].center = Vec3d(::cos(m_angle) * grabber_radius, ::sin(m_angle) * grabber_radius, 0.0); |     m_grabbers[0].center = Vec3d(::cos(m_angle) * grabber_radius, ::sin(m_angle) * grabber_radius, 0.0); | ||||||
|     m_grabbers[0].angles(2) = m_angle; |     m_grabbers[0].angles(2) = m_angle; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -133,7 +133,6 @@ class GLGizmoRotate : public GLGizmoBase | ||||||
|     static const float ScaleStepRad; |     static const float ScaleStepRad; | ||||||
|     static const unsigned int ScaleLongEvery; |     static const unsigned int ScaleLongEvery; | ||||||
|     static const float ScaleLongTooth; |     static const float ScaleLongTooth; | ||||||
|     static const float ScaleShortTooth; |  | ||||||
|     static const unsigned int SnapRegionsCount; |     static const unsigned int SnapRegionsCount; | ||||||
|     static const float GrabberOffset; |     static const float GrabberOffset; | ||||||
| 
 | 
 | ||||||
|  | @ -152,6 +151,11 @@ private: | ||||||
|     mutable Vec3d m_center; |     mutable Vec3d m_center; | ||||||
|     mutable float m_radius; |     mutable float m_radius; | ||||||
| 
 | 
 | ||||||
|  |     mutable float m_snap_coarse_in_radius; | ||||||
|  |     mutable float m_snap_coarse_out_radius; | ||||||
|  |     mutable float m_snap_fine_in_radius; | ||||||
|  |     mutable float m_snap_fine_out_radius; | ||||||
|  | 
 | ||||||
| public: | public: | ||||||
|     GLGizmoRotate(GLCanvas3D& parent, Axis axis); |     GLGizmoRotate(GLCanvas3D& parent, Axis axis); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1220,7 +1220,13 @@ void load_part(	ModelObject* model_object, | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		for ( auto object : model.objects) { | 		for ( auto object : model.objects) { | ||||||
| 			for (auto volume : object->volumes) { |             Vec3d delta = Vec3d::Zero(); | ||||||
|  |             if (model_object->origin_translation != Vec3d::Zero()) | ||||||
|  |             { | ||||||
|  |                 object->center_around_origin(); | ||||||
|  |                 delta = model_object->origin_translation - object->origin_translation; | ||||||
|  |             } | ||||||
|  |             for (auto volume : object->volumes) { | ||||||
| 				auto new_volume = model_object->add_volume(*volume); | 				auto new_volume = model_object->add_volume(*volume); | ||||||
| 				new_volume->set_type(is_modifier ? ModelVolume::PARAMETER_MODIFIER : ModelVolume::MODEL_PART); | 				new_volume->set_type(is_modifier ? ModelVolume::PARAMETER_MODIFIER : ModelVolume::MODEL_PART); | ||||||
| 				boost::filesystem::path(input_file).filename().string(); | 				boost::filesystem::path(input_file).filename().string(); | ||||||
|  | @ -1228,12 +1234,11 @@ void load_part(	ModelObject* model_object, | ||||||
| 
 | 
 | ||||||
| 				part_names.Add(new_volume->name); | 				part_names.Add(new_volume->name); | ||||||
| 
 | 
 | ||||||
| 				// apply the same translation we applied to the object
 |                 if (delta != Vec3d::Zero()) | ||||||
| 				new_volume->mesh.translate( model_object->origin_translation(0), |                     new_volume->mesh.translate((float)delta(0), (float)delta(1), (float)delta(2)); | ||||||
| 											model_object->origin_translation(1),  | 
 | ||||||
| 											model_object->origin_translation(2) ); |                 // set a default extruder value, since user can't add it manually
 | ||||||
| 				// set a default extruder value, since user can't add it manually
 |                 new_volume->config.set_key_value("extruder", new ConfigOptionInt(0)); | ||||||
| 				new_volume->config.set_key_value("extruder", new ConfigOptionInt(0)); |  | ||||||
| 
 | 
 | ||||||
| 				m_parts_changed = true; | 				m_parts_changed = true; | ||||||
| 			} | 			} | ||||||
|  | @ -1446,12 +1451,12 @@ bool is_splittable_object(const bool split_part) | ||||||
|         return false; |         return false; | ||||||
| 
 | 
 | ||||||
|     TriangleMeshPtrs meshptrs = volume->mesh.split(); |     TriangleMeshPtrs meshptrs = volume->mesh.split(); | ||||||
|     if (meshptrs.size() <= 1) { |     bool splittable = meshptrs.size() > 1; | ||||||
|         delete meshptrs.front(); |     for (TriangleMesh* m : meshptrs) | ||||||
|         return false; |     { | ||||||
|  |         delete m; | ||||||
|     } |     } | ||||||
| 
 |     return splittable; | ||||||
|     return true; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void on_btn_split(const bool split_part) | void on_btn_split(const bool split_part) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lukas Matena
						Lukas Matena