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

来源:互联网 发布:dx10 for windows xp 编辑:程序博客网 时间:2024/05/16 13:50
近日为了简化工作,用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做已经很好了)
最后放一个成果图吧,没学会编程第一次做,做的不好见笑了.
实用工具