diff options
Diffstat (limited to 'task05_2D/Guschin/MyForm.h')
| -rw-r--r-- | task05_2D/Guschin/MyForm.h | 88 |
1 files changed, 87 insertions, 1 deletions
diff --git a/task05_2D/Guschin/MyForm.h b/task05_2D/Guschin/MyForm.h index 7e76f41..d249467 100644 --- a/task05_2D/Guschin/MyForm.h +++ b/task05_2D/Guschin/MyForm.h @@ -46,8 +46,9 @@ namespace Guschin { this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(737, 686); + this->DoubleBuffered = true; this->KeyPreview = true; - this->Margin = System::Windows::Forms::Padding(4, 4, 4, 4); + this->Margin = System::Windows::Forms::Padding(4); this->Name = L"MyForm"; this->Text = L"MyForm"; this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load); @@ -64,6 +65,7 @@ namespace Guschin { float minY = top, maxY; float Wcx = left, Wcy; float Wx, Wy; + int numXsect = 5, numYsect = 5; private: System::Void rectCalc() { @@ -152,6 +154,34 @@ namespace Guschin { start = tmpEnd; hasStart = hasEnd; } + + Pen^ gridPen = gcnew Pen(Color::Black, 1); + SolidBrush^ drawBrush = gcnew SolidBrush(Color::Black); + System::Drawing::Font^ drawFont = gcnew System::Drawing::Font("Arial", 8); + + float gridStep_x = Wx / numXsect; + float grid_dX = V_work.x / numXsect; + float tick_x = Vc_work.x; + for (int i = 0; i <= numXsect; i++) + { + float tmpXCoord_v = Wcx + i * gridStep_x; + g->DrawLine(gridPen, tmpXCoord_v, Wcy, tmpXCoord_v, minY); + if (i > 0 && i < numXsect) + g->DrawString(tick_x.ToString("F4"), drawFont, drawBrush, tmpXCoord_v, Wcy); + tick_x += grid_dX; + } + + float gridStep_y = Wy / numYsect; + float grid_dY = V_work.y / numYsect; + float tick_y = Vc_work.y; + for (int i = 0; i <= numYsect; i++) + { + float tmpYCoord_v = Wcy - i * gridStep_y; + g->DrawLine(gridPen, Wcx, tmpYCoord_v, maxX, tmpYCoord_v); + if (i > 0 && i < numYsect) + g->DrawString(tick_y.ToString("F4"), drawFont, drawBrush, maxX, tmpYCoord_v); + tick_y += grid_dY; + } } private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { @@ -170,15 +200,71 @@ namespace Guschin { switch (e->KeyCode) { case Keys::Escape: T = initT; + numXsect = 5; + numYsect = 5; break; + case Keys::A: T = translate(-V_work.x / Wx, 0.f) * T; break; + case Keys::D: + T = translate(V_work.x / Wx, 0.f) * T; + break; + case Keys::S: + T = translate(0.f, -V_work.x / Wx) * T; + break; + case Keys::W: + T = translate(0.f, V_work.x / Wx) * T; + break; + case Keys::Z: T = translate(-centerX, -centerY) * T; T = scale(1.1) * T; T = translate(centerX, centerY) * T; break; + case Keys::X: + T = translate(-centerX, -centerY) * T; + T = scale(1 / 1.1) * T; + T = translate(centerX, centerY) * T; + break; + + case Keys::T: + T = translate(-centerX, -centerY) * T; + T = scale(1.1, 1.f) * T; + T = translate(centerX, centerY) * T; + break; + case Keys::G: + T = translate(-centerX, -centerY) * T; + T = scale(1 / 1.1, 1.f) * T; + T = translate(centerX, centerY) * T; + break; + + case Keys::Y: + T = translate(-centerX, -centerY) * T; + T = scale(1.f, 1.1) * T; + T = translate(centerX, centerY) * T; + break; + case Keys::H: + T = translate(-centerX, -centerY) * T; + T = scale(1.f, 1 / 1.1) * T; + T = translate(centerX, centerY) * T; + break; + + case Keys::D1: + numXsect += 1; + break; + case Keys::D2: + if (numXsect > 3) + numXsect -= 1; + break; + case Keys::D3: + numYsect += 1; + break; + case Keys::D4: + if (numYsect > 3) + numYsect -= 1; + break; + default: break; } |