mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Merge branch 'convex_hull' of https://github.com/prusa3d/Slic3r into gizmos_3d
This commit is contained in:
		
						commit
						115744b38d
					
				
					 3 changed files with 11 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -204,6 +204,7 @@ GLVolume::GLVolume(float r, float g, float b, float a)
 | 
			
		|||
    , m_scale_factor(1.0f)
 | 
			
		||||
    , m_transformed_bounding_box_dirty(true)
 | 
			
		||||
    , m_transformed_convex_hull_bounding_box_dirty(true)
 | 
			
		||||
    , m_convex_hull(nullptr)
 | 
			
		||||
    , composite_id(-1)
 | 
			
		||||
    , select_group_id(-1)
 | 
			
		||||
    , drag_group_id(-1)
 | 
			
		||||
| 
						 | 
				
			
			@ -293,7 +294,7 @@ void GLVolume::set_scale_factor(float scale_factor)
 | 
			
		|||
 | 
			
		||||
void GLVolume::set_convex_hull(const TriangleMesh& convex_hull)
 | 
			
		||||
{
 | 
			
		||||
    m_convex_hull = convex_hull;
 | 
			
		||||
    m_convex_hull = &convex_hull;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::vector<float> GLVolume::world_matrix() const
 | 
			
		||||
| 
						 | 
				
			
			@ -322,8 +323,8 @@ BoundingBoxf3 GLVolume::transformed_convex_hull_bounding_box() const
 | 
			
		|||
{
 | 
			
		||||
    if (m_transformed_convex_hull_bounding_box_dirty)
 | 
			
		||||
    {
 | 
			
		||||
        if (m_convex_hull.stl.stats.number_of_facets > 0)
 | 
			
		||||
            m_transformed_convex_hull_bounding_box = m_convex_hull.transformed_bounding_box(world_matrix());
 | 
			
		||||
        if ((m_convex_hull != nullptr) && (m_convex_hull->stl.stats.number_of_facets > 0))
 | 
			
		||||
            m_transformed_convex_hull_bounding_box = m_convex_hull->transformed_bounding_box(world_matrix());
 | 
			
		||||
        else
 | 
			
		||||
            m_transformed_convex_hull_bounding_box = bounding_box.transformed(world_matrix());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -747,7 +748,6 @@ int GLVolumeCollection::load_wipe_tower_preview(
 | 
			
		|||
    v.drag_group_id = obj_idx * 1000;
 | 
			
		||||
    v.is_wipe_tower = true;
 | 
			
		||||
    v.shader_outside_printer_detection_enabled = ! size_unknown;
 | 
			
		||||
    v.set_convex_hull(mesh.convex_hull_3d());
 | 
			
		||||
    return int(this->volumes.size() - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -833,7 +833,7 @@ bool GLVolumeCollection::check_outside_state(const DynamicPrintConfig* config, M
 | 
			
		|||
 | 
			
		||||
    for (GLVolume* volume : this->volumes)
 | 
			
		||||
    {
 | 
			
		||||
        if ((volume != nullptr) && !volume->is_modifier)
 | 
			
		||||
        if ((volume != nullptr) && !volume->is_modifier && (!volume->is_wipe_tower || (volume->is_wipe_tower && volume->shader_outside_printer_detection_enabled)))
 | 
			
		||||
        {
 | 
			
		||||
            const BoundingBoxf3& bb = volume->transformed_convex_hull_bounding_box();
 | 
			
		||||
            bool contained = print_volume.contains(bb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -264,8 +264,8 @@ private:
 | 
			
		|||
    mutable BoundingBoxf3 m_transformed_bounding_box;
 | 
			
		||||
    // Whether or not is needed to recalculate the transformed bounding box.
 | 
			
		||||
    mutable bool          m_transformed_bounding_box_dirty;
 | 
			
		||||
    // Convex hull of the original mesh, if any.
 | 
			
		||||
    TriangleMesh          m_convex_hull;
 | 
			
		||||
    // Pointer to convex hull of the original mesh, if any.
 | 
			
		||||
    const TriangleMesh*   m_convex_hull;
 | 
			
		||||
    // Bounding box of this volume, in unscaled coordinates.
 | 
			
		||||
    mutable BoundingBoxf3 m_transformed_convex_hull_bounding_box;
 | 
			
		||||
    // Whether or not is needed to recalculate the transformed convex hull bounding box.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3232,6 +3232,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
 | 
			
		|||
            }
 | 
			
		||||
            
 | 
			
		||||
            _on_move(volume_idxs);
 | 
			
		||||
 | 
			
		||||
            // force re-selection of the wipe tower, if needed
 | 
			
		||||
            if ((volume_idxs.size() == 1) && m_volumes.volumes[volume_idxs[0]]->is_wipe_tower)
 | 
			
		||||
                select_volume(volume_idxs[0]);
 | 
			
		||||
        }
 | 
			
		||||
        else if (evt.LeftUp() && !m_mouse.dragging && (m_hover_volume_id == -1) && !gizmos_overlay_contains_mouse && !m_gizmos.is_dragging() && !is_layers_editing_enabled())
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue