ArcEngine 测量docxWord下载.docx
- 文档编号:8593651
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:14
- 大小:36.94KB
ArcEngine 测量docxWord下载.docx
《ArcEngine 测量docxWord下载.docx》由会员分享,可在线阅读,更多相关《ArcEngine 测量docxWord下载.docx(14页珍藏版)》请在冰点文库上搜索。
//===================================================================
using
System;
System.Drawing;
System.Runtime.InteropServices;
ESRI.ArcGIS.ADF.BaseClasses;
ESRI.ArcGIS.ADF.CATIDs;
ESRI.ArcGIS.Controls;
ESRI.ArcGIS.Carto;
ESRI.ArcGIS.Geodatabase;
ESRI.ArcGIS.Display;
ESRI.ArcGIS.Geometry;
System.Windows.Forms;
namespace
MhGis.GisTool.Pb_Toolbar
{
class
TrackLine
:
BaseTool
private
IHookHelper
m_hookHelper
=
null;
INewLineFeedback
m_NewLineFeedback
IPointCollection
m_ptColl;
//记录节点
MeasureMsgInfo
_MsgInfo
IPolyline
m_TraceLine
//完整的轨迹线
//
IGroupElement
m_Elements
//用于保存包含此功能产生的所有Element
m_TraceElement
//测距轨迹线
m_VertexElement
//结点
m_LabelElement
距离标记
public
TrackLine()
TODO:
Define
values
for
the
properties
base.m_category
"
;
//localizable
text
base.m_caption
base.m_message
This
should
work
in
ArcMap/MapControl/PageLayoutControl"
text
base.m_toolTip
base.m_name
//unique
id,
non-localizable
(e.g.
MyCategory_MyTool"
)
try
change
resource
name
if
necessary
string
bitmapResourceName
GetType().Name
+
.bmp"
base.m_bitmap
new
Bitmap(GetType(),
bitmapResourceName);
base.m_cursor
System.Windows.Forms.Cursor(GetType(),
.cur"
);
}
catch
(Exception
ex)
System.Diagnostics.Trace.WriteLine(ex.Message,
Invalid
Bitmap"
MsgInfo
set
value;
_MsgInfo.FormClosing
+=
FormClosingEventHandler(msgInfo_FromClosing);
#region
Overriden
Class
Methods
///
<
summary>
Occurs
when
this
tool
is
created
/summary>
param
name="
hook"
>
Instance
of
application<
/param>
override
void
OnCreate(object
hook)
HookHelperClass();
m_hookHelper.Hook
hook;
(m_hookHelper.ActiveView
==
null)
catch
(m_hookHelper
base.m_enabled
false;
else
true;
Add
other
initialization
code
Init()
//初始化
GroupElementClass();
//初始化,并添加到GraphicsContainer
IGraphicsContainer
g
m_hookHelper.ActiveView
as
IGraphicsContainer;
g.AddElement(m_Elements
IElement,
0);
g.AddElement(m_TraceElement
g.AddElement(m_VertexElement
g.AddElement(m_LabelElement
//添加到m_Elements中
g.MoveElementToGroup(m_VertexElement
m_Elements);
g.MoveElementToGroup(m_LabelElement
g.MoveElementToGroup(m_TraceElement
clicked
OnClick()
Init();
msgInfo_FromClosing(object
sender,
FormClosingEventArgs
e)
DeleteAllElements();
//throw
Exception("
The
method
or
operation
not
implemented."
OnMouseDown(int
Button,
int
Shift,
X,
Y)
(Button
2)
return;
IPoint
pt
m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,
Y);
m_hookHelper.ActiveView.GraphicsContainer;
IEnvelope
pEnvBounds
//获取上一次轨迹线的范围,以便确定刷新范围
(m_TraceLine
!
m_TraceLine.QueryEnvelope(pEnvBounds);
pEnvBounds.Expand(4,
4,
true);
//矩形框向四周扩大4倍(大于2倍就行),目的是为了保证有充足的刷新区域
m_hookHelper.ActiveView.Extent;
启动画线
(m_NewLineFeedback
//移除element
RemoveElements();
//刷新
m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,
null,
null);
Application.DoEvents();
NewLineFeedbackClass();
m_NewLineFeedback.Display
m_hookHelper.ActiveView.ScreenDisplay;
//必须先得到symbol,后设置symbol
ISimpleLineSymbol
simpleLineSymbol
m_NewLineFeedback.Symbol
ISimpleLineSymbol;
simpleLineSymbol.Style
esriSimpleLineStyle.esriSLSDot;
simpleLineSymbol.Width
1;
simpleLineSymbol.Color
TransColorToAEColor(Color.Blue);
m_NewLineFeedback.Start(pt);
m_NewLineFeedback.AddPoint(pt);
(m_ptColl
m_ptColl
PolylineClass();
object
obj
Type.Missing;
m_ptColl.AddPoint(pt,
ref
obj,
obj);
#endregion
绘制结点
IElement
vertexElement
CreateElement(pt);
//g.AddElement(vertexElement,
//g.MoveElementToGroup(vertexElement,
m_VertexElement);
m_VertexElement.AddElement(vertexElement);
vertexElement,
pEnvBounds);
{
(m_ptColl.PointCount
fromPt
m_ptColl.get_Point(m_ptColl.PointCount
-
2);
//倒数第二个点
toPt
1);
//最后第一个点
ILine
line
LineClass();
line.PutCoords(fromPt,
toPt);
绘制轨迹线
missing
ISegmentCollection
segColl
segColl.AddSegment(line
ISegment,
missing,
missing);
traceElement
CreateElement(segColl
IPolyline);
//g.AddElement(traceElement,
//g.MoveElementToGroup(traceElement,
m_TraceElement);
m_TraceElement.AddElement(traceElement);
traceElement,
计算单线的长度,并将结果显示在单线中点偏上上面
double
angle
line.Angle;
((angle
(Math.PI
/
2)
&
(Math.PI))
||
(angle
-Math.PI
-(Math.PI
2)))
大于90度小于等于180
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcEngine 测量docx 测量 docx