diff options
| author | Andrew Guschin <saintruler@gmail.com> | 2020-11-28 17:16:00 +0400 |
|---|---|---|
| committer | Andrew Guschin <saintruler@gmail.com> | 2020-11-28 17:16:00 +0400 |
| commit | d5defd81ab822f677678325883bf2f40a890b10c (patch) | |
| tree | 2e1b5d499465b7fd7148430353b9b1d06925ff28 | |
| parent | a6069e59e152178f2c0625e8967f0ef6330e8d1a (diff) | |
Добавил двойную буферизацию и закончил проект построения двумерных графиков.
| -rw-r--r-- | task05_2D/Guschin/Matrix.h | 2 | ||||
| -rw-r--r-- | task05_2D/Guschin/MyForm.h | 88 |
2 files changed, 87 insertions, 3 deletions
diff --git a/task05_2D/Guschin/Matrix.h b/task05_2D/Guschin/Matrix.h index a47ee6e..6298986 100644 --- a/task05_2D/Guschin/Matrix.h +++ b/task05_2D/Guschin/Matrix.h @@ -204,7 +204,6 @@ public: } }; - class mat2 { public: @@ -272,4 +271,3 @@ vec3 normalize(vec4 v) { return vec3(v.x / v.a, v.y / v.a, v.z / v.a); } - 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; } |