mirror of https://github.com/CGAL/cgal
Fix the drawing of the children's group when their renderingMode isn't compatible.
This commit is contained in:
parent
22636f6a76
commit
7b338f4e45
|
|
@ -352,7 +352,6 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
|
|||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
viewer->glEnable(GL_LIGHTING);
|
||||
viewer->glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
|
||||
viewer->glPointSize(2.f);
|
||||
viewer->glLineWidth(1.0f);
|
||||
if(index == selected_item || selected_items_list.contains(index))
|
||||
|
|
@ -406,7 +405,6 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
|
|||
|| item.renderingMode() == Wireframe)
|
||||
{
|
||||
viewer->glDisable(GL_LIGHTING);
|
||||
viewer->glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
|
||||
viewer->glPointSize(2.f);
|
||||
viewer->glLineWidth(1.0f);
|
||||
if(index == selected_item || selected_items_list.contains(index))
|
||||
|
|
@ -428,7 +426,6 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
|
|||
else{
|
||||
if( item.renderingMode() == PointsPlusNormals ){
|
||||
viewer->glDisable(GL_LIGHTING);
|
||||
viewer->glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
|
||||
viewer->glPointSize(2.f);
|
||||
viewer->glLineWidth(1.0f);
|
||||
if(index == selected_item || selected_items_list.contains(index))
|
||||
|
|
@ -477,7 +474,6 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
|
|||
(!with_names && item.renderingMode() == PointsPlusNormals))
|
||||
{
|
||||
viewer->glDisable(GL_LIGHTING);
|
||||
viewer->glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);
|
||||
viewer->glPointSize(2.0f);
|
||||
viewer->glLineWidth(1.0f);
|
||||
|
||||
|
|
@ -558,7 +554,7 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
|
|||
{
|
||||
Q_EMIT(itemPicked(index_map.key(mainSelectionIndex())));
|
||||
}
|
||||
|
||||
Q_EMIT drawFinished();
|
||||
}
|
||||
|
||||
// workaround for Qt-4.2 (see above)
|
||||
|
|
@ -1245,6 +1241,7 @@ void Scene::add_group(Scene_group_item* group)
|
|||
changeGroup(item(id),group);
|
||||
redraw_model();
|
||||
}
|
||||
connect(this, SIGNAL(drawFinished()), group, SLOT(resetDraw()));
|
||||
}
|
||||
|
||||
namespace scene { namespace details {
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@ Q_SIGNALS:
|
|||
void selectionRay(double, double, double, double, double, double);
|
||||
void selectionChanged(int i);
|
||||
void restoreCollapsedState();
|
||||
void drawFinished();
|
||||
private Q_SLOTS:
|
||||
//! Casts a selection ray and calls the item function select.
|
||||
void setSelectionRay(double, double, double, double, double, double);
|
||||
|
|
|
|||
|
|
@ -647,6 +647,12 @@ void Scene_c3t3_item::draw_points(CGAL::Three::Viewer_interface * viewer) const
|
|||
viewer->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(positions_grid.size() / 3));
|
||||
program->release();
|
||||
vaos[Grid]->release();
|
||||
if(spheres_are_shown)
|
||||
{
|
||||
spheres->setPlane(this->plane());
|
||||
}
|
||||
Scene_group_item::draw_edges(viewer);
|
||||
|
||||
}
|
||||
|
||||
void Scene_c3t3_item::draw_triangle(const Kernel::Point_3& pa,
|
||||
|
|
@ -1154,6 +1160,8 @@ void Scene_c3t3_item::show_spheres(bool b)
|
|||
if(b && !spheres)
|
||||
{
|
||||
spheres = new Scene_spheres_item(this, true);
|
||||
spheres->setName("Protecting spheres");
|
||||
spheres->setRenderingMode(Gouraud);
|
||||
connect(spheres, SIGNAL(destroyed()), this, SLOT(reset_spheres()));
|
||||
last_known_scene->addItem(spheres);
|
||||
last_known_scene->changeGroup(spheres, this);
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public:
|
|||
|
||||
// Indicate if rendering mode is supported
|
||||
bool supportsRenderingMode(RenderingMode m) const {
|
||||
return (m != Gouraud && m != PointsPlusNormals && m != Splatting);
|
||||
return (m != Gouraud && m != PointsPlusNormals && m != Splatting && m != Points);
|
||||
}
|
||||
|
||||
void draw(CGAL::Three::Viewer_interface* viewer) const;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ Scene_group_item::Scene_group_item(QString name, int nb_vbos, int nb_vaos )
|
|||
{
|
||||
this->name_ = name;
|
||||
expanded = true;
|
||||
already_drawn = false;
|
||||
}
|
||||
|
||||
bool Scene_group_item::isFinite() const
|
||||
|
|
@ -82,7 +83,8 @@ void Scene_group_item::setRenderingMode(RenderingMode m)
|
|||
Scene_item::setRenderingMode(m);
|
||||
Q_FOREACH(Scene_item* child, children)
|
||||
{
|
||||
child->setRenderingMode(m);
|
||||
if(child->supportsRenderingMode(m))
|
||||
child->setRenderingMode(m);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -118,7 +120,7 @@ void Scene_group_item::moveUp(int i)
|
|||
}
|
||||
|
||||
void Scene_group_item::draw(CGAL::Three::Viewer_interface* viewer) const {
|
||||
if(viewer->inDrawWithNames()) return;
|
||||
if(viewer->inDrawWithNames() || already_drawn ) return;
|
||||
Q_FOREACH(Scene_item* child, children) {
|
||||
if(!child->visible()) continue;
|
||||
switch(child->renderingMode()) {
|
||||
|
|
@ -128,12 +130,26 @@ void Scene_group_item::draw(CGAL::Three::Viewer_interface* viewer) const {
|
|||
child->draw(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case FlatPlusEdges:
|
||||
case Wireframe:
|
||||
case PointsPlusNormals:
|
||||
child->draw_edges(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case Points:
|
||||
case PointsPlusNormals:
|
||||
child->draw_points(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
already_drawn = true;
|
||||
}
|
||||
|
||||
void Scene_group_item::draw_edges(CGAL::Three::Viewer_interface* viewer) const
|
||||
{
|
||||
if(viewer->inDrawWithNames()) return;
|
||||
if(viewer->inDrawWithNames() || already_drawn ) return;
|
||||
Q_FOREACH(Scene_item* child, children) {
|
||||
if(!child->visible()) continue;
|
||||
switch(child->renderingMode()) {
|
||||
|
|
@ -143,12 +159,26 @@ void Scene_group_item::draw_edges(CGAL::Three::Viewer_interface* viewer) const
|
|||
child->draw_edges(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case Flat:
|
||||
case FlatPlusEdges:
|
||||
case Gouraud:
|
||||
child->draw(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case Points:
|
||||
case PointsPlusNormals:
|
||||
child->draw_points(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
already_drawn = true;
|
||||
}
|
||||
|
||||
void Scene_group_item::draw_points(CGAL::Three::Viewer_interface* viewer) const
|
||||
{
|
||||
if(viewer->inDrawWithNames()) return;
|
||||
if(viewer->inDrawWithNames() || already_drawn ) return;
|
||||
Q_FOREACH(Scene_item* child, children) {
|
||||
if(!child->visible()) continue;
|
||||
switch(child->renderingMode()) {
|
||||
|
|
@ -157,7 +187,22 @@ void Scene_group_item::draw_points(CGAL::Three::Viewer_interface* viewer) const
|
|||
child->draw_points(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case Flat:
|
||||
case FlatPlusEdges:
|
||||
case Gouraud:
|
||||
child->draw(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
switch(child->renderingMode()) {
|
||||
case FlatPlusEdges:
|
||||
case Wireframe:
|
||||
case PointsPlusNormals:
|
||||
child->draw_edges(viewer); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
already_drawn = true;
|
||||
}
|
||||
|
||||
void Scene_group_item::draw_splats(CGAL::Three::Viewer_interface* viewer) const
|
||||
|
|
|
|||
|
|
@ -130,6 +130,8 @@ public :
|
|||
//!Moves a child down in the list.
|
||||
void moveDown(int);
|
||||
|
||||
public Q_SLOTS:
|
||||
void resetDraw() { already_drawn = false;}
|
||||
private:
|
||||
//!Contains a reference to all the children of this group.
|
||||
QList<Scene_item*> children;
|
||||
|
|
@ -137,6 +139,7 @@ private:
|
|||
void update_group_number(Scene_item*new_item, int n);
|
||||
|
||||
bool expanded;
|
||||
mutable bool already_drawn;
|
||||
|
||||
}; //end of class Scene_group_item
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue