?? frmmain.cs
字號:
//}
SPmeshClass.offsetx = SPmeshClass.offsetx - 4f;
SPmeshClass.device.Transform.World = Matrix.Translation(SPmeshClass.offsetx, 0, 0);
}
if (e.KeyChar == 'e')//線顯示
{
SPmeshClass.device.RenderState.FillMode = FillMode.WireFrame;
}
if (e.KeyChar == 'f')//面顯示
{
SPmeshClass.device.RenderState.FillMode = FillMode.Solid;
}
//this.Invalidate(); //不在paint事件中畫便可以去除屏幕閃爍
SPmeshClass.ShowXModel();
}
/// <summary>
/// 遞歸實現查找目錄下的所有子目錄和文件
/// </summary>
/// <param name="dir">為指定的文件夾路徑</param>
public void FindFile(string dir)
{
//在指定目錄及子目錄下查找文件
DirectoryInfo Dir = new DirectoryInfo(dir);
try
{
foreach (DirectoryInfo d in Dir.GetDirectories()) //查找子目錄
{
FindFile(Dir + "\\" + d.ToString() + "\\");
//listBox1.Items.Add(Dir + "\\" + d.ToString() + "\\"); //listBox1中填加目錄名
}
foreach (FileInfo f in Dir.GetFiles("*.x")) //查找x文件
{
//listBox1.Items.Add(Dir+f.ToString()); //listBox1中填加文件名
SPmeshClass.filenamepath[SPmeshClass.xfilenum] = Dir + "\\" + f.ToString();
SPmeshClass.xfilenum++;
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
/// <summary>
/// 釋放內存
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
if (SPmeshClass.device != null)
SPmeshClass.device.Dispose();
SPmeshClass.device = null;
if (SPmeshClass.progressiveMesh != null)
{
SPmeshClass.progressiveMesh = null;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_KeyDown(object sender, KeyEventArgs e)
{
// 前后左右旋轉
if (e.KeyCode==Keys.Left)
{
SPmeshClass.angle = SPmeshClass.angle + 0.2f;
SPmeshClass.device.Transform.World = Matrix.RotationY(SPmeshClass.angle);
}
else if (e.KeyCode == Keys.Right)
{
SPmeshClass.angle = SPmeshClass.angle - 0.2f;
SPmeshClass.device.Transform.World = Matrix.RotationY(SPmeshClass.angle);
}
else if (e.KeyCode == Keys.Up)
{
SPmeshClass.angle = SPmeshClass.angle + 0.2f;
SPmeshClass.device.Transform.World = Matrix.RotationX(SPmeshClass.angle);
//device.Transform.World = Matrix.RotationX(Environment.TickCount / 100.0f);
}
else if (e.KeyCode == Keys.Down)
{
SPmeshClass.angle = SPmeshClass.angle - 0.2f;
SPmeshClass.device.Transform.World = Matrix.RotationX(SPmeshClass.angle);
//device.Transform.World = Matrix.RotationX(-Environment.TickCount / 100.0f);
}
//this.Invalidate();//不在paint事件中畫便可以去除屏幕閃爍
SPmeshClass.ShowXModel();
}
/// <summary>
/// 打開窗口FrmTest來導入普通模型
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void showtestToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmTest ff = new FrmTest();
ff.Show();
}
private void FrmMain_Resize(object sender, EventArgs e)
{
//if (this.WindowState != FormWindowState.Minimized)
//SPmeshClass.ShowXModel();
}
private void 測試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);
//第二種打開方法
string strfname = OpenFileDia.FileName;
SPmeshClass.xfilenum = 30;
//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);
SPmeshClass.LoadMesh(strfname, nIndex);
TimeSpan end = new TimeSpan(DateTime.Now.Ticks);
TimeSpan ts = end.Subtract(start);
double dtotals = ts.TotalSeconds * SPmeshClass.xfilenum / (nIndex + 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 = strfname.LastIndexOf("\\") + 1;
string strname = strfname.Substring(nfi);//當前加載的模型名
//int nfi = SPmeshClass.filenamepath[nIndex].LastIndexOf("\\") + 1;
//string strname = SPmeshClass.filenamepath[nIndex].Substring(nfi);//當前加載的模型名
frm.labTip.Text = "Loading: " + strname + "-" + nIndex.ToString();
frm.labTime.Text = "剩余時間:" + strTime ;
frm.Update();
}
/////關閉滾動條窗口
frm.Hide();
SPmeshClass.ShowXModel();
}
else
{
return;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -