public void OnMouseDown(int button, int shift, int x, int y) { try { //转换鼠标点击位置起始点为地图坐标 m_startPt = m_activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y); if (m_EngineEditor == null) { return; } if (m_EngineEditor.EditState != esriEngineEditState.esriEngineStateEditing) { return; } if (m_EngineEditLayers == null) { return; } IFeatureLayer pFeatLyr = m_EngineEditLayers.TargetLayer; if (pFeatLyr == null) { return; } //获取要移动几何对象 IFeatureCursor pFeatCur = MapManager.GetSelectedFeatures(pFeatLyr); if (pFeatCur == null) { MessageBox.Show("请选择要移动要素!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IFeature pFeature = pFeatCur.NextFeature(); //当移动的对象为空时,首先进行对象实例化 if (m_moveGeoFeedBack == null) { m_moveGeoFeedBack = new MoveGeometryFeedbackClass(); } m_moveGeoFeedBack.Display = m_activeView.ScreenDisplay; while (pFeature != null) { m_moveGeoFeedBack.AddGeometry(pFeature.Shape); pFeature = pFeatCur.NextFeature(); } //添加起始点 m_moveGeoFeedBack.Start(m_startPt); System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatCur); } catch (Exception ex) { //SysLogHelper.WriteOperationLog("要素移动错误", ex.Source, "数据编辑"); } }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { if (Button != 1 || m_MapControl.Map.SelectionCount == 0) { return; } MoData.v_bVertexSelectionTracker = false; m_pNewLineFeedback = new NewLineFeedbackClass(); m_pMoveGeometryFeedback = new MoveGeometryFeedbackClass(); IDisplayFeedback pDisplayFeedback = m_pMoveGeometryFeedback as IDisplayFeedback; pDisplayFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay; m_pPtStart = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); m_pNewLineFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay; m_pNewLineFeedback.Start(m_pPtStart); //只刷新选中的地物 IEnumFeature pEnumFeature = m_MapControl.Map.FeatureSelection as IEnumFeature; IInvalidArea pInvalidArea = new InvalidAreaClass(); pInvalidArea.Display = m_hookHelper.ActiveView.ScreenDisplay; pInvalidArea.Add(pEnumFeature); pEnumFeature.Reset(); IFeature pFeature = pEnumFeature.Next(); m_pMoveSet = new SetClass(); while (pFeature != null) { //'判断选中的要素是否启动了编辑 IFeatureClass pFeatureClass = pFeature.Class as IFeatureClass; IDataset pDataset = pFeatureClass as IDataset; IWorkspaceEdit pWSEdit = pDataset.Workspace as IWorkspaceEdit; if (pWSEdit != null) { if (pWSEdit.IsBeingEdited()) { m_pMoveGeometryFeedback.AddGeometry(pFeature.Shape); m_pMoveSet.Add(pFeature); } } pFeature = pEnumFeature.Next(); } m_pMoveGeometryFeedback.Start(m_pPtStart); m_bMouseDown = true; }