Autodesk Map在VB.NET中的二次开发(1:入门)

原创 2007年10月14日 21:50:00
近日为了简化工作,用Autodesk map 3D 2005做了个小程序,放上来分享一下,不足之处望高手指正.
为了方便没装CAD的朋友,先放一个CAD_Object_Mode,更为详细的就暂且不放了.
CAD版本:Autodesk map 3d 2005
开发环境:vb.net 2005
Autodesk_Object_Mode
 简要说明:
Application:AutoCAD 应用程序实例
Documents: 在当前进程中所有打开的AutoCAD图形的集合,可打开\添加\关闭图形文件
Document:这个当然是CAD中的图形了
ModelSpac:该集合表示了所有模型空间的对象。在模型空间中添加新的对象用下表中的 Add* 方法
首先:在VB.NET中连接CAD,为了方便暂不对同时打开多个文档的情况进行处理,如果想要新建环境或文档可使用NEW或Application.Documents 中的ADD/OPEN等.
    Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
    
Dim AcadDoc As Autodesk.AutoCAD.Interop.AcadDocument
    
Dim AcadMap As AutocadMAP.AcadMap

Try '连接AutoCAD Map 3D 2005,如果错误则退出
            AcadApp = GetObject(, "AutoCAD.Application")
            AcadMap 
= AcadApp.GetInterfaceObject("AutoCADMap.Application")
        
