How can i split polyline by point?

المشرف العام

Administrator
طاقم الإدارة
I want to cut gas pipe line by point and add two new feature and delete the old feature gas line.I come the code to split pipe line but does't work and stop at here ISet newFeaturesSetTemp = featureEdit.SplitWithUpdate(pPoint);

public override void OnMouseDown(int Button, int Shift, int X, int Y){ IMxDocument mxdoc = m_application.Document as IMxDocument; IActiveView activeView = mxdoc.ActiveView; IPoint pPoint = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); IFeatureLayer pFlayer = null; IMap map = mxdoc.FocusMap; for (int i = 0; i < map.LayerCount - 2; i++) { ILayer layer = map.get_Layer(i); if (/*/layer is IFeatureLayer &&/*/ layer.Name == "Double_Endcap") { pFlayer = layer as IFeatureLayer; break; } } /////////////////////////////////////////////////////////////////////////////////////////////////////// IFeatureLayer flayer = null; for (int i = 0; i < map.LayerCount - 2; i++) { ILayer layer = map.get_Layer(i); if (/*layer is IFeatureLayer &&*/ layer.Name == "PePipe") { flayer = layer as IFeatureLayer; break; } } ITopologicalOperator topologicalOperator = pPoint as ITopologicalOperator; IGeometry geometry = topologicalOperator.Buffer(1);//(0.5); ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = geometry; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; //IFeatureSelection featureSelection = flayer as IFeatureSelection;// //featureSelection.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, true);// IFeatureClass featureClass = flayer.FeatureClass; IFeatureCursor featurecursor = featureClass.Search(spatialFilter, false); IFeature feature = featurecursor.NextFeature(); /////////////////////////////////////////////////////// int iOID = feature.OID; ////Split the feature. Use the IFeatureEdit::Split method which ensures ////the attributes are correctly dealt with. IFeatureEdit2 featureEdit = feature as IFeatureEdit2; featureEdit.SplitWithUpdate(pPoint); ////Set to hold the new features that are created by the Split. ISet newFeaturesSet = new SetClass(); ISet newFeaturesSetTemp = featureEdit.SplitWithUpdate(pPoint); if (newFeaturesSetTemp != null) { newFeaturesSetTemp.Reset(); for (int featureCount = 0; featureCount < newFeaturesSetTemp.Count; featureCount++) { IFeature newFeature = newFeaturesSetTemp.Next() as IFeature; if (newFeature.OID == iOID) { newFeaturesSet.Add(newFeature); } } } newFeaturesSet.Add(feature); //////////////////////////////////////////////////// if (feature == null) { MessageBox.Show("Select Pipe"); } else { //IFeatureClass pFeaturecalass = pFlayer.FeatureClass as IFeatureClass; IDataset pDataset = featureClass as IDataset; IGeoDataset pGeoDataset = featureClassas IGeoDataset; ISpatialReference sr = pGeoDataset.SpatialReference; sr.SetDomain(-1000000, 40000000, -1000000, 40000000); IWorkspace pWorkspace = pDataset.Workspace as IWorkspace; IWorkspaceEdit pWorkspaceEdit = pWorkspace as IWorkspaceEdit; pWorkspaceEdit.StartEditing(true); IFeature pNewFeature = featureClass.CreateFeature() as IFeature; pNewFeature.Shape = pPoint; pNewFeature.Shape.SpatialReference = sr; pNewFeature.Store(); pWorkspaceEdit.StopEditOperation(); pWorkspaceEdit.StopEditing(true); activeView.Refresh(); }}

أكثر...
 
أعلى