[转] ArcGIS engine中气泡标注的添加、修改

简介:

小生 原文 ArcGIS engine中气泡标注的添加、修改!

  你微微地笑着,不同我说什么话。而我觉得,为了这个,我已等待得久了。              

                                                                                                   ——泰戈尔
  喜欢看你微微的笑着,哪怕你一句话都不说,看见你笑,仿佛四季如春……笑,蕴含着着一种信任,一种安全,一种爱护,一种宽容,一种心灵的感应……宝贝,朝我笑笑,好么?
  生活本已是一杯苦酒,我们何不笑着饮下?一颗感恩的心,一颗热爱生活的心,爱惜那些值得爱的人,一起欢乐,一起将各自生活的苦酒淡化,每天都让我们灿烂的笑……
     
  不要认为后面还有更好的,因为现在拥有的就是最好的。不要因为距离太远而放弃,爱情可以和你一起坐火车的。不要因为对方不富裕而放弃,只要不是无能的人,勤劳可以让你们富裕的。不要因为父母反对而放弃,你会发现因为这个原因而反放弃的爱情,将是你一生的悔恨。其实对于爱情,越单纯越幸福。一生只谈一次恋爱是最好的,经历的太多了,会麻木;分离多了,会习惯;换恋人多了,会比较;到最后,你不会再相信爱情;你会自暴自弃;你会行尸走肉;你会与你不爱的人结婚,就这样过一辈子。
 
 
 

  ArcGIS engine中气泡标注 ,是我们在编辑图形中一个重要的工具,能提供注释功能,下面的介绍怎么来编程实现callout的添加,以及怎么去修改它们!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//  在Mapcontrol的mouseDown中添加下列内容,来添加气泡注释功能:callout.
  private  void  axMapControl1_OnMouseDown( object  sender, IMapControlEvents2_OnMouseDownEvent e)
         {
                     axMapControl1.CurrentTool =  null ;
 
                     IPoint pPoint ;
                     pPoint =  new  PointClass();
                     pPoint.PutCoords(e.mapX, e.mapY);
             
 
                     IFormattedTextSymbol pTextSymbol =  new  TextSymbolClass();
                     pTextSymbol.Background = CreateBalloonCallout(e.mapX, e.mapY)  as  ITextBackground;
                     pTextSymbol.Direction = esriTextDirection.esriTDAngle;
                     pTextSymbol.Angle = 15;
 
                     ITextElement pTextElement =  new  TextElementClass();
                     pTextElement.Symbol = pTextSymbol  as  ITextSymbol;
 
 
                     pTextElement.Text =  "MaDeSheng" ;
                     IElement ptexte = pTextElement  as  IElement;
                     pPoint =  new  PointClass();
                     pPoint.PutCoords(e.mapX * 0.90, e.mapY *1.1);
                     ptexte.Geometry = pPoint  as  IGeometry;
 
                     IMap pMap = axMapControl1.Map;
                     IGraphicsContainer pGraphicsContainer = pMap  as  IGraphicsContainer;
                     pGraphicsContainer.AddElement(pTextElement  as  IElement, 0);
                     this .axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,  null null );
}

 

 红颜色的部分是产生气泡背景,具体程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  IBalloonCallout CreateBalloonCallout( double  x,  double  y)
         {
 
             IRgbColor pRgbClr =  new  RgbColorClass();
             pRgbClr.Red = 225;
             pRgbClr.Blue = 225;
             pRgbClr.Green = 225;
             ISimpleFillSymbol pSmplFill =  new  SimpleFillSymbolClass();
             pSmplFill.Color = pRgbClr;
             pSmplFill.Style = esriSimpleFillStyle.esriSFSSolid;
             IBalloonCallout pBllnCallout =  new  BalloonCalloutClass();
             //pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRectangle;
             pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRoundedRectangle;
             pBllnCallout.Symbol = pSmplFill;
            
             pBllnCallout.LeaderTolerance = 5;
             IPoint pPoint =  new  ESRI.ArcGIS.Geometry.PointClass();
             pPoint.X = x;
             pPoint.Y = y;
             pBllnCallout.AnchorPoint = pPoint;
             return  pBllnCallout;
         }

 

 

那么添加了之后如何修改呢?
双击事件!
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private  void  axMapControl1_OnDoubleClick( object  sender, IMapControlEvents2_OnDoubleClickEvent e)
         {
             if (e.button ==1)
             {
                 //标注的修改
                 if  (((axMapControl1.CurrentTool)  as  ICommand).Name ==  "ControlToolsGraphicElement_SelectTool" ) //这一句的判断很牛B,我当时考虑了半天才搞出来。难点呀!toolbarControl中要加载esriControls.ControlsSelectTool工具
                 {
                     IPoint pPoint =  new  PointClass();
                     pPoint.PutCoords(e.mapX, e.mapY);
 
                     IMap pMap = axMapControl1.Map;
                     IGraphicsContainer pGraphicsContainer = pMap  as  IGraphicsContainer;
                     IEnumElement pEnumElement = pGraphicsContainer.LocateElements(pPoint, 10);
                     if  (pEnumElement !=  null )
                     {
                         IElement pElement = pEnumElement.Next();
                         if  (pElement  is  ITextElement)
                         {
                             
                             ITextElement ptextElement = pElement  as  ITextElement;
 
                             labelEditCallout pLabelEditCallout =  new  labelEditCallout(ptextElement.Text, ptextElement.Symbol);
                             pLabelEditCallout.ShowDialog();
 
                             ptextElement.Text = pLabelEditCallout.inputText;
                             ptextElement.Symbol = pLabelEditCallout.textSymbol;
                              
                             pGraphicsContainer.DeleteElement(pElement);
                             pGraphicsContainer.AddElement(pElement,0);
                          //这两句可以用pGraphicsContainer.UpdataElement(pElement);来代替
                             this .axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,  null null );
                         }
                     }
 
 
                 }
             }
 
 
         }

 labelEditCallout是我自己弄的一个修改样式,其实很简单的一个页面,截图如下:

   

