开发者社区> 史迪奇2号> 正文

在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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18661 0
如何在WindowsPhone Bing Map控件中显示必应中国中文地图、谷歌中国中文地图。
原文:如何在WindowsPhone Bing Map控件中显示必应中国中文地图、谷歌中国中文地图。 最近正好有点业余时间,所以在做做各种地图。Bing Map控件本身就能显示必应地图,但是很遗憾微软在Bing Map控件中只提供两种地图模式:全球道路地图RoadMode、全球卫星地图AerialMode,卫星地图对咱们这些个凡人是没啥用的,全球道路地图又不显示天朝地图,因为咱们伟大的天朝政府要求在天朝内发布的地图都要加上随机偏移量才能发布。
1103 0
英特尔硬件加速管理器HAXM安装使用指南
英特尔硬件加速管理器HAXM安装使用指南 Dawei Cheng 程大伟... 于 星期一, 02/04/2012 - 21:23 提交 预备知识 Intel® HAXM需要预先安装Android SDK(version 17 or higher).
2771 0
862
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载