Newer
Older
EMS_REFACTOR / FrmBoosterValvers.cs
nn-203 on 26 Jul 2017 13 KB first commit
using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Globe;

namespace Cyberpipe
{
    public partial class FrmBoosterValvers : Office2007Form
    {
        GSOGlobeControl globeControl1;
        GSOFeatures m_BoosterValvesAnalyResFeatures;
        ArrayList m_BoosterValvesList;
        private static FrmBoosterValvers form;
        GSOFeatures m_AffectedPipeLines;
        public static FrmBoosterValvers getForm(GSOGlobeControl globe, GSOFeatures features, ArrayList list, GSOFeatures m_AffectedPipeLines1)
        {
            if (form == null)
            {
                form = new FrmBoosterValvers(globe, features, list, m_AffectedPipeLines1);
            }
            else
            {
                form.m_BoosterValvesAnalyResFeatures = features;
                form.m_BoosterValvesList = list;
                form.m_AffectedPipeLines = m_AffectedPipeLines1;
            }
            return form;
        }
        public FrmBoosterValvers(GSOGlobeControl globe, GSOFeatures features, ArrayList list,GSOFeatures m_AffectedPipeLines1)
        {
            InitializeComponent();
            globeControl1 = globe;
            m_BoosterValvesAnalyResFeatures = features;
            m_BoosterValvesList = list;
            m_AffectedPipeLines = m_AffectedPipeLines1;
        }

        private void ClearAffectedPipeLine()
        {
            if (m_AffectedPipeLines != null)
            {
                int nCount = m_AffectedPipeLines.Length;
                for (int i = 0; i < nCount; i++)
                {
                    m_AffectedPipeLines[i].HighLight = false;
                }
                m_AffectedPipeLines = null;
            }
        }
        public void setLstValvesName()
        {
            lstValvesName.Items.Clear();
            int ncount = m_BoosterValvesAnalyResFeatures.Length;
            if (ncount > 0)
            {
                for (int i = 0; i < ncount; i++)
                {
                    lstValvesName.Items.Add(m_BoosterValvesAnalyResFeatures[i].Name);
                }
            }
        }
        /// <summary>
        /// 列表项双击事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstValvesName_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int i = lstValvesName.SelectedIndex;
            if (i < 0)
            {
                return;
            }
            GSOFeature m_BoosterValvesAnalyResFeature = m_BoosterValvesAnalyResFeatures[i];
            globeControl1.Globe.FlyToFeature(m_BoosterValvesAnalyResFeature, 0, 45, 3);
            GSOLabel newLabel = new GSOLabel();
            newLabel.Text = "关闭此阀门";
            newLabel.Style = new GSOLabelStyle();
            newLabel.Style.Opaque = 0.8;
            newLabel.Style.OutlineColor = Color.Red;
            //newLabel.Style.TractionLineEndPos = new GSOPoint2d(150, 120);
            newLabel.Style.OutlineWidth = 1;
            newLabel.Style.TracktionLineWidth = 1;
            newLabel.Style.BackBeginColor = Color.Orange;
            newLabel.Style.BackEndColor = Color.PaleGreen;

            m_BoosterValvesAnalyResFeature.Label = newLabel;

            m_BoosterValvesList.Add(m_BoosterValvesAnalyResFeature);

