Place on bed planes recalculation after individual volumes are manipulated

This commit is contained in:
Lukas Matena 2018-11-28 11:37:17 +01:00
parent 0a47bc1c5c
commit 5813ec08c9
2 changed files with 7 additions and 19 deletions

View file

@ -1559,11 +1559,9 @@ void GLGizmoFlatten::update_planes()
m_planes.resize(std::min((int)m_planes.size(), 254)); m_planes.resize(std::min((int)m_planes.size(), 254));
// Planes are finished - let's save what we calculated it from: // Planes are finished - let's save what we calculated it from:
m_source_data.bounding_boxes.clear(); m_volumes_matrices.clear();
for (const auto& vol : m_model_object->volumes) for (const ModelVolume* vol : m_model_object->volumes)
m_source_data.bounding_boxes.push_back(vol->get_convex_hull().bounding_box()); m_volumes_matrices.push_back(vol->get_matrix());
const float* first_vertex = m_model_object->volumes.front()->get_convex_hull().first_vertex();
m_source_data.mesh_first_point = Vec3d((double)first_vertex[0], (double)first_vertex[1], (double)first_vertex[2]);
} }
// Check if the bounding boxes of each volume's convex hull is the same as before // Check if the bounding boxes of each volume's convex hull is the same as before
@ -1573,19 +1571,13 @@ bool GLGizmoFlatten::is_plane_update_necessary() const
if (m_state != On || !m_model_object || m_model_object->instances.empty()) if (m_state != On || !m_model_object || m_model_object->instances.empty())
return false; return false;
if (m_model_object->volumes.size() != m_source_data.bounding_boxes.size()) if (m_model_object->volumes.size() != m_volumes_matrices.size())
return true; return true;
// now compare the bounding boxes: for (unsigned int i=0; i < m_model_object->volumes.size(); ++i)
for (unsigned int i=0; i<m_model_object->volumes.size(); ++i) if (! m_model_object->volumes[i]->get_matrix().isApprox(m_volumes_matrices[i]))
if (m_model_object->volumes[i]->get_convex_hull().bounding_box() != m_source_data.bounding_boxes[i])
return true; return true;
const float* first_vertex = m_model_object->volumes.front()->get_convex_hull().first_vertex();
Vec3d first_point((double)first_vertex[0], (double)first_vertex[1], (double)first_vertex[2]);
if (first_point != m_source_data.mesh_first_point)
return true;
return false; return false;
} }

View file

@ -414,13 +414,9 @@ private:
Vec3d normal; Vec3d normal;
float area; float area;
}; };
struct SourceDataSummary {
std::vector<BoundingBoxf3> bounding_boxes; // bounding boxes of convex hulls of individual volumes
Vec3d mesh_first_point;
};
// This holds information to decide whether recalculation is necessary: // This holds information to decide whether recalculation is necessary:
SourceDataSummary m_source_data; std::vector<Transform3d> m_volumes_matrices;
std::vector<PlaneData> m_planes; std::vector<PlaneData> m_planes;
mutable Vec3d m_starting_center; mutable Vec3d m_starting_center;