diff --git a/src/libslic3r/Measure.cpp b/src/libslic3r/Measure.cpp index 08c17df47b..6e04acb967 100644 --- a/src/libslic3r/Measure.cpp +++ b/src/libslic3r/Measure.cpp @@ -190,6 +190,7 @@ void MeasuringImpl::update_planes() //const Halfedge_index he_orig = he; m_planes[plane_id].borders.emplace_back(); std::vector& last_border = m_planes[plane_id].borders.back(); + last_border.reserve(4); last_border.emplace_back(sm.point(sm.source(he)).cast()); //Vertex_index target = sm.target(he); const Halfedge_index he_start = he; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index c2ab108667..53cc85a4e3 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -96,6 +96,8 @@ static GLModel::Geometry init_plane_data(const indexed_triangle_set& its, const { GLModel::Geometry init_data; init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 }; + init_data.reserve_indices(3 * triangle_indices.size()); + init_data.reserve_vertices(3 * triangle_indices.size()); unsigned int i = 0; for (int idx : triangle_indices) { const Vec3f& v0 = its.vertices[its.indices[idx][0]]; @@ -1036,10 +1038,10 @@ void GLGizmoMeasure::update_if_needed() { auto update_plane_models_cache = [this](const indexed_triangle_set& its) { m_plane_models_cache.clear(); + m_plane_models_cache.resize(m_measuring->get_num_of_planes(), GLModel()); for (int idx = 0; idx < m_measuring->get_num_of_planes(); ++idx) { - m_plane_models_cache.emplace_back(GLModel()); GLModel::Geometry init_data = init_plane_data(its, m_measuring->get_plane_triangle_indices(idx)); - m_plane_models_cache.back().init_from(std::move(init_data)); + m_plane_models_cache[idx].init_from(std::move(init_data)); } };