From eb302be5699d541b37d89779f1dc0116035659f2 Mon Sep 17 00:00:00 2001 From: Perfare Date: Wed, 15 Aug 2018 08:40:46 +0800 Subject: [PATCH] add model preview mouse control --- AssetStudio/AssetStudioForm.Designer.cs | 22 ++-- AssetStudio/AssetStudioForm.cs | 168 ++++++++++++------------ AssetStudio/AssetStudioForm.resx | 3 - 3 files changed, 90 insertions(+), 103 deletions(-) diff --git a/AssetStudio/AssetStudioForm.Designer.cs b/AssetStudio/AssetStudioForm.Designer.cs index d0c8e0f..e24e87d 100644 --- a/AssetStudio/AssetStudioForm.Designer.cs +++ b/AssetStudio/AssetStudioForm.Designer.cs @@ -105,7 +105,6 @@ this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.timer = new System.Windows.Forms.Timer(this.components); - this.timerOpenTK = new System.Windows.Forms.Timer(this.components); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -383,12 +382,12 @@ this.exportAnimatorWithSelectedAnimationClipToolStripMenuItem.Text = "Export Animator with selected AnimationClip"; this.exportAnimatorWithSelectedAnimationClipToolStripMenuItem.Click += new System.EventHandler(this.exportAnimatorwithAnimationClipMenuItem_Click); // - // showTypeToolStripMenuItem + // filterTypeToolStripMenuItem // this.filterTypeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.allToolStripMenuItem}); - this.filterTypeToolStripMenuItem.Name = "showTypeToolStripMenuItem"; - this.filterTypeToolStripMenuItem.Size = new System.Drawing.Size(83, 21); + this.filterTypeToolStripMenuItem.Name = "filterTypeToolStripMenuItem"; + this.filterTypeToolStripMenuItem.Size = new System.Drawing.Size(80, 21); this.filterTypeToolStripMenuItem.Text = "Filter Type"; // // allToolStripMenuItem @@ -791,11 +790,14 @@ this.glControl1.Name = "glControl1"; this.glControl1.Size = new System.Drawing.Size(838, 632); this.glControl1.TabIndex = 4; - this.glControl1.VSync = false; this.glControl1.Visible = false; - this.glControl1.Paint += new System.Windows.Forms.PaintEventHandler(this.glControl1_Paint); - this.glControl1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseWheel); + this.glControl1.VSync = false; this.glControl1.Load += new System.EventHandler(this.glControl1_Load); + this.glControl1.Paint += new System.Windows.Forms.PaintEventHandler(this.glControl1_Paint); + this.glControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseDown); + this.glControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseMove); + this.glControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseUp); + this.glControl1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseWheel); // // classPreviewPanel // @@ -880,11 +882,6 @@ this.timer.Interval = 10; this.timer.Tick += new System.EventHandler(this.timer_Tick); // - // timerOpenTK - // - this.timerOpenTK.Interval = 166; - this.timerOpenTK.Tick += new System.EventHandler(this.timerOpenTK_Tick); - // // openFileDialog1 // this.openFileDialog1.AddExtension = false; @@ -1033,7 +1030,6 @@ private System.Windows.Forms.Label FMODtimerLabel; private System.Windows.Forms.Label FMODinfoLabel; private System.Windows.Forms.Timer timer; - private System.Windows.Forms.Timer timerOpenTK; private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem displayAll; private System.Windows.Forms.ToolStripMenuItem displayOriginalName; diff --git a/AssetStudio/AssetStudioForm.cs b/AssetStudio/AssetStudioForm.cs index 145c0a5..1bd8294 100644 --- a/AssetStudio/AssetStudioForm.cs +++ b/AssetStudio/AssetStudioForm.cs @@ -33,8 +33,10 @@ namespace AssetStudio private Bitmap imageTexture; - #region OpenTK + #region GLControl private bool glControlLoaded; + private int mdx, mdy; + private bool lmdown, rmdown; private int pgmID, pgmColorID, pgmBlackID; private int attributeVertexPosition; private int attributeNormalDirection; @@ -267,82 +269,33 @@ namespace AssetStudio if (glControl1.Visible) { - switch (e.KeyCode) + if (e.Control) { - case Keys.D: // --> Right - if (e.Shift) //Move - { - viewMatrixData *= Matrix4.CreateTranslation(0.1f, 0, 0); - } - else //Rotate - { - viewMatrixData *= Matrix4.CreateRotationY(0.1f); - } - glControl1.Invalidate(); - break; - case Keys.A: // <-- Left - if (e.Shift) //Move - { - viewMatrixData *= Matrix4.CreateTranslation(-0.1f, 0, 0); - } - else //Rotate - { - viewMatrixData *= Matrix4.CreateRotationY(-0.1f); - } - glControl1.Invalidate(); - break; - case Keys.W: // Up - if (e.Control) //Toggle WireFrame - { - wireFrameMode = (wireFrameMode + 1) % 3; - glControl1.Invalidate(); - } - else if (e.Shift) //Move - { - viewMatrixData *= Matrix4.CreateTranslation(0, 0.1f, 0); - } - else //Rotate - { - viewMatrixData *= Matrix4.CreateRotationX(0.1f); - } - glControl1.Invalidate(); - break; - case Keys.S: // Down - if (e.Control) //Toggle Shade - { - shadeMode = (shadeMode + 1) % 2; - glControl1.Invalidate(); - } - else if (e.Shift) //Move - { - viewMatrixData *= Matrix4.CreateTranslation(0, -0.1f, 0); - } - else //Rotate - { - viewMatrixData *= Matrix4.CreateRotationX(-0.1f); - } - glControl1.Invalidate(); - break; - case Keys.Q: // Zoom Out - viewMatrixData *= Matrix4.CreateScale(0.9f); - glControl1.Invalidate(); - break; - case Keys.E: // Zoom In - viewMatrixData *= Matrix4.CreateScale(1.1f); - glControl1.Invalidate(); - break; - } - // Normal mode - if (e.Control && e.KeyCode == Keys.N) - { - normalMode = (normalMode + 1) % 2; - createVAO(); - glControl1.Invalidate(); - } - // Toggle Timer - if (e.KeyCode == Keys.T) - { - timerOpenTK.Enabled = !timerOpenTK.Enabled; + switch (e.KeyCode) + { + case Keys.W: + if (e.Control) //Toggle WireFrame + { + wireFrameMode = (wireFrameMode + 1) % 3; + glControl1.Invalidate(); + } + break; + case Keys.S: + if (e.Control) //Toggle Shade + { + shadeMode = (shadeMode + 1) % 2; + glControl1.Invalidate(); + } + break; + case Keys.N: + if (e.Control) //Normal mode + { + normalMode = (normalMode + 1) % 2; + createVAO(); + glControl1.Invalidate(); + } + break; + } } } } @@ -988,7 +941,7 @@ namespace AssetStudio createVAO(); } StatusStripUpdate("Using OpenGL Version: " + GL.GetString(StringName.Version) + "\n" - + "'T'=Start/Stop Rotation | 'WASD'=Manual Rotate | 'Shift WASD'=Move | 'Q/E'=Zoom \n" + + "'Mouse Left'=Rotate | 'Mouse Right'=Move | 'Mouse Wheel'=Zoom \n" + "'Ctrl W'=Wireframe | 'Ctrl S'=Shade | 'Ctrl N'=ReNormal "); } break; @@ -1488,15 +1441,6 @@ namespace AssetStudio Studio.ProgressBarMaximumAdd = ProgressBarMaximumAdd; } - private void timerOpenTK_Tick(object sender, EventArgs e) - { - if (glControl1.Visible) - { - viewMatrixData *= Matrix4.CreateRotationY(-0.1f); - glControl1.Invalidate(); - } - } - private void initOpenTK() { changeGLSize(glControl1.Size); @@ -1576,7 +1520,6 @@ namespace AssetStudio private void createVAO() { - timerOpenTK.Stop(); GL.DeleteVertexArray(vao); GL.GenVertexArrays(1, out vao); GL.BindVertexArray(vao); @@ -1673,6 +1616,57 @@ namespace AssetStudio } } + private void glControl1_MouseDown(object sender, MouseEventArgs e) + { + mdx = e.X; + mdy = e.Y; + if (e.Button == MouseButtons.Left) + { + lmdown = true; + } + if (e.Button == MouseButtons.Right) + { + rmdown = true; + } + } + + private void glControl1_MouseMove(object sender, MouseEventArgs e) + { + if (lmdown || rmdown) + { + float dx = mdx - e.X; + float dy = mdy - e.Y; + mdx = e.X; + mdy = e.Y; + if (lmdown) + { + dx *= 0.01f; + dy *= 0.01f; + viewMatrixData *= Matrix4.CreateRotationX(dy); + viewMatrixData *= Matrix4.CreateRotationY(dx); + } + if (rmdown) + { + dx *= 0.003f; + dy *= 0.003f; + viewMatrixData *= Matrix4.CreateTranslation(-dx, dy, 0); + } + glControl1.Invalidate(); + } + } + + private void glControl1_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + lmdown = false; + } + if (e.Button == MouseButtons.Right) + { + rmdown = false; + } + } + private void resetForm() { Text = "AssetStudio"; diff --git a/AssetStudio/AssetStudioForm.resx b/AssetStudio/AssetStudioForm.resx index 671f3e9..2ba6a7a 100644 --- a/AssetStudio/AssetStudioForm.resx +++ b/AssetStudio/AssetStudioForm.resx @@ -144,9 +144,6 @@ The quick brown fox jumps over the lazy dog. 1234567890 553, 17 - - 17, 17 - 636, 17