コード例 #1
0
        /// <summary>
        /// 开始演示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonPlay_Click(object sender, EventArgs e)
        {
            if (m_WaterFeature != null)
            {
                //水面高度
                m_dBaseAlt = 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 = Convert.ToInt32(textBoxFrequency.Text);
                if (nF <= 0)
                {
                    nF = 1;
                }
                timerPlay.Interval = (int)(1000.0 / nF);
                timerPlay.Start();
            }
            else
            {
                MessageBox.Show("请先进行分析!");
            }
        }
コード例 #2
0
        private void CtrlWaterParamPage_Load(object sender, EventArgs e)
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                textBoxWaveSpeedX.Text = geoWater.WaveSpeedX.ToString();
                textBoxWaveSpeedY.Text = geoWater.WaveSpeedY.ToString();
                textBoxWaveWidth.Text  = geoWater.WaveWidth.ToString();

                pictureBoxWaterColor.BackColor   = geoWater.WaterColor;
                pictureBoxReflectColor.BackColor = Color.FromArgb(255, geoWater.ReflectColor);
                upDownReflectOpaque.Value        = geoWater.ReflectColor.A;


                if (geoWater.LightType < 0 || geoWater.LightType > 3)
                {
                    comboBoxLightType.SelectedIndex = 0;
                }
                else
                {
                    comboBoxLightType.SelectedIndex = geoWater.LightType;
                }


                textBoxNormalImage.Text = geoWater.WaveNormalImage;
                textBoxDuDvImage.Text   = geoWater.WaveDuDvImage;

                cboxReflectSky.Checked  = geoWater.ReflectSky;
                checkBoxWaveLOD.Checked = geoWater.UseWaveLOD;
            }
        }
コード例 #3
0
        /// <summary>
        /// 创建个计时器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerPlay_Tick(object sender, EventArgs e)
        {
            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;
                globeControl1.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);
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        private void checkBoxWaveLOD_CheckedChanged(object sender, EventArgs e)
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                geoWater.UseWaveLOD = checkBoxWaveLOD.Checked;
                if (m_GlobeControl != null)
                {
                    m_GlobeControl.Refresh();
                }
            }
        }
コード例 #6
0
        private void cboxReflectSky_CheckedChanged(object sender, EventArgs e)
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                geoWater.ReflectSky = cboxReflectSky.Checked;
                if (m_GlobeControl != null)
                {
                    m_GlobeControl.Refresh();
                }
            }
        }
コード例 #7
0
        private void duDvImageImageChanged()
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                geoWater.WaveDuDvImage = textBoxDuDvImage.Text;
                if (m_GlobeControl != null)
                {
                    m_GlobeControl.Refresh();
                }
            }
        }
コード例 #8
0
        private void comboBoxLightType_SelectedIndexChanged(object sender, EventArgs e)
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                geoWater.LightType = comboBoxLightType.SelectedIndex;
                if (m_GlobeControl != null)
                {
                    m_GlobeControl.Refresh();
                }
            }
        }
コード例 #9
0
 /// <summary>
 /// 是否显示立面
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 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;
         }
     }
 }
コード例 #10
0
        //水面
        private void btn_Water_Click(object sender, EventArgs e)
        {
            GSOGeoWater water       = new GSOGeoWater();
            GSOPoint3ds polygonPnts = new GSOPoint3ds(); // 创建水面的节点

            polygonPnts.Add(new GSOPoint3d(120.47, 31.3, 0));
            polygonPnts.Add(new GSOPoint3d(120.48, 31.3, 0));
            polygonPnts.Add(new GSOPoint3d(120.48, 31.25, 0));
            polygonPnts.Add(new GSOPoint3d(120.47, 31.2, 0));
            water.AddPart(polygonPnts);
            water.Play();           //播放水面动态效果
            water.WaveSpeedX = 0;   //X方向水流速度
            water.WaveSpeedY = 0.1; //Y方向水流速度
            AddNewGeoToLayer(water, "水面");
        }
コード例 #11
0
 /// <summary>
 /// 重播按钮
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 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 = Convert.ToInt32(textBoxFrequency.Text);
         if (nF <= 0)
         {
             nF = 1;
         }
         timerPlay.Interval = (int)(1000.0 / nF);
         timerPlay.Start();
     }
 }
コード例 #12
0
        private void FrmPolygonToWater_Load(object sender, EventArgs e)
        {
            mFeatures    = mLayer.GetAllFeatures();
            mFeaturesOld = new GSOFeatures();
            bool hasGeoWater = false;

            for (int i = 0; i < mFeatures.Length; i++)
            {
                if (mFeatures[i] != null)
                {
                    mFeaturesOld.Add(mFeatures[i].Clone());
                    if (!hasGeoWater)
                    {
                        if (mFeatures[i].Geometry != null && mFeatures[i].Geometry.Type == EnumGeometryType.GeoWater)
                        {
                            GSOGeoWater geoWater = (GSOGeoWater)mFeatures[i].Geometry;
                            // 水一般都是绝对高度模式
                            //geoWater.Altitude = EnumAltitudeMode.Absolute;

                            textBoxWaveSpeedX.Text           = geoWater.WaveSpeedX.ToString();
                            textBoxWaveSpeedY.Text           = geoWater.WaveSpeedY.ToString();
                            textBoxWaveWidth.Text            = geoWater.WaveWidth.ToString();
                            pictureBoxWaterColor.BackColor   = geoWater.WaterColor;
                            pictureBoxReflectColor.BackColor = geoWater.ReflectColor;
                            textBoxNormalImage.Text          = geoWater.WaveNormalImage;
                            textBoxDuDvImage.Text            = geoWater.WaveDuDvImage;
                            checkboxReflectSky.Checked       = geoWater.ReflectSky;
                            checkBoxWaveLOD.Checked          = geoWater.UseWaveLOD;

                            hasGeoWater = true;
                        }
                    }
                }
            }
            if (!hasGeoWater)
            {
                textBoxWaveSpeedX.Text          = "" + 0;
                textBoxWaveSpeedY.Text          = "" + 0.00999999977648258;
                textBoxWaveWidth.Text           = "" + 1;
                comboBoxLightType.SelectedIndex = 0;
            }
        }
