コード例 #1
0
ファイル: FormVertexList.cs プロジェクト: 605258778/GISData
        private void MovePoint(string sColumn, double pValue)
        {
            try
            {
                int num;
                int selectedIndex;
                IGeometryCollection geometry;
                IPointCollection    points;
                IPoint point;
                IEngineSketchOperation operation;
                DataRow focusedDataRow = this.gridView1.GetFocusedDataRow();
                if (focusedDataRow != null)
                {
                    num           = Convert.ToInt32(focusedDataRow[0]);
                    selectedIndex = this.listPart.SelectedIndex;
                    if (selectedIndex >= 0)
                    {
                        geometry = this.m_Geometry as IGeometryCollection;
                        points   = geometry.get_Geometry(selectedIndex) as IPointCollection;
                        point    = points.get_Point(num);
                        if (point != null)
                        {
                            if (sColumn == "gcX")
                            {
                                point.X = pValue;
                                goto Label_0096;
                            }
                            if (sColumn == "gcY")
                            {
                                point.Y = pValue;
                                goto Label_0096;
                            }
                        }
                    }
                }
                return;

Label_0096:
                operation = new EngineSketchOperationClass();
                operation.Start(Editor.UniqueInstance.EngineEditor);
                points.UpdatePoint(num, point);
                operation.SetMenuString("Move Vertex");
                esriEngineSketchOperationType esriEngineSketchOperationVertexMoved = esriEngineSketchOperationType.esriEngineSketchOperationVertexMoved;
                object missing = System.Type.Missing;
                object before  = new object();
                before = selectedIndex;
                geometry.RemoveGeometries(selectedIndex, 1);
                geometry.AddGeometry(points as IGeometry, ref before, ref missing);
                operation.Finish(null, esriEngineSketchOperationVertexMoved, point);
                Editor.UniqueInstance.FinishSketch();
                IEngineEditTask taskByUniqueName = Editor.UniqueInstance.EngineEditor.GetTaskByUniqueName("ControlToolsEditing_ModifyFeatureTask");
                Editor.UniqueInstance.EngineEditor.CurrentTask = taskByUniqueName;
            }
            catch
            {
            }
        }
コード例 #2
0
ファイル: InsertVertex.cs プロジェクト: 605258778/GISData
 public void OnMouseUp(int button, int shift, int x, int y)
 {
     if (button != 2)
     {
         try
         {
             IGeometry editShape       = Editor.UniqueInstance.EditShape;
             IPoint    queryPoint      = this._hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y);
             IHitTest  test            = editShape as IHitTest;
             IPoint    hitPoint        = new PointClass();
             double    hitDistance     = 0.0;
             int       hitPartIndex    = 0;
             int       hitSegmentIndex = 0;
             bool      bRightSide      = false;
             double    searchRadius    = 1.0 * this._hookHelper.ActiveView.FocusMap.MapScale;
             esriGeometryHitPartType esriGeometryPartBoundary = esriGeometryHitPartType.esriGeometryPartBoundary;
             test.HitTest(queryPoint, searchRadius, esriGeometryPartBoundary, hitPoint, ref hitDistance, ref hitPartIndex, ref hitSegmentIndex, ref bRightSide);
             if (!hitPoint.IsEmpty)
             {
                 IEngineSketchOperation operation = new EngineSketchOperationClass();
                 operation.Start(Editor.UniqueInstance.EngineEditor);
                 IGeometryCollection geometrys = editShape as IGeometryCollection;
                 IPointCollection    points    = geometrys.get_Geometry(hitPartIndex) as IPointCollection;
                 object missing = Type.Missing;
                 object after   = new object();
                 after = hitSegmentIndex;
                 object before = new object();
                 before = hitPartIndex;
                 points.AddPoint(queryPoint, ref missing, ref after);
                 operation.SetMenuString("Insert Vertex");
                 esriEngineSketchOperationType esriEngineSketchOperationVertexAdded = esriEngineSketchOperationType.esriEngineSketchOperationVertexAdded;
                 geometrys.RemoveGeometries(hitPartIndex, 1);
                 geometrys.AddGeometry(points as IGeometry, ref before, ref missing);
                 operation.Finish(null, esriEngineSketchOperationVertexAdded, queryPoint);
                 Editor.UniqueInstance.FinishSketch();
                 this.OnClick();
             }
         }
         catch (Exception exception)
         {
             Editor.UniqueInstance.AbortEditOperation();
             this._mErrOpt.ErrorOperate(this._mSubSysName, "ShapeEdit.InsertVertex", "OnMouseUp", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
         }
     }
 }
