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(); } }
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(); } }