From aab26aa579e636b957709d0b76ab7527a6627cc6 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 28 Aug 2019 10:47:01 +0200 Subject: [PATCH] Make full copy of point set and avoid useless copies --- .../Plugins/PCA/Affine_transform_plugin.cpp | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp index 8b7ac70652a..b9766dec3ff 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp @@ -591,24 +591,20 @@ void Polyhedron_demo_affine_transform_plugin::end(){ } else if(transform_points_item) { - const Point_set *base_ps = transform_points_item->getBase()->point_set(); - Point_set* new_ps = new Point_set(); - new_ps->reserve(base_ps->size()); + Scene_points_with_normal_item* new_item + = new Scene_points_with_normal_item (*(transform_points_item->getBase())); + Point_set* new_ps = new_item->point_set(); CGAL::qglviewer::Vec c = transform_points_item->center(); - for(Point_set::const_iterator it = base_ps->begin(); it != base_ps->end(); ++ it) + + for(Point_set::Index idx : *new_ps) { - QVector3D vec = transform_matrix * QVector3D(base_ps->point(*it).x() - c.x, - base_ps->point(*it).y() - c.y, - base_ps->point(*it).z() - c.z); - new_ps->insert(Kernel::Point_3 (vec.x(), vec.y(), vec.z())); + QVector3D vec = transform_matrix * QVector3D(new_ps->point(idx).x() - c.x, + new_ps->point(idx).y() - c.y, + new_ps->point(idx).z() - c.z); + new_ps->point(idx) = Kernel::Point_3 (vec.x(), vec.y(), vec.z()); } - - - Scene_points_with_normal_item* new_item=new Scene_points_with_normal_item(); - for(Point_set::const_iterator it = new_ps->begin(); it != new_ps->end(); ++ it) - new_item->point_set()->insert(new_ps->point(*it)); + new_item->setName(tr("%1_transformed").arg(transform_points_item->getBase()->name())); - scene->replaceItem(tr_item_index,new_item); delete transform_points_item; transform_points_item = NULL;