Компьютерная графика, мультимедиа и игры на Visual C#

       

Проектирование заготовительных операций подготовки материала


Листинг 86.1. Расчет оптимальных параметров разрезки листа на полосы.

//Объявляем глобальные переменные:

public double d, H, Rn, s, s_sheet, C, L, rho,

      nu, El, sig_ys, sig_u, e_u, e_tot;

public int Radio;

double dH, Ha, D;

double B, a, b, t, W, F, Nbl, W_F;

double pi = Math.PI;

// Расчетные функции:

//Функции класса объектов "Полуфабрикаты":

double Allowance()

{

      //Определение техн-го припуска, например, по таблице:



      dH=5;

      //Если включен переключатель 2,

      // то обрезка припуска не нужна; при этом  Radio=1:

      if (Radio==1) dH=0;

      return dH;

}

double Semiproduct()

{

      dH=Allowance();

      //Расчет размеров полуфабриката:

      Ha = H + dH;

      return Ha;

}

//Функции класса объектов "Заготовки":

double Area1_Semiproduct()

{

      double A1 = pi*(d-2*Rn)*(d-2*Rn)/4;

      return A1; //mm*mm

}

double Area2_Semiproduct()

{

      double A2 = pi*(Rn-s/2)*(2*(Rn-s/2)+pi*(d-2*Rn)/2);

      return A2; //mm*mm

}

double Area3_Semiproduct()

{

      Ha=Semiproduct();

      double A3 = pi*(d-s)*(Ha-Rn);

      return A3; //mm*mm

}

double Area_Semiproduct()

{

      double A, A1, A2, A3;

      A1=Area1_Semiproduct();

      A2=Area2_Semiproduct();

      A3=Area3_Semiproduct(); A=A1+A2+A3;

      return A;

}

double DBlank()

{

      double A = Area_Semiproduct();

      D=Math.Sqrt(4*A/pi);

      return D;

}

//Функции класса объектов "Материалы":

double Bstrip()

{

      //Определение параметров раскроя:

      double del_st, del1, z_b;

      a=1.2; b=1.6; del_st=0.7; del1=0.4; z_b=1;

      //Шаг вырезки заготовок:

      D = DBlank(); t = D + a;

      //Расчет ширины полосы:

      B = D + 2*(b + del_st) + z_b + del1;

      return B;

}

void Cutting()

{

      //Определение параметров раскроя:

      double N_strip_1, N_strip_2, N_bl_st_1, N_bl_st_2,

            N_bl_1, N_bl_2;

      B = Bstrip();

      //Число полос из листа при продольной разрезке:


      N_strip_1 = Math.Floor(C/B);
      // Число полос из листа при поперечной разрезке:
      N_strip_2 = Math.Floor(L/B);
      //Шаг вырезки заготовок:
      D = DBlank(); t = D + a;
      //Число заготовок из полосы при продольной разрезке:
      N_bl_st_1 = Math.Floor((L - a)/t);
      //Число заготовок из полосы при поперечной разрезке:
      N_bl_st_2 = Math.Floor((C - a)/t);
      //Число заготовок из листа при продольной разрезке:
      N_bl_1 = N_bl_st_1 * N_strip_1;
      //Число заготовок из листа при поперечной разрезке:
      N_bl_2 = N_bl_st_2 * N_strip_2;
      //Проверка, при каком варианте разрезки
      // заготовок больше:
      if (N_bl_1 >= N_bl_2)
      {
            //Передача рассчитанных значений в окна TextBox:
            textBox5.Text = N_strip_1.ToString();
            W = N_strip_1 * B;
            textBox6.Text = W.ToString();
            F = C - W;
            textBox7.Text = F.ToString();
            textBox8.Text = C.ToString(); W_F = C;
            textBox9.Text = (W/W_F).ToString();
            Nbl=N_bl_1;
      }
      else
      {
            //Передача рассчитанных значений в окна TextBox:
            textBox5.Text = N_strip_2.ToString();
            W = N_strip_2 * B;
            textBox6.Text = W.ToString();
            F = L - W;
            textBox7.Text = F.ToString();
            textBox8.Text = L.ToString(); W_F = L;
            textBox9.Text = (W/W_F).ToString();
            Nbl=N_bl_2;
      }
}
Теперь для выполнения расчета и вывода результатов расчета в окна TextBox на Form3 (при помощи кнопки со знаком равенства “=”) дважды щелкаем эту кнопку. Появляется файл Form3.cs с шаблоном, в который записываем следующий код.
Листинг 86.2. Код кнопки “=” на Form3 для расчета первой операции.
//Передача размеров листа s, C, L
//из окон TextBox на Form1 в окна TextBox на Form3:
textBox1.Text = s_sheet.ToString();
textBox2.Text = C.ToString();
textBox3.Text = L.ToString();


//Расчет и передача значения ширины полосы "B"
//в окно TextBox4 на Form3:
textBox4.Text = Bstrip().ToString();
//Расчет и передача рациональных параметров
//разрезки листа на полосы в окна TextBox на Form3:
Cutting();
Листинг 86.3. Код для выполнения анимации.
bool myColor = false;
private void timer1_Tick(object sender, EventArgs e)
{
      //Вводим анимацию:
      if (myColor == false)
      {
            //Выводим красный цвет надписи элемента упр-я:
            this.button1.ForeColor = Color.Red;
            //Изменяем значение myColor на противоположное:
            myColor = true;
      }
      else
      {
            //Выводим зеленый цвет надписи элемента упр-я:             this.button1.ForeColor = Color.Green;
            //Изменяем значение myColor на противоположное:
            myColor = false;
      }
}
Щелчок по значку “x” (Close), который уже был на Form1 после создания проекта, или по кнопке Cancel, которую ввели мы (для удобства), закрывает не только данный активный вид панели, но и все последующие виды панели, которые мы вызвали после данного вида (т.е. закрываем приложение). После щелчка значка “x” (Close) или кнопки Cancel на Form3 закрывается только один этот вид панели, а все остальные панели остаются открытыми, и мы можем их анализировать или читать справку (если щелкнуть кнопку Help). Методика печати на принтере информации с панели (после щелчка кнопки Print, рис. 86.1) описана выше.
Как уже отмечалось, на практике часто ограничиваются только первой операцией разрезки листа на полосы; в этом случае следующая операция не нужна, и, соответственно, не нужна и кнопка Next>> на Form3. В нашем общем случае требуется, чтобы после щелчка кнопки Next>> выходила следующая форма (со следующим эффектом анимации), к разработке которой мы и приступаем.

Содержание раздела