Newer
Older
LSPipeline / FrmFloodSubmergeAnalysis.cs
wxn on 1 Dec 2016 9 KB first
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Drawing.Drawing2D; //  

using GeoScene.Globe;
using GeoScene.Data;
using GeoScene.Engine;


namespace WorldGIS
{
    public partial class FrmFloodSubmergeAnalysis : Form
    {

        public GSOGeoPolygon3D m_polygon3D = null;
        public GSOGlobe m_globe = null;
        private GSOPoint3d m_pntMaxAlt;
        private GSOPoint3d m_pntMinAlt;
        private double m_dTotalArea = 0;
        private double m_dFloodArea = 0;
        private double m_dBaseAlt = 0;
        private GSOFeature m_WaterFeature = null;
        
        public FrmFloodSubmergeAnalysis()
        {
            InitializeComponent();
        }

        private void buttonPlay_Click(object sender, EventArgs e)
        {
            
            if (m_WaterFeature != null)
            {
                m_dBaseAlt = System.Convert.ToDouble(textBoxWaterAlt.Text);
                if (m_dBaseAlt > m_pntMaxAlt.Z)
                {
                    m_dBaseAlt = m_pntMaxAlt.Z;
                }
                if (m_dBaseAlt < m_pntMinAlt.Z)
                {
                    m_dBaseAlt = m_pntMinAlt.Z;
                }
                textBoxWaterAlt.Text = m_dBaseAlt.ToString("f2");
                trackBarAlt.Value = Math.Min((int)m_dBaseAlt, trackBarAlt.Maximum);
                GSOGeoWater geoWater = (GSOGeoWater)m_WaterFeature.Geometry;
                geoWater.SetAltitude(m_dBaseAlt);

                int nF = System.Convert.ToInt32(textBoxFrequency.Text);
                if (nF <= 0)
                {
                    nF = 1;
                }
                timerPlay.Interval = (int)(1000.0 / nF);
                timerPlay.Start();

            }
            else
            {
                MessageBox.Show("请先进行分析!");

            }


            
        }
        private void buttonAnalyse_Click(object sender, EventArgs e)
        {
            timerPlay.Stop();
            Analysis();
            SetText();
            ShowWater();
        }

        private void Analysis()
        {
            if (m_globe != null && m_polygon3D != null)
            {

                m_dBaseAlt = System.Convert.ToDouble(textBoxWaterAlt.Text);

                m_globe.Analysis3D.NoSourceFloodAnalyse(m_polygon3D, m_dBaseAlt,out m_dFloodArea, out m_dTotalArea,
                    out m_pntMaxAlt, out m_pntMinAlt, false,0);
            }

        }

        private void FloodSubmergeAnalysisDlg_Paint(object sender, PaintEventArgs e)
        {
            /*
            Graphics g = e.Graphics;
  

            Color FColor = Color.FromArgb(255, 255, 255);

            Color TColor = Color.FromArgb(221, 221, 221);
             

            Brush b = new LinearGradientBrush(this.ClientRectangle, FColor, TColor, LinearGradientMode.Vertical);

            g.FillRectangle(b, this.ClientRectangle);  
             * */

        }
        
        private void SetText()
        {

            textBoxPntMax.Text = m_pntMaxAlt.X.ToString("f6") + "," + m_pntMaxAlt.Y.ToString("f6") + "," + m_pntMaxAlt.Z.ToString("f2");
            textBoxPntMin.Text = m_pntMinAlt.X.ToString("f6") + "," + m_pntMinAlt.Y.ToString("f6") + "," + m_pntMinAlt.Z.ToString("f2");

            textBoxFloodArea.Text = m_dFloodArea.ToString("f2") + " 平方米";
            
            textBoxTotalArea.Text = m_dTotalArea.ToString("f2") + " 平方米";


        }

        private void FloodSubmergeAnalysisDlg_Load(object sender, EventArgs e)
        {
             
             
        }
        private void Clear()
        {
            if (m_WaterFeature!=null)
            {
                m_globe.MemoryLayer.RemoveFeatureByID(m_WaterFeature.ID);
                m_WaterFeature = null;
            }
            
        }
        private void ShowWater()
        {

            if (m_WaterFeature==null || m_WaterFeature.IsDeleted)
            {

                m_dBaseAlt = m_pntMinAlt.Z;

                GSOGeoWater geoWater = m_polygon3D.ConvertToGeoWater();

                GSOExtrudeStyle extrudeStyle = new GSOExtrudeStyle();

                if (checkBoxExtrude.Checked)
                {
                    extrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeToValue;
                }
                else
                {
                    extrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeNone;
                }

                extrudeStyle.ExtrudeValue = m_pntMinAlt.Z;
                extrudeStyle.TailPartVisible = false;


                GSOSimplePolygonStyle3D polygonStyle = new GSOSimplePolygonStyle3D();
                polygonStyle.FillColor = Color.FromArgb(200, 0, 0, 255);

                extrudeStyle.BodyStyle = polygonStyle;

                geoWater.ExtrudeStyle = extrudeStyle;


                geoWater.AltitudeMode = EnumAltitudeMode.Absolute;
                geoWater.SetAltitude(m_dBaseAlt);
                geoWater.ReflectSky = false;
                geoWater.WaveWidth = 0.1;
                geoWater.Play();



                m_WaterFeature = new GSOFeature();
                m_WaterFeature.Geometry = geoWater;
                m_globe.MemoryLayer.AddFeature(m_WaterFeature);
                m_globe.Refresh();

                trackBarAlt.Maximum = (int)m_pntMaxAlt.Z;
                trackBarAlt.Minimum = (int)m_pntMinAlt.Z;
                trackBarAlt.Value = trackBarAlt.Minimum;
                textBoxWaterAlt.Text = m_dBaseAlt.ToString("f2");
            
            }
            else
            {
                GSOGeoWater geoWater = (GSOGeoWater)m_WaterFeature.Geometry;
                geoWater.SetAltitude(m_dBaseAlt);
                m_globe.Refresh();

                trackBarAlt.Maximum = (int)m_pntMaxAlt.Z;
                trackBarAlt.Minimum = (int)m_pntMinAlt.Z;

            }
            
        }

