Newer
Older
GHFX_REFACTOR / FrmSceneLightSet.cs
wxn on 9 Nov 2016 7 KB 冗余代码整理
using System;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Globe;

namespace Cyberpipe
{
    
    public partial class FrmSceneLightSet : Office2007Form
    {
        public GSOLight  light = null;
        public GSOGlobeControl globeControl = null;
        public FrmSceneLightSet()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 确定按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonOk_Click(object sender, EventArgs e)
        {
            if (light!=null)
            {
                light.LightOn = (cbStatus.SelectedIndex == 0);

            }

            switch (cbMode.SelectedIndex)
            {
                case 0:
                    light.LightMode = EnumLightMode.Default;
                    break;
                case 1:
                    light.LightMode=EnumLightMode.Object;
                    break;
                case 2:
                    light.LightMode = EnumLightMode.Eye;
                    break;
                case 3:
                    light.LightMode = EnumLightMode.World;
                    break;
                case 4:
                    light.LightMode = EnumLightMode.Sun;
                    break;
                default:
                    light.LightMode = EnumLightMode.Default;
                    break;
            }

            switch (cbType.SelectedIndex)
            {
                case 0:
                    light.LightType=EnumLightType.Parallel;
                    break;
                case 1:
                    light.LightType = EnumLightType.Point;
                    break;
                case 2:
                    light.LightType = EnumLightType.Spot;
                    break;
                default:
                    light.LightType = EnumLightType.Parallel;
                    break;
            }

            GSOPoint3d pos=new GSOPoint3d();
            pos.X = Convert.ToDouble(tbPosX.Text);
            pos.Y = Convert.ToDouble(tbPosY.Text);
            pos.Z = Convert.ToDouble(tbPosZ.Text);
            light.Position = pos;

            light.Ambient = pbAmbient.BackColor;
            light.Diffuse= pbDiffuse.BackColor;
            light.Specular = pbSpecular.BackColor;
            globeControl.Globe.SceneAmbient=  pbGlobalAmbient.BackColor;
            globeControl.Globe.ModelUseLighting = cbModelUseLighting.Checked;
            globeControl.Globe.TerrainUseLighting = cbTerrainUseLighting.Checked;

        }
        /// <summary>
        /// 窗体初始化事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SceneLightSet_Load(object sender, EventArgs e)
        {
            if(light!=null)
            {

                if(light.LightOn)
                {
                    cbStatus.SelectedIndex = 0;
                }
                else
                {
                    cbStatus.SelectedIndex = 1;
                }
                switch (light.LightMode)
                {
                    case EnumLightMode.Default:
                        cbMode.SelectedIndex = 0;
                        break;
                    case EnumLightMode.Object:
                        cbMode.SelectedIndex = 1;
                        break;
                    case EnumLightMode.Eye:
                        cbMode.SelectedIndex = 2;
                        break;
                    case EnumLightMode.World:
                        cbMode.SelectedIndex = 3;
                        break;
                    case EnumLightMode.Sun:
                        cbMode.SelectedIndex = 4;
                        break;
                    default:
                        cbMode.SelectedIndex = 0;
                        break;
                }
                switch (light.LightType)
                {
                    case EnumLightType.Parallel:
                        cbType.SelectedIndex = 0;
                        break;
                    case EnumLightType.Point:
                        cbType.SelectedIndex = 1;
                        break;
                    case EnumLightType.Spot:
                        cbType.SelectedIndex = 2;
                        break;
                    default:
                        cbType.SelectedIndex = 0;
                        break;
                }

                tbPosX .Text= light.Position.X.ToString();
                tbPosY.Text = light.Position.Y.ToString();
                tbPosZ.Text = light.Position.Z.ToString();


                pbAmbient.BackColor = light.Ambient;
                

                pbDiffuse.BackColor = light.Diffuse;
               
                pbSpecular.BackColor = light.Specular;
             


                pbGlobalAmbient.BackColor = globeControl.Globe.SceneAmbient;
               

                cbTerrainUseLighting.Checked = globeControl.Globe.TerrainUseLighting;
                cbModelUseLighting.Checked = globeControl.Globe.ModelUseLighting;
            }
        }
        /// <summary>
        /// 单击选择颜色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pbAmbient_Click(object sender, EventArgs e)
        {
            ColorDialog dlg = new ColorDialog();
            dlg.FullOpen = true;
            dlg.Color = pbAmbient.BackColor;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pbAmbient.BackColor = Color.FromArgb(255, dlg.Color.R, dlg.Color.G, dlg.Color.B);
            }
        }
        /// <summary>
        /// 单击选择颜色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pbDiffuse_Click(object sender, EventArgs e)
        {
            ColorDialog dlg = new ColorDialog();
            dlg.FullOpen = true;
            dlg.Color = pbDiffuse.BackColor;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pbDiffuse.BackColor = dlg.Color;
            }
        }
        /// <summary>
        /// 单击选择颜色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pbSpecular_Click(object sender, EventArgs e)
        {
            ColorDialog dlg = new ColorDialog();
            dlg.FullOpen = true;
            dlg.Color = pbSpecular.BackColor;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pbSpecular.BackColor = dlg.Color;
            }
        }
        /// <summary>
        /// 单击选择颜色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pbGlobalAmbient_Click(object sender, EventArgs e)
        {
            ColorDialog dlg = new ColorDialog();
            dlg.FullOpen = true;
            dlg.Color = pbGlobalAmbient.BackColor;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pbGlobalAmbient.BackColor = dlg.Color;
            }
        }

        private void cbMode_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbMode.SelectedIndex == 0)
            {
                pbGlobalAmbient.BackColor = Color.Black;

            }
            else
            {
                pbGlobalAmbient.BackColor = Color.FromArgb(255, 128, 128, 128);

            }
        }

        /// <summary>
        /// 取消按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX2_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}