Merge pull request #3358 from maxGimeno/Demo-Several_fixes-GF

Polyhedron demo:  Several fixes
This commit is contained in:
Laurent Rineau 2018-10-08 15:13:19 +02:00
commit 1a0ee8614a
9 changed files with 44 additions and 16 deletions

View File

@ -275,8 +275,8 @@ void Polyhedron_demo_point_set_normal_estimation_plugin::on_actionNormalEstimati
<< (memory>>20) << " Mb allocated"
<< std::endl;
}
item->setRenderingMode(PointsPlusNormals);
item->resetMenu();
item->setRenderingMode(ShadedPoints);
//***************************************
// normal orientation

View File

@ -652,12 +652,12 @@ protected:
shift_pressing = modifiers.testFlag(Qt::ShiftModifier);
ctrl_pressing = modifiers.testFlag(Qt::ControlModifier);
background = static_cast<CGAL::Three::Viewer_interface*>(*CGAL::QGLViewer::QGLViewerPool().begin())->grabFramebuffer();
}
// mouse events
if(shift_pressing && event->type() == QEvent::MouseButtonPress)
{
background = static_cast<CGAL::Three::Viewer_interface*>(*CGAL::QGLViewer::QGLViewerPool().begin())->grabFramebuffer();
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
// Start selection
if (mouseEvent->button() == Qt::LeftButton)

View File

@ -358,6 +358,7 @@ private:
++ nb_colored_pts;
colored_item->point_set()->set_color(*it, r, g, b);
}
colored_item->invalidateOpenGLBuffers();
}
// Providing a useful name consisting of the order of detection, name of type and number of inliers
@ -418,7 +419,7 @@ private:
poly_item->setName(QString("%1%2_alpha_shape").arg(QString::fromStdString(ss.str()))
.arg (QString::number (shape->indices_of_assigned_points().size())));
poly_item->setRenderingMode (Flat);
poly_item->invalidateOpenGLBuffers();
scene->addItem(poly_item);
if(scene->item_id(groups[0]) == -1)
scene->addItem(groups[0]);
@ -452,6 +453,7 @@ private:
point_item->setRenderingMode(item->renderingMode());
if (dialog.generate_subset()){
point_item->invalidateOpenGLBuffers();
scene->addItem(point_item);
if (dynamic_cast<CGAL::Shape_detection_3::Cylinder<Traits> *>(shape.get()))
{
@ -469,6 +471,7 @@ private:
if(scene->item_id(groups[0]) == -1)
scene->addItem(groups[0]);
point_item->invalidateOpenGLBuffers();
scene->changeGroup(point_item, groups[0]);
}
else if (dynamic_cast<CGAL::Shape_detection_3::Cone<Traits> *>(shape.get()))
@ -523,6 +526,7 @@ private:
pts_full->setName(tr("%1 (structured)").arg(item->name()));
pts_full->setRenderingMode(PointsPlusNormals);
pts_full->setColor(Qt::blue);
pts_full->invalidateOpenGLBuffers();
scene->addItem (pts_full);
}
std::cerr << "done" << std::endl;

View File

@ -893,6 +893,7 @@ private:
reco_item->setName(tr("%1 (RANSAC-based reconstruction)").arg(scene->item(index)->name()));
reco_item->setColor(Qt::magenta);
reco_item->setRenderingMode(FlatPlusEdges);
reco_item->invalidateOpenGLBuffers();
scene->addItem(reco_item);
}
else
@ -1090,6 +1091,7 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction
reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name()));
reco_item->setColor(Qt::lightGray);
reco_item->setRenderingMode(FlatPlusEdges);
reco_item->invalidateOpenGLBuffers();
scene->addItem(reco_item);
}
else
@ -1122,6 +1124,7 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction
reco_item->setColor(Qt::lightGray);
reco_item->setRenderingMode(FlatPlusEdges);
scene->addItem(reco_item);
reco_item->invalidateOpenGLBuffers();
}
else
{
@ -1173,6 +1176,7 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction
Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(pRemesh);
reco_item->setName(tr("%1 (poisson)").arg(pts_item->name()));
reco_item->setColor(Qt::lightGray);
reco_item->invalidateOpenGLBuffers();
scene->addItem(reco_item);
}
else if(smRemesh)
@ -1232,6 +1236,7 @@ void Polyhedron_demo_surface_reconstruction_plugin::advancing_front_reconstructi
reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name()));
reco_item->setColor(Qt::lightGray);
reco_item->setRenderingMode(FlatPlusEdges);
reco_item->invalidateOpenGLBuffers();
scene->addItem(reco_item);
}
else

