diff options
Diffstat (limited to 'GudhUI/view/Viewer.cpp')
-rw-r--r-- | GudhUI/view/Viewer.cpp | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/GudhUI/view/Viewer.cpp b/GudhUI/view/Viewer.cpp deleted file mode 100644 index 42e35d6c..00000000 --- a/GudhUI/view/Viewer.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): David Salinas - * - * Copyright (C) 2014 Inria - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#include "Viewer.h" -#include "utils/UI_utils.h" - -Viewer::Viewer(QWidget* parent) : QGLViewer(QGLFormat(QGL::SampleBuffers), parent), instructor(0), theta(0), phi(0) { } - -void Viewer::set_instructor(Viewer_instructor* instructor_) { - instructor = instructor_; -} - -void Viewer::show_entire_scene() { - this->showEntireScene(); -} - -void Viewer::draw() { - instructor->give_instructions(); -} - -void Viewer::set_bounding_box(const Point_3 & lower_left, const Point_3 & upper_right) { - this->camera()->setSceneBoundingBox(qglviewer::Vec(lower_left[0], lower_left[1], lower_left[2]), - qglviewer::Vec(upper_right[0], upper_right[1], upper_right[2])); -} - -void Viewer::update_GL() { - this->updateGL(); -} - -void Viewer::init_scene() { - this->setBackgroundColor(Qt::white); - ::glEnable(GL_LINE_SMOOTH); - init_light(); -} - -void Viewer::init_light() { - ::glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); -} - -void Viewer::set_light() { - if (theta >= 0 && phi >= 0) { - const GLfloat pos[4] = {static_cast<float> (sin(phi) * cos(theta)), - static_cast<float> (sin(phi) * sin(theta)), - static_cast<float> (cos(phi)), 0.}; - glLightfv(GL_LIGHT0, GL_POSITION, pos); - } -} - -void Viewer::set_light_direction(double theta_, double phi_) { - theta = theta_; - phi = phi_; -} - -/** - * set the light in the direction of the observer - */ -void Viewer::set_light_direction() { - theta = -1; - phi = -1; -} - -void Viewer::postSelection(const QPoint& point) { - bool found; - - auto vec = this->camera()->pointUnderPixel(point, found); - - if (found) { - Point_3 position(vec[0], vec[1], vec[2]); - emit(click(position)); - } -} - -//////////////////////// -// draw -//////////////////////// - -void Viewer::set_size_point(double size_points) { - ::glPointSize(size_points); -} - -void Viewer::draw_point(const Point_3& p, const Color& color, double size_points) { - ::glColor3f(color.r, color.g, color.b); - ::glDisable(GL_LIGHTING); - ::glEnable(GL_POINT_SMOOTH); - ::glPointSize(size_points); - ::glBegin(GL_POINTS); - ::glVertex3d(p.x(), p.y(), p.z()); - ::glEnd(); - ::glDisable(GL_POINT_SMOOTH); -} - -void Viewer::begin_draw_points(double size, bool light) { - light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING); - ::glEnable(GL_POINT_SMOOTH); - ::glPointSize(size); - ::glBegin(GL_POINTS); -} - -void Viewer::set_color(const Color& color) { - ::glColor3f(color.r, color.g, color.b); -} - -void Viewer::draw_points(const Point_3 & point) { - ::glVertex3d(point.x(), point.y(), point.z()); -} - -void Viewer::end_draw_points() { - ::glEnd(); - ::glDisable(GL_POINT_SMOOTH); -} - -void Viewer::draw_edge(const Point_3 &a, const Point_3 &b, const Color& color, double size) { - ::glColor3f(color.r, color.g, color.b); - ::glPointSize(3.0); - ::glLineWidth(size); - ::glBegin(GL_LINES); - ::glVertex3f(a.x(), a.y(), a.z()); - ::glVertex3f(b.x(), b.y(), b.z()); - ::glEnd(); -} - -void Viewer::begin_draw_edges(double size, bool light) { - ::glLineWidth(size); - ::glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - ::glEnable(GL_POLYGON_OFFSET_LINE); - ::glPolygonOffset(3.0f, -3.0f); - light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING); - ::glBegin(GL_LINES); -} - -void Viewer::draw_edges(const Point_3 &a, const Point_3 &b) { - ::glVertex3f(a.x(), a.y(), a.z()); - ::glVertex3f(b.x(), b.y(), b.z()); -} - -void Viewer::end_draw_edges() { - ::glEnd(); -} - -void Viewer::begin_draw_triangles(double size, bool light, bool transparent) { - if (transparent) { - ::glEnable(GL_BLEND); - ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - ::glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - ::glEnable(GL_POLYGON_OFFSET_FILL); - ::glPolygonOffset(3.0f, -3.0f); - light ? glEnable(GL_LIGHTING) : glDisable(GL_LIGHTING); - ::glBegin(GL_TRIANGLES); -} - -void Viewer::draw_triangles(const Point_3& p1, const Point_3& p2, const Point_3& p3) { - if (!CGAL::collinear(p1, p2, p3)) { - auto triangle_normal = CGAL::unit_normal(p1, p2, p3); - ::glNormal3d(triangle_normal.x(), triangle_normal.y(), triangle_normal.z()); - ::glVertex3d(p1.x(), p1.y(), p1.z()); - ::glVertex3d(p2.x(), p2.y(), p2.z()); - ::glVertex3d(p3.x(), p3.y(), p3.z()); - } -} - -void Viewer::end_draw_triangles() { - ::glEnd(); -} - -#include "Viewer.moc" |