http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcObjects开发 >> 正文

ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针

作者:zhangche…    文章来源:GIS空间站    点击数:    更新时间:2010-2-8
摘要:ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针等。

自定义工具类,实现添加图名,比例尺,指北针

-------------------------添加图名------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.ADF.BaseClasses;
using stdole;
//自定义工具类,实现添加图名功能
namespace WindowsApplication1
{

    class addPageLayoutName:BaseTool
    {
        public Form1 formTemp;
        TextBox textbox;
        AxPageLayoutControl axLayoutControl;
        IPoint pPoint;
        //double xMap, yMap;
       public static double xMap;
        public static double yMap;

        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
           if (Button==1)
           {
               pPoint = formTemp.returnPageLayoutControl().ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
               xMap = pPoint.X;
               yMap = pPoint.Y;
               formTemp.returnTextbox1().Location = new System.Drawing.Point(X,Y);
               formTemp.returnTextbox1().Visible = true;
               formTemp.returnTextbox1().Focus();
               formTemp.returnTextbox1().Text = "请在此输入图名";
              

           }

        }
      

        public override void OnCreate(object hook)
        {
            axLayoutControl = hook as AxPageLayoutControl;
            
        }

        public void AddTextElement(AxPageLayoutControl PageLayoutControl,double x,double y,string textName)
        {
            IPageLayout pPageLayout;
            IActiveView pAV;
            IGraphicsContainer pGraphicsContainer;
            IPoint pPoint;
            ITextElement pTextElement;
            IElement pElement;
            ITextSymbol pTextSymbol;
            IRgbColor pColor;
            pPageLayout = PageLayoutControl.PageLayout;
            pAV = (IActiveView)pPageLayout;
            pGraphicsContainer = (IGraphicsContainer)pPageLayout;
            pTextElement = new TextElementClass();

            IFontDisp pFont = new StdFontClass() as IFontDisp;
            pFont.Bold = true;
            pFont.Name = "宋体";
            pFont.Size = 13;

            pColor = new RgbColorClass();
            pColor.Red = 255;

            pTextSymbol = new TextSymbolClass();
            pTextSymbol.Color = (IColor)pColor;
            pTextSymbol.Font = pFont;

            pTextElement.Text = textName;
            pTextElement.Symbol = pTextSymbol;

            pPoint = new PointClass();
            pPoint.X = x;
            pPoint.Y = y;

            pElement = (IElement)pTextElement;
            pElement.Geometry = (IGeometry)pPoint;
            pGraphicsContainer.AddElement(pElement, 0);

            pAV.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

        }

    }
}
另外附加其它(添加比例尺,指北针的代码,,,也是通过自定义工具类实现的,,,,下列只给出自定义工具类的代码!)
---------------------------------------添加指北针-------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.ADF.BaseClasses;
namespace WindowsApplication1
{
    sealed class addNorthArrow : BaseTool
    {
       AxPageLayoutControl axPageLayout=null;
       IPoint pPoint;
       bool bInuse;
       INewEnvelopeFeedback pNewEnvelopeFeedback = null;

       public addNorthArrow()
       {
           base.m_caption= "添加指北针";
           base.m_toolTip = "添加指北针";
           base.m_category = "customCommands";
           base.m_message = "添加指北针";
           base.m_deactivate = true;

       }

       public override void OnCreate(object hook)
       {
           axPageLayout = (AxPageLayoutControl)hook;

       }
       public override void OnMouseDown(int Button, int Shift, int X, int Y)
       {
           pPoint = axPageLayout.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
           bInuse = true;
       }
       public override void OnMouseMove(int Button, int Shift, int X, int Y)
       {
           if (bInuse==false)
           {
               return;
           }

           if (pNewEnvelopeFeedback==null)
           {
               pNewEnvelopeFeedback = new NewEnvelopeFeedbackClass();
               pNewEnvelopeFeedback.Display = axPageLayout.ActiveView.ScreenDisplay;
               pNewEnvelopeFeedback.Start(pPoint);
           }
           pNewEnvelopeFeedback.MoveTo(axPageLayout.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y));


       }
       public override void OnMouseUp(int Button, int Shift, int X, int Y)
       {
           if (bInuse==false)
           {
               return;
           }
           if (pNewEnvelopeFeedback==null)
           {
               pNewEnvelopeFeedback = null;
               bInuse = false;
               return;
           }
           IEnvelope pEnvelope=pNewEnvelopeFeedback.Stop();
           if((pEnvelope.IsEmpty)||(pEnvelope.Width==0)||(pEnvelope.Height==0))
           {
               pNewEnvelopeFeedback = null;
               bInuse = false;
               return;
           }

           addNorthArrowForm northArrow = new addNorthArrowForm();
           IStyleGalleryItem pStyleGalleryItemTemp = Form1.pStyleGalleryItem;
           if (pStyleGalleryItemTemp==null)
           {
               return;
           }

           IMapFrame pMapframe = axPageLayout.ActiveView.GraphicsContainer.FindFrame(axPageLayout.ActiveView.FocusMap)as IMapFrame;
           IMapSurroundFrame pMapSurroundFrame = new MapSurroundFrameClass();
           pMapSurroundFrame.MapFrame = pMapframe;
           pMapSurroundFrame.MapSurround = (IMapSurround)pStyleGalleryItemTemp.Item;
           //在pageLayout中根据名称查要Element,找到之后删除已经存在的指北针
           IElement pElement = axPageLayout.FindElementByName("NorthArrows");
           if (pElement!=null)
           {
               axPageLayout.ActiveView.GraphicsContainer.DeleteElement(pElement);  //删除已经存在的指北针
           }


            pElement = (IElement)pMapSurroundFrame;
           pElement.Geometry = (IGeometry)pEnvelope;

           axPageLayout.ActiveView.GraphicsContainer.AddElement(pElement, 0);
           axPageLayout.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

           pNewEnvelopeFeedback = null;
           bInuse = false;
       }


    }
}