            globeControl1.Refresh();
        }
        /// <summary>
        /// 清除阀门结果
        /// </summary>
        private void ClearBoosterValvesAnalysis()//清楚阀门分析结果
        {
            if (m_BoosterValvesAnalyResFeatures != null)
            {
                for (int i = 0; i < m_BoosterValvesList.Count; i++)
                {
                    GSOFeature feature = m_BoosterValvesList[i] as GSOFeature;
                    feature.Label.Text = "";
                }
                globeControl1.Refresh();
                m_BoosterValvesAnalyResFeatures = null;
                m_BoosterValvesList = new ArrayList();
            }
        }
        /// <summary>
        /// 窗体关闭事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmBoosterValvers_FormClosing(object sender, FormClosingEventArgs e)
        {
            ClearBoosterValvesAnalysis();
            ClearAffectedPipeLine();
            form = null;
        }
        /// <summary>
        /// 右键飞行按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FlyToMenu_Click(object sender, EventArgs e)
        {
            int i = lstValvesName.SelectedIndex;
            if (i < 0)
            {
                return;
            }
            GSOFeature m_BoosterValvesAnalyresFeature = m_BoosterValvesAnalyResFeatures[i];
            globeControl1.Globe.FlyToFeature(m_BoosterValvesAnalyresFeature, 0, 45, 3);
            LightMenu_Click(sender, e);

            GSOLabel newLabel = new GSOLabel();
            newLabel.Text = "关闭此阀门";
            newLabel.Style = new GSOLabelStyle();
            newLabel.Style.Opaque = 0.8;
            newLabel.Style.OutlineColor = Color.Red;
            //newLabel.Style.TractionLineEndPos = new GSOPoint2d(150, 120);
            newLabel.Style.OutlineWidth = 1;
            newLabel.Style.TracktionLineWidth = 1;
            newLabel.Style.BackBeginColor = Color.Orange;
            newLabel.Style.BackEndColor = Color.PaleGreen;

            m_BoosterValvesAnalyresFeature.Label = newLabel;

            m_BoosterValvesList.Add(m_BoosterValvesAnalyresFeature);

            globeControl1.Refresh();
        }
        string flashflag = "";
        /// <summary>
        /// 右键高亮按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LightMenu_Click(object sender, EventArgs e)
        {
            flashflag = "single";
            timer1.Start();
        }
        /// <summary>
        /// 列表项右键单击事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstValvesName_MouseDown(object sender, MouseEventArgs e)
        {
            int i = lstValvesName.SelectedIndex;
            if (i < 0)
            {
                return;
            }
            if (e.Button == MouseButtons.Right)
            {
                lstValvesName.ContextMenuStrip = contextMenuStrip1;
                foreach (ToolStripItem item in contextMenuStrip1.Items)
                {
                    item.Visible = true;
                }
            }
        }
         int count;
         /// <summary>
         /// 定时器事件处理
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void timer1_Tick(object sender, EventArgs e)
         {
             int i = lstValvesName.SelectedIndex;
             if (i < 0)
             {
                 return;
             }
             GSOFeature m_feature = m_BoosterValvesAnalyResFeatures[i];
             if (count < 40)
             {
                 count++;
                 if (flashflag == "single")
                 {
                     if (m_feature != null)
                     {
                         if (count % 2 != 0)
                         {
                             m_feature.HighLight = true;
                             globeControl1.Refresh();
                         }
                         else
                         {
                             m_feature.HighLight = false;
                             globeControl1.Refresh();
                         }
                     }
                 }
                 else if (flashflag == "all")
                 {

                 }

             }
             else
             {
                 timer1.Stop();
                 count = 0;
             }
         }
         /// <summary>
         /// 添加火苗
         /// </summary>
         /// <param name="x"></param>
         /// <param name="y"></param>
         /// <param name="z"></param>
         /// <returns></returns>
         private GSOFeature AddFire(double x,double y,double z)
         {
             // 烟火示例

             string strResPath = Application.StartupPath + "/Resource";

             //  烟火粒子示例,由三个发射器构成
             GSOGeoParticle geoParticle = new GSOGeoParticle();
             geoParticle.SetPosition(x, y, z); // 添加到这个经纬度位置
             geoParticle.AltitudeMode = EnumAltitudeMode.RelativeToGround;

             GSORingParticleEmitter emitter = new GSORingParticleEmitter();
             emitter.TexturePath = strResPath + "/ParticleImage/flare.png";

             emitter.SetSizeFix(1, 1);
             emitter.VelFix = 1;
             emitter.VelRnd = 5;

             emitter.AngleXYFix = 0;
             emitter.AngleXYRnd = 180;

             emitter.AngleXZFix = 90;
             emitter.AngleXZRnd = 0;

             emitter.LifeFix = 0.5f;
             emitter.LifeRnd = 0.0f;

             emitter.RotFix = 0;
             emitter.RotRnd = 0;

             emitter.RotVelFix = 0;
             emitter.RotVelRnd = 0;

             emitter.EmitPerSec = 100;

             // 采用线性插值生成粒子的初始颜色
             emitter.ColorRndStart = Color.White;
             emitter.ColorRndEnd = Color.Red;


             GSOColorParticleEffector effector2 = new GSOColorParticleEffector();
             effector2.SetColorChanged(0, -1, -1, 0);
             effector2.StartTime = 0.0f;
             effector2.EndTime = -1.0f;
             emitter.AddEffector(effector2);
             
             // 将三个发射器添加到粒子对象中
             geoParticle.AddEmitter(emitter);

             geoParticle.Play(); 
             
             GSOFeature feature = new GSOFeature();

             feature.Geometry = geoParticle;

             globeControl1.Globe.MemoryLayer.AddFeature(feature);
             

             return feature;
         }

