Пример #1
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;
            }
        }
        private void buttonAnalyse_Click(object sender, EventArgs e)
        {
            if (globeControl1.Globe != null && m_polygon3D != null)
            {
                double dAlt = Convert.ToDouble(textBoxDestAlt.Text);
                //交给系统处理,传入值为面,高度,返回为挖的高度,填的高度,挖的区域,填的区域,全部的面积,最高点,最低点,最后两项默认false,0
                globeControl1.Globe.Analysis3D.DigFillAnalyse(m_polygon3D, dAlt, out m_dDigVolume, out m_dFillVolume,
                                                              out m_dDigArea, out m_dFillArea, out m_dTotalArea, out m_pntMaxAlt, out m_pntMinAlt, false, 0);

                GSOFeature  altFeature   = null;                                                                        //创建一个空要素
                GSOFeatures tempFeatures = globeControl1.Globe.MemoryLayer.GetFeatureByName("DigFillAltPolygon", true); //要素从内存图层里获取
                if (tempFeatures.Length > 0)                                                                            //判断是否获取到
                {
                    altFeature = tempFeatures[0];                                                                       //获取到就直接赋值
                }
                //把传进来的范围面复制一个
                GSOGeoPolygon3D newPolygon = (GSOGeoPolygon3D)m_polygon3D.Clone();
                newPolygon.SetAltitude(dAlt);                                  //给这个面设置高度
                newPolygon.AltitudeMode = EnumAltitudeMode.Absolute;           //高度类型是相对地面

                GSOExtrudeStyle extrudeStyle = new GSOExtrudeStyle();          //拉伸风格
                extrudeStyle.ExtrudeType     = EnumExtrudeType.ExtrudeToValue; //拉伸方式
                extrudeStyle.ExtrudeValue    = m_pntMinAlt.Z;                  //拉伸的值
                extrudeStyle.TailPartVisible = false;                          //末端是否可见

                //多边形风格,立面风格
                GSOSimplePolygonStyle3D extrudePolygonStyle = new GSOSimplePolygonStyle3D();
                extrudePolygonStyle.FillColor = Color.FromArgb(150, 0, 255, 0); //多边形填充颜色
                extrudeStyle.BodyStyle        = extrudePolygonStyle;            //把风格赋给拉伸风格

                //多边形风格,顶层风格
                GSOSimplePolygonStyle3D polygonStyle = new GSOSimplePolygonStyle3D();
                polygonStyle.FillColor = Color.FromArgb(200, 0, 0, 255); //设置颜色

                newPolygon.Style        = polygonStyle;                  //面的顶层风格
                newPolygon.ExtrudeStyle = extrudeStyle;                  //棉的立面风格

                //判断如果要素为空,或者被删除
                if (m_AltFeature == null || m_AltFeature.IsDeleted)
                {
                    //新建一个要素,并且把刚才配置的要素赋值给它
                    m_AltFeature          = new GSOFeature();
                    m_AltFeature.Name     = "DigFillAltPolygon";
                    m_AltFeature.Geometry = newPolygon;
                    globeControl1.Globe.MemoryLayer.AddFeature(m_AltFeature);
                }
                else
                {
                    //如果原来就有,就直接赋值
                    m_AltFeature.Geometry = newPolygon;
                }
                //刷新球
                globeControl1.Globe.Refresh();

                //设置文字
                SetText();
            }
        }
Пример #3
0
        private void buttonAnalyse_Click(object sender, EventArgs e)
        {
            if (m_globe != null && m_polygon3D != null)
            {
                double dAlt=System.Convert.ToDouble(textBoxDestAlt.Text);
                m_globe.Analysis3D.DigFillAnalyse(m_polygon3D, dAlt, out m_dDigVolume, out m_dFillVolume,
                    out m_dDigArea, out m_dFillArea, out m_dTotalArea, out m_pntMaxAlt, out m_pntMinAlt, false, 0);

                //double dTempArea = m_polygon3D.Area;

                //double dDiff = dTempArea - m_dTotalArea;

                //double dRadio = dDiff / dTempArea;

                GSOFeature altFeature = null;
               GSOFeatures tempFeatures= m_globe.MemoryLayer.GetFeatureByName("DigFillAltPolygon",true);
                if (tempFeatures.Length>0)
                {
                    altFeature = tempFeatures[0];
                }
                GSOGeoPolygon3D newPolygon = (GSOGeoPolygon3D)m_polygon3D.Clone();
                newPolygon.SetAltitude(dAlt);
                newPolygon.AltitudeMode = EnumAltitudeMode.Absolute;

                GSOExtrudeStyle extrudeStyle = new GSOExtrudeStyle();
                extrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeToValue;
                extrudeStyle.ExtrudeValue = m_pntMinAlt.Z;
                extrudeStyle.TailPartVisible = false;

                GSOSimplePolygonStyle3D extrudePolygonStyle = new GSOSimplePolygonStyle3D();
                extrudePolygonStyle.FillColor = Color.FromArgb(150, 0, 255, 0);
                extrudeStyle.BodyStyle = extrudePolygonStyle;

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

                newPolygon.Style = polygonStyle;
                newPolygon.ExtrudeStyle = extrudeStyle;

                if (m_AltFeature == null || m_AltFeature.IsDeleted)
                {
                    m_AltFeature = new GSOFeature();
                    m_AltFeature.Name = "DigFillAltPolygon";
                    m_AltFeature.Geometry = newPolygon;
                    m_globe.MemoryLayer.AddFeature(m_AltFeature);
                }
                else
                {
                    m_AltFeature.Geometry = newPolygon;
                }

                m_globe.Refresh();

                SetText();
            }
        }
