zoukankan      html  css  js  c++  java
  • 节点捕捉

    // Copyright 2012 ESRI
    // 
    // All rights reserved under the copyright laws of the United States
    // and applicable international laws, treaties, and conventions.
    // 
    // You may freely redistribute and use this sample code, with or
    // without modification, provided you include the original copyright
    // notice and use restrictions.
    // 
    // See the use restrictions.
    // 
    
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    using ESRI.ArcGIS.Controls;
    using ESRI.ArcGIS.esriSystem;
    using ESRI.ArcGIS.Geodatabase;
    using ESRI.ArcGIS.Geometry;
    using ESRI.ArcGIS.Carto;
    using ESRI.ArcGIS.Display;
    using ESRI.ArcGIS.SystemUI;
    using ESRI.ArcGIS.ADF.CATIDs;
    
    namespace Core
    {
      public partial class SnapEditor : Form
      {
        IEngineEditor editor;
        IEngineEditLayers editLayers;
        IEngineSnapEnvironment snapEnvironment;
           
        public SnapEditor()
        {
          InitializeComponent();
    
          //get the snapEnvironment
          editor = new EngineEditorClass();
          editLayers = editor as IEngineEditLayers;
          snapEnvironment = editor as IEngineSnapEnvironment;    
      
          //Update this form with the snap environment and snap tips
          //Note: from here on we expect all snap changes to be made via this form, so it is not updated after direct changes to the snapping 
          //environment or the Arc Engine Snap Window. 
          RefreshDisplay();
        }
    
        /// <summary>
        /// Update the window with the current snap environment and snap tip settings
        /// </summary>
        private void RefreshDisplay()
        {
          snapTolerance.Text = snapEnvironment.SnapTolerance.ToString();
          snapTolUnits.SelectedIndex = (int)snapEnvironment.SnapToleranceUnits;      
          snapTips.Checked = ((IEngineEditProperties2)editor).SnapTips;
          
          //remove all feature snap agents from the data grid view
          snapAgents.Rows.Clear();
                   
          //display feature snap and snap agents that are active
          for (int i = 0; i < snapEnvironment.SnapAgentCount; i++)
          {
            try
            {
              IEngineSnapAgent snapAgent = snapEnvironment.get_SnapAgent(i);
              IEngineFeatureSnapAgent ftrSnapAgent = snapAgent as IEngineFeatureSnapAgent;
    
              if (ftrSnapAgent != null)
              {
                //for feature snap agents add a row to the data view grid 
                esriGeometryHitPartType hitType = ftrSnapAgent.HitType;
                bool vertex, edge, end;
                vertex = (hitType & esriGeometryHitPartType.esriGeometryPartVertex) == esriGeometryHitPartType.esriGeometryPartVertex;
                edge = (hitType & esriGeometryHitPartType.esriGeometryPartBoundary) == esriGeometryHitPartType.esriGeometryPartBoundary;
                end = (hitType & esriGeometryHitPartType.esriGeometryPartEndpoint) == esriGeometryHitPartType.esriGeometryPartEndpoint;
                string vertexString = vertex ? "vertex" : "      ";
                string edgeString = edge ? " edge" : "     ";
                string endString = end ? " end  " : "     ";
                string hitTypes = vertexString + edgeString + endString;
                object[] rowData = { snapAgent.Name.ToString(), ftrSnapAgent.FeatureClass.AliasName, hitTypes };
                snapAgents.Rows.Add(rowData);
              }
              else
              {
                //add the active edit sketch snap agents    
                object[] rowData = { snapAgent.Name.ToString(), "<not applicable>", "<not applicable>" };
                snapAgents.Rows.Add(rowData);
              }
            }
            catch (Exception)
            {
            }
    
          }
        }
    
        #region Button Handlers
        private void clearAgents_Click(object sender, EventArgs e)
        {
          snapEnvironment.ClearSnapAgents();
                
          //refresh this window
          RefreshDisplay();
        }
    
        /// <summary>
        /// Turns off feature snap agents and turns off edit sketch snap agents by removing them
        /// </summary>
        /// <remarks>
        /// Using Clear or Remove feature snap agents can be deactivated so that the user can't enable them.
        /// Here we simply turn off all the agents, which will allow the user to turn them on.
        /// </remarks>   
        private void turnOffAgents_Click(object sender, EventArgs e)
        {
          TurnOffAgents();       
        }
        
        private void reverseAgentsPriority_Click(object sender, EventArgs e)
        {
          //get all the snap agents in reverse order and then deactivate them
          ArrayList snapAgentList = new ArrayList();
    
          for (int i = snapEnvironment.SnapAgentCount - 1; i >= 0; i--)
          {
            IEngineSnapAgent tmpAgent = snapEnvironment.get_SnapAgent(i);
            snapAgentList.Add(tmpAgent);
            snapEnvironment.RemoveSnapAgent(i);
          }
    
          //add the agents back to the environment
          foreach (IEngineSnapAgent agent in snapAgentList)
          {
            snapEnvironment.AddSnapAgent(agent);
          }
    
          //refresh this window
          RefreshDisplay();
        }  
    
        /// <summary>
        /// Adds a feature snap agent for the target layer and turn on  all options.
        /// </summary>
        /// <remarks>
        /// This method does not check if there already exists a feature snap agent for the 
        /// target layer. It is recommended that you do so since duplicate agents can appear
        /// on the Snap Settings Form
        /// </remarks>    
        private void addFeatureSnapAgent_Click(object sender, EventArgs e)
        {
          IEngineFeatureSnapAgent featureSnapAgent = new EngineFeatureSnap();
          
          if (editLayers.TargetLayer == null)
          {
            System.Windows.Forms.MessageBox.Show("Please start an edit session");
            return;
          }
          
          featureSnapAgent.FeatureClass = editLayers.TargetLayer.FeatureClass; ;
          featureSnapAgent.HitType = esriGeometryHitPartType.esriGeometryPartVertex | esriGeometryHitPartType.esriGeometryPartBoundary | esriGeometryHitPartType.esriGeometryPartEndpoint;
          snapEnvironment.AddSnapAgent(featureSnapAgent); 
         
          //refresh this window
          RefreshDisplay();
        }
    
        /// <summary>
        /// Adds, and hence turns on, Edit Sketch snap agents
        /// </summary>
        private void addSketchSnapAgent_Click(object sender, EventArgs e)
        {
          AddSketchSnapAgents();
          RefreshDisplay();
        }  
        #endregion
    
        #region Snap Tips and Tolerance Handlers
        private void snapTips_CheckedChanged(object sender, EventArgs e)
        {
          try
          {
            //turn snap tips on/off      
            ((IEngineEditProperties2)editor).SnapTips = snapTips.Checked;
          }
          catch
          {
            snapTips.Checked = ((IEngineEditProperties2)editor).SnapTips;
          }
        }
           
        private void snapTolerance_TypeValidationEventHandler(object sender, TypeValidationEventArgs e)
        {
          try
          {
            snapEnvironment.SnapTolerance = Convert.ToDouble(snapTolerance.Text);
          }
          catch
          {
            snapTolerance.Text = snapEnvironment.SnapTolerance.ToString();
          }      
        }
    
        private void snapTolUnits_SelectedIndexChanged(object sender, EventArgs e)
        {
          try
          {
            snapEnvironment.SnapToleranceUnits = (esriEngineSnapToleranceUnits)snapTolUnits.SelectedIndex;
          }
          catch
          {
            snapTolUnits.SelectedIndex = (int)snapEnvironment.SnapToleranceUnits;
          }
        }
        #endregion
                
        #region Helper Methods
        /// <summary>
        /// Adds, and hence turns on, Edit Sketch snap agents
        /// </summary>
        private void AddSketchSnapAgents()
        {
          //give anchor snap (i.e. vertex snap) priority to get more accurate snap tips while snapped to a vertex
          Type t = Type.GetTypeFromProgID("esriControls.EngineAnchorSnap");
          System.Object obj = Activator.CreateInstance(t);
          IEngineSnapAgent snapAgent = (IEngineSnapAgent)obj;
          snapEnvironment.AddSnapAgent(snapAgent);
    
          //edge sketch edges
          t = Type.GetTypeFromProgID("esriControls.EngineSketchSnap");
          obj = Activator.CreateInstance(t);
          snapAgent = (IEngineSnapAgent)obj;
          snapEnvironment.AddSnapAgent(snapAgent);
    
          //perpendicular to edit sketch
          t = Type.GetTypeFromProgID("esriControls.EnginePerpendicularSnap");
          obj = Activator.CreateInstance(t);
          snapAgent = (IEngineSnapAgent)obj;
          snapEnvironment.AddSnapAgent(snapAgent);
        }
    
        /// <summary>
        /// Turns off feature snap agents and turns off edit sketch snap agents by removing them
        /// </summary>
        /// <remarks>
        /// Using Clear or Remove feature snap agents can be deactivated so that the user can't enable them.
        /// Here we simply turn off all the agents, which will allow the user to turn them on.
        /// </remarks>   
        private void TurnOffAgents()
        {
          for (int i = snapEnvironment.SnapAgentCount - 1; i >= 0; i--)
          {
            IEngineSnapAgent snapAgent = snapEnvironment.get_SnapAgent(i);
            IEngineFeatureSnapAgent ftrSnapAgent = snapAgent as IEngineFeatureSnapAgent;
            if (ftrSnapAgent != null)
            {
              //turn off the feature snap agent
              ftrSnapAgent.HitType = esriGeometryHitPartType.esriGeometryPartNone;
            }
            else
            {
              //there is no way to turn snap agents off, they must be removed 
              snapEnvironment.RemoveSnapAgent(i);
            }
          }
    
          //refresh this window
          RefreshDisplay();
        }
        #endregion
      }
    }
  • 相关阅读:
    logging模块
    configparser模块
    hashlib模块
    shutil模块
    json与pickle模块
    random模块
    OS模块
    如何不使用共享内存实现windows与虚拟机中进行文件的传输
    结构体的定义方式(仅定义)
    数据结构练习之寻找顺序表中的主要元素
  • 原文地址:https://www.cnblogs.com/liuyongpingblog/p/9148866.html
Copyright © 2011-2022 走看看