Как слепить класс и метод.

Burbon_m
Offline
Зарегистрирован: 24.12.2014

Есть вот такая простыня. Но выглядит по дурацки.

// Using UTFT lib.
#include <UTFT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];


//Model and pin settings
UTFT myHUD(HX8352A,22,23,31,33);

void setup()
{
// Setup the LCD
  myHUD.InitLCD();
  myHUD.setFont(SmallFont);
}

void loop()
{
  
  int center_X = myHUD.getDisplayXSize() / 2;
  int center_Y = myHUD.getDisplayYSize() / 2;
  
  
  
  // Начальные координаты образа

  int Horiz_Left[4] = {center_X-8, center_Y, center_X-100, center_Y};
  int Horiz_Left_Down_Mark[4] = {center_X-100, center_Y, center_X-100, center_Y+8};
  int Horiz_Right[4] = {center_X+8, center_Y, center_X+100, center_Y};
  int Horiz_Right_Down_Mark[4] = {center_X+100, center_Y, center_X+100, center_Y+8};
  int RotatedCoord[4] ={};
  
  myHUD.setColor(128,255,0);
  
  int Roll=33; //Например
  
  // Вращаем и рисуем образ в зависимости от угла.
  
  RotatedCoord[0] = RotateX(Horiz_Left[0],Horiz_Left[1],center_X,center_Y,Roll);
  RotatedCoord[1] = RotateY(Horiz_Left[0],Horiz_Left[1],center_X,center_Y,Roll);
  RotatedCoord[2] = RotateX(Horiz_Left[2],Horiz_Left[3],center_X,center_Y,Roll);
  RotatedCoord[3] = RotateY(Horiz_Left[2],Horiz_Left[3],center_X,center_Y,Roll);
  myHUD.drawLine(RotatedCoord[0], RotatedCoord[1], RotatedCoord[2], RotatedCoord[3]);
 
  RotatedCoord[0] = RotateX(Horiz_Left_Down_Mark[0],Horiz_Left_Down_Mark[1],center_X,center_Y,Roll);
  RotatedCoord[1] = RotateY(Horiz_Left_Down_Mark[0],Horiz_Left_Down_Mark[1],center_X,center_Y,Roll);
  RotatedCoord[2] = RotateX(Horiz_Left_Down_Mark[2],Horiz_Left_Down_Mark[3],center_X,center_Y,Roll);
  RotatedCoord[3] = RotateY(Horiz_Left_Down_Mark[2],Horiz_Left_Down_Mark[3],center_X,center_Y,Roll);
  myHUD.drawLine(RotatedCoord[0], RotatedCoord[1], RotatedCoord[2], RotatedCoord[3]);
  
  RotatedCoord[0] = RotateX(Horiz_Right[0],Horiz_Right[1],center_X,center_Y,Roll);
  RotatedCoord[1] = RotateY(Horiz_Right[0],Horiz_Right[1],center_X,center_Y,Roll);
  RotatedCoord[2] = RotateX(Horiz_Right[2],Horiz_Right[3],center_X,center_Y,Roll);
  RotatedCoord[3] = RotateY(Horiz_Right[2],Horiz_Right[3],center_X,center_Y,Roll);
  myHUD.drawLine(RotatedCoord[0], RotatedCoord[1], RotatedCoord[2], RotatedCoord[3]);
  
  RotatedCoord[0] = RotateX(Horiz_Right_Down_Mark[0],Horiz_Right_Down_Mark[1],center_X,center_Y,Roll);
  RotatedCoord[1] = RotateY(Horiz_Right_Down_Mark[0],Horiz_Right_Down_Mark[1],center_X,center_Y,Roll);
  RotatedCoord[2] = RotateX(Horiz_Right_Down_Mark[2],Horiz_Right_Down_Mark[3],center_X,center_Y,Roll);
  RotatedCoord[3] = RotateY(Horiz_Right_Down_Mark[2],Horiz_Right_Down_Mark[3],center_X,center_Y,Roll);
  myHUD.drawLine(RotatedCoord[0], RotatedCoord[1], RotatedCoord[2], RotatedCoord[3]);
 
}

// Функции вращения

int RotateX(int x, int y, int axis_x, int axis_y, float Angle)
{
  int x1 = axis_x + (x - axis_x) * cos(Angle*PI/180) - (y-axis_y) * sin(Angle*PI/180);
  return x1;
}

int RotateY(int x, int y, int axis_x, int axis_y, float Angle)
{
  int y1 = axis_y + (y - axis_y) * cos(Angle*PI/180) + (x-axis_x) * sin(Angle*PI/180);
  return y1;
}

Полскажите как из этого создать класс который:

при запуске конструктора сразу имел бы внутри center_X, center_Y (для совмещения с экранами разного разрешения)

имеет метод Draw (например) использующий метод класса UTFT или таки придётся передирать код рисования линии?

всё хочется уложит примерно в myHUD.Draw(Roll);

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не вдаваясь в подробности, например, так:

class MyHUD : public UTFT
{
...
private:
  int m_center_X;
  int m_center_Y;
...
};

Плюс добавить методы RotateX,Y туда же, например, в protected: область.