随着对AutoCAD Map 3D开发技术感兴趣的人越来越多,从这篇文章开始,我将以一个小型项目为例,从设计到实现,一步一步的记录一个Map 3D项目的开发过程。如果你对AutoCAD Map 3D二次开发技术感兴趣,欢迎加入这个项目一起学习研究。 这个项目的名字就叫做 Map Resource Explorer,现在已经作为一个开源项目发布在Google Code上,你可以随时查看其源码和进展情况,更欢迎你和我一起参与开发实战。
背景介绍:
AutoCAD Map 3D是构建在AutoCAD基础之上的地理信息平台软件,它除了包含了AutoCAD的全部功能,还有丰富的面向地理信息领域的专用工具和功能。Map 3D通过FDO(Feature Data Object)技术直接访问市面上绝大多数的GIS数据格式(包括SDF, SHP, MySQL,Oracle , SQL Server Spatial等),从而避免格式转换,数据冗余,数据多版本维护等麻烦事。
这些数据连接信息、图层等在Map 3D中都以资源的形势存在,他们其实是可以用XML形势表示的。在Map 3D开发调试过程中,我们经常需要检查这些资源的XML是否正确,而现在有没有这样一个工具可以让我们方便的查看Map 3D中资源的情况。这就是这个项目设计的初衷。目标就是设计一个插件,能够遍历浏览Map 3D所有资源及其资源的XML表示。
AutoCAD Map 3D基于AutoCAD构建,因而 AutoCAD的相关API在Map 3D上都能正常运行,而我们对Map 3D进行二次开发,也必然会用到AutoCAD.net API来创建界面等工作; Map 3D 提供的Geospatial Platform API,这是一组基于.net的API,和MapGuide API好多方法属性的用法都是一样的,如果你熟悉MapGuide的开发,就能很快的开始Map 3D的开发。反之亦然,通过这个项目你了解了Map 3D的开发之后,再做MapGuide开发也会有帮助。
工具准备:
工欲善其事,必先利其器。开始工作之前首先把必要的工具准备好。
1. AutoCAD Map 3D 2011或者Civil 3D 2011, 这是必然的,ADN用户可以从ADN网站下载,非ADN用户可以到Autodesk网站申请试用版http://usa.autodesk.com/adsk/servlet/pc/index?siteID=123112&id=13842112
2. Visual Studio 2008 SP1
3. TortoriseSVN,我把这个项目的源码放在GoogleCode上,如果你有兴趣共同学习,你需要TortoiseSVN(http://tortoisesvn.net/downloads)。
4 AnkhSVN,这个工具可以把SVN和Visual Studio界面结合起来,版本控制更方便,下载地址(http://ankhsvn.open.collab.net/)。
开始工作:
这个小工具将作为Map 3D的一个插件运行。我们第一步就是在Visual Studio里创建一个Class Library的项目:
添加AutoCAD及Map 3D相关引用,并把Copy Local属性设置为False,这些程序集都在Map 3D的安装目录下:
AutoCAD.NET相关的程序集:
acmgd.dll
acdbmgd.dll
Map 3D相关程序集:
Autodesk.Map.Platform.dll
Autodesk.Map.Platform.Core.dll
Autodesk.Map.Platform.Utils.dll;
Autodesk.Gis.Map.Shared.dll;
OSGeo.MapGuide.Foundation.dll
OSGeo.MaoGuide.PlatformBase.dll
把原先的Class1.cs 删除,新建一个名字比较友好的类Command.cs, 我们先写个简单的CmdList命令,这个命令的功能非常简单,就是在命令行上打印出可用的命令:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using MapResourceExplorer.UI; using Autodesk.Gis.Map.Platform.Utils; using MapResourceExplorer.Model; namespace MapResourceExplorer { public class Commands { [CommandMethod("CmdList")] public void CmdListCommand() { Util.PrintLn("PROMPT: MapResourceExplore commands:"); Util.PrintLn("\nResourceExplorer"); Util.PrintLn("\nRegisterEvents"); } } }
好了,今天先到这儿,下一篇讲怎么运行和调试。
源代码:
我现在已经写了一部分,源码上传到了Google Code,http://code.google.com/p/map-resource-explorer/, 如果你感兴趣可以下载查看。如果你有兴趣加入共同学习那更好了,你可以给我写信把你的gmail账号告诉我。发信到duchangyu#gmail.com(#替换成@)
Cheers,
峻祁连