コード例 #1
0
 protected override void OnHandleDestroyed(EventArgs e)
 {
     base.OnHandleDestroyed(e);
     if (m_FeatureSelPoint != null)
     {
         m_FeatureSelPoint.Delete();
         if (m_GlobeControl != null)
         {
             m_GlobeControl.Refresh();
         }
     }
 }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
 /// <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); //添加要素到图层
     }
 }
コード例 #4
0
        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("删除成功!", "提示");
            }
        }
コード例 #5
0
        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("请选择图层");
            }
        }
コード例 #6
0
 private void btnRemoveLine_Click(object sender, EventArgs e)
 {
     //根据全局变量删除
     lineFeature.Delete();
     globeControl1.Refresh();
 }
コード例 #7
0
ファイル: MainFrm.cs プロジェクト: StarU/qkKL6Dgf12
        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();
            }
        }