goldenshin 发表于 2004-3-30 09:17:00

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>&lt;CommandMethod("test")&gt; _</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>

goldenshin 发表于 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的映射关系



<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,这样就不会发生变量冲突了.

myfreemind 发表于 2004-3-30 18:23:00

好文章啊,但是用VB写的ARX和OBJECTARX在本质上有什么区别吗?

ahlzl 发表于 2004-3-30 21:10:00

本帖最后由 作者 于 2004-3-30 22:22:48 编辑

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



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



哦,不好意思。没仔细看标题,已说是VB。NET了!

debfn 发表于 2004-3-31 07:51:00

現在AUTOCAD2005已出來了麼!

ahlzl 发表于 2004-3-31 08:37:00

这种VB。NET开发的ARX程序能否自定义实体,如画一抛物线(y=x*x)

goldenshin 发表于 2004-3-31 08:56:00

本帖最后由 作者 于 2004-4-1 12:05:09 编辑 <br /><br /> 以前的objectarx与wrapper classes本质上没有多大的区别,你看看上面的映射关系就知道.



<FONT color=#a25e87>不可以自定义实体;</FONT>


2005正式版出来有一段时间了,官方有没有正式发布则不太清楚.


大家可以放心去往C#.net和vb.net方面发展,因为这是微软和autodesk所致力的方向,肯定不会吃亏的.


按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003

ahlzl 发表于 2004-3-31 09:20:00

goldenshin发表于2004-3-31 8:56:00static/image/common/back.gif按官方的说法,2005的开发还是用.net2002, 不推荐用.net2003

...


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


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


请您推荐一本这方面的教科书.先谢谢了!

goldenshin 发表于 2004-3-31 10:47:00

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

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


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


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


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


教科书是没有的,自己研究吧.

mccad 发表于 2004-3-31 20:46:00

不错,但这些内容帮助文件中确实找不到,能不能找到相关的一些文档。
下面这个程序可以命令行中输入“Mccad”,该命令是在命令行中显示“大家好,这里是明经通道” Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Public Class A
       <CommandMethod("Mccad")> _
       Public Function f()
               CommandLinePrompts.Message("大家好,这里是明经通道!")
       End Function
End Class
页: [1] 2 3 4 5
查看完整版本: Autocad2005编程指南(1)用VB.net编写Arx程序