Catch '如果连接失败则提示,并退出过程
            MessageBox.Show("与Autodesk Map 3D 2005连接失败,关于此错误的详细信息请与管理员系统""系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
            
Exit Sub
        
Finally
    
'自已定义处理代码
        End Try

        
'检查CAD中图形文件数量,并激活
        Dim MapDocNuber As Integer 'CAD当前工作环境中打开的文档数量
        MapDocNuber = AcadApp.Documents.Count
        
Select Case MapDocNuber
            
Case 1
                AcadDoc 
= AcadApp.ActiveDocument '激活当前文档
            Case 0
                MessageBox.Show(
"当前CAD中未打开文档,请重置工作环境""系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
             '自定义处理过程
            Case Is > 1
                MessageBox.Show(
"当前CAD中打开了多个文档,请重置工作环境""系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
               '自定义处理过程
        End Select
通过以上过程即可连接到Autodesk map 3d 2005.
由于是本程序是为了简化大批量数据处理,对于利用二次开发进行绘图也就不进行深入讨论了,其实要进行绘图等操作每个对象都有如add/move/copy/delete等方法很简单,不同类型的对象基本上都差不多,只是需要指定的属性不同而已.
即然这个程序主要是用于数据处理,那么就一定会用到历遍ModelSpac.
方式有以下两种
一:迭代循环(比较推荐用这个)
For Each MspaceObj In AcadDoc.ModelSpace
  MspaceObj .要获取的属性
  '自定义其它的处理代码
Next
二:循环每个对象(这个改改就能用到别处:比如做个迷你设计中心获取块名呀图层呀等等.我用这个循环来获取THICKNESS值居然出现的数组,希望高手给予指教)
for i = 0  to AcadDoc.ModelSpace.count - 1 'AcadDoc.ModelSpace.count为当前图形中对象的个数
 
Acadobj.AcadDoc.ModelSpace.Item(i).要获取的属性
 
'自定义其它的处理代码
next
由于CAD中不同对象的属性不太相同(具体的帮助里有就不多说了),可使用Select Case 语句来处理,但一定要注意对象类型是分大小写的,写错了可不行(我做时不就小心写错了一个,郁闷了好久才找到问题)
 Select Case EntType
                
Case "AcDbText""AcDbPoint""AcDbPolyline""AcDbLine" 
          EntThickness 
= MspaceObj.thickness
                   ......
                
Case "AcDbBlockReference"
                    EntBlkName 
= MspaceObj.Name
                    ......
                
Case Else
     ......     
End Select
这个是常见的CAD对象类型,当然这个不全,还有很多呢 .(CAD帮助中有详细的).
1 AcDbText             文字
 2 AcDbPoint            点
 3 AcDbPolyline         多段线
 4 AcDbLine             线
 5 AcDbBlockReference   块
 6 AcDb2dPolyline       2D多段线
 7 AeccDbRoadwayState   
 8 AcadCircle           圆
 9 AcadEllipse          椭圆
 10 AcadHatch            
 11 AcadMInsertBlock     插入块
 12 AcadMtext            多行文字
 13 AcadArc              弧
利用以上循环可获取或改变特定对象的属性,如果改变属性的话最好用一下UPDATA(帮助里说的,反正我没用也能改.)
如果不需要太多的功能,后面放个数据库来获取数据或设定条件指赋值,这些基本上也就足够了
有点困了,明天还要上班,关于MAP方面的开发如附加OD表什么的下回再写吧.(个人感觉除了附加OD表,其它的用处不大,Autodesk map做已经很好了)
最后放一个成果图吧,没学会编程第一次做,做的不好见笑了.
实用工具

VB.NET不使用API加载Google Map示例

  • 2012年08月27日 23:12
  • 31KB
  • 下载

vb与CAD连接

  • 2014年04月01日 18:56
  • 29KB
  • 下载

VB 连接AutoCad 模块代码

Option Explicit Public acadapp As AcadApplication Public Sub 连接autocad() On Error Resume Next Set a...
  • u013511642
  • u013511642
  • 2015年10月06日 23:24
  • 1023

VB.net数据库编程(01):简单的入门实例--连接到Access文件

先来一个简单的实例。 VB.net 2012 SQl server 2012 Access文件:http://download.csdn.net/detail/dzweather...
  • u014366427
  • u014366427
  • 2014年03月26日 11:08
  • 1468

VB.net数据库编程(08):ADO.net数据访问接口

编程语言与数据库的连接是通过一个接口,达到两者交流,以便两者谈情说爱。 一、接口种类:6种:         1、ODBC,面向C/C++。         2、DAO,   面向VB,操作AC...
  • dzweather
  • dzweather
  • 2013年02月02日 20:18
  • 19917

VB.NET与VB6.0的区别

VB.NET的视频已经看完了,虽说是VB.NET视频,但是大部分讲的是.NET平台。其实VB.NET就是VB6.0与C#的结合体,VB6.0的语法加上C#的思想。         一、整体  ...
  • u013034286
  • u013034286
  • 2015年02月11日 16:58
  • 1110

vb.net数据库编程(02):再来一个非查询的简单例子

这次是一个留言薄程序,就是把客人的留言“放入”数据库中。 首先我们要建立一个一个留言薄的Access文件,文件名:lyb.mdb (2012版为lyb.accdb) 其中表名为l...
  • u014366427
  • u014366427
  • 2014年03月26日 11:09
  • 612

VB.Net中Socket异步编程的实例

Imports System Imports System.Net Imports System.Net.Sockets Imports System.Text Imports System.Thre...
  • Seal203
  • Seal203
  • 2015年06月09日 07:07
  • 2839

用vb.net开发的简易(通用)上位机

这里写的是上位机基本的程序,有什么额外功能的话可以自己加上。我是参与别人项目里做的,主要实现了自动检测,断点重连,发送检测消息。因为要实时使用,所以要最大程度的避免程序崩溃,因此程序里使用了比较多的t...
  • fengasdfgh
  • fengasdfgh
  • 2017年08月04日 01:22
  • 501

VB.NET关于Socket分包发送的原理分析

关于Socket编程,我之前一直处于小数据传输的阶段,就像什么多人聊天之类的,这几天项目碰到了要做在线更新,就想着肯定要静静的写一个非文字信息传输的Socket程序   难点在于: 1、Socket编...
  • lj1995091
  • lj1995091
  • 2016年01月19日 15:39
  • 1315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Autodesk Map在VB.NET中的二次开发(1:入门)
举报原因:
原因补充:

(最多只允许输入30个字)