         /// <summary>
         /// 添加喷泉
         /// </summary>
         /// <returns></returns>
         private GSOFeature AddFountain()
         {
             string strResPath = Application.StartupPath + "/Resource";

             GSOGeoParticle geoParticle = new GSOGeoParticle();
             geoParticle.SetPosition(116.314, 39.84, 0); // 添加到这个经纬度位置

             GSOPointParticleEmitter emitter = new GSOPointParticleEmitter();
             emitter.TexturePath = strResPath + "/ParticleImage/test.png";

             emitter.SetSizeFix(0.5f, 2);
             emitter.VelFix = 10;
             emitter.VelRnd = 2;

             emitter.GravityAcc = 9.8f;
             emitter.AngleXYFix = 0;
             emitter.AngleXYRnd = 180;

             emitter.AngleXZFix = 88;
             emitter.AngleXZRnd = 2;

             //emitter.InnerRadius = 0;
             // emitter.OuterRadius = 0.03f;

             emitter.LifeFix = 5.0f;
             emitter.LifeRnd = 1.0f;

             emitter.RotFix = 0;
             emitter.RotRnd = 0;

             emitter.RotVelFix = 0;
             emitter.RotVelRnd = 0;

             emitter.EmitPerSec = 1000;
             emitter.ColorRndStart = Color.FromArgb(33, 255, 255, 255);
             emitter.ColorRndEnd = Color.FromArgb(11, 255, 255, 255);
             emitter.IsLumAdded = false;

             // 将三个发射器添加到粒子对象中
             geoParticle.AddEmitter(emitter);

             geoParticle.Play();
             GSOFeature feature = new GSOFeature();

             feature.Geometry = geoParticle;

             //globeControl1.Globe.MemoryLayer.AddFeature(feature);
             globeControl1.Globe.FlyToFeature(feature);

             return feature;
         }

         /// <summary>
         /// 添加水柱
         /// </summary>
         /// <returns></returns>
         private GSOFeature AddWaterLine()
         {
             string strResPath = Application.StartupPath + "/Resource";

             GSOGeoParticle geoParticle = new GSOGeoParticle();
             geoParticle.SetPosition(116.308, 39.84, 0); // 添加到这个经纬度位置

             GSOPointParticleEmitter emitter = new GSOPointParticleEmitter();

             emitter.TexturePath = strResPath + "/ParticleImage/drop3.png";

             geoParticle.TimerInterval = 1;

             emitter.SetSizeFix(2.0f, 2.0f);

             emitter.VelFix = 50;
             emitter.VelRnd = 2;

             // emitter.IsLumAdded = false;

             emitter.GravityAcc = 9.8f;
             emitter.AngleXYFix = 0;
             emitter.AngleXYRnd = 2;

             emitter.AngleXZFix = 60;
             emitter.AngleXZRnd = 2;

             //emitter.InnerRadius = 0;
             // emitter.OuterRadius = 0.1f;

             emitter.LifeFix = 5.0f;
             emitter.LifeRnd = 1.0f;

             emitter.RotFix = 0;
             emitter.RotRnd = 0;

             emitter.RotVelFix = 0;
             emitter.RotVelRnd = 0;

             emitter.EmitPerSec = 1500;

             emitter.ColorRndStart = Color.FromArgb(100, 222, 222, 222);
             emitter.ColorRndEnd = Color.FromArgb(50, 222, 222, 222);

             /*

             GSOScaleParticleEffector effector1 = new GSOScaleParticleEffector();
             effector1.SetScale(0.2f, 0.2f);
             effector1.StartTime = 0;
             effector1.EndTime = -1; // 负数表示整个粒子生命结束
             emitter.AddEffector(effector1);
              */

             // 将三个发射器添加到粒子对象中
             geoParticle.AddEmitter(emitter);

             geoParticle.Play();
             GSOFeature feature = new GSOFeature();

             feature.Geometry = geoParticle;

             //globeControl1.Globe.MemoryLayer.AddFeature(feature);
             globeControl1.Globe.FlyToFeature(feature);

             return feature;
         }
    }
}