Place on bed planes recalculation after individual volumes are manipulated
This commit is contained in:
parent
0a47bc1c5c
commit
5813ec08c9
2 changed files with 7 additions and 19 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue