#ifndef SURFACE3D_H 
#define SURFACE3D_H

class Surface3D // объект - треугольник
{ 
   private:
      int n0, n1, n2; // номера узлов
      int R0, R1, R2; // дискретные радиусы
      GLfloat teta0, phi0,  teta1, phi1, teta2, phi2; // координаты узлов 
      GLfloat x0, y0, z0, x1, y1, z1, x2, y2, z2; // координаты узлов
      int ps; // параметр построения сетки
      GLuint n_triangleList; // переменная хранит номер дисплейного списка (уникальный номер таблицы отображений)
  
   public:   
      Surface3D(); // конструктор-треугольник по умолчанию // для массива объектов, с счетчиком
      Surface3D(int); // конструктор-треугольник с параметром // для одиночного объекта
      ~Surface3D(); // деструктор

      void R_fun(GLint, GLfloat*); // рельефная радиус-функция для узла
      void C_fun(GLint, GLfloat*, GLfloat*, GLfloat*); // цветовая радиус-функция для узла
      
      void paint(); // построить треугольник
      void paint_no_color(); // построить треугольник без цветовой функции
      void netpaint(); // построить сетку
      void create_triangleList(GLfloat fSize/*=1.0f*/); // создание таблицы отображений
      GLuint put_n_triangleList(); // вернуть номер таблицы отображений
      
      void redefine(int, int, int); // переопределить радиусы треугольника
      void single_out(); // выделить треугольник
      void single_out_line(int); // выделить линию, противолежащию узлу
      void single_out_point(int); // выделить узел точкой   
      
      int putn0(); // возвращает номера узлов треугольника
      int putn1();
      int putn2();
      
      int putR0(); // возвращает дискретный радиус треугольника
      int putR1();
      int putR2(); 
      
      GLfloat putteta0();
      GLfloat putteta1();
      GLfloat putteta2(); 
      
      GLfloat putphi0();
      GLfloat putphi1();
      GLfloat putphi2();                
      
      GLfloat putx0();
      GLfloat puty0();
      GLfloat putz0();
      
      GLfloat putx1();
      GLfloat puty1();
      GLfloat putz1(); 
      
      GLfloat putx2();
      GLfloat puty2();
      GLfloat putz2();           
};

void putbase(); // загрузить базу
int putMtriangle_Sph_size(); // возвращает число треугольников
int put_last_part3(); // возвращает номер последнего узла

void set_num(int); // установить счетчик
void single_out_v(int, Surface3D*); // выделить тайл
void single_out_v_contour(int, Surface3D*); // выделить тайл по контору

int put_R(int, Surface3D*); // возвращает радиус узла для элемента массива объектов
void redefine_v(int, int, Surface3D*, int*, int*, int*, int*, int*, int*); // переопределить узел и вернуть номера треугольников

void R_save(Surface3D*);
void R_load();
void R_new();

#endif 