コード例 #3
0
ファイル: FormVertexList.cs プロジェクト: 605258778/GISData
 private void DeletePoint()
 {
     try
     {
         DataRow focusedDataRow = this.gridView1.GetFocusedDataRow();
         if (focusedDataRow != null)
         {
             int i             = Convert.ToInt32(focusedDataRow[0]);
             int selectedIndex = this.listPart.SelectedIndex;
             if (selectedIndex >= 0)
             {
                 IGeometryCollection geometry = this.m_Geometry as IGeometryCollection;
                 IPointCollection    points   = geometry.get_Geometry(selectedIndex) as IPointCollection;
                 IPoint data = points.get_Point(i);
                 points.RemovePoints(i, 1);
                 IEngineSketchOperation operation = new EngineSketchOperationClass();
                 operation.Start(Editor.UniqueInstance.EngineEditor);
                 operation.SetMenuString("Delete Vertex");
                 esriEngineSketchOperationType esriEngineSketchOperationVertexDeleted = esriEngineSketchOperationType.esriEngineSketchOperationVertexDeleted;
                 object missing = System.Type.Missing;
                 object before  = new object();
                 before = selectedIndex;
                 geometry.RemoveGeometries(selectedIndex, 1);
                 geometry.AddGeometry(points as IGeometry, ref before, ref missing);
                 operation.Finish(null, esriEngineSketchOperationVertexDeleted, data);
                 Editor.UniqueInstance.FinishSketch();
                 IEngineEditTask taskByUniqueName = Editor.UniqueInstance.EngineEditor.GetTaskByUniqueName("ControlToolsEditing_ModifyFeatureTask");
                 Editor.UniqueInstance.EngineEditor.CurrentTask = taskByUniqueName;
                 int index = this.listPart.SelectedIndex;
                 if (index >= 0)
                 {
                     this.ShowPointList(index);
                 }
             }
         }
     }
     catch
     {
     }
 }
コード例 #4
0
        /// <summary>
        /// The mouse up performs the action appropriate for each sub-typed command: 
        /// insert vertex, add vertex or delete vertex
        /// </summary>
        /// <param name="Button"></param>
        /// <param name="Shift"></param>
        /// <param name="X">The X screen coordinate of the clicked location</param>
        /// <param name="Y">The Y screen coordinate of the clicked location</param>
        public override void OnMouseUp(int Button, int Shift, int X, int Y)
        {
            try
            {
                IEngineEditSketch editSketch = m_engineEditor as IEngineEditSketch;
                IGeometry editShape = editSketch.Geometry;

                //location clicked as a point object
                IPoint clickedPt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);

                #region local variables used in the HitTest

                IHitTest hitShape = editShape as IHitTest;
                IPoint hitPoint = new PointClass();
                double hitDistance = 0;
                int hitPartIndex = 0;
                int hitSegmentIndex = 0;
                bool bRightSide = false;
                esriGeometryHitPartType hitPartType = esriGeometryHitPartType.esriGeometryPartNone;

                //the searchRadius is the maximum distance away, in map units, from the shape that will be used
                //for the test - change to an appropriate value.
                double searchRadius = 1;
                switch (m_lSubType)
                {
                    case 1:
                        hitPartType = esriGeometryHitPartType.esriGeometryPartBoundary;
                        break;

                    case 2:
                        hitPartType = esriGeometryHitPartType.esriGeometryPartVertex;
                        break;
                }

                #endregion

                hitShape.HitTest(clickedPt, searchRadius, hitPartType, hitPoint, ref hitDistance, ref hitPartIndex, ref hitSegmentIndex, ref bRightSide);

                //check whether the HitTest was successful (i.e within the search radius)
                if (hitPoint.IsEmpty == false)
                {
                    IEngineSketchOperation sketchOp = new EngineSketchOperationClass();
                    sketchOp.Start(m_engineEditor);

                    //Get the PointCollection for a specific path or ring by hitPartIndex to handle multi-part features
                    IGeometryCollection geometryCol = editShape as IGeometryCollection;
                    IPointCollection pathOrRingPointCollection = geometryCol.get_Geometry(hitPartIndex) as IPointCollection;

                    object missing = Type.Missing;
                    object hitSegmentIndexObject = new object();
                    hitSegmentIndexObject = hitSegmentIndex;
                    object partIndexObject = new object();
                    partIndexObject = hitPartIndex;
                    esriEngineSketchOperationType opType = esriEngineSketchOperationType.esriEngineSketchOperationGeneral;

                    switch (m_lSubType)
                    {
                        case 1: //Insert Vertex 

                            //add new vertex to the path or ring PointCollection
                            pathOrRingPointCollection.AddPoint(clickedPt, ref missing, ref hitSegmentIndexObject);
                            sketchOp.SetMenuString("Insert Vertex (Custom)");
                            opType = esriEngineSketchOperationType.esriEngineSketchOperationVertexAdded;
                            break;

                        case 2: //Delete Vertex.

                            //delete a vertex from the path or ring PointCollection
                            pathOrRingPointCollection.RemovePoints(hitSegmentIndex, 1);
                            sketchOp.SetMenuString("Delete Vertex (Custom)");
                            opType = esriEngineSketchOperationType.esriEngineSketchOperationVertexDeleted;
                            break;
                    }

                    //remove the old PointCollection from the GeometryCollection and replace with the new one
                    geometryCol.RemoveGeometries(hitPartIndex, 1);
                    geometryCol.AddGeometry(pathOrRingPointCollection as IGeometry, ref partIndexObject, ref missing);

                    sketchOp.Finish(null, opType, clickedPt);

                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message, "Unexpected Error");
            }
        }
