コード例 #1
0
ファイル: AutoComplete.cs プロジェクト: 605258778/GISData
 public void OnDblClick()
 {
     Editor.UniqueInstance.CheckOverlap = false;
     try
     {
         IFeatureLayer targetLayer = Editor.UniqueInstance.TargetLayer;
         object        missing     = Type.Missing;
         if (!this.m_IsUsed || (this.m_LineFeedback == null))
         {
             return;
         }
         if (this.m_Step > 1)
         {
             IPolyline polyline = this.m_LineFeedback.Stop();
             if (polyline == null)
             {
                 this.Init();
                 return;
             }
             IFeatureClass featureClass = targetLayer.FeatureClass;
             if (featureClass == null)
             {
                 this.Init();
                 return;
             }
             IGeoDataset dataset = featureClass as IGeoDataset;
             if (polyline.SpatialReference != dataset.SpatialReference)
             {
                 polyline.Project(dataset.SpatialReference);
                 polyline.SpatialReference = dataset.SpatialReference;
             }
             IGeometry        inGeometry = polyline;
             GeometryBagClass lineSrc    = new GeometryBagClass();
             lineSrc.AddGeometry(inGeometry, ref missing, ref missing);
             targetLayer.Selectable = true;
             IDataset             dataset2           = featureClass as IDataset;
             IWorkspace           selectionWorkspace = dataset2.Workspace;
             IEnvelope            extent             = dataset.Extent;
             IInvalidArea         invalidArea        = new InvalidAreaClass();
             IFeatureConstruction construction       = new FeatureConstructionClass();
             IFeatureSelection    selection          = targetLayer as IFeatureSelection;
             ISelectionSet        selectionSet       = selection.SelectionSet;
             Editor.UniqueInstance.SetArea = false;
             Editor.UniqueInstance.StartEditOperation();
             ISpatialReferenceTolerance spatialReference = (ISpatialReferenceTolerance)dataset.SpatialReference;
             construction.AutoCompleteFromGeometries(featureClass, extent, lineSrc, invalidArea, spatialReference.XYTolerance, selectionWorkspace, out selectionSet);
             if ((selectionSet == null) || (selectionSet.Count < 1))
             {
                 Editor.UniqueInstance.AbortEditOperation();
             }
             else
             {
                 List <IFeature> pFeatureList = new List <IFeature>();
                 IEnumIDs        iDs          = selectionSet.IDs;
                 iDs.Reset();
                 for (int i = iDs.Next(); i >= 0; i = iDs.Next())
                 {
                     IFeature pFeature = featureClass.GetFeature(i);
                     FeatureFuncs.SetFeatureArea(pFeature);
                     pFeatureList.Add(pFeature);
                 }
                 if (selectionSet.Count == 1)
                 {
                     IFeature feature = pFeatureList[0];
                     selection.Clear();
                     selection.Add(feature);
                     AttributeManager.AttributeAddHandleClass.AttributeAdd(ref feature);
                 }
                 else
                 {
                     AttributeManager.AttributeSplitHandleClass.AttributeSplit(null, ref pFeatureList);
                 }
                 Editor.UniqueInstance.StopEditOperation("AutoComplete");
             }
             Editor.UniqueInstance.SetArea = true;
             this.m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection | esriViewDrawPhase.esriViewGeography, null, this.m_hookHelper.ActiveView.Extent);
         }
     }
     catch (Exception exception)
     {
         this.mErrOpt.ErrorOperate(this.mSubSysName, "ShapeEdit.AutoComplete", "OnDblClick", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
     }
     this.Init();
     Editor.UniqueInstance.CheckOverlap = true;
 }