View File

@ -31,7 +31,21 @@ bool Scene_group_item::isEmpty() const {
Scene_group_item::Bbox Scene_group_item::bbox() const
{
return Bbox(0, 0, 0, 0, 0,0);
Scene_item* first_non_empty = nullptr;
Q_FOREACH(Scene_interface::Item_id id, children)
if(!getChild(id)->isEmpty())
{
first_non_empty = getChild(id);
}
if(first_non_empty)
{
Bbox b =first_non_empty->bbox();
Q_FOREACH(Scene_interface::Item_id id, children)
b+=getChild(id)->bbox();
return b;
}
return Bbox(0,0,0,0,0,0);
}

View File

@ -135,6 +135,11 @@ QMenu* CGAL::Three::Scene_item::contextMenu()
return defaultContextMenu;
}
void CGAL::Three::Scene_item::resetMenu()
{
delete defaultContextMenu;
defaultContextMenu = nullptr;
}
CGAL::Three::Scene_group_item* CGAL::Three::Scene_item::parentGroup() const {
return parent_group;
}

View File

@ -231,7 +231,7 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const Scene_points_
d = new Scene_points_with_normal_item_priv(toCopy, this);
if (has_normals())
{
setRenderingMode(PointsPlusNormals);
setRenderingMode(ShadedPoints);
is_selected = true;
}
else
@ -254,7 +254,7 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const SMesh& input_
// Converts Polyhedron vertices to point set.
// Computes vertices normal from connectivity.
d = new Scene_points_with_normal_item_priv(input_mesh, this);
setRenderingMode(PointsPlusNormals);
setRenderingMode(ShadedPoints);
is_selected = true;
if(d->m_points->number_of_points() < 30 )
d->point_Slider->setValue(5);
@ -269,7 +269,7 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const Polyhedron& i
// Converts Polyhedron vertices to point set.
// Computes vertices normal from connectivity.
d = new Scene_points_with_normal_item_priv(input_mesh, this);
setRenderingMode(PointsPlusNormals);
setRenderingMode(ShadedPoints);
is_selected = true;
if(d->m_points->number_of_points() < 30 )
d->point_Slider->setValue(5);
@ -616,7 +616,7 @@ bool Scene_points_with_normal_item::read_las_point_set(std::istream& stream)
std::cerr << d->m_points->info();
if (d->m_points->has_normal_map())
setRenderingMode(PointsPlusNormals);
setRenderingMode(ShadedPoints);
if (d->m_points->check_colors())
std::cerr << "-> Point set has colors" << std::endl;
@ -654,7 +654,7 @@ bool Scene_points_with_normal_item::read_ply_point_set(std::istream& stream)
std::cerr << d->m_points->info();
if (d->m_points->has_normal_map())
setRenderingMode(PointsPlusNormals);
setRenderingMode(ShadedPoints);
if (d->m_points->check_colors())
std::cerr << "-> Point set has colors" << std::endl;

View File

@ -831,9 +831,6 @@ void Scene_surface_mesh_item_priv::triangulate_convex_facet(face_descriptor fd,
Scene_item_rendering_helper::Gl_data_names name,
bool index) const
{
const CGAL::qglviewer::Vec v_offset = static_cast<CGAL::Three::Viewer_interface*>(CGAL::QGLViewer::QGLViewerPool().first())->offset();
EPICK::Vector_3 offset = EPICK::Vector_3(v_offset.x, v_offset.y, v_offset.z);
Point p0,p1,p2;
SMesh::Halfedge_around_face_circulator he(halfedge(fd, *smesh_), *smesh_);
SMesh::Halfedge_around_face_circulator he_end = he;
@ -844,9 +841,9 @@ void Scene_surface_mesh_item_priv::triangulate_convex_facet(face_descriptor fd,
vertex_descriptor v0(target(*he_end, *smesh_)),
v1(target(*he, *smesh_)),
v2(target(next(*he, *smesh_), *smesh_));
p0 = smesh_->point(v0) + offset;
p1 = smesh_->point(v1) + offset;
p2 = smesh_->point(v2) + offset;
p0 = smesh_->point(v0);
p1 = smesh_->point(v1);
p2 = smesh_->point(v2);
if(!index)
{
CGAL::Color* color;

View File

@ -246,6 +246,9 @@ public:
//!
int getId()const;
//! invalidates the context menu. Call it when supportsRenderingMode() changes,
//! for example.
void resetMenu();
//!Handles key press events.
virtual bool keyPressEvent(QKeyEvent*){return false;}