Пример #4
0
        private void SetControlsByExtrudeStyle(GSOExtrudeStyle extrudeStyle)
        {
            if (extrudeStyle != null)
            {
                tboxExtrudeValue.Text = extrudeStyle.ExtrudeValue.ToString();

                switch (extrudeStyle.ExtrudeType)
                {
                case EnumExtrudeType.ExtrudeValue:
                    cbbExtrudeType.SelectedIndex = 0;
                    break;

                case EnumExtrudeType.ExtrudeToValue:
                    cbbExtrudeType.SelectedIndex = 1;
                    break;

                case EnumExtrudeType.ExtrudeToGround:
                    cbbExtrudeType.SelectedIndex = 2;
                    break;
                }


                checkBoxUseBodyPartStyle.Checked = (extrudeStyle.BodyStyle != null);
                checkBoxUseTailPartStyle.Checked = (extrudeStyle.TailStyle != null);


                checkBoxHeadPartVisible.Checked = extrudeStyle.HeadPartVisible;
                checkBoxBodyPartVisible.Checked = extrudeStyle.BodyPartVisible;
                checkBoxTailPartVisible.Checked = extrudeStyle.TailPartVisible;

                // 这句要写到最后
                checkBoxUseExturde.Checked = true;
            }
            else
            {
                checkBoxUseExturde.Checked = false;
            }

            CheckControlsEnable(checkBoxUseExturde.Checked);
        }
Пример #5
0
        private void SetControlsByExtrudeStyle(GSOExtrudeStyle extrudeStyle)
        {
            if (extrudeStyle != null)
            {

                tboxExtrudeValue.Text=extrudeStyle.ExtrudeValue.ToString();

                switch (extrudeStyle.ExtrudeType)
                {
                    case EnumExtrudeType.ExtrudeValue:
                        cbbExtrudeType.SelectedIndex = 0;
                        break;
                    case EnumExtrudeType.ExtrudeToValue:
                        cbbExtrudeType.SelectedIndex = 1;
                        break;
                    case EnumExtrudeType.ExtrudeToGround:
                        cbbExtrudeType.SelectedIndex = 2;
                        break;

                }

                checkBoxUseBodyPartStyle.Checked = (extrudeStyle.BodyStyle != null);
                checkBoxUseTailPartStyle.Checked = (extrudeStyle.TailStyle != null);

                checkBoxHeadPartVisible.Checked=extrudeStyle.HeadPartVisible;
                checkBoxBodyPartVisible.Checked = extrudeStyle.BodyPartVisible;
                checkBoxTailPartVisible.Checked = extrudeStyle.TailPartVisible;

                // 这句要写到最后
                checkBoxUseExturde.Checked = true;
            }
            else
            {
                checkBoxUseExturde.Checked = false;

            }

            CheckControlsEnable(checkBoxUseExturde.Checked);
        }
Пример #6
0
        private void buttonAnalyse_Click(object sender, EventArgs e)
        {
            if (m_globe != null && m_polygon3D != null)
            {
                double dAlt = System.Convert.ToDouble(textBoxDestAlt.Text);
                m_globe.Analysis3D.DigFillAnalyse(m_polygon3D, dAlt, out m_dDigVolume, out m_dFillVolume,
                                                  out m_dDigArea, out m_dFillArea, out m_dTotalArea, out m_pntMaxAlt, out m_pntMinAlt, false, 0);

                //double dTempArea = m_polygon3D.Area;

                //double dDiff = dTempArea - m_dTotalArea;

                //double dRadio = dDiff / dTempArea;


                GSOFeature  altFeature   = null;
                GSOFeatures tempFeatures = m_globe.MemoryLayer.GetFeatureByName("DigFillAltPolygon", true);
                if (tempFeatures.Length > 0)
                {
                    altFeature = tempFeatures[0];
                }
                GSOGeoPolygon3D newPolygon = (GSOGeoPolygon3D)m_polygon3D.Clone();
                newPolygon.SetAltitude(dAlt);
                newPolygon.AltitudeMode = EnumAltitudeMode.Absolute;

                GSOExtrudeStyle extrudeStyle = new GSOExtrudeStyle();
                extrudeStyle.ExtrudeType     = EnumExtrudeType.ExtrudeToValue;
                extrudeStyle.ExtrudeValue    = m_pntMinAlt.Z;
                extrudeStyle.TailPartVisible = false;

                GSOSimplePolygonStyle3D extrudePolygonStyle = new GSOSimplePolygonStyle3D();
                extrudePolygonStyle.FillColor = Color.FromArgb(150, 0, 255, 0);
                extrudeStyle.BodyStyle        = extrudePolygonStyle;



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

                newPolygon.Style        = polygonStyle;
                newPolygon.ExtrudeStyle = extrudeStyle;


                if (m_AltFeature == null || m_AltFeature.IsDeleted)
                {
                    m_AltFeature          = new GSOFeature();
                    m_AltFeature.Name     = "DigFillAltPolygon";
                    m_AltFeature.Geometry = newPolygon;
                    m_globe.MemoryLayer.AddFeature(m_AltFeature);
                }
                else
                {
                    m_AltFeature.Geometry = newPolygon;
                }



                m_globe.Refresh();



                SetText();
            }
        }
Пример #7
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;

            }
        }