MapXtreme的自带帮助的查找功能不好,不支持中文,网上的例子也比较少。把自己解决的几个问题拿出来与大家共享,希望有帮助!
开发环境:VB.NET 2008 + MapXtreme2008
1、添加自定义工具
没有使用mapxteme 提供的ToolBar控件,自己定制可交互的工具添加到自己的写的框架上,例子为管线剖面图工具,需要先在地图上绘制一条线,然后通过计算和这条线相交的所有管线的剖面信息,将剖面图绘制到弹出的对话框上。
1) 声明工具
Private m_SectionTool As MapInfo.Tools.MapTool
2) 添加工具
Dim insertionLayerFilter As IMapLayerFilter = MapLayerFilterFactory.FilterByLayerType(LayerType.Normal)
' Set the default style for the new objects (red fill with blue border).
Dim style As MapInfo.Styles.CompositeStyle = New MapInfo.Styles.CompositeStyle()
Dim addMapToolProperties As MapInfo.Tools.AddMapToolProperties = New MapInfo.Tools.AddMapToolProperties( _
MapLayerFilterFactory.FilterForTools(MapControl1.Map, insertionLayerFilter, _
MapLayerFilterFactory.FilterVisibleLayers(True), _
"CustomPolygonAddMapToolProperties", Nothing), style)
' Create an Add polygon tool with non-default properties.
m_SectionTool = New MapInfo.Tools.CustomLineMapTool(True, True, True, _
MapControl1.Viewer, MapControl1.Handle.ToInt32(), MapControl1.Tools, _
MapControl1.Tools.MouseToolProperties, MapControl1.Tools.MapToolProperties)
' Add it to the MapTools collection.
MapControl1.Tools.Add("SectionTool", m_SectionTool)
3) 注册工具事件
Public Sub New()
AddHandler MapControl1.Tools.Used, AddressOf ToolUsed '工具事件
End Sub
4)响应工具消息
Public Sub ToolUsed(ByVal sender As Object, ByVal e As MapInfo.Tools.ToolUsedEventArgs)
Select Case e.ToolName
Case "SectionTool" '断面工具
End Select
End Sub
5)发现一个例外:自定义工具使用 AddPointMapTool 不能触发used事件。
解决方法:可以使用CustomPointMapTool 代替,AddPolylineMapTool也同理。