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

📄 frmmain.cs

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