You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							688 lines
						
					
					
						
							30 KiB
						
					
					
				
			
		
		
	
	
							688 lines
						
					
					
						
							30 KiB
						
					
					
				using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Runtime.InteropServices; | 
						|
using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Controls; | 
						|
using ESRI.ArcGIS.Display; | 
						|
using ESRI.ArcGIS.Geodatabase; | 
						|
using ESRI.ArcGIS.Geometry; | 
						|
using KGIS.Framework.AE; | 
						|
using KGIS.Framework.EngineEditor; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
 | 
						|
namespace Kingo.Plugin.EngineEditor.Commands.Tools | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// 变化图斑提取工具 | 
						|
    /// </summary> | 
						|
    public class CmdExtractFeatureTool : BaseToolCmd | 
						|
    { | 
						|
        public event EventHandler<object> ExtComplete; | 
						|
        //IFeatureLayer m_SourceJCTBLayer; | 
						|
        IFeatureLayer m_SourceJCDLTBLayer; | 
						|
        IFeatureLayer m_SourceJCTBLayer; | 
						|
        IFeatureLayer m_TargetLayer; | 
						|
        private IElement tempElement = null; | 
						|
        List<DataDicTionary> dlbmDic = null; | 
						|
        IPoint MousePoint = null; | 
						|
        ITextElement beforeEl = null; | 
						|
        public string JCBH { get; set; } | 
						|
        public override void OnCreate(object hook) | 
						|
        { | 
						|
            base.OnCreate(hook); | 
						|
            //if (mapService != null) | 
						|
            //{ | 
						|
            //m_SourceJCTBLayer = mapService.GetFeatureLayerByName("JCTB"); | 
						|
 | 
						|
            //m_SourceJCDLTBLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB"); | 
						|
            //} | 
						|
 | 
						|
 | 
						|
        } | 
						|
        public void SetSourceLayer(IFeatureLayer pLayer) | 
						|
        { | 
						|
            m_SourceJCTBLayer = pLayer; | 
						|
        } | 
						|
        public override bool Deactivate() | 
						|
        { | 
						|
            if (tempElement != null) | 
						|
            { | 
						|
                try | 
						|
                { | 
						|
                    m_pHookHelper.ActiveView.GraphicsContainer.DeleteElement(tempElement); | 
						|
                    m_pHookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, m_pHookHelper.ActiveView.Extent); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    LogAPI.Debug(ex); | 
						|
                } | 
						|
            } | 
						|
            tempElement = null; | 
						|
            base.Deactivate(); | 
						|
            this.m_deactivate = true; | 
						|
            return this.m_deactivate; | 
						|
        } | 
						|
        public override void OnClick() | 
						|
        { | 
						|
            base.OnClick(); | 
						|
            m_TargetLayer = (m_pEditor as EngineEditorClass).TargetLayer as IFeatureLayer; | 
						|
            //dlbmDic = Platform.Instance.DicHelper.GetDic(DicTypeEnum.DLBM); | 
						|
            //if (mapService == null) | 
						|
            //    mapService = MapsManager.Instance.MapService; | 
						|
            //if (mapService != null) | 
						|
            //{ | 
						|
            //m_SourceJCTBLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB"); | 
						|
 | 
						|
            //    m_SourceJCDLTBLayer = MapsManager.Instance.MapService.GetFeatureLayerByName("JC_DLTB"); | 
						|
            //} | 
						|
        } | 
						|
        public override bool Enabled | 
						|
        { | 
						|
            get | 
						|
            { | 
						|
                if (m_pEditor == null) | 
						|
                { | 
						|
                    return false; | 
						|
                } | 
						|
                if (m_pEditor.EditState != esriEngineEditState.esriEngineStateEditing) | 
						|
                { return false; } | 
						|
                if ((m_pEditor as EngineEditorClass).TargetLayer == null) | 
						|
                { return false; } | 
						|
                return true; | 
						|
            } | 
						|
        } | 
						|
        public override void OnMouseDown(int Button, int Shift, int X, int Y) | 
						|
        { | 
						|
        } | 
						|
        public override void OnMouseMove(int Button, int Shift, int X, int Y) | 
						|
        { | 
						|
            if (Button != 0) | 
						|
            { | 
						|
                return; | 
						|
            } | 
						|
            IPoint point = m_pHookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); | 
						|
            List<IFeature> SourceFeatures = FeatureAPI.Identify(point, m_SourceJCTBLayer); | 
						|
            //if (SourceFeatures.Count == 0) | 
						|
            //{ | 
						|
            //    SourceFeatures = FeatureAPI.Identify(point, m_SourceJCDLTBLayer); | 
						|
            //} | 
						|
            if (SourceFeatures.Count == 0) return; | 
						|
            DrawFeature(SourceFeatures[0]); | 
						|
        } | 
						|
        public override void Refresh(int hDC) | 
						|
        { | 
						|
        } | 
						|
        public override void OnMouseUp(int Button, int Shift, int X, int Y) | 
						|
        { | 
						|
            if (Button != 1) | 
						|
            { | 
						|
                return; | 
						|
            } | 
						|
            IPoint point = m_pHookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); | 
						|
            MousePoint = point; | 
						|
            List<IFeature> SourceJCDLTBFeatures = FeatureAPI.Identify2(point, m_SourceJCTBLayer); | 
						|
            IGeometry sourceGeometry = null; | 
						|
            foreach (IFeature item in SourceJCDLTBFeatures) | 
						|
            { | 
						|
                if (sourceGeometry == null) | 
						|
                    sourceGeometry = item.ShapeCopy; | 
						|
                else | 
						|
                    sourceGeometry = FeatureAPI.Union(sourceGeometry, item.ShapeCopy); | 
						|
 | 
						|
            } | 
						|
            if (sourceGeometry == null) | 
						|
            { | 
						|
                sourceGeometry = point; | 
						|
            } | 
						|
            List<IFeature> TargetFeatures = FeatureAPI.Identify2(sourceGeometry, m_TargetLayer); | 
						|
 | 
						|
            m_pEditor.StartOperation(); | 
						|
            if (TargetFeatures.Count != 0) | 
						|
            { | 
						|
                //判断图形是否存在且图形是否一致 | 
						|
                if (TargetFeatures.Count == 1) | 
						|
                { | 
						|
                    if (FeatureAPI.GetEqual(TargetFeatures[0].ShapeCopy, sourceGeometry)) | 
						|
                    { | 
						|
                        return; | 
						|
                    } | 
						|
                } | 
						|
 | 
						|
                //要分割图斑提取 | 
						|
                //TargetGeometry  监测图斑 | 
						|
                IGeometry tempTargetGeo = null; | 
						|
                foreach (IFeature item in TargetFeatures) | 
						|
                { | 
						|
                    if (tempTargetGeo == null) | 
						|
                        tempTargetGeo = item.ShapeCopy; | 
						|
                    else | 
						|
                        tempTargetGeo = FeatureAPI.Union(tempTargetGeo, item.ShapeCopy); | 
						|
                } | 
						|
 | 
						|
                //SourceGeometry  点选资源图斑 | 
						|
                IGeometry tempSourceGeo = sourceGeometry; | 
						|
 | 
						|
                //相交部分 | 
						|
                IGeometry tempInterSectGeo = FeatureAPI.InterSect(tempTargetGeo, tempSourceGeo); | 
						|
                if (tempInterSectGeo != null && !tempInterSectGeo.IsEmpty) | 
						|
                { | 
						|
                    //测试  绘制相交部分图形  红色 | 
						|
                    //DrawBaseGraph(tempInterSectGeo, 255, 0, 0); | 
						|
 | 
						|
                    //原监测图斑减去相交部分 | 
						|
                    foreach (IFeature TargetFeature in TargetFeatures) | 
						|
                    { | 
						|
                        TargetFeature.Shape = FeatureAPI.Difference(TargetFeature.Shape, tempInterSectGeo); | 
						|
                        if (TargetFeature.Shape.IsEmpty)  | 
						|
                            TargetFeature.Delete(); | 
						|
                        else | 
						|
                            TargetFeature.Store(); | 
						|
                    } | 
						|
 | 
						|
                    //添加相交部分 图斑 | 
						|
                    AddIntersetFeature(tempInterSectGeo, point); | 
						|
                } | 
						|
                //添加差异部分 图斑 | 
						|
                //测试  绘制差异部分图形  绿色 | 
						|
                //DrawBaseGraph(FeatureAPI.Difference(tempSourceGeo, tempInterSectGeo), 0, 255, 0); | 
						|
                AddIntersetFeature(FeatureAPI.Difference(tempSourceGeo, tempInterSectGeo), point); | 
						|
 | 
						|
                //if (MessageHelper.ShowYesNoAndTips("是否要删除已提取图斑?") != System.Windows.Forms.DialogResult.Yes) | 
						|
                //{ | 
						|
                //    return; | 
						|
                //} | 
						|
                //foreach (var item in TargetFeatures) | 
						|
                //{ | 
						|
                //    item.Delete(); | 
						|
                //} | 
						|
                ////ExtComplete?.Invoke(null, false); | 
						|
                //KGIS.Framework.Platform.Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { Content = "RefreshTBBGDetail", MsgType = "RefreshTBBGDetail" }); | 
						|
                //return; | 
						|
            } | 
						|
            else //添加所有source 图斑 | 
						|
            { | 
						|
                //List<IFeature> SourceJCDLTBFeatures = FeatureAPI.Identify2(point, m_SourceJCTBLayer); | 
						|
                if (SourceJCDLTBFeatures.Count == 0) | 
						|
                { | 
						|
                    return; | 
						|
                } | 
						|
 | 
						|
                IFeatureClass m_TargetFC = m_TargetLayer.FeatureClass; | 
						|
                IFeatureCursor InsertCursor = m_TargetFC.Insert(true); | 
						|
                IFeatureBuffer buffer = m_TargetFC.CreateFeatureBuffer(); | 
						|
 | 
						|
                //查找监测编号 | 
						|
                IFeatureSelection featureS = m_SourceJCTBLayer as IFeatureSelection;//编辑图层 | 
						|
                ISelectionSet pSelectionset = featureS.SelectionSet;//目标图层的被选中图斑 | 
						|
                ICursor pCursor; | 
						|
                pSelectionset.Search(null, true, out pCursor); | 
						|
                IFeatureCursor featureCur = pCursor as IFeatureCursor; | 
						|
                IFeature pFeature = featureCur.NextFeature(); | 
						|
                if (pFeature != null) | 
						|
                { | 
						|
                    JCBH = pFeature.Value[pFeature.Fields.FindField("JCBH")].ToString(); | 
						|
                } | 
						|
                if (featureCur != null) | 
						|
                { | 
						|
                    Marshal.ReleaseComObject(featureCur); | 
						|
                } | 
						|
                #region | 
						|
                //if (SourceJCDLTBFeatures.Count != 0) | 
						|
                //{ | 
						|
                //    //图形从监测图斑获取 | 
						|
                //    buffer.Shape = SourceJCTBFeatures[0].ShapeCopy; | 
						|
                //    //属性从基础地类图斑获取 | 
						|
                //    for (int i = 0; i < m_TargetFC.Fields.FieldCount; i++) | 
						|
                //    { | 
						|
                //        IField field = m_TargetFC.Fields.Field[i]; | 
						|
                //        if (field.Name.ToUpper() == "OBJECTID" || !field.Editable || field.Name.ToUpper().Contains("SHAPE")) | 
						|
                //        { | 
						|
                //            continue; | 
						|
                //        } | 
						|
 | 
						|
                //        int tarfieldIndex = m_TargetFC.FindField(field.Name); | 
						|
                //        int sourfieldindex = m_SourceJCDLTBLayer.FeatureClass.FindField(field.Name); | 
						|
 | 
						|
                //        if (tarfieldIndex != -1 && sourfieldindex != -1) | 
						|
                //        { | 
						|
                //            buffer.Value[tarfieldIndex] = SourceJCDLTBFeatures[0].Value[sourfieldindex]; | 
						|
 | 
						|
                //        } | 
						|
                //    } | 
						|
 | 
						|
                //    //获取监测编号 | 
						|
                //    int bgjcbhIndex = m_TargetFC.FindField("JCBH");//变更监测编号 | 
						|
                //    int bgtbybhIndex = m_TargetFC.FindField("JCBH");//变更图斑与编号 | 
						|
                //    int jcbhIndex = m_SourceJCTBLayer.FeatureClass.FindField("JCBH");//监测图斑监测编号 | 
						|
                //    if (bgjcbhIndex != -1 && jcbhIndex != -1) | 
						|
                //    { | 
						|
                //        buffer.Value[bgjcbhIndex] = JCBH;// SourceJCTBFeatures[0].Value[jcbhIndex]; | 
						|
                //    } | 
						|
 | 
						|
                //    if (bgtbybhIndex != -1 && jcbhIndex != -1) | 
						|
                //    { | 
						|
                //        string tbybh = buffer.Value[bgtbybhIndex].ToString(); | 
						|
                //        if (string.IsNullOrWhiteSpace(tbybh)) | 
						|
                //        { | 
						|
                //            buffer.Value[bgtbybhIndex] = SourceJCTBFeatures[0].Value[jcbhIndex]; | 
						|
                //        } | 
						|
                //    } | 
						|
                //    //地类编码从监测图斑的变更地类字段获取 | 
						|
                //    int dlbmIndex = m_TargetFC.FindField("DLBM"); | 
						|
                //    int dlmcIndex = m_TargetFC.FindField("DLMC"); | 
						|
                //    int bgdlIndex = m_SourceJCTBLayer.FeatureClass.FindField("BGDL"); | 
						|
                //    int jckdlbmIndex = m_SourceJCDLTBLayer.FeatureClass.FindField("DLBM"); | 
						|
                //    int jckdlmcIndex = m_SourceJCDLTBLayer.FeatureClass.FindField("DLMC"); | 
						|
                //    if (bgdlIndex != -1 && dlbmIndex != -1) | 
						|
                //    { | 
						|
                //        string bgdl = SourceJCTBFeatures[0].Value[bgdlIndex].ToString(); | 
						|
 | 
						|
                //        //变更地类不为空,不包含逗号时,从监测图斑获取 | 
						|
                //        if (bgdl != "" && !bgdl.Trim().Contains(",") && !bgdl.Contains(",")) | 
						|
                //        { | 
						|
                //            buffer.Value[dlbmIndex] = bgdl; | 
						|
 | 
						|
                //            if (dlbmDic != null && dlmcIndex != -1) | 
						|
                //            { | 
						|
                //                DataDicTionary dlbm = dlbmDic.FirstOrDefault(f => f.CODE == bgdl); | 
						|
                //                buffer.Value[dlmcIndex] = dlbm == null ? "" : dlbm.NAME; | 
						|
                //            } | 
						|
                //        } | 
						|
                //        else | 
						|
                //        { | 
						|
                //            if (dlbmIndex != -1 && jckdlbmIndex != -1) | 
						|
                //            { | 
						|
                //                buffer.Value[dlbmIndex] = SourceJCDLTBFeatures[0].Value[jckdlbmIndex]; | 
						|
                //            } | 
						|
                //            if (dlmcIndex != -1 && jckdlmcIndex != -1) | 
						|
                //            { | 
						|
                //                buffer.Value[dlmcIndex] = SourceJCDLTBFeatures[0].Value[jckdlmcIndex]; | 
						|
                //            } | 
						|
                //        } | 
						|
                //    } | 
						|
 | 
						|
                //    InsertCursor.InsertFeature(buffer); | 
						|
                //    InsertCursor.Flush(); | 
						|
                //    ExtComplete?.Invoke(null, true); | 
						|
                //} | 
						|
                //else  | 
						|
                #endregion | 
						|
                if (SourceJCDLTBFeatures.Count != 0) | 
						|
                { | 
						|
                    IDataset dataset = m_TargetLayer.FeatureClass as IDataset; | 
						|
                    //string areapath = SysAppPath.GetAreaUpdateConfigPath(); | 
						|
                    string mjField = string.Empty; | 
						|
                    //if (!string.IsNullOrWhiteSpace(areapath) && System.IO.File.Exists(areapath)) | 
						|
                    //    mjField = AreaConfigHelper.GetAreaPropertyByLayerName(dataset.Name); | 
						|
                    //未获取到监测图斑,图形从基础地类图斑获取 | 
						|
                    buffer.Shape = SourceJCDLTBFeatures[0].ShapeCopy; | 
						|
 | 
						|
                    //属性从基础地类图斑获取 | 
						|
                    for (int i = 0; i < m_TargetFC.Fields.FieldCount; i++) | 
						|
                    { | 
						|
                        IField field = m_TargetFC.Fields.Field[i]; | 
						|
                        if (field.Name.ToUpper() == "OBJECTID" || !field.Editable || field.Name.ToUpper().Contains("SHAPE")) | 
						|
                        { | 
						|
                            continue; | 
						|
                        } | 
						|
                        int tarfieldIndex = m_TargetFC.FindField(field.Name); | 
						|
                        int sourfieldindex = m_SourceJCTBLayer.FeatureClass.FindField(field.Name); | 
						|
                        if (tarfieldIndex != -1 && sourfieldindex != -1) | 
						|
                        { | 
						|
                            buffer.Value[tarfieldIndex] = SourceJCDLTBFeatures[0].Value[sourfieldindex]; | 
						|
                        } | 
						|
 | 
						|
                    } | 
						|
 | 
						|
 | 
						|
                    int bgjcbhIndex = m_TargetFC.FindField("JCBH"); | 
						|
                    if (bgjcbhIndex != -1) | 
						|
                    { | 
						|
                        buffer.Value[bgjcbhIndex] = JCBH;// SourceJCTBFeatures[0].Value[jcbhIndex]; | 
						|
                    } | 
						|
 | 
						|
                    if (!string.IsNullOrWhiteSpace(mjField)) | 
						|
                    { | 
						|
                        int mjIndex = m_TargetFC.FindField(mjField); | 
						|
                        if (mjIndex > -1) | 
						|
                        { | 
						|
                            IArea area = buffer.Shape as IArea; | 
						|
                            double mj = area.Area; | 
						|
                            if (dataset.Name == "LSYD") | 
						|
                            { | 
						|
                                mj = mj * 0.0001; | 
						|
                            } | 
						|
                            mj = Math.Round(mj, 2); | 
						|
 | 
						|
                            buffer.Value[mjIndex] = mj; | 
						|
                        } | 
						|
                    } | 
						|
                    InsertCursor.InsertFeature(buffer); | 
						|
                    InsertCursor.Flush(); | 
						|
                    m_pHookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, m_TargetLayer, m_pHookHelper.ActiveView.Extent); | 
						|
                    //ExtComplete?.Invoke(null, true); | 
						|
                    KGIS.Framework.Platform.Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { Content = "RefreshTBBGDetail", MsgType = "RefreshTBBGDetail" }); | 
						|
                } | 
						|
 | 
						|
            } | 
						|
            m_pEditor.StopOperation("提取图形"); | 
						|
        } | 
						|
 | 
						|
        //测试  绘制图形 | 
						|
        private IElement DrawBaseGraph(IGeometry geoDraw, int R = 255, int G = 0, int B = 0) | 
						|
        { | 
						|
            if (geoDraw == null) return null; | 
						|
            try | 
						|
            { | 
						|
                IElement result = null; | 
						|
                IGraphicsContainer iGraphicsContainer = null; | 
						|
 | 
						|
                IElement CameraPointElm = null; // axMapControl.ActiveView.GraphicsContainer.Next(); | 
						|
                while ((CameraPointElm = MapsManager.Instance.MapService.getAxMapControl().ActiveView.GraphicsContainer.Next()) != null) | 
						|
                { | 
						|
                    if ((CameraPointElm as IElementProperties).Name == "BaseElement") | 
						|
                        break; | 
						|
                } | 
						|
                if (CameraPointElm == null) | 
						|
                { | 
						|
                    CameraPointElm = new GroupElementClass(); | 
						|
                    (CameraPointElm as IElementProperties).Name = "BaseElement"; | 
						|
                    MapsManager.Instance.MapService.getAxMapControl().ActiveView.GraphicsContainer.AddElement(CameraPointElm, 2); | 
						|
                } | 
						|
                    //(CameraPointElm as IGroupElement).ClearElements(); | 
						|
 | 
						|
                //替换Env改动---无用 | 
						|
                //IMapControl2 axMapDraw = Env.Instance.KMap.HookHelper.Hook as IMapControl2; | 
						|
 | 
						|
                // 获取IRGBColor接口 | 
						|
                IRgbColor color = new RgbColor(); | 
						|
                // 设置颜色属性 | 
						|
                color.Red = R; | 
						|
                color.Green = G; | 
						|
                color.Blue = B; | 
						|
                switch (geoDraw.GeometryType) | 
						|
                { | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: | 
						|
                        result = new MarkerElementClass(); | 
						|
                        IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); | 
						|
                        symbol.Color = color; | 
						|
                        symbol.Size = 10; | 
						|
                        (result as IMarkerElement).Symbol = symbol; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: | 
						|
                        result = new KGIS.Framework.Maps.PolygonElement() { Opacity = 100 }; | 
						|
                        // 获取ILine符号接口 | 
						|
                        ILineSymbol lineSymbol = new SimpleLineSymbol(); | 
						|
                        // 设置线符号属 | 
						|
                        lineSymbol.Width = 2; | 
						|
                        ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); | 
						|
                        simpleFillSymbol.Color = color; | 
						|
                        IRgbColor colorLine = new RgbColor(); | 
						|
                        colorLine.Red = 0; | 
						|
                        colorLine.Green = 0; | 
						|
                        colorLine.Blue = 0; | 
						|
                        lineSymbol.Color = colorLine; | 
						|
                        // 设置填充符号属性 | 
						|
                        simpleFillSymbol.Outline = lineSymbol; | 
						|
                        simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;//esriSimpleFillStyle.esriSFSSolid; | 
						|
                        (result as IFillShapeElement).Symbol = simpleFillSymbol; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: | 
						|
                        result = new LineElementClass(); | 
						|
                        // 获取ILine符号接口 | 
						|
                        ILineSymbol outline = new SimpleLineSymbol(); | 
						|
                        // 设置线符号属 | 
						|
                        outline.Width = 3; | 
						|
                        outline.Color = color; | 
						|
                        (outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; | 
						|
                        (result as ILineElement).Symbol = outline; | 
						|
                        result.Geometry = geoDraw; | 
						|
                        break; | 
						|
                    default: | 
						|
                        break; | 
						|
                } | 
						|
 | 
						|
                (CameraPointElm as IGroupElement).AddElement(result); | 
						|
 | 
						|
                if (iGraphicsContainer != null) | 
						|
                { | 
						|
                    iGraphicsContainer.AddElement(result, 0); | 
						|
                } | 
						|
 | 
						|
                MapsManager.Instance.MapService.getAxMapControl().ActiveView.Refresh(); | 
						|
                return result; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("测试绘制图形时异常:" + ex); | 
						|
                return null; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        private void AddIntersetFeature(IGeometry shapeGeo, IPoint point) | 
						|
        { | 
						|
            if (shapeGeo == null || shapeGeo.IsEmpty) return; | 
						|
            try | 
						|
            { | 
						|
 | 
						|
                List<IFeature> SourceJCDLTBFeatures = FeatureAPI.Identify2(point, m_SourceJCTBLayer); | 
						|
 | 
						|
                if (SourceJCDLTBFeatures.Count == 0) | 
						|
                { | 
						|
                    return; | 
						|
                } | 
						|
 | 
						|
                IFeatureClass m_TargetFC = m_TargetLayer.FeatureClass; | 
						|
                IFeatureCursor InsertCursor = m_TargetFC.Insert(true); | 
						|
                IFeatureBuffer buffer = m_TargetFC.CreateFeatureBuffer(); | 
						|
 | 
						|
                //查找监测编号 | 
						|
                IFeatureSelection featureS = m_SourceJCTBLayer as IFeatureSelection;//编辑图层 | 
						|
                ISelectionSet pSelectionset = featureS.SelectionSet;//目标图层的被选中图斑 | 
						|
                ICursor pCursor; | 
						|
                pSelectionset.Search(null, true, out pCursor); | 
						|
                IFeatureCursor featureCur = pCursor as IFeatureCursor; | 
						|
                IFeature pFeature = featureCur.NextFeature(); | 
						|
                if (pFeature != null) | 
						|
                { | 
						|
                    JCBH = pFeature.Value[pFeature.Fields.FindField("JCBH")].ToString(); | 
						|
                } | 
						|
                if (featureCur != null) | 
						|
                { | 
						|
                    Marshal.ReleaseComObject(featureCur); | 
						|
                } | 
						|
                if (SourceJCDLTBFeatures.Count != 0) | 
						|
                { | 
						|
                    IDataset dataset = m_TargetLayer.FeatureClass as IDataset; | 
						|
                    //string areapath = SysAppPath.GetAreaUpdateConfigPath(); | 
						|
                    string mjField = string.Empty; | 
						|
                    //if (!string.IsNullOrWhiteSpace(areapath) && System.IO.File.Exists(areapath)) | 
						|
                    //    mjField = AreaConfigHelper.GetAreaPropertyByLayerName(dataset.Name); | 
						|
                    //未获取到监测图斑,图形从基础地类图斑获取 | 
						|
                    buffer.Shape = shapeGeo; | 
						|
 | 
						|
                    //属性从基础地类图斑获取 | 
						|
                    for (int i = 0; i < m_TargetFC.Fields.FieldCount; i++) | 
						|
                    { | 
						|
                        IField field = m_TargetFC.Fields.Field[i]; | 
						|
                        if (field.Name.ToUpper() == "OBJECTID" || !field.Editable || field.Name.ToUpper().Contains("SHAPE")) | 
						|
                        { | 
						|
                            continue; | 
						|
                        } | 
						|
                        int tarfieldIndex = m_TargetFC.FindField(field.Name); | 
						|
                        int sourfieldindex = m_SourceJCTBLayer.FeatureClass.FindField(field.Name); | 
						|
                        if (tarfieldIndex != -1 && sourfieldindex != -1) | 
						|
                        { | 
						|
                            buffer.Value[tarfieldIndex] = SourceJCDLTBFeatures[0].Value[sourfieldindex]; | 
						|
                        } | 
						|
 | 
						|
                    } | 
						|
 | 
						|
 | 
						|
                    int bgjcbhIndex = m_TargetFC.FindField("JCBH"); | 
						|
                    if (bgjcbhIndex != -1) | 
						|
                    { | 
						|
                        buffer.Value[bgjcbhIndex] = JCBH;// SourceJCTBFeatures[0].Value[jcbhIndex]; | 
						|
                    } | 
						|
 | 
						|
                    if (!string.IsNullOrWhiteSpace(mjField)) | 
						|
                    { | 
						|
                        int mjIndex = m_TargetFC.FindField(mjField); | 
						|
                        if (mjIndex > -1) | 
						|
                        { | 
						|
                            IArea area = buffer.Shape as IArea; | 
						|
                            double mj = area.Area; | 
						|
                            if (dataset.Name == "LSYD") | 
						|
                            { | 
						|
                                mj = mj * 0.0001; | 
						|
                            } | 
						|
                            mj = Math.Round(mj, 2); | 
						|
 | 
						|
                            buffer.Value[mjIndex] = mj; | 
						|
                        } | 
						|
                    } | 
						|
                    InsertCursor.InsertFeature(buffer); | 
						|
                    InsertCursor.Flush(); | 
						|
                    m_pHookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, m_TargetLayer, m_pHookHelper.ActiveView.Extent); | 
						|
                    //ExtComplete?.Invoke(null, true); | 
						|
                    KGIS.Framework.Platform.Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { Content = "RefreshTBBGDetail", MsgType = "RefreshTBBGDetail" }); | 
						|
                } | 
						|
 | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("提取图斑时异常:" + ex); | 
						|
                return; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
 | 
						|
        public override void OnKeyDown(int keyCode, int Shift) | 
						|
        { | 
						|
 | 
						|
        } | 
						|
        public override void OnKeyUp(int keyCode, int Shift) | 
						|
        { | 
						|
 | 
						|
        } | 
						|
        public override void OnDblClick() | 
						|
        { | 
						|
 | 
						|
        } | 
						|
 | 
						|
        private void DrawFeature(IFeature pFeature) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                // 获取IRGBColor接口 | 
						|
                IRgbColor color = new RgbColor(); | 
						|
                // 设置颜色属性 | 
						|
                color.Red = 255; | 
						|
                color.Green = 0; | 
						|
                color.Blue = 0; | 
						|
                if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint) | 
						|
                { | 
						|
                    IMarkerElement e = new MarkerElementClass(); | 
						|
                    IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); | 
						|
                    symbol.Color = color; | 
						|
                    symbol.Size = 5; | 
						|
                    e.Symbol = symbol; | 
						|
                    (e as IElement).Geometry = pFeature.Shape; | 
						|
                    m_pHookHelper.ActiveView.GraphicsContainer.AddElement(e as IElement, 0); | 
						|
                    tempElement = e as IElement; | 
						|
                } | 
						|
                else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) | 
						|
                { | 
						|
                    // 获取ILine符号接口 | 
						|
                    ILineSymbol outline = new SimpleLineSymbol(); | 
						|
                    // 设置线符号属 | 
						|
                    outline.Width = 2; | 
						|
                    outline.Color = color; | 
						|
                    (outline as SimpleLineSymbol).Style = esriSimpleLineStyle.esriSLSSolid; | 
						|
                    ILineElement pLineElement = new LineElementClass(); | 
						|
                    pLineElement.Symbol = outline; | 
						|
                    (pLineElement as IElement).Geometry = pFeature.Shape; | 
						|
                    m_pHookHelper.ActiveView.GraphicsContainer.AddElement(pLineElement as IElement, 0); | 
						|
                    tempElement = pLineElement as IElement; | 
						|
                } | 
						|
                else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) | 
						|
                { | 
						|
                    if (tempElement == null) | 
						|
                    { | 
						|
                        // 获取ILine符号接口 | 
						|
                        ILineSymbol outline = new SimpleLineSymbol(); | 
						|
                        // 设置线符号属 | 
						|
                        outline.Width = 2; | 
						|
                        outline.Color = color; | 
						|
                        (outline as SimpleLineSymbol).Style = esriSimpleLineStyle.esriSLSDot; | 
						|
                        //ESRI.ArcGIS.Display.ILineSymbol | 
						|
                        ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); | 
						|
                        // 设置填充符号属性 | 
						|
                        simpleFillSymbol.Outline = outline; | 
						|
                        simpleFillSymbol.Color = color; | 
						|
                        simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow; | 
						|
                        IFillShapeElement pFillShapeElement = new PolygonElementClass(); | 
						|
                        pFillShapeElement.Symbol = simpleFillSymbol; | 
						|
                        IElement pElement = pFillShapeElement as IElement; | 
						|
                        pElement.Geometry = pFeature.Shape; | 
						|
                        m_pHookHelper.ActiveView.GraphicsContainer.AddElement(pElement, 0); | 
						|
                        tempElement = pElement; | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        tempElement.Geometry = pFeature.Shape; | 
						|
                    } | 
						|
                } | 
						|
 | 
						|
                ITextSymbol pTextSymbol = new TextSymbolClass() | 
						|
                { | 
						|
                    Color = color, | 
						|
                    //Font = pFont, | 
						|
                    Size = 12 | 
						|
                }; | 
						|
                //ITextElement pTextElement = new TextElementClass() | 
						|
                //{ | 
						|
                //    Symbol = pTextSymbol, | 
						|
                //    ScaleText = true, | 
						|
                //    Text = string.Format("【{0}】 图层:OID = {1}", pFeature.Class.AliasName, pFeature.OID) | 
						|
                //}; | 
						|
                ////tempFeature = pFeature; | 
						|
                //(pTextElement as IElement).Geometry = MousePoint; | 
						|
                //m_pHookHelper.ActiveView.GraphicsContainer.AddElement(pTextElement as IElement, 0); | 
						|
                //ITextElement pTextElement = new TextElementClass() | 
						|
                //{ | 
						|
                //    Symbol = pTextSymbol, | 
						|
                //    ScaleText = true, | 
						|
                //    Text = string.Format("【{0}】 图层:OID = {1}", pFeature.Class.AliasName, pFeature.OID) | 
						|
                //}; | 
						|
                ////tempFeature = pFeature; | 
						|
                //(pTextElement as IElement).Geometry = MousePoint; | 
						|
                //if (beforeEl!=null) | 
						|
                //{ | 
						|
                //    try | 
						|
                //    { | 
						|
                //        m_pHookHelper.ActiveView.GraphicsContainer.DeleteElement(beforeEl as IElement); | 
						|
                //    } | 
						|
                //    catch (Exception) | 
						|
                //    { | 
						|
 | 
						|
                //    } | 
						|
 | 
						|
                //} | 
						|
                //m_pHookHelper.ActiveView.GraphicsContainer.AddElement(pTextElement as IElement, 0); | 
						|
                //beforeEl = pTextElement; | 
						|
                //textElement = pTextElement as IElement; | 
						|
                m_pHookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, m_pHookHelper.ActiveView.Extent); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug(ex); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
    } | 
						|
}
 | 
						|
 |