AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)
手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事、也有自己的、也有来自网络的,来源途径太多,也没法详细注明,请见谅!
要素标注:
在Engine中,有一个很好的接口IGraphicsContainer,这个接口就是desktop中的临时图层,所以,要是完成一个标注功能的系统,这个接口就非常有用了。可以通过IMap、IActiveView等接口得到IGraphicsContainer,通过
IGraphicsContainer pGC = m_HookHelper.FocusMap as IGraphicsContainer;
pGC.Reset();
IElement pElement = pGC.Next();
while (pElement != null)
{
ElemnetProperty pProperty = (pElement as IElementProperties2).CustomProperty as ElemnetProperty;
if(pProperty == null)
{
pElement = pGC.Next();
continue;
}
}
对其中的IElement进行遍历,通过IElement得到IElementProperties2,IElementProperties2的CustomProperty是个可读写的object属性,可以通过他保存自定义的内容,所以属性控制方面,非常方便;IElement的Geometry属性可以控制图形,图形方面的问题也得到了解决。(上段代码中的ElemnetProperty 是我自己定义的一个结构。)
控制PageLayout显示
PageLayout上的东西都是element,实现了两个接口IGraphicsContainer and IGraphicsContainerSelect。IGraphicsContainer包括所有pagelayout上的element,有next方法可以遍历,可以添加删除排序,IGraphicsContainerSelect has a DominantElement property for getting the selected element. 一个element又实现了IElementProperties2接口,该接口上有name属性,可以通过这个属性来get or set the name of selected element。在element的ITextElement (并非所有的elment都实现该接口可以用Typeof pElement is ITextElement判断)接口上有text属性,可以来设置其显示的文字。
'get PageLayout
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pPageLayout As IPageLayout
Set pPageLayout = pMxDoc.PageLayout
'determine if there is one and only one element selected
Dim pContainerSelect As IGraphicsContainerSelect
Set pContainerSelect = pPageLayout
If pContainerSelect.ElementSelectionCount <> 1 Then
MsgBox "Select one element."
Exit Sub
End If
'get the name property
Dim pElement As IElementProperties2
Set pElement = pContainerSelect.DominantElement
Dim strName As String
strName = InputBox("Enter a name", "Name the element")
'set the name property
pElement.Name = strName
添加新图形(Adding new graphics)
先声明一个IElement 这个接口根据需要可以在polygon, line或point 上实现。用来接收geometry;
声明一个IFillShapeElement接口引用刚才那个对象,用它的symbol属性来设置element的属性。
用symbol的color属性来设置颜色和透明度,outline属性来设置边框
最后用IGraphicsContainer的add方法把element加上去。
IElement 有geometry 属性,来接受一个geometry
IFillShapeElement有symbol属性
IFillSymbol有color属性来设置symbol的颜色透明度等,还有outline属性来设置边框
AE中画带箭头的线(转贴)
使用ICartographicLineSymbol 接口
Private Sub UIButtonControl1_Click()
Dim pMxDoc As IMxDocument
Dim pGraphicsContainer As IGraphicsContainer
Dim pActiveView As IActiveView
Dim pLineElement As ILineElement
Set pMxDoc = Application.Document
Set pGraphicsContainer = pMxDoc.FocusMap
Set pActiveView = pMxDoc.FocusMap
pGraphicsContainer.Reset
Set pLineElement = pGraphicsContainer.Next
Dim aCartoLineSymbol As ICartographicLineSymbol
Set aCartoLineSymbol = New CartographicLineSymbol
Dim aLP As ILineProperties
Set aLP = aCartoLineSymbol
aLP.Offset = 0
Dim hpe(6) As Double
hpe(0) = 0
hpe(1) = 7
hpe(2) = 1
hpe(3) = 1
hpe(4) = 1
hpe(5) = 0
Dim eLineTemplate As ITemplate
Set eLineTemplate = New Template
eLineTemplate.Interval = 1
Dim ix As Integer, jx As Integer
jx = 0
For ix = 1 To 3
eLineTemplate.AddPatternElement hpe(jx), hpe(jx + 1)
jx = jx + 2
Next ix
Set aLP.Template = eLineTemplate
aCartoLineSymbol.Width = 2
aCartoLineSymbol.Cap = esriLCSButt
aCartoLineSymbol.Join = esriLJSBevel
Dim HC As IRgbColor
Set HC = New RgbColor
HC.Red = 255
HC.Green = 0
HC.Blue = 0
aCartoLineSymbol.Color = HC
Dim pSymbol As ISymbol
Set pSymbol = aCartoLineSymbol
pLineElement.Symbol = pSymbol
pActiveView.Refresh
End Sub
引线标注
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pTextElement As ITextElement
Set pTextElement = New TextElement
Dim pElement As IElement
Set pElement = pTextElement
pTextElement.Text = "feifeiwua" & vbCrLf & "引线标注!"
Dim dMidX As Double, dMidY As Double
Dim pPoint As IPoint
' dMidX = (pMxDoc.ActiveView.Extent.XMax + pMxDoc.ActiveView.Extent.XMin) / 2
' dMidY = (pMxDoc.ActiveView.Extent.YMax + pMxDoc.ActiveView.Extent.YMin) / 2
Set pPoint = New Point
Set pPoint = pMxDoc.ActivatedView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
dMidX = pPoint.x
dMidY = pPoint.y
pPoint.PutCoords dMidX, dMidY
pElement.Geometry = pPoint
Dim pTextSymbol As IFormattedTextSymbol
Set pTextSymbol = New TextSymbol
Dim pCallout As ICallout
Set pCallout = New BalloonCallout
Set pTextSymbol.Background = pCallout
pPoint.PutCoords dMidX - pMxDoc.ActiveView.Extent.Width / 4, dMidY + pMxDoc.ActiveView.Extent.Width / 20
pCallout.AnchorPoint = pPoint
pTextElement.Symbol = pTextSymbol
Dim pGraphicsContainer As IGraphicsContainer
Set pGraphicsContainer = pMxDoc.ActiveView
pGraphicsContainer.AddElement pElement, 0
pElement.Activate pMxDoc.ActiveView.ScreenDisplay
pMxDoc.ActiveView.PartialRefresh esriViewGraphics, Nothing, Nothing
如何获得投影坐标、参考坐标、投影方式
ArcMap中,View——〉Data Frame Properties——〉Coordinate System:
有一系列的坐标及投影方式,可以通过以下方式获得
Public Sub getSpatialReference()
Dim pDoc As IMxDocument
Dim pMap As IMap
Set pDoc = ThisDocument
Set pMap = pDoc.FocusMap
Dim pSpatialReference As ISpatialReference
Set pSpatialReference = pMap.SpatialReference
Dim pProjectedCS As IProjectedCoordinateSystem
Dim pGeographicCS As IGeographicCoordinateSystem
Dim pProjection As IProjection
Set pProjectedCS = pSpatialReference
Set pGeographicCS = pProjectedCS.GeographicCoordinateSystem
Set pProjection = pProjectedCS.Projection
Debug.Print pProjectedCS.Name
Debug.Print pGeographicCS.Name
Debug.Print pProjection.Name
End Sub
输出结果:
NAD_1983_StatePlane_Vermont_FIPS_4400
GCS_North_American_1983
Transverse_Mercator:横轴墨卡托投影
IFeatureClass::FeatureCount注意点
IFeatureClass.FeatureCount(ISpatialFilter):计算FeatureCount的时候,如果ISpatialFilter::Geometry过于复杂,此方法运算会使程序崩溃(比如:把道路网做缓冲合并成一个Geometry,查询程序崩溃)。
可以采取另外的一个方法:
IFeatureCursor = IFeatureClass.Search(ISpatialFilte*,**lse),然后遍历IFeatureCursor,获得其个数。
AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)的更多相关文章
- 如何利用百度地图JSAPI画带箭头的线?
百度地图JSAPI提供两种绘制多折线的方式,一种是已知多折线经纬度坐标串通过AddOverlay接口进行添加:另一种是通过在地图上鼠标单击进行绘制(鼠标绘制工具条库).目前这两种方式只能绘制多折线,并 ...
- 如何在 Matlab 中绘制带箭头的坐标系
如何在 Matlab 中绘制带箭头的坐标系 如何在 Matlab 中绘制带箭头的坐标系 实现原理 演示效果 完整代码 实现原理 使用 matlab 的绘制函数时,默认设置为一个方框形的坐标系, 图1 ...
- Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)
(一)Eclipse中的快捷键: ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...
- MFC中如何画带实心箭头的直线
工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决:思路如下: (1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度 (2)以P2为原点得到向量P2P1 ...
- AE 向已存在的要素类中添加字段
风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...
- [PHP] PHP源码常用代码中的宏定义
PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表达式 ...
- Vue中使用ECharts画散点图加均值线与阴影区域
[本文出自天外归云的博客园] 需求 1. Vue中使用ECharts画散点图 2. 在图中加入加均值线 3. 在图中标注出阴影区域 实现 实现这个需求,要明确两点: 1. 知道如何在vue中使用ech ...
- phpcms v9模板制作常用代码集合(转)
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
- phpcms v9模板制作常用代码集合
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
随机推荐
- Image组件
/* Image* 用于显示图片的组件,包括网络图片,静态资源 * 常用性能: * resizeMode 图片适应模式 cover , contain , stretch * source 图片的引用 ...
- JavaScript的高级知识---词法分析
JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间, ...
- svn学习笔记(一)
一.svn介绍 1.1 项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易 ...
- Android Toast语句应用
1.findViewById()函数使用 函数作用:通过id来找到前台界面的组件 2.Toast语句 (1)介绍 (2)用法 (3)代码示例 package com.lucky.test21; imp ...
- ICEM二维网格
非结构网格 结构网格 拓扑 拓扑完建立part边界条件,然后创建block 拓扑完后进行边界条件关联 全局网格设置
- docker 镜像的配置文件修改
#抛砖引玉# docker exec -ti 容器ID /bin/bash
- abp架构添加实体并使用迁移功能生成表
参考: https://aspnetboilerplate.com/Pages/Articles/Introduction-With-AspNet-Core-And-Entity-Framework- ...
- linux下忘记mysql的root密码
一.处理方案 #1. 结束当前正在运行的mysql进程 /etc/init.d/mysql stop #2. 用mysql安全模式运行并跳过权限验证 mysqld_safe --user=mysql ...
- sql语句中开窗函数的使用
开窗函数主要分为2类: 1.排序开窗函数: rank() over(partition by xxx order by yyy) //各分区按照yyy字段排序,如果yyy字段值一样,则rank值一样, ...
- python发送信息到邮箱
import smtplib from email.mime.text import MIMEText 设置服务器所需信息 163邮箱服务器地址 mail_host = 'smtp.163.com' ...