#ifndef SCENE3D_H 
#define SCENE3D_H

#include <QGLWidget>
#include "surface3D.h"

class Scene3D : public QGLWidget // класс Scene3D наследует встроенный класс QGLWidget
{ 
   private: 
      int nWt, nHt; // хранят ширину и высоту окна

      GLfloat xRotate;   // переменная хранит угол поворота вокруг оси X
      GLfloat yRotate;   // переменная хранит угол поворота вокруг оси Y   
      GLfloat zRotate;   // переменная хранит угол поворота вокруг оси Z
      GLfloat yTransl;
      GLfloat nScale;    // переменная отвечает за масштабирование обьекта
      GLfloat pScale;    // отношение сторон виджета
   
      QPoint ptrMousePosition; // переменная, хранящая координату указателя мыши в момент нажатия 
      bool mousePar; // параметр мыши - что сделать: выбрать узел или повернуть сцену
            
      bool Point;
      void drawPoint();
      void drawTriangle();
      
      bool wheelSwitch; // переключатель колесика мыши с масштаба на изменение радиуса узла
      
      bool Axes;
      void drawAxes();
      
      Surface3D* triangle; // массив объектов класса Surface3D
      
      void triangleSelection(int xPos, int yPos); // выбрать треугольник по координате мыши
      void pointSelection(int xPos, int yPos, int i, GLint* vp); // координаты мыши на экране, номер треугольника, окно просмотра      

      void R_Plus(int i, Surface3D* tr); // повысить радиус узла i
      void R_Minus(int i, Surface3D* tr); // понизить радиус узла i
      
   // зарезервированные функции в QGLWidget   
   protected:
      /*virtual*/ void initializeGL();                    // метод для проведения инициализаций, связанных с OpenGL 
      /*virtual*/ void resizeGL(int nWidth, int nHeight); // метод вызывается при изменении размеров объекта
      /*virtual*/ void paintGL();                         // метод, чтобы заново перерисовать содержимое виджета
   
      /*virtual*/ void mousePressEvent(QMouseEvent* pe);  // методы обработки события мыши для осуществления поворота фигуры (нажатие)
      /*virtual*/ void mouseMoveEvent(QMouseEvent* pe);   // методы обработки события мыши для осуществления поворота фигуры (перемещение)
      /*virtual*/ void mouseReleaseEvent(QMouseEvent* pe);// методы обработки событий мыши при отжатии клавиши
      /*virtual*/ void keyPressEvent(QKeyEvent* pe);      // методы обработки события при нажатии определенной клавиши  
      /*virtual*/ void wheelEvent(QWheelEvent* pe);       // метод обработки события колесика мыши
      
      void save();
      void load();
      void create_new();      

   public: 
      Scene3D(QWidget* pwgt = 0) ; // конструктор класса (= 0 -- главное окно)

}; 

#endif 