コード例 #1
0
        private void TrimPolyline(IFeature trimFeature, IFeature targetFeature, IPoint secondPoint)
        {
            IGeometry      preservedGeom   = null;
            IGeometry      leftGeom        = null;
            IGeometry      rightGeom       = null;
            double         distanceOnCurve = 0;
            double         nearestDistance = 0;
            bool           isRightSide     = false;
            IPoint         outPoint        = new PointClass();
            IFeatureClass  featureClass    = trimFeature.Class as IFeatureClass;
            IDataset       dataset         = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit   = dataset.Workspace as IWorkspaceEdit;

            if (!(workspaceEdit.IsBeingEdited()))
            {
                return;
            }


            try
            { IGeometry             targetGeometry = targetFeature.ShapeCopy;
              IGeometry             trimGeometry   = trimFeature.ShapeCopy;
              ITopologicalOperator2 topo           = trimGeometry as ITopologicalOperator2;
              topo.IsKnownSimple_2 = false;
              topo.Simplify();
              ITopologicalOperator2 topo2 = targetGeometry as ITopologicalOperator2;
              topo2.IsKnownSimple_2 = false;
              topo2.Simplify();
              topo.Cut(targetGeometry as IPolyline, out leftGeom, out rightGeom);
              ICurve curve = targetGeometry as ICurve;
              curve.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, secondPoint, false, outPoint, ref distanceOnCurve, ref nearestDistance, ref isRightSide);
              if (isRightSide)
              {
                  preservedGeom = leftGeom;
              }
              else
              {
                  preservedGeom = rightGeom;
              }
              workspaceEdit.StartEditOperation();
              trimFeature.Shape = preservedGeom;
              trimFeature.Store();
              workspaceEdit.StopEditOperation();
              FlashGeometry(trimGeometry as IGeometry, 3, 10); }
            catch (Exception ex)
            {
                workspaceEdit.AbortEditOperation();
                MessageBox.Show("线要素延伸失败!!" + ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
コード例 #2
0
ファイル: Split.cs プロジェクト: 605258778/GISData
 public void OnDblClick()
 {
     if (this._isLineStarted)
     {
         this._snapPoint = null;
         try
         {
             this._isLineStarted = false;
             this._linePoints.RemoveAll();
             IPolyline         other       = this._feedback.Stop();
             IFeatureSelection targetLayer = Editor.UniqueInstance.TargetLayer as IFeatureSelection;
             IEnumIDs          iDs         = targetLayer.SelectionSet.IDs;
             iDs.Reset();
             IFeature srcFeature = Editor.UniqueInstance.TargetLayer.FeatureClass.GetFeature(iDs.Next());
             if (other.SpatialReference != srcFeature.Shape.SpatialReference)
             {
                 other.Project(srcFeature.Shape.SpatialReference);
                 other.SpatialReference = srcFeature.Shape.SpatialReference;
             }
             ITopologicalOperator2 shape = srcFeature.Shape as ITopologicalOperator2;
             if (shape != null)
             {
                 shape.IsKnownSimple_2 = false;
                 shape.Simplify();
                 ITopologicalOperator2 operator2 = other as ITopologicalOperator2;
                 operator2.IsKnownSimple_2 = false;
                 operator2.Simplify();
                 IGeometry geometry = null;
                 if (srcFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline)
                 {
                     geometry = shape.Intersect(other, esriGeometryDimension.esriGeometry0Dimension);
                 }
                 else
                 {
                     geometry = shape.Intersect(other, esriGeometryDimension.esriGeometry1Dimension);
                 }
                 if (!geometry.IsEmpty)
                 {
                     IGeometry geometry2;
                     IGeometry geometry3;
                     shape.Cut(other, out geometry3, out geometry2);
                     if ((geometry3 != null) && (geometry2 != null))
                     {
                         (geometry3 as ITopologicalOperator).Simplify();
                         (geometry2 as ITopologicalOperator).Simplify();
                         IFeatureClass featureClass = Editor.UniqueInstance.TargetLayer.FeatureClass;
                         IFeature      feature      = featureClass.CreateFeature();
                         IFeature      feature3     = featureClass.CreateFeature();
                         feature.Shape  = geometry3;
                         feature3.Shape = geometry2;
                         IAttributeSplit attributeSplitHandleClass = AttributeManager.AttributeSplitHandleClass;
                         if (attributeSplitHandleClass != null)
                         {
                             try
                             {
                                 Editor.UniqueInstance.StartEditOperation();
                                 Editor.UniqueInstance.AddAttribute = false;
                                 List <IFeature> pFeatureList = null;
                                 pFeatureList = new List <IFeature> {
                                     feature,
                                     feature3
                                 };
                                 attributeSplitHandleClass.AttributeSplit(srcFeature, ref pFeatureList);
                                 feature  = pFeatureList[0];
                                 feature3 = pFeatureList[1];
                                 feature.Store();
                                 feature3.Store();
                                 srcFeature.Delete();
                                 Editor.UniqueInstance.StopEditOperation("split");
                                 targetLayer.Clear();
                                 targetLayer.Add(feature);
                                 this._hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection | esriViewDrawPhase.esriViewGeography, null, null);
                             }
                             catch (Exception exception)
                             {
                                 Editor.UniqueInstance.AbortEditOperation();
                                 this._mErrOpt.ErrorOperate(this._mSubSysName, "ShapeEdit.Split", "OnDblClick", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
                             }
                         }
                     }
                 }
             }
         }
         catch (Exception exception2)
         {
             this._mErrOpt.ErrorOperate(this._mSubSysName, "ShapeEdit.Split", "OnDblClick", exception2.GetHashCode().ToString(), exception2.Source, exception2.Message, "", "", "");
         }
     }
 }