From 76fc3b23de5ec8c7a5f6d5665e00ff405f80cb98 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Oct 2016 16:04:09 +0200 Subject: [PATCH] computes the right Bbox for the item --- .../Plugins/PCA/Scene_edit_box_item.cpp | 29 +++++++------------ .../Plugins/PCA/Scene_edit_box_item.h | 2 +- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp index 69cd2ff055e..c3c6d664222 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.cpp @@ -393,19 +393,16 @@ void Scene_edit_box_item::compute_bbox() const f_matrix.data()[i] = (float)d->frame->matrix()[i]; } - double xmin,ymin,zmin,xmax,ymax,zmax; - xmin =d->vertices[0].position().x(); - ymin =d->vertices[0].position().y(); - zmin =d->vertices[0].position().z(); - xmax =d->vertices[6].position().x(); - ymax =d->vertices[6].position().y(); - zmax =d->vertices[6].position().z(); - QVector3D min(xmin, ymin, zmin); - QVector3D max(xmax, ymax, zmax); - min = f_matrix*min; - max = f_matrix*max; - Scene_item::Bbox bb(min.x(),min.y(),min.z(),max.x(),max.y(),max.z()); - _bbox = bb; + QVector3D min(d->pool[0], d->pool[1], d->pool[2]); + QVector3D max(d->pool[3], d->pool[4], d->pool[5]); + + for(int i=0; i< 3; ++i) + { + min[i] += d->frame->translation()[i]-d->center_[i]; + max[i] += d->frame->translation()[i]-d->center_[i]; + } + + _bbox = Scene_item::Bbox(min.x(),min.y(),min.z(),max.x(),max.y(),max.z()); } @@ -938,7 +935,6 @@ void Scene_edit_box_item_priv::draw_picking(Viewer_interface* viewer) program->release(); } -//!\todo redo the API to only use a list of selected vertices void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir) { qglviewer::AxisPlaneConstraint::Type prev_cons = constraint.translationConstraintType(); @@ -957,7 +953,6 @@ void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir) for( int i=0; i<3; ++i) center_[i] =(pool[i]+pool[i+3])/2; frame->translate(frame->inverseTransformOf(relative_center_)); - item->invalidateOpenGLBuffers(); } else if(selected_edge != NULL) { @@ -978,7 +973,6 @@ void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir) for( int i=0; i<3; ++i) center_[i] =(pool[i]+pool[i+3])/2; frame->translate(frame->inverseTransformOf(relative_center_)); - item->invalidateOpenGLBuffers(); } else if(selected_face != NULL) { @@ -996,8 +990,8 @@ void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir) for( int i=0; i<3; ++i) center_[i] =(pool[i]+pool[i+3])/2; frame->translate(frame->inverseTransformOf(relative_center_)); - item->invalidateOpenGLBuffers(); } + item->invalidateOpenGLBuffers(); constraint.setTranslationConstraintType(prev_cons); } @@ -1015,7 +1009,6 @@ bool Scene_edit_box_item_priv::applyX(double x, double dirx) } return false; } - bool Scene_edit_box_item_priv::applyY(double y, double diry) { if(y == pool[1]) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.h b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.h index ad0ab9253ce..f3baca8b50c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_edit_box_item.h @@ -43,7 +43,7 @@ class Q_DECL_EXPORT Scene_edit_box_item: public CGAL::Three::Scene_item Scene_edit_box_item(const CGAL::Three::Scene_interface* scene_interface); ~Scene_edit_box_item(); bool isFinite() const { return true; } - bool isEmpty() const { return true; } + bool isEmpty() const { return false; } void compute_bbox() const; bool manipulatable() const { return true; }