        private void timerPlay_Tick(object sender, EventArgs e)
        {
            //Analysis();
            //SetText();
           

            if (m_WaterFeature!=null)
            {
                if (m_dBaseAlt>m_pntMaxAlt.Z)
                {
                    if (checkBoxLoopPlay.Checked)
                    {
                        m_dBaseAlt = m_pntMinAlt.Z;
                    }
                    else
                    {
                        timerPlay.Stop();
                    }
                    
                }

                m_dBaseAlt += (double)numericUpDownAddPerTime.Value;


                m_globe.Analysis3D.FetchNoSourceFloodAnalyseResult(m_dBaseAlt, out m_dFloodArea, out m_dTotalArea,
              out m_pntMaxAlt, out m_pntMinAlt);

                SetText();


                textBoxWaterAlt.Text = m_dBaseAlt.ToString("f2");
                trackBarAlt.Value = Math.Min((int)m_dBaseAlt, trackBarAlt.Maximum);
                GSOGeoWater geoWater = (GSOGeoWater)m_WaterFeature.Geometry;
                geoWater.SetAltitude(m_dBaseAlt);


           

            }
        }

        private void trackBarAlt_Scroll(object sender, EventArgs e)
        {
            textBoxWaterAlt.Text=trackBarAlt.Value.ToString();
            

        }
        private void numericUpDownAddPerTime_ValueChanged(object sender, EventArgs e)
        {
            trackBarAlt.TickFrequency = System.Convert.ToInt32(numericUpDownAddPerTime.Value);
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            timerPlay.Stop();
        }

        private void checkBoxExtrude_CheckedChanged(object sender, EventArgs e)
        {
            if (m_WaterFeature != null)
            {
                GSOGeoWater geoWater = (GSOGeoWater)m_WaterFeature.Geometry;
                if (checkBoxExtrude.Checked)
                {   
                    geoWater.ExtrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeToValue;
                }
                else
                {
                    geoWater.ExtrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeNone;

                }
               
            }

        }

        private void FloodSubmergeAnalysisDlg_FormClosed(object sender, FormClosedEventArgs e)
        {
            Clear();
        }

        private void buttonSetPlayParam_Click(object sender, EventArgs e)
        {
            int nF = System.Convert.ToInt32(textBoxFrequency.Text);
            if (nF <= 0)
            {
                nF = 1;
            }
            numericUpDownAddPerTime.Maximum = (decimal)m_pntMaxAlt.Z;
            numericUpDownAddPerTime.Minimum = 0;

            double dAltDiff = (m_pntMaxAlt.Z - m_pntMinAlt.Z);

            numericUpDownAddPerTime.Increment = (decimal)(0.1*dAltDiff / nF); // 用10秒播放完

            numericUpDownAddPerTime.Value = numericUpDownAddPerTime.Increment;



            trackBarAlt.Maximum = (int)m_pntMaxAlt.Z;
            trackBarAlt.Minimum = (int)m_pntMinAlt.Z;
            trackBarAlt.Value = trackBarAlt.Minimum;

            int nTF = (int)numericUpDownAddPerTime.Increment;

            if (nTF < 1)
            {
                nTF = 1;
            }
            trackBarAlt.TickFrequency = nTF;


            m_dBaseAlt = m_pntMinAlt.Z;
            textBoxWaterAlt.Text = m_dBaseAlt.ToString("f2");



        }

        private void buttonReplay_Click(object sender, EventArgs e)
        {
            
            if (m_WaterFeature != null)
            {
                m_dBaseAlt = m_pntMinAlt.Z;
                textBoxWaterAlt.Text = m_dBaseAlt.ToString("f2");
                trackBarAlt.Value = trackBarAlt.Minimum;
                GSOGeoWater geoWater = (GSOGeoWater)m_WaterFeature.Geometry;
                geoWater.SetAltitude(m_dBaseAlt);


                int nF = System.Convert.ToInt32(textBoxFrequency.Text);
                if (nF <= 0)
                {
                    nF = 1;
                }
                timerPlay.Interval = (int)(1000.0 / nF);
                timerPlay.Start();


            }
            else
            {
                MessageBox.Show("请先进行分析!");

            }

        }

         
        


    }
}