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

 

posted @ 2013-01-14 22:59  象牛  阅读(2165)  评论(7编辑  收藏  举报