一、Arcengine多部件处理
/// /// 多部件处理/// /// 任一要素/// 多部件打散的列表/// 是否为多部件public static bool IsMuiltPart(IGeometry pGeometry, out List listGeometry){listGeometry = new List();IGeometryCollection pGeoColl = pGeometry as IGeometryCollection;if (pGeoColl == null){return false;}if (pGeoColl.GeometryCount <= 1){return false;}IPolygon pGeoPolygon = pGeometry as IPolygon;int iRCnt = pGeoPolygon.ExteriorRingCount;if (iRCnt > 1){IGeometryBag pExRings = (pGeometry as IPolygon4).ConnectedComponentBag;IGeometryCollection geoColl = pExRings as IGeometryCollection;for (int i = 0; i < iRCnt; i++){if (pGeometry.GeometryType == esriGeometryType.esriGeometryPolygon){IGeometry newGeom = geoColl.Geometry[i];newGeom.SpatialReference = pGeometry.SpatialReference;IGeometryCollection newGeoColl = new PolygonClass();newGeoColl.AddGeometryCollection(newGeom as IGeometryCollection);IGeometry pGeoNew2 = newGeoColl as IGeometry;if (pGeoNew2 == null || pGeoNew2.IsEmpty) continue;listGeometry.Add(pGeoNew2);} }}return true;}
二、检验多部件、炸开处理
#region 校验合法性ArrayList pFeatureArray = null;pFeatureArray = Application.Editor.FeatureSelection();int count=pFeatureArray.Count;if (count<1){MessageBox.Show("最少必须选择1个要素才能进行要素分解!", "提示");return;}
#endregion
try{//启动编辑操作Application.Editor.StartOperation();#region 对选中的要素进行多部件测试及分解int multipartcount = 0;for (int i = 0; i < count; i++){IFeature pFeature = pFeatureArray as IFeature;if (pFeature.ShapeCopy.IsEmpty) continue;IGeometry pGeometry = pFeature.ShapeCopy;IGeometryCollection pGeocoll = pGeometry as IGeometryCollection;int geomcount = pGeocoll.GeometryCount;if (geomcount > 1){multipartcount++;for (int k = 1; k < geomcount; k++){IFeature newFeaturte = (pFeature.Class as IFeatureClass).CreateFeature();IFeatureEdit pFeatureEdit = pFeature as IFeatureEdit;pFeatureEdit.SplitAttributes(newFeaturte);IGeometry newGeom = pGeocoll.get_Geometry(k);if (pFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon)newGeom=GeometryHelper.ConstructPolygon(newGeom);elsenewGeom = GeometryHelper.ConstructPolyline(newGeom);newGeom.SpatialReference = pFeature.ShapeCopy.SpatialReference;newFeaturte.Shape = newGeom;newFeaturte.Store();}IGeometry newGeom2 = pGeocoll.get_Geometry(0);if (pFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon)newGeom2 = GeometryHelper.ConstructPolygon(newGeom2);elsenewGeom2 = GeometryHelper.ConstructPolyline(newGeom2);newGeom2.SpatialReference = pFeature.ShapeCopy.SpatialReference;pFeature.Shape = newGeom2;pFeature.Store();Application.Editor.StopOperation("分解多部件要素");}else{continue;}}if (multipartcount == 0){MessageBox.Show("未选择多部件要素!", "分解要素");return;}#endregion}catch (Exception ex){Application.Editor.AbortOperation();MessageHelper.WriteLog("分解多部件要素", ex);}finally{Application.ActiveView.Refresh();FlashFeatures();}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!