• AE 移动要素(可多个)、差保存的代码


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    using ESRI.ArcGIS.Carto;
    using ESRI.ArcGIS.Geodatabase;
    using ESRI.ArcGIS.Geometry;
    using ESRI.ArcGIS.Display;
    using ESRI.ArcGIS.esriSystem;
    
    
    namespace test1023
    {
        public partial class Form1 : Form
        {
            private IActiveView pActiveView;
            private IMap pMap;
            private IWorkspaceEdit pWorkspaceEdit;
            private IPoint startPoint;
            private INewLineFeedback pLineFeedback;
            private IMoveGeometryFeedback pMoveGeometryFeedback;
            private ISet pMoveSet;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.axMapControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseDownEventHandler(defaultMapControl_OnMouseDown);
                this.axMapControl1.OnMouseMove += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseMoveEventHandler(defaultMapControl_OnMouseMove);
                this.axMapControl1.OnMouseUp += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseUpEventHandler(defaultMapControl_OnMouseUp);
            }
    
            private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
            {
                //if (this.axMapControl1.CurrentTool != null)
                //{
                //    return;
                //} 
                //pActiveView = this.axMapControl1.ActiveView;
                //pMap = this.axMapControl1.Map;
                //startPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                //if (pMoveGeometryFeedback == null)
                //{
                //    IEnumFeature pEnumFeature = pMap.FeatureSelection as IEnumFeature;
                //    if (pEnumFeature == null)
                //        return;
                //    ////定义InvalidAreaClass对象,用于局部刷新数据
                //    //pInvalidArea = new InvalidAreaClass();
                //    //pInvalidArea.Display = pActiveView.ScreenDisplay;
                //    //pInvalidArea.Add(pEnumFeature);
    
                //    pEnumFeature.Reset();
                //    IFeature pFeature = pEnumFeature.Next();
                //    //定义SetClass对象,用于存储当前要素选择集
                //    pMoveSet = new SetClass();
                //    pMoveGeometryFeedback = new MoveGeometryFeedbackClass();
                //    pMoveGeometryFeedback.Display = pActiveView.ScreenDisplay;
                //    while (pFeature != null)
                //    {
                //        pMoveGeometryFeedback.AddGeometry(pFeature.Shape);
                //        pMoveSet.Add(pFeature);
                //        pFeature = pEnumFeature.Next();
                //    }
                //    pMoveGeometryFeedback.Start(startPoint);
                //}
                ////定义NewLineFeedbackClass对象,用于显示要素移动的轨迹
                //if (pLineFeedback == null)
                //{
                //    pLineFeedback = new NewLineFeedbackClass();
                //    pLineFeedback.Display = pActiveView.ScreenDisplay;
                //    pLineFeedback.Start(startPoint);
                //}
            }
    
            private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
            {
                //if (this.axMapControl1.CurrentTool != null)
                //{
                //    return;
                //}
                //if (startPoint == null)
                //    return;
                //if (pLineFeedback == null || pMoveGeometryFeedback == null)
                //    return;
                //IPoint pMouseMovePoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                //pLineFeedback.MoveTo(pMouseMovePoint);
                //pMoveGeometryFeedback.MoveTo(pMouseMovePoint);
            }
    
            private void axMapControl1_OnMouseUp(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent e)
            {
                //if (this.axMapControl1.CurrentTool != null)
                //{
                //    return;
                //}
                //if (pLineFeedback == null || pMoveGeometryFeedback == null)
                //    return;
                //if (startPoint == null)
                //    return;
                //IPoint pEndPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                //pLineFeedback.Stop();
                //pMoveGeometryFeedback.MoveTo(pEndPoint);
                //if (startPoint.X != pEndPoint.X || startPoint.X != pEndPoint.Y)
                //{
                //    MoveAllFeatures(pMoveSet, startPoint, pEndPoint);
                //    this.axMapControl1.Refresh();
                //}
                //pLineFeedback = null;
                //pMoveGeometryFeedback = null;
            }
    
            private void MoveAllFeatures(ISet pMoveSet, IPoint pStartPoint, IPoint pEndPoint)
            {
                try
                {
                    //pWorkspaceEdit.StartEditOperation();
                    ILine pLine = new LineClass();
                    pLine.PutCoords(pStartPoint, pEndPoint);
                    pLine.SpatialReference = pMap.SpatialReference;
    
                    pMoveSet.Reset();
                    IFeatureEdit pFeatureEdit = pMoveSet.Next() as IFeatureEdit;
                    while (pFeatureEdit != null)
                    {
                        pFeatureEdit.MoveSet(pMoveSet, pLine);
                        pFeatureEdit = pMoveSet.Next() as IFeatureEdit;
                    }
                    //pWorkspaceEdit.StopEditOperation();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.axMapControl1.CurrentTool = null;
            }
    
            //------------
            private void defaultMapControl_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
            {
                if (this.axMapControl1.CurrentTool != null)
                {
                    return;
                }
                pActiveView = this.axMapControl1.ActiveView;
                pMap = this.axMapControl1.Map;
                startPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                if (pMoveGeometryFeedback == null)
                {
                    IEnumFeature pEnumFeature = pMap.FeatureSelection as IEnumFeature;
                    if (pEnumFeature == null)
                        return;
                    ////定义InvalidAreaClass对象,用于局部刷新数据
                    //pInvalidArea = new InvalidAreaClass();
                    //pInvalidArea.Display = pActiveView.ScreenDisplay;
                    //pInvalidArea.Add(pEnumFeature);
    
                    pEnumFeature.Reset();
                    IFeature pFeature = pEnumFeature.Next();
                    //定义SetClass对象,用于存储当前要素选择集
                    pMoveSet = new SetClass();
                    pMoveGeometryFeedback = new MoveGeometryFeedbackClass();
                    pMoveGeometryFeedback.Display = pActiveView.ScreenDisplay;
                    while (pFeature != null)
                    {
                        pMoveGeometryFeedback.AddGeometry(pFeature.Shape);
                        pMoveSet.Add(pFeature);
                        pFeature = pEnumFeature.Next();
                    }
                    pMoveGeometryFeedback.Start(startPoint);
                }
                //定义NewLineFeedbackClass对象,用于显示要素移动的轨迹
                if (pLineFeedback == null)
                {
                    pLineFeedback = new NewLineFeedbackClass();
                    pLineFeedback.Display = pActiveView.ScreenDisplay;
                    pLineFeedback.Start(startPoint);
                }
            }
    
            private void defaultMapControl_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
            {
                if (this.axMapControl1.CurrentTool != null)
                {
                    return;
                }
                if (startPoint == null)
                    return;
                if (pLineFeedback == null || pMoveGeometryFeedback == null)
                    return;
                IPoint pMouseMovePoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                pLineFeedback.MoveTo(pMouseMovePoint);
                pMoveGeometryFeedback.MoveTo(pMouseMovePoint);
            }
    
            private void defaultMapControl_OnMouseUp(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent e)
            {
                if (this.axMapControl1.CurrentTool != null)
                {
                    return;
                }
                if (pLineFeedback == null || pMoveGeometryFeedback == null)
                    return;
                if (startPoint == null)
                    return;
                IPoint pEndPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
                pLineFeedback.Stop();
                pMoveGeometryFeedback.MoveTo(pEndPoint);
                if (startPoint.X != pEndPoint.X || startPoint.X != pEndPoint.Y)
                {
                    MoveAllFeatures(pMoveSet, startPoint, pEndPoint);
                    this.axMapControl1.Refresh();
                }
                pLineFeedback = null;
                pMoveGeometryFeedback = null;
            }
        }
    }
  • 相关阅读:
    课程作业(一)
    PTA 5-3 解题报告
    作业(四)
    C#循环语句整理
    C#数组和集合整理
    作业(三)
    1.0总结
    如何在C++中产生随机数
    CLSRSC-400: A system reboot is required to continue installing.
    Upgrade a Non-CDB To a PDB on CDB
  • 原文地址:https://www.cnblogs.com/xiangniu/p/2860450.html
Copyright © 2020-2023  润新知