-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.cs
128 lines (109 loc) · 3.79 KB
/
App.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using OrthoGraphEngine;
namespace OBJViewer
{
public class App
{
Graphics graphics;
Entity entity;
Matrix curProjection;
float scale = 1;
public App(string path)
{
curProjection = new Matrix(new float[,]{
{1, 0, 0},
{0, 1, 0},
{0, 0, 0}
});
graphics = new Graphics(120, 30);
graphics.Context.Projection = curProjection * 1;
entity = OBJ.Read(path);
}
public void Start()
{
Thread drawing = new Thread(new ThreadStart(Draw));
Thread updating = new Thread(new ThreadStart(Update));
KeysController controller = new KeysController();
controller.KeyEvent += KeyControl;
Thread listening = new Thread(new ThreadStart(controller.Listen));
drawing.Start();
updating.Start();
listening.Start();
}
public void Draw()
{
graphics.Begin();
entity.Draw(graphics.Context);
graphics.Context.DrawString("OBJ Viewer | [Q/W/E] - Front/Left/Top projections, [A/S/D] - X/Y/Z rotate, [-/+] - scale", new Point(4, 28));
Thread.Sleep(32);
graphics.End();
Draw();
}
public void Update()
{
Thread.Sleep(32);
Update();
}
public void KeyControl(ConsoleKey key)
{
if (key == ConsoleKey.Q) // x-y
{
curProjection = new Matrix(new float[,]{
{1, 0, 0},
{0, 1, 0},
{0, 0, 0}
});
graphics.Context.Projection = curProjection;
}
if (key == ConsoleKey.W) // y-z
{
curProjection = new Matrix(new float[,]{
{0, 0, 0},
{0, 1, 0},
{0, 0, 1}
});
graphics.Context.Projection = curProjection;
}
if (key == ConsoleKey.E) // x-z
{
curProjection = new Matrix(new float[,]{
{1, 0, 0},
{0, 0, 0},
{0, 0, 1}
});
graphics.Context.Projection = curProjection ;
}
if (key == ConsoleKey.A) // x rotate
{
entity.Rotate(Vector3.VectorX, 0.05f);
}
if (key == ConsoleKey.S) // y rotate
{
entity.Rotate(Vector3.VectorY, 0.05f);
}
if (key == ConsoleKey.D) // z rotate
{
entity.Rotate(Vector3.VectorZ, 0.05f);
}
if (key == ConsoleKey.OemPlus) // + scale
{
scale += 0.1f;
graphics.Context.Projection = curProjection * scale;
}
if (key == ConsoleKey.OemMinus) // - scale
{
scale -= 0.1f;
graphics.Context.Projection = curProjection * scale;
}
}
public static float CalculateAngle(float sum)
{
if (sum == 6.283f)
sum = 0;
if (sum > 6.283f)
sum = CalculateAngle(sum - 6.283f);
if (sum < 0f)
sum = CalculateAngle(6.283f + sum);
return sum;
}
}
}