体,代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;
using  ESRI.ArcGIS.Display;
using  ESRI.ArcGIS.Geometry;
namespace  Edit
{
     public  partial  class  labelEditCallout : Form
     {
         public  string  inputText =  "" ;
         public  ITextSymbol textSymbol;
         private  bool  ModifFillColor =  false ;
         public  labelEditCallout( string  s,ITextSymbol texSy)
         {
             inputText = s;
             textSymbol = texSy;
             InitializeComponent();
         }
 
         private  void  labelEditCallout_Load( object  sender, EventArgs e)
         {
 
             textBox1.Text = inputText;
              comboBox1.Items.Add( "矩形框" );
              comboBox1.Items.Add( "圆角矩形" );
              //comboBox1.Items.Add("Oval");
              comboBox1.SelectedIndex = 1;
 
         }
         public  IColor ConvertColorToIColor(Color color)
         {
 
             IColor pColor =  new  RgbColorClass();
 
             pColor.RGB = color.B * 65536 + color.G * 256 + color.R;
 
             return  pColor;
 
         }
         private  void  button2_Click( object  sender, EventArgs e)
         {
             IBalloonCallout textBack = (((IFormattedTextSymbol)textSymbol).Background)  as  IBalloonCallout;
             IFillSymbol pOldFill = textBack.Symbol;
             IPoint pPoint = textBack.AnchorPoint;
             
             ISimpleFillSymbol pSmplFill =  new  SimpleFillSymbolClass();
             pSmplFill.Style = esriSimpleFillStyle.esriSFSSolid;
             if  (ModifFillColor)
             {
                 pSmplFill.Color = ConvertColorToIColor( this .button1.BackColor);
             }
             else
                 pSmplFill.Color = pOldFill.Color;
 
            
 
 
             IBalloonCallout pBllnCallout =  new  BalloonCalloutClass();
             switch  (comboBox1.Text)
             {
                 case "矩形框" :
                     pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRectangle;
                     break ;
                 case "圆角矩形" :
                     pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSRoundedRectangle;
                     break ;
                 //case"Oval":
                 //    pBllnCallout.Style = esriBalloonCalloutStyle.esriBCSOval;
                 //    break;
             }
            
             pBllnCallout.Symbol = pSmplFill;
             pBllnCallout.LeaderTolerance = 5;
             pBllnCallout.AnchorPoint = pPoint;
 
 
             IFormattedTextSymbol pTextSymbol =  new  TextSymbolClass();
             pTextSymbol.Direction = esriTextDirection.esriTDAngle;
             pTextSymbol.Angle = 15;
             pTextSymbol.Background = pBllnCallout  as  ITextBackground;
             
            
 
             textSymbol = pTextSymbol  as  ITextSymbol;
 
             inputText = textBox1.Text;
             this .Close();
         }
 
         //获取颜色
         private  void  button1_Click( object  sender, EventArgs e)
         {
             if  ( this .colorDialog.ShowDialog() == DialogResult.OK)
             {
                 this .button1.BackColor =  this .colorDialog.Color;
                 ModifFillColor =  true ;
             }
 
         }
 
         private  void  button3_Click( object  sender, EventArgs e)
         {
             this .Close();
         }
 
        
     }
}

 

 

 

 

 
 

 

 
 
 
 
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5903508.html,如需转载请自行联系原作者


相关文章
|
定位技术
ArcGIS:如何对Shapefile文件进行符号系统修改、标注、合并、分割、拓扑编辑等?
ArcGIS:如何对Shapefile文件进行符号系统修改、标注、合并、分割、拓扑编辑等?
694 0
|
7月前
ArcGIS修改图层标签标注(Label)对应字段与内容的方法
ArcGIS修改图层标签标注(Label)对应字段与内容的方法
234 1
|
SQL 开发框架 数据可视化
ArcGIS Engine学习系列1 AE基础介绍
市面上AE教程大致到ArcGIS10.2,ESRI宣布从ArcGIS10.5开始便停止AE的更新,使用AO做开发,初学者可以在学习C#语言后,从AE入门,逐渐过度到AO。不同版本下AE数据类型数量Enums:枚举类型,用于实现一些定义的内容Structs:结构体Interfaces:接口Classes:类AE开发中,为了更好地管理COM对象,ESRI将这些COM对象放到不同的组件库中。
305 0
ArcGIS:要素标注时报错:未找到要素,无法验证表达式
ArcGIS:要素标注时报错:未找到要素,无法验证表达式
281 0
arcgis api 3.X 修改自带弹窗样式 2022年6月12日
自带的弹窗介绍: arcgis api 3.X 修改自带弹窗样式插图 /*修改原有弹窗的css样式*/ /* 弹窗整体 */ .esriPopup { font-size: 16px; box-shadow: 10px 10px 5px #888888; } .esriPopup .sizer { position: relative; width: 400px; /* 弹窗宽度 */ z-index: 1; } /* 标题部分 */ .esriPopup .titlePane { background-color: rgba(7
arcgis server 修改IP后服务无法启动
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bitree1/article/details/80081665 ip修改后会出现服务无法启动的现象,亲测解决方法如下: 找到Server站点的配置目录下的“arcgisserver\config-store\machines”目录。
1609 0