在Map 3D显示管理器中更改当前地图的名字

简介:


By Daniel Du

当前地图在显示管理器中默认的名字是“Default”,如果你想通过程序更改地图的名字,可以用下面的代码来实现。你需要使用Display Manager API来做。首先获取当前地图的Map ID,进而获得map对象,然后就可以为他的Name属性赋值了。注意这个方法仅适用于map 3D 2012及以前版本,在Map 3D 2013中会抛出eCreateInvalidName错误。

 

下面是完整实现代码:

// (C) Copyright 2012 by Autodesk

//

using System;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.Gis.Map;

using Autodesk.Gis.Map.Project;

using Autodesk.Gis.Map.DisplayManagement;

 

// This line is not mandatory, but improves loading performances

[assemblyCommandClass(typeof(ChangeMapNameInDM.MyCommands))]

 

namespace ChangeMapNameInDM

{

 

  // This class is instantiated by AutoCAD for each document when

  // a command is called by the user the first time in the context

  // of a given document. In other words, non static data in this class

  // is implicitly per-document!

  public class MyCommands

  {

 

    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

    MapApplication app = HostMapApplicationServices.Application;

 

    [Autodesk.AutoCAD.Runtime.CommandMethodAttribute("CHGMAPNAME")]

    public void ChangeMapName()

    {

      try

      {

        string mapName = null;

        PromptResult stringPromptResult = null;

        bool succeeded = false;

        stringPromptResult = ed.GetString("\nEnter the new Map name:");

 

        mapName = stringPromptResult.StringResult.Trim();

        if (stringPromptResult.Status == PromptStatus.OK

                          && mapName.Length > 0)

        {

          succeeded = changeMapName(mapName);

        }

        else

        {

          ed.WriteMessage("\nERROR: Invalid Map name");

        }

 

        if (!succeeded)

        {

          ed.WriteMessage("\nERROR: Name change failure");

        }

      }

      catch (System.Exception err)

      {

        ed.WriteMessage(err.Message);

      }

    }

 

 

    private bool FindCurrentMapId(ref ObjectId currentMapId)

    {

      bool isFound = false;

      // Get the project associated with the current AutoCAD document

      ProjectModel project = null;

      Autodesk.AutoCAD.DatabaseServices.TransactionManager TM

        = app.ActiveProject.Database.TransactionManager;

      project = app.ActiveProject;

 

      try

      {

        using (Transaction trans = TM.StartTransaction())

        {

          ObjectId managerId = DisplayManager.Create(project)

                              .MapManagerId(project, true);

          MapManager manager = trans.GetObject(managerId, OpenMode.ForRead)

                              as MapManager;

          if (null != manager)

          {

            currentMapId = manager.CurrentMapId;

            isFound = true;

          }

          trans.Commit();

        }

      }

      catch (Autodesk.AutoCAD.Runtime.Exception)

      {

        ed.WriteMessage("\nUnable to get the current Map's Object ID.");

      }

 

      return isFound;

    }

 

    public bool changeMapName(string name)

    {

      // Get the Object Id for the current Map

      ObjectId currentMapId = new ObjectId();

      string message = "";

      Autodesk.AutoCAD.DatabaseServices.TransactionManager TM

        = app.ActiveProject.Database.TransactionManager;

 

      if (!FindCurrentMapId(ref currentMapId))

      {

        return false;

      }

 

 

      try

      {

        using (Transaction trans = TM.StartTransaction())

        {

          Map currentMap = (Map)trans.GetObject(currentMapId, OpenMode.ForWrite);

          // Change the name

          currentMap.Name = name;

 

          trans.Commit();

        }

 

      }

      catch (Autodesk.AutoCAD.Runtime.Exception ex)

      {

        message = string.Format("\nUnable to change name, msg:{0}",

                                ex.Message);

        ed.WriteMessage(message);

      }

 

      return true;

    }

  }

}

 

作者: 峻祁连
邮箱:junqilian@163.com 
出处: http://junqilian.cnblogs.com 
转载请保留此信息。




本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2012/08/13/2636165.html ,如需转载请自行联系原作者
相关文章
|
定位技术
97Echarts - 地理坐标/地图(Draw Polygon on Map)
97Echarts - 地理坐标/地图(Draw Polygon on Map)
61 0
|
定位技术
95Echarts - 地理坐标/地图(Binning on Map)
95Echarts - 地理坐标/地图(Binning on Map)
37 0
|
4月前
|
定位技术
vue-baidu-map 自定义地图主题
vue-baidu-map 自定义地图主题
204 0
|
6月前
|
前端开发 定位技术 API
|
JavaScript 数据可视化 前端开发
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
267 1
|
移动开发 小程序 JavaScript
微信小程序学习实录5(H5嵌入小程序、map组件、地图调起功能、腾讯百度高德导航页、返回web-view页)
微信小程序学习实录5(H5嵌入小程序、map组件、地图调起功能、腾讯百度高德导航页、返回web-view页)
564 0
|
6月前
|
移动开发 定位技术
uniapp组件map地图组件使用
uniapp组件map地图组件使用
361 0
|
6月前
|
定位技术 Python
Python的pyecharts安装,导入map、geo模块,画地图
Python的pyecharts安装,导入map、geo模块,画地图
164 1
|
6月前
|
定位技术 Python
pyecharts从入门到精通-地图专题Map-带时间轴与网格的复杂绘图
pyecharts从入门到精通-地图专题Map-带时间轴与网格的复杂绘图
|
6月前
|
小程序 JavaScript 定位技术
微信小程序地图控件Map的使用
微信小程序地图控件Map的使用
166 0
下一篇
无影云桌面