----------------------------------------添加比例尺(Scale Bars)-----------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.ADF.BaseClasses;
namespace WindowsApplication1
{
    sealed class addScaleBar:BaseTool
    {
        //----------------------------------------------------------

        //发现的重大问题,如果用IHookHelper,就会出现问题,用AxPageLayoutControl则不会出现问题,以后注意
        //private IHookHelper pHookHelper=null;
        private AxPageLayoutControl axPagelayoutControl = null;


        private IPoint pPoint;
        private INewEnvelopeFeedback pNewEnvelopeFeedback;
        private bool bInuse;

        public addScaleBar()
        {
            base.m_caption = "ScaleBar";
            base.m_category = "myCustomCommands(C#)";
            base.m_message = "Add a scale bar map surround";
            base.m_name = "myCustomCommands(C#)_ScaleBar";
            base.m_toolTip = "Add a scale bar";
            base.m_deactivate = true;

        }
        public override void OnCreate(object hook)
        {
            //pHookHelper.Hook = hook;
            axPagelayoutControl = hook as AxPageLayoutControl;
        }
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            pPoint = axPagelayoutControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
            bInuse = true;
        }

        public override void OnMouseMove(int Button, int Shift, int X, int Y)
        {
            if (bInuse==false)
            {
                return;
            }
            if (pNewEnvelopeFeedback==null)
            {
                pNewEnvelopeFeedback = new NewEnvelopeFeedbackClass();
                pNewEnvelopeFeedback.Display = axPagelayoutControl.ActiveView.ScreenDisplay;
                pNewEnvelopeFeedback.Start(pPoint);
            }
            pNewEnvelopeFeedback.MoveTo(axPagelayoutControl.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y));


        }

        public override void OnMouseUp(int Button, int Shift, int X, int Y)
        {
            if (bInuse==false)
            {
                return;
            }
            if (pNewEnvelopeFeedback==null)
            {
                pNewEnvelopeFeedback = null;
                bInuse = false;
                return;
            }
            IEnvelope pEnvelope = pNewEnvelopeFeedback.Stop();
            if ((pEnvelope.IsEmpty)||(pEnvelope.Width==0)||(pEnvelope.Height==0))
            {

                pNewEnvelopeFeedback = null;
                bInuse = false;
                return;
            }
            AddScaleBarForm scaleBarForm = new AddScaleBarForm();
            //scaleBarForm.Show();
            IStyleGalleryItem pStyleItem = Form1.pStyleGalleryItem;
            if (pStyleItem == null)
            {
                return;
            }


            IMapFrame pMapframe = axPagelayoutControl.ActiveView.GraphicsContainer.FindFrame(axPagelayoutControl.ActiveView.FocusMap) as IMapFrame;
            IMapSurroundFrame pSurroundFrame = new MapSurroundFrameClass();
            pSurroundFrame.MapFrame = pMapframe;
            pSurroundFrame.MapSurround = (IMapSurround)pStyleItem.Item;
            //在pageLayout中根据名称查要Element,找到之后删除已经存在的比例尺
            IElement pelement = axPagelayoutControl.FindElementByName("ScaleBars");
            if (pelement != null)
            {
                axPagelayoutControl.ActiveView.GraphicsContainer.DeleteElement(pelement);  //删除已经存在的指北针
            }

             pelement = (IElement)pSurroundFrame;
            pelement.Geometry = (IGeometry)pEnvelope;

            axPagelayoutControl.ActiveView.GraphicsContainer.AddElement(pelement, 0);
            axPagelayoutControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

            pNewEnvelopeFeedback = null;
            bInuse = false;

        }


    }
}

Tags:ArcGIS Engine,自定义工具类  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图