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
简要说明:
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)
'自定义处理过程
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)
'自定义处理过程
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
MspaceObj .要获取的属性
'自定义其它的处理代码
Next
二:循环每个对象(这个改改就能用到别处:比如做个迷你设计中心获取块名呀图层呀等等.我用这个循环来获取THICKNESS值居然出现的数组,希望高手给予指教)
for i = 0 to AcadDoc.ModelSpace.count - 1 'AcadDoc.ModelSpace.count为当前图形中对象的个数
Acadobj.AcadDoc.ModelSpace.Item(i).要获取的属性
'自定义其它的处理代码
next
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
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 弧
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做已经很好了)
最后放一个成果图吧,没学会编程第一次做,做的不好见笑了.
- Autodesk Map在VB.NET中的二次开发(1:入门)
- Autodesk官方最新的.NET教程(三)(vb.net版)
- Autodesk官方最新的.NET教程(四)(vb.net版)
- Autodesk官方最新的.NET教程(五)(vb.net版)
- Autodesk官方最新的.NET教程(六)(vb.net版)
- Autodesk官方最新的.NET教程(七)(vb.net版)
- Autodesk官方最新的.NET教程(二)(VB.NET版)
- Autodesk官方最新的.NET教程(一)(vb.net版)
- Autodesk官方最新的.NET教程(二)(vb.net版)
- .NET cad 二次开发入门
- Autodesk 产品二次开发技术研讨会
- vb.net学习入门1
- VB.NET入门(一)
- VB.NET入门(二)
- ADO在vb.net中的使用(与datagrid结合)
- ADO在vb.net中的使用(与datagrid结合)
- AjaxPro 在vb.net 中的用法(一)
- log4net在vb.net中的应用(测试成功)
- 滚动天气预报
- 深入Struts2
- 我们应该追求什么?
- UG二次开发之ug/open++类库
- 别人的经验
- Autodesk Map在VB.NET中的二次开发(1:入门)
- ASP读取表的字段名称及字段数目
- vc6.0下简单使用CTreeCtrl (转自http://www.cnblogs.com/sunnyjones/)
- Oracle真的要收购BEA了--这次解雇的会是哪个团队
- Struts2拦截器
- 字符串hash算法比较
- 约瑟夫环
- 缓存技术详谈—PHP缓存技术
- 在MFC中应用CTreeCtrl控件的技巧(http://www.sqlsky.com/vc/070802/20055/)