protected override void OnHandleDestroyed(EventArgs e) { base.OnHandleDestroyed(e); if (m_FeatureSelPoint != null) { m_FeatureSelPoint.Delete(); if (m_GlobeControl != null) { m_GlobeControl.Refresh(); } } }
private void makeBuffer(GSOFeature feature) { double radius = (double)numericUpDownRadius.Value; //缓冲区宽度 double value = (double)numericUpDownFenDuan.Value; //圆角角度 bool isRoundCorner = CBRoundCorner.Checked; //拐角是否圆滑 bool isRoundEnds = CBRoundEnds.Checked; //两端是否圆滑 GSOGeoPolygon3D buffer = null; //创建缓冲面 if (feature.Geometry.Type == EnumGeometryType.GeoMarker) //如果要素为点 { GSOGeoMarker marker = feature.Geometry as GSOGeoMarker; buffer = marker.CreateBuffer(radius, value, false); //创建点的缓冲面(宽度,角度,false) } else if (feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; buffer = line.CreateBuffer(radius, isRoundCorner, value, isRoundEnds, false); //创建线的缓冲面(宽度,拐角圆滑,角度,两端圆滑,false) } else if (feature.Geometry.Type == EnumGeometryType.GeoPolygon3D) { GSOGeoPolygon3D polygon = feature.Geometry as GSOGeoPolygon3D; buffer = polygon.CreateBuffer(radius, isRoundCorner, value, isRoundEnds, false); //创建面的缓冲面(宽度,拐角圆滑,角度,两端圆滑,false) } if (buffer != null) { //缓冲面颜色 GSOSimplePolygonStyle3D style = new GSOSimplePolygonStyle3D(); style.FillColor = Color.FromArgb(122, Color.Yellow); //缓冲线颜色 GSOSimpleLineStyle3D outlineStyle = new GSOSimpleLineStyle3D(); outlineStyle.LineColor = Color.Red; style.OutlineStyle = outlineStyle; buffer.Style = style; GSOFeature featureBuffer = new GSOFeature(); featureBuffer.Geometry = buffer; featureBuffer.Name = feature.Name + "_" + radius + "米_Buffer"; globeControl1.Globe.MemoryLayer.AddFeature(featureBuffer); //重新创建原有要素,使得要素在缓冲面上方,可选择 if (feature != null && feature.Dataset.Type == EnumDatasetType.Memory && feature.Dataset.Caption == "" && feature.Dataset.Name == "") { GSOFeature featureSelectCopy = feature.Clone(); globeControl1.Globe.MemoryLayer.AddFeature(featureSelectCopy); feature.Delete(); } globeControl1.Refresh(); } }
/// <summary> /// 跟随鼠标图层 /// </summary> /// <param name="text">显示文字</param> private void SetScreenText(string text) { //如果要素存在就删除 if (feature_ScreenText != null) { feature_ScreenText.Delete(); } if (text != "" && layerScreenText != null) { overlayText = new GSOGeoScreenText(); //创建对象 GSOTextStyle textStyle = new GSOTextStyle(); //创建样式 textStyle.ForeColor = Color.White; //字体颜色 textStyle.FontSize = 9; //字体大小 overlayText.TextStyle = textStyle; //赋予字体样式 overlayText.Align = EnumAlign.TopLeft; //字体对其方式 overlayText.Name = "ScreenText"; //字体对象名称 overlayText.SetOffset(20, 0); //字体偏移量 overlayText.Text = text; //显示文字 feature_ScreenText = new GSOFeature(); //创建要素 feature_ScreenText.Geometry = overlayText; //赋予要素 layerScreenText.AddFeature(feature_ScreenText); //添加要素到图层 } }
private void buttonOK_Click(object sender, EventArgs e) { string layerPath = textBoxLayerPath.Text.Trim(); if (layerPath == "") { MessageBox.Show("请选择目标文件!", "提示"); return; } string featureMinLength = textBoxFeatureMinLength.Text.Trim(); double minLength = 0; if (!double.TryParse(featureMinLength, out minLength)) { MessageBox.Show("请输入正确的最小长度值!", "提示"); return; } string featureMaxLength = textBoxFeatureMaxLength.Text.Trim(); double maxLength = 0; if (!double.TryParse(featureMaxLength, out maxLength)) { MessageBox.Show("请输入正确的最大长度值!", "提示"); return; } string featureCount = textBoxFeatureCount.Text.Trim(); int count = 0; if (checkBoxFeatureCount.Checked) { if (!int.TryParse(featureCount, out count)) { MessageBox.Show("请输入正确的要素个数值!", "提示"); return; } } GSOLayer layer = globeControl1.Globe.Layers.Add(layerPath); if (layer != null) { do { for (int i = layer.GetAllFeatures().Length - 1; i >= 0; i--) { GSOFeature feature = layer.GetAt(i); if (feature != null && feature.Geometry != null && feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; double length = line.GetSpaceLength(false, 6378137.0); if (length >= minLength && length <= maxLength) { feature.Delete(); } } //else //{ // feature.Delete(); //} } maxLength++; }while (checkBoxFeatureCount.Checked && layer.GetAllFeatures().Length > 30000); layer.SaveAs(Path.GetDirectoryName(textBoxLayerPath.Text.Trim()) + "/" + layer.Caption + "-处理后" + Path.GetExtension(textBoxLayerPath.Text.Trim())); MessageBox.Show("删除成功!", "提示"); } }
private void btnMove_Click(object sender, EventArgs e) { GSOLayer layer = ctl.Globe.Layers[cmbLayers.SelectedIndex]; if (layer != null) { if (layer.Type != EnumLayerType.FeatureLayer) { MessageBox.Show("当前选中的图层不是模型图层!", "提示"); return; } if (txtOldLat.Text == "") { MessageBox.Show("请选择起点"); } else if (txtNewLat.Text == "") { MessageBox.Show("请选择目标点"); } else { double daltX = Convert.ToDouble(txtNewLon.Text) - Convert.ToDouble(txtOldLon.Text); double daltY = Convert.ToDouble(txtNewLat.Text) - Convert.ToDouble(txtOldLat.Text); GSOFeatureLayer flayer = layer as GSOFeatureLayer; GSOFeatures features = flayer.GetAllFeatures(); for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, daltX, daltY); } else { GSOGeometry g = feature.Geometry; if (g != null) { g.MoveXY(daltX, daltY); } // switch (feature.Geometry.Type) // { // case EnumGeometryType.GeoPolyline3D: // GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; // for (int m = 0; m < line.PartCount; m++) // { // for (int j = 0; j < line[m].Count; j++) // { // GSOPoint3d line0 = line[m][j]; // line0.X += daltX; // line0.Y += daltY; // line[m][j] = line0; // } // } // break; // case EnumGeometryType.GeoPolygon3D: // GSOGeoPolygon3D polygon = feature.Geometry as GSOGeoPolygon3D; // if (polygon != null) // { // polygon.MoveXY(daltX, daltY); // } // break; // case EnumGeometryType.GeoModel: // GSOGeoModel model = feature.Geometry as GSOGeoModel; // if (model != null) // { // GSOPoint3d pt = model.Position; // pt.X += daltX; // pt.Y += daltY; // model.Position = pt; // } // break; // case EnumGeometryType.GeoFrameAnimation: // GSOGeoFrameAnimation frameAnimation = feature.Geometry as GSOGeoFrameAnimation; // if (frameAnimation != null) // { // GSOPoint3d pt = frameAnimation.Position; // pt.X += daltX; // pt.Y += daltY; // frameAnimation.Position = pt; // } // break; // default: // GSOGeometry g = feature.Geometry; // if (g != null) // { // g.MoveXY(daltX, daltY); // } // break; // } } } if (startFeat != null) { startFeat.Delete(); } if (endFeat != null) { endFeat.Delete(); } ctl.Refresh(); //this.Close(); } } else { MessageBox.Show("请选择图层"); } }
private void btnRemoveLine_Click(object sender, EventArgs e) { //根据全局变量删除 lineFeature.Delete(); globeControl1.Refresh(); }
private void ShowAddFeatureDlg(GSOFeature newFeature) { TreeNode featureAddLayerTreeNode = GetDestLayerFeatureAddTreeNode(); if (featureAddLayerTreeNode == null) { MessageBox.Show("添加失败!没有设置目标图层,请先设置", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // 先添加到图层中,这样可以预览效果 GSOLayer featureAddLayer = (GSOLayer)featureAddLayerTreeNode.Tag; featureAddLayer.AddFeature(newFeature); globeControl1.Refresh(); FrmFeatureInfo dlg = new FrmFeatureInfo(newFeature, featureAddLayer, globeControl1); DialogResult result = dlg.ShowDialog(this); if (result == DialogResult.OK) { RefreshTreeNodeLayerFeatureList(featureAddLayerTreeNode); } else { newFeature.Delete(); } }