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();
            }
        }
예제 #2
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();
            }
        }