/// <summary> /// Occurs when this command is clicked /// </summary> public override void OnClick() { if (m_hookHelper != null) { ClsMapLayer pConvertPixelDistanceToMapDistance = new ClsMapLayer(); IEnvelope pEnv; IFeature pFeat = null; IActiveView pActiveView; ICursor pCursor = null; IFeatureCursor pFeatCursor; IGeometry pGeo; IFeatureLayer pFeatLyr; ICompositeLayer pGroupLyr; IFeatureSelection pFeatSel; pEnv = new EnvelopeClass(); if (ClsDeclare.g_pMap.SelectionCount < 1) { //ClsDeclare.g_ErrorHandler.DisplayInformation("图面上没有选择地物,无法放大", false, "确定",null); return; } try { for (int i = 0; i < ClsDeclare.g_pMap.LayerCount; i++) { if (ClsDeclare.g_pMap.get_Layer(i) is IGroupLayer && (ClsDeclare.g_pMap.get_Layer(i).Name != "示意图")) { pGroupLyr = ClsDeclare.g_pMap.get_Layer(i) as ICompositeLayer; for (int j = 0; j < pGroupLyr.Count; j++) { if (pGroupLyr.get_Layer(j) is IGeoFeatureLayer) { pFeatLyr = pGroupLyr.get_Layer(j) as IFeatureLayer; pFeatSel = (IFeatureSelection)pFeatLyr; if (pFeatSel.SelectionSet.Count == 0) { continue; } pFeatSel.SelectionSet.Search(null, false, out pCursor); pFeatCursor = (IFeatureCursor)pCursor; pFeat = pFeatCursor.NextFeature(); while (pFeat != null) { pGeo = pFeat.Shape; pEnv.Union(pGeo.Envelope); pFeat = pFeatCursor.NextFeature(); } } } } else if (ClsDeclare.g_pMap.get_Layer(i) is IGeoFeatureLayer) { pFeatLyr = ClsDeclare.g_pMap.get_Layer(i) as IFeatureLayer; pFeatSel = (IFeatureSelection)pFeatLyr; if (pFeatSel.SelectionSet.Count == 0) { continue; } pFeatSel.SelectionSet.Search(null, false, out pCursor); pFeatCursor = (IFeatureCursor)pCursor; pFeat = pFeatCursor.NextFeature(); while (pFeat != null) { pGeo = pFeat.Shape; pEnv.Union(pGeo.Envelope); pFeat = pFeatCursor.NextFeature(); } } } pActiveView = (IActiveView)ClsDeclare.g_pMap; double dblLen; dblLen = pConvertPixelDistanceToMapDistance.ConvertPixelDistanceToMapDistance(pActiveView, 30); pEnv.Expand(dblLen, dblLen, false); pActiveView.Extent = pEnv; pActiveView.Refresh(); } catch (Exception) { //ClsDeclare.g_ErrorHandler.DisplayInformation(ex.Message, false, "确定",null); throw; } } else if (m_sceneHookHelper != null) { } else if (m_globeHookHelper != null) { } }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { try { //if (ClsDeclare.g_pMap.SelectionCount != 0) // ClsDeclare.g_pMap.ClearSelection(); ClsMapLayer pConvert = new ClsMapLayer(); IActiveView pActiveView; pActiveView = m_hookHelper.ActiveView; IPoint pPoint; pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); ISelectionEnvironment pSelectEnv = new SelectionEnvironmentClass(); double Length; Length = pConvert.ConvertPixelDistanceToMapDistance(pActiveView, pSelectEnv.SearchTolerance); ITopologicalOperator pTopoOpera; IGeometry pBuffer; pTopoOpera = (ITopologicalOperator)pPoint; pBuffer = pTopoOpera.Buffer(Length); m_pGeometry = pBuffer.Envelope; esriSelectionResultEnum pSelectType = new esriSelectionResultEnum(); switch (Shift) { case 0: { pSelectType = esriSelectionResultEnum.esriSelectionResultNew; switch (mvarSelectMethod) { case "New": //新建选择结果集 pSelectType = esriSelectionResultEnum.esriSelectionResultNew; break; case "Add": //增加选择结果集 按下Shift键 pSelectType = esriSelectionResultEnum.esriSelectionResultAnd; break; case "Sub": //减少选择结果集 按下Alt键 pSelectType = esriSelectionResultEnum.esriSelectionResultSubtract; break; case "Xor": //对已有的选择集做异或 按下Ctrl键 pSelectType = esriSelectionResultEnum.esriSelectionResultXOR; break; } break; } case 1: pSelectType = esriSelectionResultEnum.esriSelectionResultAdd; break; case 2: pSelectType = esriSelectionResultEnum.esriSelectionResultXOR; break; case 3: pSelectType = esriSelectionResultEnum.esriSelectionResultNew; break; case 4: pSelectType = esriSelectionResultEnum.esriSelectionResultSubtract; break; } if (m_FeatClsCln == null) { bool blntemp = true; m_pQueryResultCln = new Collection(); ClsSelectQuery.SelectGeometry(ref blntemp, m_pGeometry, pSelectType, ref m_pQueryResultCln); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); //TODO: FrmQuery的用法 if (m_frmQuery == null) { m_frmQuery = new FrmQuery(); } if (m_frmQuery.IsDisposed) { m_frmQuery = new FrmQuery(); } m_frmQuery.QueryResultCln = m_pQueryResultCln; m_frmQuery.ReLoadQueryResult(); m_frmQuery.Visible = false; m_frmQuery.Show((Form)(ClsDeclare.g_Sys.FrmMain)); } m_pQueryResultCln = null; if ((ClsDeclare.g_pMap.SelectionCount > ClsDeclare.g_Sys.MaxSelectCount) && (ClsDeclare.g_Sys.MaxSelectCount != 0)) { //if (ClsDeclare.g_ErrorHandler.DisplayInformation("你选择的结果大于" + Convert.ToString(ClsDeclare.g_Sys.MaxSelectCount) + "个地物,是否继续选择操作?", true, "确定", "取消") == false) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); ClsDeclare.g_pMap.ClearSelection(); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); } } } catch (Exception) { //ClsDeclare.g_ErrorHandler.HandleError(true, null, 0, null, ex.StackTrace); throw; } }
public override void OnMouseDown(int Button, int Shift, int X, int Y) { if (m_hookHelper != null) { ClsMapLayer pConvert = new ClsMapLayer(); IGeometry pGeometry; IActiveView pActiveView; pActiveView = m_hookHelper.ActiveView; IPoint pPoint; pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); pGeometry = (IGeometry)pPoint; if (ClsDeclare.g_pMap.SelectionCount != 0) { ClsDeclare.g_pMap.ClearSelection(); } pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); ISelectionEnvironment pSelectEnv = new SelectionEnvironmentClass(); double length; length = pConvert.ConvertPixelDistanceToMapDistance(pActiveView, pSelectEnv.SearchTolerance); ITopologicalOperator pTopoOpera; IGeometry pBuffer; pTopoOpera = (ITopologicalOperator)pGeometry; pBuffer = pTopoOpera.Buffer(length); pGeometry = m_pMapControl.TrackPolygon(); Application.DoEvents(); m_pMapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass; if (pGeometry != null) { if (pGeometry.Envelope.IsEmpty) { pGeometry = pBuffer.Envelope; } } esriSelectionResultEnum pselecttype = new esriSelectionResultEnum(); switch (Shift) { case 0: { pselecttype = esriSelectionResultEnum.esriSelectionResultNew; switch (mvarSelectMethod) { case "New": pselecttype = esriSelectionResultEnum.esriSelectionResultNew; break; case "Add": pselecttype = esriSelectionResultEnum.esriSelectionResultAnd; break; case "Sub": pselecttype = esriSelectionResultEnum.esriSelectionResultSubtract; break; case "Xor": pselecttype = esriSelectionResultEnum.esriSelectionResultXOR; break; } break; } case 1: pselecttype = esriSelectionResultEnum.esriSelectionResultAdd; break; case 2: pselecttype = esriSelectionResultEnum.esriSelectionResultXOR; break; case 3: pselecttype = esriSelectionResultEnum.esriSelectionResultNew; break; case 4: pselecttype = esriSelectionResultEnum.esriSelectionResultSubtract; break; } if (m_FeatClsCln == null) { bool blntemp = false; m_pQueryResultCln = new Collection(); ClsSelectQuery.SelectGeometry(ref blntemp, pGeometry, pselecttype, ref m_pQueryResultCln); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); if (m_frmQuery == null) { m_frmQuery = new FrmQuery(); } if (m_frmQuery.IsDisposed) { m_frmQuery = new FrmQuery(); } m_frmQuery.QueryResultCln = m_pQueryResultCln; m_frmQuery.ReLoadQueryResult(); m_frmQuery.Visible = false; m_frmQuery.Show((Form)(ClsDeclare.g_Sys.FrmMain)); } m_pQueryResultCln = null; m_pMapControl.MousePointer = esriControlsMousePointer.esriPointerDefault; } else if (m_sceneHookHelper != null) { } else if (m_globeHookHelper != null) { } }