summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--task05_2D/Guschin/Matrix.h2
-rw-r--r--task05_2D/Guschin/MyForm.h88
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;
}