/// 合并列表中所有多边形 /// </summary> /// <param name="orifeature">保留源对象</param> /// <param name="geolist">图形列表</param> /// <returns></returns> public void CreatePolygonFromExistingGeometries(IFeatureLayer lyr, IFeature orifeature, List <IGeometry> geolist) { int i = 0; IGeometry geometry = null; IFeatureClass Featureclass = lyr.FeatureClass; IWorkspaceEdit workspace = (IWorkspaceEdit)(Featureclass as IDataset).Workspace; workspace.StartEditing(false); workspace.StartEditOperation(); //合并图形 ITopologicalOperator2 topologicalOperator2 = orifeature.ShapeCopy as ITopologicalOperator2; for (i = 0; i < geolist.Count; i++) { IGeometry geo = geolist[i]; if (geometry != null) { topologicalOperator2 = geometry as ITopologicalOperator2; } ITopologicalOperator opertor = geo as ITopologicalOperator; opertor.Simplify(); topologicalOperator2.IsKnownSimple_2 = false; topologicalOperator2.Simplify(); geometry = topologicalOperator2.Union(geo); } //更新图形对象 IGeometry geoCombined = (IGeometry)geometry; orifeature.Shape = geoCombined as IGeometry; orifeature.Store(); workspace.StopEditOperation(); workspace.StopEditing(true); }
/// <summary> /// 求面的并 /// </summary> /// <param name="taskLayout"></param> /// <param name="satelliteResault"></param> /// <returns></returns> public static IPolygon UnionPolygon(IPolygon polygonOne, IPolygon polygonTwo) { try { if (polygonOne == null && polygonTwo != null) { return(polygonTwo); } else if (polygonOne != null && polygonTwo == null) { return(polygonOne); } else { ITopologicalOperator2 pTopologicalOperator = polygonOne as ITopologicalOperator2; IGeometry pGeometry = pTopologicalOperator.Union(polygonTwo) as IGeometry; if (!pGeometry.IsEmpty) { IPolygon unionPolygon = pGeometry as IPolygon; return(unionPolygon); } else { return(null); } } } catch (System.Exception ex) { return(null); } }
public void OnMouseDown(int button, int shift, int x, int y) { try { IPoint point = this._hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y); IFeatureClass featureClass = Editor.UniqueInstance.TargetLayer.FeatureClass; ISpatialFilter queryFilter = new SpatialFilterClass { Geometry = point, GeometryField = featureClass.ShapeFieldName, SubFields = featureClass.ShapeFieldName, SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin }; IFeatureCursor o = Editor.UniqueInstance.TargetLayer.Search(queryFilter, false); IFeature feature = o.NextFeature(); Marshal.ReleaseComObject(o); o = null; if ((feature != null) && (feature.OID != this._feature.OID)) { feature = Editor.UniqueInstance.TargetLayer.FeatureClass.GetFeature(feature.OID); ITopologicalOperator2 shape = this._feature.Shape as ITopologicalOperator2; shape.IsKnownSimple_2 = false; shape.Simplify(); shape = feature.Shape as ITopologicalOperator2; shape.IsKnownSimple_2 = false; shape.Simplify(); shape = shape.Union(this._feature.Shape) as ITopologicalOperator2; shape.IsKnownSimple_2 = false; shape.Simplify(); Editor.UniqueInstance.StartEditOperation(); Editor.UniqueInstance.AddAttribute = false; List <IFeature> pFeatureList = new List <IFeature> { this._feature, feature }; IFeature resultFeature = Editor.UniqueInstance.TargetLayer.FeatureClass.CreateFeature(); resultFeature.Shape = shape as IGeometry; if (AttributeManager.AttributeCombineHandleClass.AttributeCombine(pFeatureList, ref resultFeature) == DialogResult.OK) { resultFeature.Store(); foreach (IFeature feature3 in pFeatureList) { feature3.Delete(); } IFeatureSelection targetLayer = Editor.UniqueInstance.TargetLayer as IFeatureSelection; targetLayer.Clear(); targetLayer.Add(resultFeature); this._hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection | esriViewDrawPhase.esriViewGeography, Editor.UniqueInstance.TargetLayer, resultFeature.Extent); } Editor.UniqueInstance.StopEditOperation("combineex"); } } catch (Exception exception) { Editor.UniqueInstance.AbortEditOperation(); this._mErrOpt.ErrorOperate(this._mSubSysName, "ShapeEdit.CombineEx", "OnMouseDown", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", ""); } }
//public List<ErrorEntity> CheckOverLap(string idname,IFeatureLayer pLayer) //{ // ArrayList arraylist = new ArrayList(); // IQueryFilter filter = new QueryFilterClass(); // filter.SubFields = pLayer.FeatureClass.OIDFieldName + "," + pLayer.FeatureClass.ShapeFieldName; // IFeatureCursor cursor = pLayer.FeatureClass.Search(filter, true); // List<ErrorEntity> listErrorEntity = new List<ErrorEntity>(); // IFeature pFeature = null; // IFeature feature; // while ((pFeature = cursor.NextFeature()) != null) // { // ITopologicalOperator2 @operator = (ITopologicalOperator2)pFeature.ShapeCopy; // @operator.IsKnownSimple_2 = false; // @operator.Simplify(); // IIdentify pIdentify = pLayer as IIdentify; // IArray pIDs = pIdentify.Identify((IGeometry)pFeature.ShapeCopy); // if (pIDs != null && pIDs.Count > 1) // { // //取第一个实体 // for (int i = 0; i < pIDs.Count; i++) // { // feature = (pIDs.get_Element(i) as IRowIdentifyObject).Row as IFeature; // if (feature != null && pFeature.OID != feature.OID && (!arraylist.Contains(pFeature.OID + "" + feature.OID) && !arraylist.Contains(feature.OID + "" + pFeature.OID))) // { // arraylist.Add(pFeature.OID + "" + feature.OID); // IGeometry item = feature.ShapeCopy; // IGeometry geometry3 = @operator.Intersect(item, esriGeometryDimension.esriGeometry2Dimension); // if (!geometry3.IsEmpty) // { // Console.WriteLine(pFeature.OID + "-" + feature.OID); // listErrorEntity.Add(new ErrorEntity(idname, pFeature.OID.ToString(), "自重叠", feature.OID.ToString(), ErrType.OverLap, geometry3)); // } // } // } // } // } // return listErrorEntity; //} public List <ErrorEntity> CheckOverLap(string idname, IFeatureLayer pLayer) { List <ErrorEntity> listErrorEntity = new List <ErrorEntity>(); IFeatureClass IN_FeatureClass = pLayer.FeatureClass; IList <IGeometry> list = new List <IGeometry>(); ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.GeometryField = IN_FeatureClass.ShapeFieldName; spatialFilter.SubFields = IN_FeatureClass.OIDFieldName + "," + IN_FeatureClass.ShapeFieldName; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps; IFeatureCursor pFeatureCursor = IN_FeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); while (pFeature != null) {//记录集循环 spatialFilter.Geometry = pFeature.ShapeCopy; IFeatureCursor featureCursor = IN_FeatureClass.Search(spatialFilter, true); IFeature tFeature = featureCursor.NextFeature();//遍历查询结果 if (tFeature != null) { IGeometry pGeometry = new PolygonClass(); pGeometry = tFeature.ShapeCopy; while (tFeature != null) { ITopologicalOperator2 iUnionTopo = pGeometry as ITopologicalOperator2; pGeometry = iUnionTopo.Union(tFeature.Shape); tFeature = featureCursor.NextFeature();//移动到下一条记录 } ITopologicalOperator2 pRo = (ITopologicalOperator2)pFeature.ShapeCopy; IGeometry pIntersectGeo = new PolygonClass(); pIntersectGeo = pRo.Intersect(pGeometry, esriGeometryDimension.esriGeometry2Dimension) as IPolygon; if (pIntersectGeo != null && !pIntersectGeo.IsEmpty) { listErrorEntity.Add(new ErrorEntity(idname, pFeature.OID.ToString(), "自重叠", "", ErrType.OverLap, pIntersectGeo)); } } Marshal.ReleaseComObject(featureCursor); pFeature = pFeatureCursor.NextFeature();//移动到下一条记录 } Marshal.ReleaseComObject(pFeature); Marshal.ReleaseComObject(spatialFilter); return(listErrorEntity); }
private void InitOtherLayer(IGeometry pGeo) { if (this._linkLayers != null) { ISpatialFilter filter = new SpatialFilterClass { Geometry = pGeo }; foreach (IFeatureLayer layer in this._linkLayers) { if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { filter.SubFields = layer.FeatureClass.ShapeFieldName; filter.GeometryField = layer.FeatureClass.ShapeFieldName; filter.SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches; IFeatureCursor o = layer.FeatureClass.Search(filter, false); IFeature pFeature = o.NextFeature(); IFeature feature2 = o.NextFeature(); IFeature feature3 = o.NextFeature(); Marshal.ReleaseComObject(o); o = null; if (((pFeature != null) && (feature2 != null)) && (feature3 == null)) { ITopologicalOperator2 shapeCopy = pFeature.ShapeCopy as ITopologicalOperator2; shapeCopy.IsKnownSimple_2 = false; shapeCopy.Simplify(); shapeCopy = feature2.ShapeCopy as ITopologicalOperator2; shapeCopy.IsKnownSimple_2 = false; shapeCopy.Simplify(); if (!shapeCopy.Intersect(pFeature.ShapeCopy, esriGeometryDimension.esriGeometry1Dimension).IsEmpty) { IRelationalOperator operator2 = shapeCopy.Union(pFeature.ShapeCopy) as IRelationalOperator; if (operator2.Contains(this._editBound)) { this._las.Add(new LinkArgs(pFeature)); this._las.Add(new LinkArgs(feature2)); Marshal.ReleaseComObject(o); o = null; } } } } } } }
//<CSCM> //******************************************************************************** //** 函 数 名: UnionTwoGeometry //** 版 权: CopyRight (C) //** 创 建 人: 杨旭斌 //** 功能描述: 合并二个图形成一个图形 //** 创建日期: //** 修 改 人: //** 修改日期: //** 修改时间: 20070818 //** 参数列表: pOriGeometry (IGeometry)需要合并的二个图形 // pDesOrigeometry (IGeometry) // bHasErr合并过程中是否产生了错误 // sErrDes 错误描述 //** 版 本:1.0 //********************************************************************************* //</CSCM> public static IGeometry UnionTwoGeometry(IGeometry pOriGeometry, IGeometry pDesGeometry, ref bool bHasErr, ref string sErrDes) { //bHasErr = false; //sErrDes = ""; IGeometry functionReturnValue = default(IGeometry); ITopologicalOperator2 pTopoOperator = default(ITopologicalOperator2); IGeometry pGeometry = default(IGeometry); //如果图形为空,则置为nothing bHasErr = false; sErrDes = ""; if (pOriGeometry != null && pDesGeometry != null) { if (pOriGeometry.SpatialReference == null & pDesGeometry.SpatialReference != null) { if (pOriGeometry.SpatialReference.FactoryCode != pDesGeometry.SpatialReference.FactoryCode) { bHasErr = true; sErrDes = "二个图形的投影坐标系不相同,不能进行求交。"; return(null); } } } if (pOriGeometry != null) { if (pOriGeometry.IsEmpty == true) { pOriGeometry = null; } } if (pDesGeometry != null) { if (pDesGeometry.IsEmpty == true) { pDesGeometry = null; } } try { if (pOriGeometry != null && pDesGeometry != null) { pTopoOperator = (ITopologicalOperator2)pOriGeometry; pGeometry = pTopoOperator.Union(pDesGeometry); pTopoOperator = (ITopologicalOperator2)pGeometry; pTopoOperator.IsKnownSimple_2 = false; pTopoOperator.Simplify(); functionReturnValue = (IGeometry)pTopoOperator; return(functionReturnValue); } else if (pOriGeometry != null) { return(pOriGeometry); } else if (pDesGeometry != null) { return(pDesGeometry); } else { return(null); } } catch { functionReturnValue = null; } return(functionReturnValue); }
//public static void CreateFishNet(string inTemplate, int width, int height, string outFishNet) //{ // IFeatureClass inFeatureClass = null; // IFeatureClass outFeatureClass = null; // ISpatialReference spatialReference = null; // IEnvelope extent = null; // try // { // inFeatureClass = EngineAPI.OpenFeatureClass(inTemplate); // spatialReference = (inFeatureClass as IGeoDataset).SpatialReference; // if (!CreateShpFile(outFishNet, spatialReference)) // { // throw new Exception("创建矢量文件失败!"); // } // outFeatureClass = EngineAPI.OpenFeatureClass(outFishNet); // extent = (inFeatureClass as IGeoDataset).Extent; // double extentW = extent.Width; // double extentH = extent.Height; // double extenXmin = extent.XMin; // double extenYmin = extent.YMin; // int columCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(extentW / width))); // int rowCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(extentH / height))); // for (int j = 0; j < rowCount * columCount; j++) // { // int row = j / columCount; // int col = j % columCount; // IEnvelope rect = new EnvelopeClass(); // rect.SpatialReference = spatialReference; // rect.XMin = extenXmin + col * width; // rect.XMax = rect.XMin + width; // rect.YMin = extenYmin + row * height; // rect.YMax = rect.YMin + height; // IElement ele = new RectangleElementClass // { // Geometry = rect // }; // IFeature pFeature = outFeatureClass.CreateFeature(); // pFeature.Shape = ele.Geometry; // pFeature.Store(); // } // } // catch (Exception ex) // { // throw ex; // } // finally // { // if (spatialReference != null) // Marshal.ReleaseComObject(spatialReference); // if (extent != null) // Marshal.ReleaseComObject(extent); // if (inFeatureClass != null) // Marshal.ReleaseComObject(inFeatureClass); // if (outFeatureClass != null) // Marshal.ReleaseComObject(outFeatureClass); // } //} public static void Sampling(string inFirstUnit, string firstUnit_Name, string layer, string inSecondUnit, string inCultivation, SamplePara para, string outSample) { IFeatureClass inFirstF = null; IFeatureClass inSecondF = null; IFeatureClass inCultivationF = null; IFeatureClass outFeatureClass = null; ISpatialReference spatialReference = null; try { //耕地和一级抽样单元相交处理 string instert = System.IO.Path.Combine(ConstDef.PATH_TEMP, DateTime.Now.ToFileTime().ToString() + ".shp"); string msg = string.Empty; if (!EnviVars.instance.GpExecutor.Intersect(inFirstUnit + ";" + inCultivation, instert, out msg)) { throw new Exception(msg); } //读取一级抽样单元 inFirstF = EngineAPI.OpenFeatureClass(inFirstUnit); //读取二级渔网 inSecondF = EngineAPI.OpenFeatureClass(inSecondUnit); spatialReference = (inFirstF as IGeoDataset).SpatialReference; //创建二级抽样单元矢量 if (!CreateShpFile(outSample, spatialReference, firstUnit_Name, layer)) { throw new Exception("创建二级抽样单元矢量文件失败!"); } outFeatureClass = EngineAPI.OpenFeatureClass(outSample); //读取一级抽样单元与耕地相交结果 inCultivationF = EngineAPI.OpenFeatureClass(instert); //一级单元抽样个数 int firstUnitCount = inFirstF.FeatureCount(null); int nameIndex = inFirstF.FindField(firstUnit_Name); int layerIndex = inFirstF.FindField(layer); IFeature pFFirst = null; IFeatureCursor pFCFirst = inFirstF.Search(null, false); IFeatureBuffer pFeatureBuffer = outFeatureClass.CreateFeatureBuffer(); IFeatureCursor pInsertCursor = outFeatureClass.Insert(true); while ((pFFirst = pFCFirst.NextFeature()) != null) { string fUnitName = pFFirst.get_Value(nameIndex).ToString(); IQueryFilter pQFIntersect = new QueryFilterClass(); pQFIntersect.WhereClause = "\"" + firstUnit_Name + "\"" + " = '" + fUnitName + "'"; IFeatureCursor pFeatureCursor = inCultivationF.Search(pQFIntersect, false); //指定一级抽样单元内耕地geometry合并 IFeature unionFeature = inCultivationF.CreateFeature(); IFeature pFeature = null; while ((pFeature = pFeatureCursor.NextFeature()) != null) { IGeometry geometry = unionFeature.Shape; ITopologicalOperator2 unionTopo = geometry as ITopologicalOperator2; unionFeature.Shape = unionTopo.Union(pFeature.ShapeCopy); } //Marshal.ReleaseComObject(pFeatureCursor); //获取与耕地合并geometry相交的二级格网 ISpatialFilter pSFSecond = new SpatialFilterClass(); pSFSecond.Geometry = unionFeature.Shape; pSFSecond.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; pFeatureCursor = inSecondF.Search(pSFSecond, false); List <IFeature> sUnitFList = new List <IFeature>(); while ((pFeature = pFeatureCursor.NextFeature()) != null) { sUnitFList.Add(pFeature); } if (pFeatureCursor != null) { Marshal.ReleaseComObject(pFeatureCursor); } int sampleNum = 0; if (para.isNum) { sampleNum = para.sampleNum; } else { sampleNum = Convert.ToInt32(sUnitFList.Count * para.sampleRate); } if (sUnitFList.Count > sampleNum) { //从相交的二级格网中随机抽样指定个数,并存出 Random ran = new Random(); for (int j = 0; j < sampleNum; j++) { //System.Threading.Thread.Sleep(100); int range = sUnitFList.Count - 1; int selected = ran.Next(0, range); pFeatureBuffer.Shape = sUnitFList[selected].ShapeCopy; pFeatureBuffer.set_Value(2, j); pFeatureBuffer.set_Value(3, fUnitName); pFeatureBuffer.set_Value(4, pFFirst.get_Value(layerIndex)); pInsertCursor.InsertFeature(pFeatureBuffer); sUnitFList.RemoveAt(selected); } } else { //throw new Exception("选择的样本数大于样本总量!"); for (int j = 0; j < sUnitFList.Count; j++) { pFeatureBuffer.Shape = sUnitFList[j].ShapeCopy; pFeatureBuffer.set_Value(2, j); pFeatureBuffer.set_Value(3, fUnitName); pFeatureBuffer.set_Value(4, pFFirst.get_Value(layerIndex)); pInsertCursor.InsertFeature(pFeatureBuffer); //pFeature = outFeatureClass.CreateFeature(); //pFeature.Shape = sUnitFList[j].ShapeCopy; ////secondUnitCount++; //pFeature.set_Value(2, j); //pFeature.set_Value(3, fUnitName); //pFeature.set_Value(4, pFFirst.get_Value(layerIndex)); //pFeature.Store(); } } } pInsertCursor.Flush(); if (pFeatureBuffer != null) { Marshal.ReleaseComObject(pFeatureBuffer); } if (pInsertCursor != null) { Marshal.ReleaseComObject(pInsertCursor); } if (pFCFirst != null) { Marshal.ReleaseComObject(pFCFirst); } //for (int i = 0; i < firstUnitCount; i++) //{ // IFeature pFeature = inFirstF.GetFeature(i); // string fUnitName = pFeature.Table.GetRow(i).get_Value(nameIndex).ToString(); // IQueryFilter pQueryFilter = new QueryFilterClass(); // pQueryFilter.WhereClause = "\"" + firstUnit_Name + "\"" + " = '" + fUnitName + "'"; // IFeatureCursor pFeatureCursor = inCultivationF.Search(pQueryFilter, false); // //ISelectionSet pSelectionSet = inCultivationF.Select(pQueryFilter, esriSelectionType.esriSelectionTypeSnapshot, esriSelectionOption.esriSelectionOptionNormal, null); // //IPolygon polygon =(pSelectionSet as IPolygon); // //指定一级抽样单元内耕地geometry合并 // IFeature unionFeature = inCultivationF.CreateFeature(); // while ((pFeature = pFeatureCursor.NextFeature()) != null) // { // IGeometry geometry = unionFeature.Shape; // ITopologicalOperator2 unionTopo = geometry as ITopologicalOperator2; // unionFeature.Shape = unionTopo.Union(pFeature.ShapeCopy); // } // //获取与耕地合并geometry相交的二级格网 // ISpatialFilter pSpatialFilter = new SpatialFilterClass(); // pSpatialFilter.Geometry = unionFeature.Shape; // pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; // pFeatureCursor = inSecondF.Search(pSpatialFilter, false); // List<IFeature> sUnitFList = new List<IFeature>(); // while ((pFeature = pFeatureCursor.NextFeature()) != null) // { // sUnitFList.Add(pFeature); // } // if (sUnitFList.Count < sampleNum) // { // throw new Exception("选择的样本数大于样本总量!"); // } // //从相交的二级格网中随机抽样指定个数,并存出 // for (int j = 0; j < sampleNum; j++) // { // System.Threading.Thread.Sleep(100); // Random ran = new Random(); // int range = sUnitFList.Count - 1; // int selected = ran.Next(0, range); // pFeature = outFeatureClass.CreateFeature(); // pFeature.Shape = sUnitFList[selected].ShapeCopy; // secondUnitCount++; // pFeature.set_Value(2,secondUnitCount); // pFeature.Store(); // sUnitFList.RemoveAt(selected); // } //} } catch (Exception ex) { throw ex; } finally { if (spatialReference != null) { Marshal.ReleaseComObject(spatialReference); } if (outFeatureClass != null) { Marshal.ReleaseComObject(outFeatureClass); } if (inCultivationF != null) { Marshal.ReleaseComObject(inCultivationF); } if (inSecondF != null) { Marshal.ReleaseComObject(inSecondF); } if (inFirstF != null) { Marshal.ReleaseComObject(inFirstF); } } }
public void InitLinkage(IPoint mousePoint, double buffer) { this._isVertexEditing = false; this._editOrigShape = null; this._editBound = null; this._las.Clear(); IFeatureClass featureClass = Editor.UniqueInstance.TargetLayer.FeatureClass; ISpatialFilter queryFilter = new SpatialFilterClass { Geometry = (mousePoint as ITopologicalOperator).Buffer(buffer), GeometryField = featureClass.ShapeFieldName, SubFields = featureClass.ShapeFieldName, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects }; IFeatureCursor o = Editor.UniqueInstance.TargetLayer.Search(queryFilter, false); IFeature pFeature = o.NextFeature(); if (pFeature == null) { Marshal.ReleaseComObject(o); o = null; this.ClearUp(); } else { IFeature feature = o.NextFeature(); if (feature == null) { Marshal.ReleaseComObject(o); o = null; this.ClearUp(); } else if (o.NextFeature() != null) { Marshal.ReleaseComObject(o); o = null; this.ClearUp(); } else { pFeature = Editor.UniqueInstance.TargetLayer.FeatureClass.GetFeature(pFeature.OID); feature = Editor.UniqueInstance.TargetLayer.FeatureClass.GetFeature(feature.OID); IGeometry pGeometry = null; IGeometry shapeCopy = pFeature.ShapeCopy; IGeometry other = feature.ShapeCopy; ITopologicalOperator2 @operator = shapeCopy as ITopologicalOperator2; @operator.IsKnownSimple_2 = false; @operator.Simplify(); ITopologicalOperator2 operator2 = other as ITopologicalOperator2; operator2.IsKnownSimple_2 = false; operator2.Simplify(); pGeometry = @operator.Intersect(other, esriGeometryDimension.esriGeometry1Dimension); if (pGeometry.IsEmpty) { this.ClearUp(); } else { if ((pGeometry as IGeometryCollection).GeometryCount > 1) { IHitTest test = pGeometry as IHitTest; IPoint hitPoint = null; double hitDistance = 0.0; int hitPartIndex = -1; int hitSegmentIndex = -1; bool bRightSide = false; if (!test.HitTest(mousePoint, buffer, esriGeometryHitPartType.esriGeometryPartBoundary, hitPoint, ref hitDistance, ref hitPartIndex, ref hitSegmentIndex, ref bRightSide)) { return; } pGeometry = (pGeometry as IGeometryCollection).get_Geometry(hitPartIndex); } pGeometry = GISFunFactory.UnitFun.ConvertPoject(pGeometry, this._viewMap.FocusMap.SpatialReference); IPolyline polyline = null; if (pGeometry.GeometryType != esriGeometryType.esriGeometryPolyline) { IPath path = pGeometry as IPath; if ((path != null) && path.IsClosed) { this.ClearUp(); return; } IPointCollection newPoints = pGeometry as IPointCollection; polyline = new PolylineClass { SpatialReference = pGeometry.SpatialReference }; (polyline as IPointCollection).AddPointCollection(newPoints); } IGeometry geometry4 = @operator.Union(other); this._editBound = GISFunFactory.UnitFun.ConvertPoject(geometry4, this._viewMap.FocusMap.SpatialReference); this._las.Add(new LinkArgs(pFeature)); this._las.Add(new LinkArgs(feature)); this.InitOtherLayer(pGeometry); if (polyline != null) { this._editOrigShape = (polyline as IClone).Clone() as IGeometry; Editor.UniqueInstance.LinageShape = polyline; Editor.UniqueInstance.ReservedLinkShape = polyline; } else { this._editOrigShape = (pGeometry as IClone).Clone() as IGeometry; Editor.UniqueInstance.LinageShape = pGeometry; Editor.UniqueInstance.ReservedLinkShape = pGeometry; } this._isVertexEditing = true; } } } }