|
阅读:836回复:0
请教各位高手,在Arcgis中如何删除Polygon 区域块特性!!
<P>我在用C#和AO编写如何删除图层中的Polygon区域时,老报错,请大家给段代码或指正,</P>
<P>本人在此多谢各路大侠了:</P> <P>public bool DeleteFeature(IMap pMap,IFeatureLayer pFeatureLayer,IFeature pFeature)<BR> {<BR> IInvalidArea pInvalidArea ; <BR> ISelectionSet pSelectionSet ; <BR> ICoverageFeatureClass pCoverageFC ; <BR> IFeatureSelection pFeatureSelection ;<BR> IWorkspaceEdit pWorkspaceEdit ;<BR> ISet pSet ;<BR> bool bHasTopology ; <BR> <BR> <BR> if (pFeature == null) return false ;<BR> pSet = new SetClass() ;<BR> pInvalidArea = new InvalidAreaClass() ; <BR> pWorkspaceEdit = null ;<BR> bHasTopology = false ;<BR> try<BR> {<BR> IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass ; <BR> if ((pDataset.Type == esriDatasetType.esriDTFeatureClass) || (pDataset.Type == esriDatasetType.esriDTFeatureDataset)) <BR> {<BR> // start editing <BR> pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace ;<BR> if (! pWorkspaceEdit.IsBeingEdited())<BR> {<BR> pWorkspaceEdit.StartEditing(true) ;<BR> pWorkspaceEdit.EnableUndoRedo() ;<BR> }<BR> //=================================<BR> pFeatureSelection =(IFeatureSelection) pFeatureLayer ; <BR> pSelectionSet = pFeatureSelection.SelectionSet ; </P> <P> if (pFeature is ICoverageFeatureClass )<BR> {<BR> pCoverageFC =(ICoverageFeatureClass)pFeature ;<BR> if (pCoverageFC.Topology ==ESRI.ArcObjects.Core.esriFeatureClassTopology.esriFCTExists ) bHasTopology = true ;<BR> }<BR> if (!bHasTopology)<BR> {<BR> pInvalidArea.Add(pFeature) ;<BR> pSet.Add(pFeature) ;<BR> }<BR> <BR> IRow pRow = pFeature.Table.GetRow(pFeature.OID) ;<BR> IRowEdit pRowEdit = (IRowEdit)pRow ;<BR> pRow.Delete() ;<BR> pRowEdit.DeleteSet(pSet) ;</P> <P> pMap.ClearSelection() ;<BR> pInvalidArea.Invalidate((short)esriScreenCache.esriAllScreenCaches) ;<BR> <BR> pWorkspaceEdit.StopEditOperation();<BR> pWorkspaceEdit.StopEditing(true) ; <BR> }<BR> IActiveView pActiveView =(IActiveView)pMap ;<BR> pActiveView.Refresh(); <BR> // pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null) ; <BR> return true ;<BR> }<BR> catch (Exception Ex)<BR> {<BR> if ( pWorkspaceEdit.IsBeingEdited()) {pWorkspaceEdit.StopEditOperation(); pWorkspaceEdit.StopEditing(true) ;}<BR> MessageBox.Show("DeleteOnFeature错误信息:“" + Ex.Message + " ”","错误",MessageBoxButtons.OK,MessageBoxIcon.Error) ; <BR> return false ;<BR> }</P> <P> }<BR></P> <P>运行时,报错:“发生灾难性错误”。</P> |
|