コード例 #13
0
        private void textBoxWaveWidth_TextChanged(object sender, EventArgs e)
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                try
                {
                    geoWater.WaveWidth = Convert.ToDouble(textBoxWaveWidth.Text);
                    if (m_GlobeControl != null)
                    {
                        m_GlobeControl.Refresh();
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }
コード例 #14
0
        private void reflectColorChanged()
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                try
                {
                    geoWater.ReflectColor = Color.FromArgb(Convert.ToByte(upDownReflectOpaque.Value), pictureBoxReflectColor.BackColor);
                    if (m_GlobeControl != null)
                    {
                        m_GlobeControl.Refresh();
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }
コード例 #15
0
        private void waterColorChanged()
        {
            GSOGeoWater geoWater = m_Geometry as GSOGeoWater;

            if (geoWater != null)
            {
                try
                {
                    geoWater.WaterColor = pictureBoxWaterColor.BackColor;
                    if (m_GlobeControl != null)
                    {
                        m_GlobeControl.Refresh();
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }
コード例 #16
0
        private bool apply()
        {
            double waveSpeedX = 0;

            if (!double.TryParse(textBoxWaveSpeedX.Text.Trim(), out waveSpeedX))
            {
                MessageBox.Show("水波横向速度不符合要求");
                return(false);
            }
            double waveSpeedY = 0;

            if (!double.TryParse(textBoxWaveSpeedY.Text.Trim(), out waveSpeedY))
            {
                MessageBox.Show("水波纵向速度不符合要求");
                return(false);
            }
            double waveWidth = 0;

            if (!double.TryParse(textBoxWaveWidth.Text.Trim(), out waveWidth))
            {
                MessageBox.Show("水波宽度不符合要求");
                return(false);
            }
            Color       waterColor          = pictureBoxWaterColor.BackColor;
            Color       reflectorColor      = Color.FromArgb(Convert.ToByte(upDownReflectOpaque.Value), pictureBoxReflectColor.BackColor);
            int         intLightType        = comboBoxLightType.SelectedIndex;
            string      waveNormalImagePath = textBoxNormalImage.Text;
            string      waveDuDvImagePath   = textBoxDuDvImage.Text;
            GSOFeatures featuresAdded       = new GSOFeatures();
            GSOFeatures featuresNomal       = new GSOFeatures();

            for (int i = mFeatures.Length - 1; i >= 0; i--)
            {
                GSOFeature feature = mFeatures[i];
                if (feature != null && feature.Geometry != null)
                {
                    if (feature.Geometry.Type == EnumGeometryType.GeoPolygon3D)
                    {
                        GSOGeoPolygon3D geoPolygon3d = (GSOGeoPolygon3D)feature.Geometry;
                        GSOGeoWater     geoWater     = geoPolygon3d.ConvertToGeoWater();
                        // 水一般都是绝对高度模式
                        //geoWater.Altitude = EnumAltitudeMode.Absolute;

                        geoWater.WaveSpeedX      = waveSpeedX;
                        geoWater.WaveSpeedY      = waveSpeedY;
                        geoWater.WaveWidth       = waveWidth;
                        geoWater.WaterColor      = waterColor;
                        geoWater.ReflectColor    = reflectorColor;
                        geoWater.WaveNormalImage = waveNormalImagePath;
                        geoWater.WaveDuDvImage   = waveDuDvImagePath;
                        geoWater.ReflectSky      = checkboxReflectSky.Checked;
                        geoWater.UseWaveLOD      = checkBoxWaveLOD.Checked;


                        GSOFeature newFeature = feature.Clone();
                        geoWater.Play();
                        newFeature.Geometry = geoWater;

                        featuresAdded.Add(newFeature);
                    }
                    else if (feature.Geometry.Type == EnumGeometryType.GeoWater)
                    {
                        GSOGeoWater geoWater = (GSOGeoWater)feature.Geometry;
                        // 水一般都是绝对高度模式
                        //geoWater.Altitude = EnumAltitudeMode.Absolute;

                        geoWater.WaveSpeedX      = waveSpeedX;
                        geoWater.WaveSpeedY      = waveSpeedY;
                        geoWater.WaveWidth       = waveWidth;
                        geoWater.WaterColor      = waterColor;
                        geoWater.ReflectColor    = reflectorColor;
                        geoWater.WaveNormalImage = waveNormalImagePath;
                        geoWater.WaveDuDvImage   = waveDuDvImagePath;
                        geoWater.ReflectSky      = checkboxReflectSky.Checked;
                        geoWater.UseWaveLOD      = checkBoxWaveLOD.Checked;

                        GSOFeature newFeature = feature.Clone();
                        geoWater.Play();
                        newFeature.Geometry = geoWater;

                        featuresAdded.Add(newFeature);
                    }
                    else
                    {
                        featuresNomal.Add(feature);
                    }
                }
            }
            mLayer.RemoveAllFeature();
            mLayer.AddFeatures(featuresAdded);
            mLayer.AddFeatures(featuresNomal);
            mGlobeControl.Refresh();
            return(true);
        }