Функция рефакторинга в c - PullRequest
       1

Функция рефакторинга в c

0 голосов
/ 15 января 2020

У меня есть фрагмент кода, который выглядит следующим образом:

void printdatamatrix(int xp, int yp, int h)
{
   int wide;
   int x = xp;
   int y = yp;

   if(h>=40)
   {
      wide = h /9;
   }
   else
   { 
      wide = h / 4;
   }

   /*vertical - L-shape*/
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);
   x += wide;
   drawsquare(x, y, wide);

   /*horizontal - L-shape*/
   x = xp;
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);

   x = xp;
   y = yp;
   x += wide;
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);

   x = xp;
   y = yp;
   x += wide * 2;
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide * 2;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide * 2;
   drawsquare(x, y, wide);

   x = xp;
   y = yp;
   x += wide * 3;
   y -= wide * 3;
   drawsquare(x, y, wide);
   y -= wide;
   drawsquare(x, y, wide);
   y -= wide * 2;
   drawsquare(x, y, wide);
   y -= wide * 4;
   drawsquare(x, y, wide);
         .
         .
         .
        etc

Функция drawsquare (x, y, wide) создает квадрат, чтобы сформировать матрицу данных (штрих-код). Я хотел бы знать, могу ли я изменить рефакторинг функции printdatamatrix (int xp, int yp, int h), чтобы она была меньше. Единственное, что я подумал, это написать 2 для петель и включить L-форму (одну для вертикальной, а другую для горизонтальной).

Любая помощь приветствуется. Заранее спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Я создал вложенный l oop, чтобы нарисовать мой шаблон, хранящийся в 2d массиве. Это так:

void printdatamatrix(int xp, int yp, int h, int dirn)
{
    int wide = _convertPixelsToMmForDataMatrix(h); 
    int x = xp; 
    int y = yp; 
    unsigned int i, j;

    static bool my_data[ROWS][COLS] = {
    { 1,1,1,1,1,1,1,1,1,1,1,1 },
    { 1,1,1,1,1,1,1,0,1,0,1,0 },
    { 1,1,0,1,1,1,1,0,1,1,0,1 },
    { 1,0,0,1,1,0,1,0,0,0,1,0 },
    { 1,1,0,1,0,1,0,0,1,1,0,1 },
    { 1,1,0,1,1,0,0,1,0,1,0,0 },
    { 1,0,1,1,0,1,1,0,1,0,1,1 },
    { 1,1,1,0,0,0,1,0,0,0,1,0 },
    { 1,1,0,0,0,0,0,1,1,1,1,1 },
    { 1,1,0,0,1,0,0,0,0,0,0,0 },
    { 1,1,0,0,1,0,0,1,0,1,0,1 },
    { 1,0,1,0,1,0,1,0,1,0,1,0 }
    };

    for (i = 0; i < 12; ++i)
    {
        for (j = 0; j < 12; ++j)
        {
            if (my_data[i][j])
            { 
                switch (dirn)
                {
                    case 1: // 270
                        drawsquare(x + j * wide, y + i * wide, wide);
                        break;
                    case 2: // 0
                        drawsquare(x + i * wide, y - j * wide, wide);
                        break;
                    case 3: // 90
                        drawsquare(x - j * wide, y - i * wide, wide);
                        break;
                    case 4: // 180
                        drawsquare(x - i * wide, y + j * wide, wide);
                        break;
                }
            }
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...