From 87ba3263cccb0687701b2dec6d30d1e5aa704967 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 9 Apr 2023 22:16:36 +0800 Subject: [PATCH] fix default bed triangles and check_outside & intersect_instance --- src/slic3r/GUI/3DBed.cpp | 5 ++--- src/slic3r/GUI/PartPlate.cpp | 16 +++++++++++----- src/slic3r/GUI/PartPlate.hpp | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 1595ffbc44..6ed29cde40 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -338,7 +338,6 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, if (show_axes) render_axes(); - glsafe(::glEnable(GL_DEPTH_TEST)); m_model.set_color(-1, m_is_dark ? DEFAULT_MODEL_COLOR_DARK : DEFAULT_MODEL_COLOR); @@ -632,8 +631,8 @@ GeometryBuffer Bed3D::update_bed_triangles() const if (!m_build_volume.valid()) return new_triangles; - (*model_offset_ptr)(0) = m_build_volume.bounding_volume2d().min.x(); - (*model_offset_ptr)(1) = m_build_volume.bounding_volume2d().min.y(); + (*model_offset_ptr)(0) = 0;//m_build_volume.bounding_volume2d().min.x(); + (*model_offset_ptr)(1) = 0; // m_build_volume.bounding_volume2d().min.y(); (*model_offset_ptr)(2) = -0.41 + GROUND_Z; std::vector new_bed_shape; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 50e5bc014b..6c3be2a0c1 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1724,15 +1724,17 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); - Polygon hull = instance->convex_hull_2d(); - Vec3d up_point(m_origin.x() + m_width + Slic3r::BuildVolume::SceneEpsilon, m_origin.y() + m_depth + Slic3r::BuildVolume::SceneEpsilon, m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); - Vec3d low_point(m_origin.x() - Slic3r::BuildVolume::SceneEpsilon, m_origin.y() - Slic3r::BuildVolume::SceneEpsilon, m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); + Vec3d up_point = m_bounding_box.max + Vec3d(Slic3r::BuildVolume::SceneEpsilon, Slic3r::BuildVolume::SceneEpsilon, + m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); + Vec3d low_point = m_bounding_box.min + Vec3d(-Slic3r::BuildVolume::SceneEpsilon, -Slic3r::BuildVolume::SceneEpsilon, + m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); BoundingBoxf3 plate_box(low_point, up_point); if (plate_box.contains(instance_box)) { if (m_exclude_bounding_box.size() > 0) { + Polygon hull = instance->convex_hull_2d(); int index; for (index = 0; index < m_exclude_bounding_box.size(); index ++) { @@ -1769,8 +1771,12 @@ bool PartPlate::intersect_instance(int obj_id, int instance_id, BoundingBoxf3* b ModelObject* object = m_model->objects[obj_id]; ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); - Vec3d up_point(m_origin.x() + m_width, m_origin.y() + m_depth, m_origin.z() + m_height); - Vec3d low_point(m_origin.x(), m_origin.y(), m_origin.z() - 5.0f); + Vec3d up_point = + m_bounding_box.max + Vec3d(Slic3r::BuildVolume::SceneEpsilon, Slic3r::BuildVolume::SceneEpsilon, + m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); + Vec3d low_point = + m_bounding_box.min + Vec3d(-Slic3r::BuildVolume::SceneEpsilon, -Slic3r::BuildVolume::SceneEpsilon, + m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); BoundingBoxf3 plate_box(low_point, up_point); result = plate_box.intersects(instance_box); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index b8f56feb59..c3d7b7cc13 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -346,8 +346,8 @@ public: const BoundingBox get_bounding_box_crd(); BoundingBoxf3 get_build_volume() { - Vec3d up_point(m_origin.x() + m_width, m_origin.y() + m_depth, m_origin.z() + m_height); - Vec3d low_point(m_origin.x(), m_origin.y(), m_origin.z()); + Vec3d up_point = m_bounding_box.max + Vec3d(0, 0, m_origin.z() + m_height); + Vec3d low_point = m_bounding_box.min + Vec3d(0, 0, m_origin.z()); BoundingBoxf3 plate_box(low_point, up_point); return plate_box; }