Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Жарков В.А. - Visual C++ 2005, DirectX 9.0c и Microsoft Agent в компьютерной графике, мультимедиа и играх (Листинги книги) - 2005

.pdf
Скачиваний:
307
Добавлен:
13.08.2013
Размер:
1.14 Mб
Скачать

Глава 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;

//Средний диаметр стенки детали:

Соседние файлы в предмете Программирование на C++