⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.cs

📁 在2005环境下开发的
💻 CS
📖 第 1 页 / 共 2 页
字号:
                    //}
                    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 + -