天道酬勤

博观而约取,厚积而薄发!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MapXtreme开发经验分享——添加自定义工具【转】

Posted on 2010-04-30 13:28  Happy Coding  阅读(704)  评论(0编辑  收藏  举报

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也同理。