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.
695 lines
30 KiB
695 lines
30 KiB
using ESRI.ArcGIS.ADF; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.EngineEditor; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Reflection; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.Platform; |
|
using System.Runtime.InteropServices; |
|
using Kingo.Plugin.EngineEditor.helper; |
|
using KGIS.Framework.Maps; |
|
|
|
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); |
|
} |
|
} |
|
|
|
} |
|
}
|
|
|