?? frmmain.cs
字號:
?using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace World_Earth
{
public partial class FrmMain : Form
{
//ShowPMesh SPmeshClass = new ShowPMesh();//漸進模型
ShowPMesh SPmeshClass = new ShowPMesh();//單獨打開給定個數漸進模型
public FrmMain()
{
//this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
InitializeComponent();
}
/// <summary>
/// 打開被選中的X模型
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 打開X模型MenuItem_Click(object sender, EventArgs e)
{
OpenFileDia = new OpenFileDialog();
OpenFileDia.InitialDirectory = Application.StartupPath + "\\杭州項目模型\\";
OpenFileDia.Filter = "x files (*.x)|*.x";
OpenFileDia.Multiselect = true;
OpenFileDia.FilterIndex = 1;
if (OpenFileDia.ShowDialog() == DialogResult.OK)
{
//第一種打開方法
//string[] files = OpenFileDia.FileNames;];
//SPmeshClass.OpenAllXModel(this, files);
//第二種打開方法
SPmeshClass.filenamepath = OpenFileDia.FileNames;
SPmeshClass.xfilenum = OpenFileDia.FileNames.Length;//選中文件個數
//SPmeshClass.meshMaterials = new Material[SPmeshClass.xfilenum, 100];
//SPmeshClass.meshTextures = new Texture[SPmeshClass.xfilenum, 100];
SPmeshClass.InitBinary();
if (SPmeshClass.device == null)
{
SPmeshClass.InitD3D(this);
}
SPmeshClass.mtrlNum = new int[SPmeshClass.xfilenum];//xhl 2007-3-28 數組沒有重新定義 導致出錯
////////////進度條窗口/////////////
FrmPro frm = new FrmPro();
frm.Show();
frm.ProBar.Maximum = SPmeshClass.xfilenum;
int nProNum = SPmeshClass.xfilenum;//估計時間
TimeSpan start = new TimeSpan(DateTime.Now.Ticks);
//////////////////////////////////////////
for (int nIndex = 0; nIndex < SPmeshClass.xfilenum; nIndex++)
{
SPmeshClass.LoadMesh(SPmeshClass.filenamepath[nIndex], nIndex);
if (SPmeshClass.device != null)
{
SPmeshClass.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);
SPmeshClass.device.BeginScene();
//xfilenum = filenamepath.Length;
for (int nInd= 0; nInd < SPmeshClass.xfilenum; nInd++)
{
SPmeshClass.SetCamera(nInd);
SPmeshClass.DrawMesh(nInd);
TimeSpan end = new TimeSpan(DateTime.Now.Ticks);
TimeSpan ts = end.Subtract(start);
double dtotals = ts.TotalSeconds * SPmeshClass.xfilenum / (nInd + 1);
double shenyu = dtotals - ts.TotalSeconds;
shenyu = System.Math.Round(shenyu);
//string strTime = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小時"
// + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒" + ts.Milliseconds.ToString () + "毫秒";
string strTime = shenyu.ToString() + "秒";//剩余時間
////進度條/////////////////////////////////////////////
frm.ProBar.Value = nIndex;
int nfi = SPmeshClass.filenamepath[nIndex].LastIndexOf("\\") + 1;
string strname = SPmeshClass.filenamepath[nInd].Substring(nfi);//當前加載的模型名
frm.labTip.Text = "Loading: " + strname;
frm.labTime.Text = "剩余時間:" + strTime;
frm.Update();
}
//int vertices = new int();
//int faces = new int();
//for (int nIn = 0; nIndex < SPmeshClass.xfilenum; nIn++)
//{
// BaseMesh b = SPmeshClass.progressiveMesh[nIn];
// vertices = vertices + b.NumberVertices;
// faces = faces + b.NumberFaces;
//}
//SPmeshClass.font.DrawText(null, string.Format("Number vertices in mesh: {0}", vertices),
// new Rectangle(10, 26, 0, 0),
// DrawTextFormat.NoClip, Color.BlanchedAlmond);
//SPmeshClass.font.DrawText(null, string.Format("Number faces in mesh: {0}", faces),
// new Rectangle(10, 42, 0, 0),
// DrawTextFormat.NoClip, Color.BlanchedAlmond);
SPmeshClass.device.EndScene();
SPmeshClass.device.Present();
}
}
/////關閉滾動條窗口
frm.Hide();
//SPmeshClass.ShowXModel();
}
else
{
return;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_Paint(object sender, PaintEventArgs e)
{
if (SPmeshClass.progressiveMesh[0] != null)
if (this.WindowState != FormWindowState.Minimized)
{
SPmeshClass.ShowXModel();
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 's')
{
for (int i = 0; i < SPmeshClass.xfilenum; i++)
{
//cameraPos -= (MoveAmount * 2);
SPmeshClass.pos[i].Z -= (SPmeshClass.MoveAmount * 2);
SPmeshClass.progressiveMesh[i].NumberVertices =
((BaseMesh)SPmeshClass.progressiveMesh[i]).NumberVertices + SPmeshClass.MoveAmount;
SPmeshClass.progressiveMesh[i].NumberFaces =
((BaseMesh)SPmeshClass.progressiveMesh[i]).NumberFaces + SPmeshClass.MoveAmount;
}
}
if (e.KeyChar == 'w')
{
for (int i = 0; i < SPmeshClass.xfilenum; i++)
{
//cameraPos += (MoveAmount * 2);
SPmeshClass.pos[i].Z += (SPmeshClass.MoveAmount * 2);
SPmeshClass.progressiveMesh[i].NumberVertices =
((BaseMesh)SPmeshClass.progressiveMesh[i]).NumberVertices - SPmeshClass.MoveAmount;
SPmeshClass.progressiveMesh[i].NumberFaces =
((BaseMesh)SPmeshClass.progressiveMesh[i]).NumberFaces - SPmeshClass.MoveAmount;
}
}
if (e.KeyChar == 'a')
{
//for (int i = 0; i < SPmeshClass.xfilenum; i++)
//{
// SPmeshClass.pos[i].X -= (SPmeshClass.MoveAmount * 2);
//}
SPmeshClass.offsetx = SPmeshClass.offsetx + 4f;
SPmeshClass.device.Transform.World = Matrix.Translation(SPmeshClass.offsetx, 0, 0);
}
if (e.KeyChar == 'd')
{
//for (int i = 0; i < SPmeshClass.xfilenum; i++)
//{
// SPmeshClass.pos[i].X += (SPmeshClass.MoveAmount * 2);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -