模具论坛

 找回密码
 注册

扫一扫,微信登录

QQ登录

只需一步,快速开始

搜索
热搜: 冲压 注塑 求助
    回车查看更多
    论坛可能已存在您要发布的主题帖 关闭
      查看: 13509|回复: 19

      AutoCAD二次开发语言及工具介绍

      [复制链接]
      发表于 2006-4-8 00:13:00 | 显示全部楼层 |阅读模式
      AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现,本文做了一些介绍。 <br/><br/>1 AutoLISP <br/><br/>AutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。 <br/><br/>3 ADS <br/><br/>ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。 <br/><br/>4 ObjectARX <br/><br/>ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的Auto CAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARX for AutoCAD 2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(Auto CAD数据库)和AcEd(Auto CAD编译器),另外还有其它的一些重要库组件,如AcRX(Auto CAD实时扩展)、AcGi(Auto CAD图形接口)、AcGe(Auto CAD几何库)、ADSRX(Auto CAD开发系统实时扩展)。ObjectARX 还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。 <br/><br/>5 VisualLISP <br/><br/>VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD 2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于Auto CAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。 <br/><br/>6 VBA <br/><br/>VBA 即Mcrosoft office中的Visual Basic for Applications,它被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。
       楼主| 发表于 2006-4-8 00:15:00 | 显示全部楼层
      笔者在AUTOCAD中编辑大量图形时,发现仅用AUOTCAD本身提供的命令,效率实在太低,故编写系列批量处理程序以提高工作效率、工作质量。 <br/><br/><br/>1.批量修改POLYLINE的线宽(CH_w): <br/>  我们知道编辑一条POLYLINE的线宽可以通过Pedit命令来完成,如果需要编辑多条POLYLINE时还使用Pedit命令则不但需要选择目标,还要输入线宽,实在有点不方便,而且还可能漏选。其实编写个小小的LISP程序便可一次性完成。程序CH_W.LSP如下: <br/><br/>  (DEFUN C:CH_W( / wid ent_ss n_ss ent_n j ent_a) <br/><br/>     (PRINC "\n请选择目标(W C WP CP F)") <br/><br/>     (SETQ ENT_SS (SSGET) WID (GETREAL"\n请输入线宽&lt;0.3&gt;:")) <br/><br/>     (if (= wid nil) (setq wid 0.3)) <br/><br/>     (IF (/= ENT_ss nil) <br/><br/>       (PROGN <br/><br/>         (SETQ N_SS (SSLENGTH ENT_SS)  J 0) <br/><br/>         (REPEAT N_SS <br/><br/>       (SETQ ENT_N (SSNAME ENT_SS J) ent_a (cdr (assoc 0 (entget ent_n))) <br/><br/>                   J  (1+ J)) <br/><br/>          (if (or (= ent_a "POLYLINE") (= ent_a "LWPOLYLINE")) <br/><br/>   <br/><br/>            (COMMAND "PED99v" ENT_N "w" wid "" COMMAND)) <br/><br/>         );ENDREP <br/><br/>       );ENDPROGN <br/><br/>     ) ;ENDIF <br/><br/>  ) ;enddefun <br/><br/>2. 批量打印出图(Mplot) <br/>  在AUTOCAD中用PLOT命令每次只能打印一张图纸,如果在一个图形文件内有多张大小一样的图纸成纵向排列,间距M_d=500mm。通过Mplot只需调试一张,便可打印所有图纸。程序如下: <br/><br/>  (defun c:Mplot() <br/><br/>    (setq p_1 (getpoint"\n\tFirst CORNER:") <br/><br/>       P_2 (getPOINT"\n\tOther CORNER:") <br/><br/>       n (getint"\n\t总张数:&lt;1&gt;")) <br/><br/>    (if (= n nil) (setq n 1)) <br/><br/>    (setq m_d 500) <br/><br/>   (REPEAT n <br/><br/>       (command"plot" "w" P_1 P_2 "n" COMMAND)
      发表于 2006-4-13 23:04:00 | 显示全部楼层
      请问如果,没有封闭曲线的话,但是不全是直线,还有曲线包围的,有什么命令可以点击图形就可以得出他的面积![em07]
      发表于 2006-6-24 13:22:00 | 显示全部楼层
      好文章,谢谢楼主,收藏了!
      发表于 2006-7-3 09:33:00 | 显示全部楼层
      好文章,谢谢楼主
      发表于 2007-6-13 09:00:00 | 显示全部楼层
      谢谢
      发表于 2007-6-17 23:09:00 | 显示全部楼层
      我还刚学,好多看不懂哦
      发表于 2007-6-19 22:43:00 | 显示全部楼层
      收到
      发表于 2007-6-24 15:02:00 | 显示全部楼层
      <p>我是新手.我才从学校毕业,搞设计要求高不&nbsp; </p>
      发表于 2008-3-23 17:10:02 | 显示全部楼层
      二次开发应该怎么学啊?
      发表于 2008-7-5 11:44:29 | 显示全部楼层
      不是很实用!
      不过也顶下
      发表于 2008-7-10 10:50:41 | 显示全部楼层

      回复 13楼 的帖子

      你这个就要麻烦些,需要抓取你的图框,上面那个程序是不行的。
      发表于 2008-7-25 09:29:23 | 显示全部楼层
      正在学习中,不过好多不懂.
      发表于 2008-7-25 15:19:11 | 显示全部楼层
      这些个功能一般的外挂插件上都有了,没什么,不过老兄精神可佳
      发表于 2008-8-28 08:53:35 | 显示全部楼层
      怎么学最快?:) :)
      发表于 2009-6-23 14:45:51 | 显示全部楼层
      有些还看不大明白,不过二次开发,很有用
      发表于 2009-11-15 13:14:34 | 显示全部楼层
      謝謝大大的lisp
      感恩
      发表于 2009-12-20 16:45:14 | 显示全部楼层
      这个还不算了,写的,挺好的,支持你
      发表于 2010-4-23 23:52:15 | 显示全部楼层
      多谢。小弟获益非浅
      发表于 2010-6-10 21:11:41 | 显示全部楼层
      刚接触 还看不懂。谢谢楼主了。
      您需要登录后才可以回帖 登录 | 注册

      本版积分规则

      关闭

      招聘信息 上一条 /5 下一条

      关闭

      求职信息 上一条 /5 下一条

      关闭

      技术求助 上一条 /5 下一条

      QQ|小黑屋|手机版|模具论坛 ( 浙ICP备15037217号 )

      GMT+8, 2025-8-26 00:08

      Powered by Discuz! X3.4

      © 2001-2013 Comsenz Inc.

      快速回复
      返回顶部
      返回列表
       
      客服电话:0577-61318188
      模具论坛交流群:
      模具论坛交流群
      工作时间:
      08:30-17:30