Жарков В.А. - Visual C++ 2005, DirectX 9.0c и Microsoft Agent в компьютерной графике, мультимедиа и играх (Листинги книги) - 2005
.pdfГлава 79. Система компьютерного проектирования техпроцессов
Листинг 79.1. Метод кнопки OK для передачи данных с Form1 на Form3.
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
//Объявляем локальные переменные: double d, H, Rn, s, s_sheet, C, L, rho,
nu, El, sig_ys, sig_u, e_u, e_tot; //Считываем исходные данные из окон формы Form1: d = Convert::ToDouble(textBox1->Text);
H = Convert::ToDouble(textBox2->Text);
Rn = Convert::ToDouble(textBox3->Text);
s = Convert::ToDouble(textBox4->Text); s_sheet = Convert::ToDouble(textBox5->Text); C = Convert::ToDouble(textBox6->Text);
L = Convert::ToDouble(textBox7->Text); rho = Convert::ToDouble(textBox8->Text); nu = Convert::ToDouble(textBox9->Text); El = Convert::ToDouble(textBox10->Text);
sig_ys = Convert::ToDouble(textBox11->Text); sig_u = Convert::ToDouble(textBox12->Text); e_u = Convert::ToDouble(textBox13->Text); e_tot = Convert::ToDouble(textBox14->Text);
//Присваиваем исходные данные другим переменным //класса формы Form3, но с такими же именами: Form3^ myForm3 = gcnew Form3();
myForm3->d = d; myForm3->H = H; myForm3->Rn = Rn; myForm3->s = s; myForm3->Radio = Radio; myForm3->s_sheet = s_sheet; myForm3->C = C; myForm3->L = L; myForm3->rho = rho; myForm3->nu = nu; myForm3->El = El; myForm3->sig_ys = sig_ys; myForm3->sig_u = sig_u; myForm3->e_u = e_u; myForm3->e_tot = e_tot;
//Выводим следующую форму Form3: myForm3->Show();
}
Листинг 79.2. Код для выполнения анимации.
bool static myColor = false;//Объявляем булеву переменную. private: System::Void timer1_Tick(System::Object^ sender,
Глава 79. Система компьютерного проектирования техпроцессов |
311 |
System::EventArgs^ e)
{
if (myColor == false)
{
//Выводим белый цвет элемента управления: button2->BackColor = Color::White;
//Изменяем значение myColor на противоположное: myColor = true;
}
else
{
//Выводим желтый цвет элемента управления: button2->BackColor = Color::Yellow;
//Изменяем значение myColor на противоположное: myColor = false;
}
}
Глава 80. Проектирование заготовительных операций подготовки материала
Листинг 80.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 static 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()
{
Глава 80. Проектирование заготовительных операций |
313 |
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;
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; //Шаг вырезки заготовок t:
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);
314 Жарков В.А. Компьютерная графика, мультимедиа и игры на Visual C++ 2005
//Число полос из листа при поперечной разрезке: 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)
{
//Передача расчетных значений в окна формы: 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
{
//Передача расчетных значений в окна формы: 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;
}
}
Глава 80. Проектирование заготовительных операций |
315 |
Листинг 80.2. Код кнопки “=” на Form3 для расчета первой операции.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
//Передача размеров листа s, C, L
//из окон формы Form1 в окна формы Form3: textBox1->Text = s_sheet.ToString(); textBox2->Text = C.ToString(); textBox3->Text = L.ToString();
//Расчет и передача значения ширины полосы "B" //в окно TextBox формы Form3:
textBox4->Text = Bstrip().ToString();
//Расчет и передача рациональных параметров //разрезки листа на полосы в окна TextBox формы Form3: Cutting();
}
Листинг 80.3. Код для выполнения анимации.
bool static myColor = false;//Объявляем булеву переменную.
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
if (myColor == false)
{
//Выводим красный цвет надписи элемента управления: button1->ForeColor = Color::Red;
//Изменяем значение myColor на противоположное: myColor = true;
}
else
{
//Выводим зеленый цвет надписи элемента управления: button1->ForeColor = Color::Green;
//Изменяем значение myColor на противоположное: myColor = false;
}
}
Глава 81. Проектирование операций изготовления заготовок
Листинг 81.1. Метод для передачи исходных данных с Form3 в Form5.
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
//Объявляем объект myForm5 класса Form5: Form5^ myForm5 = gcnew Form5();
//Присваиваем исходные данные другим переменным //класса Form5, но с такими же именами: myForm5->d = d; myForm5->H = H;
myForm5->Rn = Rn; myForm5->s = s;
myForm5->Radio = Radio; myForm5->s_sheet = s_sheet; myForm5->C = C; myForm5->L = L;
myForm5->rho = rho; myForm5->nu = nu; myForm5->El = El; myForm5->sig_ys = sig_ys; myForm5->sig_u = sig_u; myForm5->e_u = e_u; myForm5->e_tot = e_tot;
//Выводим форму Form5: myForm5->Show();
}
Листинг 81.2. Метод для расчета силы вырубки Fcut.
double ForceCut()
{
double A, k_cut, Fcut; A = Area_Semiproduct(); D = Math::Sqrt(4*A/pi); k_cut = 1.2;
Fcut = pi*D*s_sheet*sig_u*k_cut/1000; return Fcut;
}
Листинг 81.3. Метод для кнопки “=” Form5 с целью расчета второй операции.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
//Объявляем переменные:
double Web_a, Web_b, Nblst, G, K_G;
//Расчет и передача в окна формы рациональных параметров
Глава 81. Проектирование операций изготовления заготовок |
317 |
//разрезки листа на полосы, а полосы на заготовки: Cutting(); //Этот метод нужен для расчета W_F. //Расчет и передача значения ширины полосы "B" //в окно textBox1 формы Form5:
B = Bstrip();
textBox1->Text = B.ToString();
//Расчет и передача в окна формы параметров раскроя: D = DBlank();
textBox2->Text = D.ToString(); t = D + a;
textBox3->Text = t.ToString(); Web_a = a;
textBox4->Text = Web_a.ToString(); Web_b = b;
textBox5->Text = Web_b.ToString(); if (W_F==C)
{
Nblst = Math::Floor((L - a)/t); textBox6->Text = Nblst.ToString(); G = Nblst * t;
textBox7->Text = G.ToString(); textBox8->Text = (L - G).ToString(); K_G = L;
textBox9->Text = L.ToString();
}
else
{
Nblst = Math::Floor((C - a)/t); textBox6->Text = Nblst.ToString(); G = Nblst * t;
textBox7->Text = G.ToString(); textBox8->Text = (C - G).ToString(); K_G = C;
textBox9->Text = C.ToString();
}
//Сила вырезки заготовки в штампе: textBox10->Text = ForceCut().ToString();
//Коэффициент раскроя полосы на заготовки //диаметром D или D_blank:
textBox11->Text = (pi*D*D/4*Nblst/(K_G*B)).ToString();
}
318 Жарков В.А. Компьютерная графика, мультимедиа и игры на Visual C++ 2005
Листинг 81.4. Код для выполнения анимации.
bool static myText = false; //Объявляем булеву переменную. private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
if (myText == false)
{
//Выводим текст внутри элемента управления: button1->Text = "Click";
//Изменяем значение myText на противоположное: myText = true;
}
else
{
//Выводим другой текст внутри элемента управления: button1->Text = "OK";
//Изменяем значение myText на противоположное: myText = false;
}
}
Глава 82. Проектирование операций обработки заготовок
Листинг 82.1. Метод для передачи исходных данных с Form5 в Form7.
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
//Объявляем объект myForm7 в классе Form7: Form7^ myForm7 = gcnew Form7();
//Присваиваем исходные данные другим переменным //класса формы Form7, но с такими же именами переменных: myForm7->d = d;
myForm7->H = H; myForm7->Rn = Rn; myForm7->s = s; myForm7->Radio = Radio; myForm7->s_sheet = s_sheet; myForm7->C = C;
myForm7->L = L; myForm7->rho = rho; myForm7->nu = nu; myForm7->El = El; myForm7->sig_ys = sig_ys; myForm7->sig_u = sig_u; myForm7->e_u = e_u; myForm7->e_tot = e_tot; //Выводим форму Form7: myForm7->Show();
}
Листинг 82.2. Метод для расчета силы штамповки Fdraw (Fdraw).
double ForceDraw()
{
//Рассчитываем диаметр заготовки D: double A, d_m, k_draw, Fdraw; A=Area_Semiproduct();
D = Math::Sqrt(4*A/pi);
//Уточненный расчет k_draw сложен и зависит от s/D, //но для упрощения принимаем, что:
k_draw=1;
//Средний диаметр стенки детали: