Autocad2005编程指南(1)用VB.net编写Arx程序
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),加入以下:
<P class=list_text>Imports Autodesk.AutoCAD.ApplicationServices
<P class=list_text>Imports Autodesk.AutoCAD.DatabaseServices
<P class=list_text_end>Imports Autodesk.AutoCAD.Runtime
(step 4)注册命令
在class1类内部,写入
<PRE class=prog_in_0><CommandMethod("test")> _</PRE><PRE class=prog_in_0>Public Shared Sub MytestCmd()</PRE><PRE class=prog_in_0>msgbox "hello wold"</PRE><PRE class=prog_in_end_0>End Sub</PRE><PRE class=prog_in_end_0> </PRE><PRE class=prog_in_end_0>(step5) 编译</PRE><PRE class=prog_in_end_0>(step6)在AutoCAD中,用netload加载你刚刚编译成的dll文件</PRE><PRE class=prog_in_end_0>(step7)在AutoCAD命令行中键入"test"回车</PRE><PRE class=prog_in_end_0>(完)</PRE> 现在来谈些虚的东西
(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的映射关系
<TABLE class=BasicLeft cellSpacing=0 rules=cols>
<TBODY>
<TR class=row_1>
<TD class=BasicRight_CELL>
<P class=table_body>AcDb
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.DatabaseServices
</TD></TR>
<TR class=row_2>
<TD class=BasicRight_CELL>
<P class=table_body>AcRx
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.Runtime
</TD></TR>
<TR class=row_1>
<TD class=BasicRight_CELL>
<P class=table_body>AcEd
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.ApplicationServices
</TD></TR>
<TR class=row_2>
<TD class=BasicRight_CELL>
<P class=table_body>AcUt
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.DatabaseServices, Autodesk.AutoCAD.ApplicationServices
</TD></TR>
<TR class=row_1>
<TD class=BasicRight_CELL>
<P class=table_body>AcCm
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.Colors
</TD></TR>
<TR class=row_2>
<TD class=BasicRight_CELL>
<P class=table_body>AcGe
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.Geometry
</TD></TR>
<TR class=row_1>
<TD class=BasicRight_CELL>
<P class=table_body>AcGi
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.GraphicsInterface
</TD></TR>
<TR class=row_2>
<TD class=BasicRight_CELL>
<P class=table_body>AcLy
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.LayerManager
</TD></TR>
<TR class=row_1>
<TD class=BasicRight_CELL>
<P class=table_body>AcPl
</TD>
<TD class=BasicRight_CELL>
<P class=table_body>Autodesk.AutoCAD.PlottingServices
</TD></TR></TBODY></TABLE>
(4)二者的不同之处有多个方面,我们在这里介绍全局函数和反应器. 在managed wrapper中没有全局函数了,那这样是不是很不爽?不用担心,原来的objectarx中的全局函数,被打包到一些新的类里边,成了这些类的方法或属性.
而反应器则被events替代了.这样更加简单了.
(5)注册命令时的注意事项
在上例中,我们使用了Public Shared Sub MytestCmd().这个Shared关键字,表明这个命令是static的,而不是instance的.
所谓instance的命令,也就是说,如果你open了3个dwg文件,那么你所注册的命令将会有3个copy,每个文档都有自己的copy,这样就不会发生变量冲突了. 好文章啊,但是用VB写的ARX和OBJECTARX在本质上有什么区别吗? 本帖最后由 作者 于 2004-3-30 22:22:48 编辑
这VB不是VB6,是VB。NET吧!
希望尽快看到(2)、(3)……
哦,不好意思。没仔细看标题,已说是VB。NET了! 現在AUTOCAD2005已出來了麼! 这种VB。NET开发的ARX程序能否自定义实体,如画一抛物线(y=x*x) 本帖最后由 作者 于 2004-4-1 12:05:09 编辑 <br /><br /> 以前的objectarx与wrapper classes本质上没有多大的区别,你看看上面的映射关系就知道.
<FONT color=#a25e87>不可以自定义实体;</FONT>
2005正式版出来有一段时间了,官方有没有正式发布则不太清楚.
大家可以放心去往C#.net和vb.net方面发展,因为这是微软和autodesk所致力的方向,肯定不会吃亏的.
按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003 goldenshin发表于2004-3-31 8:56:00static/image/common/back.gif按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003
...
我装的是NET2003,您的程序也能正常运行.
是不是还有别的什么问题?
请您推荐一本这方面的教科书.先谢谢了!
Autocad2005编程指南(1)用VB.net编写Arx程序
他们不推荐使用2003,可能是因为他们的工作(包括autoCAD2005本身)都是用.net2002做的.我常常用.net2002开发R14的程序,好象没什么问题. 依此类推,用.net2003开发2005,也应当不会有很多问题.
在arx的帮助文档中有这个问题的说明.
======================
教科书是没有的,自己研究吧. 不错,但这些内容帮助文件中确实找不到,能不能找到相关的一些文档。
下面这个程序可以命令行中输入“Mccad”,该命令是在命令行中显示“大家好,这里是明经通道” Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Public Class A
<CommandMethod("Mccad")> _
Public Function f()
CommandLinePrompts.Message("大家好,这里是明经通道!")
End Function
End Class