明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 17666|回复: 44

Autocad2005编程指南(1)用VB.net编写Arx程序

  [复制链接]
发表于 2004-3-30 09:17:00 | 显示全部楼层 |阅读模式
Arx功能强大而VB.net是简单易用且丰富多彩,过去常常梦想(不是我个人的梦想,而是所有爱好者的梦想)二者合一. 此梦终于成真. 按惯例,我们来编写一个简单程序,使得在AutoCAD中运行"test"这个命令时,弹出对话框显示"hello wold". 弹出对话框当然用一句msgbox "hello word". 我们要介绍的是如何新建一个工程并注册一个命令. (step.1)在Visual Studio .NET中建立一个VB工程,选用类库(classlibrary), (step2)增加引用(reference), 找到autocad下的以下两个文件加入之 acdbmgd.dll acmgd.dll. (step 3) 在你的主class中(本次没做任何修改,所以是class1),加入以下:

Imports Autodesk.AutoCAD.ApplicationServices

Imports Autodesk.AutoCAD.DatabaseServices

Imports Autodesk.AutoCAD.Runtime (step 4)注册命令 在class1类内部,写入

<CommandMethod("test")> _
Public Shared Sub MytestCmd()
msgbox "hello wold"
End Sub
	
(step5) 编译
(step6)在AutoCAD中,用netload加载你刚刚编译成的dll文件
(step7)在AutoCAD命令行中键入"test"回车
(完)
 楼主| 发表于 2004-3-30 10:29:00 | 显示全部楼层
现在来谈些虚的东西 (1)所谓objectarx,在AutoCAD2005实际分成了两个,一是原来的objectarx库(如各种lib文件),二是所谓的objectarx managed wrapper classes. 后者和前者基本上一样,只是换了个马甲而已.不同之处容后讨论. (2)我们现在讨论的就是objectarx managed wrapper classes,他们存放在acdbmgd.dll 和 acmgd.dll中. 我们可能都明白了"mgd"的意思吧,那就是managed的简写. 关于managed,是个.net的概念,如果对visual.net不太常用,应当先去了解这方面的内容. (3)Objectarx与objectarx managed wrapper classes的映射关系

AcDb

Autodesk.AutoCAD.DatabaseServices

AcRx

Autodesk.AutoCAD.Runtime

AcEd

Autodesk.AutoCAD.ApplicationServices

AcUt

Autodesk.AutoCAD.DatabaseServices, Autodesk.AutoCAD.ApplicationServices

AcCm

Autodesk.AutoCAD.Colors

AcGe

Autodesk.AutoCAD.Geometry

AcGi

Autodesk.AutoCAD.GraphicsInterface

AcLy

Autodesk.AutoCAD.LayerManager

AcPl

Autodesk.AutoCAD.PlottingServices

(4)二者的不同之处有多个方面,我们在这里介绍全局函数和反应器. 在managed wrapper中没有全局函数了,那这样是不是很不爽?不用担心,原来的objectarx中的全局函数,被打包到一些新的类里边,成了这些类的方法或属性. 而反应器则被events替代了.这样更加简单了. (5)注册命令时的注意事项 在上例中,我们使用了Public Shared Sub MytestCmd().这个Shared关键字,表明这个命令是static的,而不是instance的. 所谓instance的命令,也就是说,如果你open了3个dwg文件,那么你所注册的命令将会有3个copy,每个文档都有自己的copy,这样就不会发生变量冲突了.
发表于 2004-3-30 18:23:00 | 显示全部楼层
好文章啊,但是用VB写的ARX和OBJECTARX在本质上有什么区别吗?
发表于 2004-3-30 21:10:00 | 显示全部楼层
本帖最后由 作者 于 2004-3-30 22:22:48 编辑

这VB不是VB6,是VB。NET吧!



希望尽快看到(2)、(3)……



哦,不好意思。没仔细看标题,已说是VB。NET了!
发表于 2004-3-31 07:51:00 | 显示全部楼层
現在AUTOCAD2005已出來了麼!
发表于 2004-3-31 08:37:00 | 显示全部楼层
这种VB。NET开发的ARX程序能否自定义实体,如画一抛物线(y=x*x)
 楼主| 发表于 2004-3-31 08:56:00 | 显示全部楼层
本帖最后由 作者 于 2004-4-1 12:05:09 编辑

以前的objectarx与wrapper classes本质上没有多大的区别,你看看上面的映射关系就知道. 不可以自定义实体; 2005正式版出来有一段时间了,官方有没有正式发布则不太清楚. 大家可以放心去往C#.net和vb.net方面发展,因为这是微软和autodesk所致力的方向,肯定不会吃亏的. 按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003
发表于 2004-3-31 09:20:00 | 显示全部楼层
goldenshin发表于2004-3-31 8:56:00按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003

...


我装的是NET2003,您的程序也能正常运行.


是不是还有别的什么问题?


请您推荐一本这方面的教科书.先谢谢了!
 楼主| 发表于 2004-3-31 10:47:00 | 显示全部楼层

Autocad2005编程指南(1)用VB.net编写Arx程序

他们不推荐使用2003,可能是因为他们的工作(包括autoCAD2005本身)都是用.net2002做的.


我常常用.net2002开发R14的程序,好象没什么问题. 依此类推,用.net2003开发2005,也应当不会有很多问题.


在arx的帮助文档中有这个问题的说明.


======================


教科书是没有的,自己研究吧.
发表于 2004-3-31 20:46:00 | 显示全部楼层
不错,但这些内容帮助文件中确实找不到,能不能找到相关的一些文档。
下面这个程序可以命令行中输入“Mccad”,该命令是在命令行中显示“大家好,这里是明经通道”
  1. Imports Autodesk.AutoCAD.ApplicationServices
  2. Imports Autodesk.AutoCAD.Runtime
  3. Public Class A
  4.        <CommandMethod("Mccad")> _
  5.        Public Function f()
  6.                CommandLinePrompts.Message("大家好,这里是明经通道!")
  7.        End Function
  8. End Class
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:46 , Processed in 0.160476 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表