找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3349|回复: 5

[分享] dotnet开发AutoCAD入门

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2015-7-11 13:44:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
dotnet开发AutoCAD入门

从AutoCAD 2006开始引入dotnet的二次开发。在dotnet API出来之前,AutoCAD主要使用Lisp, VBA和ObjectArx进行二次开发。VBA和LISP虽然简单,但效率奇差,并且由于微软对VB的抛弃,VBA也最终会随之淡出,ObjectArx虽然强大,且效率很好,但C++语言较复杂,难于掌握,从而让很多非计算机科班出身的工程技术人员望而却步。Dotnet API出现填补了这一空白,利用微软近年来大力推广的dotnet平台进行二次开发,既容易上手,效率也远远高于Lisp和VBA,实际应用中不会比C++的ObjectArx逊色。并且也不需要另外下载object arx安装包,直接使用autcad目录下的几个dll就可完成,环境配置非常简单。但由于出来时间不久,目前dotnet进行CAD二次开发的资料并不多,有一个Object Arx编程站(http://www.objectarx.net/),有相关的版块,可以去看看。下面详细介绍一下如何开始使用dotnet开发CAD。
用VS2005或2008新建一个类库项目,语言可以是C#或VB,目录随便选。然后在引用上面右键->添加,点浏览选项卡,找到autcad安装目录,选中acdbmgd.dll和acmgd.dll,确定。在要用到AutoCAD类库的地方,添加以下程序集的引用:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
给类添加一个成员函数,并在成员函数前面加上导出命令的代码,这样该函数就可以直接在CAD的命令行中调用。
  [CommandMethod("Hellonet")]
        public void helloNet()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("hello net");
        }
然后就可以编译了。编译后生成一个dll,在debug目录下。在cad命令行里输入netload,选中刚刚生成的dll,就把这个dll加载进来了。现在就可以直接调用已经导出为命令的函数了,比如在命令行中输入Hellonet,也就是刚才我们写的一个简单的命令,CAD会在命令行中输出“hello net”。
实际开发中,我们需要进行调试,只要把acad.exe设为调试的外部执行程序就可以了。在工程属性面板里选择“调试”选项,在启动外部程序上选择autocad的可执行文件,同时设置工程目录为安装目录下面的UserDataCache(隐藏的)文件夹,如下图所示:
设置之后,就可以直接像调试一般程序那样,直接点击调试按钮,autocad会自动启动。然后用netload加载dll并调用命令,如果遇到断点,VS2005会停在断点的地方。
有两个地方要注意一下:
1.       如果某个类中有导出为命令的函数,一定要把类声明为public的。这样才能在cad里调用。否则会出现找不到命令。
2.       如果出现“检测到LoaderLock,正试图在OS加载程序锁内执行托管代码,不要尝试在DllMain或映像初始化函数内运行托管代码,这样会导致应用程序挂起。”的异常,可以不必理会,点运行,让它继续。当然也可以把这个异常去掉,方法是:
在"Debug(调试)"菜单下----"Exceptions(异常)"----"Managed Debugging Assistants"中勾掉"LoaderLock"。这个东西在调试时太麻烦,每次都要点,不要也罢。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3198个

财富等级: 富可敌国

发表于 2015-7-11 16:05:51 | 显示全部楼层
N 版,好久没出来冒泡了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-7-12 08:21:44 | 显示全部楼层
一直使用 ObjectARX Wizards  For .Net ,这个挺方便的,引用、环境设置、初始化部分代码都直接生成了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-7-12 15:45:49 | 显示全部楼层
其实佷多人的CAD二次开发都是很简单要求,用VS.net来开发反而有点得不偿失了。很多CAD使用者本业并不是编程,用VB开发是简单易行的解决方案。我最近看了一些.net的资料,感觉和vb就不是一个语言了。什么面对对象,继承,接口,委托,反射,lamda,LINQ……崩溃中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2015-7-12 20:35:36 来自手机 | 显示全部楼层
多学有益   
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-8-21 23:31:02 | 显示全部楼层
学习一下~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 16:21 , Processed in 0.173258 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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