コード例 #5
0
        /// <summary>
        /// The mouse up performs the action appropriate for each sub-typed command:
        /// insert vertex, add vertex or delete vertex
        /// </summary>
        /// <param name="Button"></param>
        /// <param name="Shift"></param>
        /// <param name="X">The X screen coordinate of the clicked location</param>
        /// <param name="Y">The Y screen coordinate of the clicked location</param>
        public override void OnMouseUp(int Button, int Shift, int X, int Y)
        {
            try
            {
                IEngineEditSketch editSketch = m_engineEditor as IEngineEditSketch;
                IGeometry         editShape  = editSketch.Geometry;

                //location clicked as a point object
                IPoint clickedPt = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);

                #region local variables used in the HitTest

                IHitTest hitShape                   = editShape as IHitTest;
                IPoint   hitPoint                   = new PointClass();
                double   hitDistance                = 0;
                int      hitPartIndex               = 0;
                int      hitSegmentIndex            = 0;
                bool     bRightSide                 = false;
                esriGeometryHitPartType hitPartType = esriGeometryHitPartType.esriGeometryPartNone;

                //the searchRadius is the maximum distance away, in map units, from the shape that will be used
                //for the test - change to an appropriate value.
                double searchRadius = 1;
                switch (m_lSubType)
                {
                case 1:
                    hitPartType = esriGeometryHitPartType.esriGeometryPartBoundary;
                    break;

                case 2:
                    hitPartType = esriGeometryHitPartType.esriGeometryPartVertex;
                    break;
                }

                #endregion

                hitShape.HitTest(clickedPt, searchRadius, hitPartType, hitPoint, ref hitDistance, ref hitPartIndex, ref hitSegmentIndex, ref bRightSide);

                //check whether the HitTest was successful (i.e within the search radius)
                if (hitPoint.IsEmpty == false)
                {
                    IEngineSketchOperation sketchOp = new EngineSketchOperationClass();
                    sketchOp.Start(m_engineEditor);

                    //Get the PointCollection for a specific path or ring by hitPartIndex to handle multi-part features
                    IGeometryCollection geometryCol = editShape as IGeometryCollection;
                    IPointCollection    pathOrRingPointCollection = geometryCol.get_Geometry(hitPartIndex) as IPointCollection;

                    object missing = Type.Missing;
                    object hitSegmentIndexObject = new object();
                    hitSegmentIndexObject = hitSegmentIndex;
                    object partIndexObject = new object();
                    partIndexObject = hitPartIndex;
                    esriEngineSketchOperationType opType = esriEngineSketchOperationType.esriEngineSketchOperationGeneral;

                    switch (m_lSubType)
                    {
                    case 1:     //Insert Vertex

                        //add new vertex to the path or ring PointCollection
                        pathOrRingPointCollection.AddPoint(clickedPt, ref missing, ref hitSegmentIndexObject);
                        sketchOp.SetMenuString("Insert Vertex (Custom)");
                        opType = esriEngineSketchOperationType.esriEngineSketchOperationVertexAdded;
                        break;

                    case 2:     //Delete Vertex.

                        //delete a vertex from the path or ring PointCollection
                        pathOrRingPointCollection.RemovePoints(hitSegmentIndex, 1);
                        sketchOp.SetMenuString("Delete Vertex (Custom)");
                        opType = esriEngineSketchOperationType.esriEngineSketchOperationVertexDeleted;
                        break;
                    }

                    //remove the old PointCollection from the GeometryCollection and replace with the new one
                    geometryCol.RemoveGeometries(hitPartIndex, 1);
                    geometryCol.AddGeometry(pathOrRingPointCollection as IGeometry, ref partIndexObject, ref missing);

                    sketchOp.Finish(null, opType, clickedPt);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message, "Unexpected Error");
            }
        }