您现在正在浏览:首页 > 职教文章 > 职教论文 > AutoCAD二次开发

AutoCAD二次开发

日期: 2013/12/27 浏览: 2 来源: 学海网收集整理 作者: 学海网

江苏省技工院校2012年度机械专业中心教研组优秀教研成果

AutoCAD二次开发

摘要: AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。

关键字:AutoLISP 二次开发 AutoCAD





引言

AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD 2000或2002,最新版本是AutoCAD 2004,其二次开发语言及工具也在不断地涌现

1. AutoLISP

AutoLISP的全名是LIST Processing Language,她出现于1985年推出的AutoCAD R2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。

2. ADS

ADS的全名是AutoCAD Development System,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。

3. ObjectARX

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应用程序实现交互操作。

4. VisualLISP

VisualLISP已经被完整地集成到AutoCAD 2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD 2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于Auto CAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。

5. VBA

VBA 即Mcrosoft office中的Visual Basic for Applications,它被集成到AutoCAD 2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD 2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD 2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

二、正文

计算机辅助制图是现代企业生产和设计的重要工具,AutoCAD是计算机辅助设计工具的一种,AutoLISP 是AutoCAD软件的重要组成部分。它是AutoCAD软件二次开发的重要工具。它可使一些常用的机械零件能很快的调用,简捷方便,很大的提高了工作效率缩短了新产品的开发周期,提高制图的质量。利用AutoLISP语言对AutoCAD进行二次开发是现代计算机技术不可缺少的内容,而且直接影响到制图的速度和质量。

本次AutoCAD开发程序采用AutoLISP语言编写,主要针对自己日常工作中运用AutoCAD绘图遇到的问题进行改进,避免日常绘图中图框和标题栏的大量重复,很大提高了工作效率。以下为程序编写过程极其步骤:

程序用command命令”LAYER”按国家标准建立所需要的图层,建立每层的代码、颜色、线型。

检查绘制图框必须的文件(标题栏和附加栏),如果没有报错。

关闭CAD交互模式的提示,预防干扰程序运行。

提示框提示标准的图纸尺寸供设计师参考。

输入要求的图纸尺寸并检验数据准确性。

程序设定图纸比例,按比例自动绘制图框,插入标题栏和附加 栏并按比例调整大小。

恢复CAD交互模式提示。

将刚才绘制的图框置成全屏浏览,方便直接绘图。

设置尺寸标注模式,按比例调整文字、尺寸线、箭头等大小, 设置尺寸精度,公差模式等。

10.设置绘图时捕捉模式,自动捕捉交点、端点、垂足点。

11.设置一个“standard”汉字和西文的文字样式。

12.释放以上过程中无用的内存变量,腾让内存空间。

三、总结

我作为一名技工学校机械理论教师通过计算机课程的系统学习,结合自己的专业知识选了AutoCAD二次开发这个课题。不仅提高了自己的业务水平,也为今后的教学打下了基础。

AutoCAD 2004在设计时只是给我们提供了一个操作平台。在绘制图纸时每一张图纸都要绘制图框和进行CAD平台初始化,例如:单位、图层、线形、尺寸标注设置、扑捉模式等等。这次设计,由于时间有限,我只是编写了,线形设置,图框设置、标题栏设置部分程序,实现了AutoCAD二次开发几个最基本的功能。按照这个开发思想,在机械制图中,还可继续开发,实现常用件、标准件图库、标题栏签名等功能。根据这一思路可将AutoCAD2004结合其他专业如:建筑、化工、液压、电子电气等领域进行开发,大大方便设计师的工作,为AutoCAD2004的推广具有重大意义。

附件:源程序

;建层程序:

(defun c:mlayer()

(setvar "CMDECHO" 0) **关闭Autollisp的comand函数运行期间,CAD不回显提示和输入,以确保程序运行正常**

(command "LAYER" "M" "01" "C" "white" "" "L" "continuous" "" **新建01层颜色white线型connntinous(连续线)**

"M" "02" "C" "red" "" "L" "continuous" "" **……02…………下同**

"M" "02C" "C" "green" "" "L" "CONTINUOUS" ""

"M" "02D" "C" "blue" "" "L" "CONTINUOUS" ""

"M" "04" "C" "yellow" "" "L" "dashed" "" **dashed虚线**

"M" "05" "C" "cyan" "" "L" "center" "" **center中心线**

"M" "06" "C" "14" "" "L" "center" ""

"M" "07" "C" "magenta" "" "L" "divide" "" **divide双点画县**

"M" "08" "C" "red" "" "L" "CONTINUOUS" ""

"M" "09" "C" "white" "" "L" "CONTINUOUS" ""

"M" "10" "C" "red" "" "L" "CONTINUOUS" ""

"M" "11" "C" "green" "" "L" "CONTINUOUS" ""

"M" "12" "C" "green" "" "L" "CONTINUOUS" ""

"M" "13" "C" "green" "" "L" "CONTINUOUS" ""

"M" "14" "C" "white" "" "L" "CONTINUOUS" ""

"M" "15" "C" "white" "" "L" "CONTINUOUS" ""

"M" "16" "C" "white" "" "L" "CONTINUOUS" "" ""

)

(princ "ok")

(princ)

(command "layer" "s" "01" "") **将当前层设置为01层**

)

(princ)

;主程序:

(defun c:tk () **定义命令tk

(setvar "CMDECHO" 0) **同上**

(setq qr1 "0"

qr2 "0" **定义命令附值**

)

(if (findfile "intecad.shx") (setq qr1 "1") **判断有无支持文件intecad.shx字库,有设qr1为1**

(print "你的CAD工作目录下没有INTECAD.SHX中文字体,请确认后再操作!")

)

(if (and(findfile "heada.dwg")(findfile "headpl.dwg")) (setq qr2 "1") **判断有无heada.dwg和headpl.dwg支持文件,有设qr2为1**

(print "你的CAD工作目录下没有headpl.dwg或heada.dwg图幅文件,请确认后再操作!")

)

(setvar "CMDECHO" 0)

(alert "标准图幅:\n A4=297*210\n A3=420*297\n A2=594*420\n A1=840*594\n A0=1188*840") **提示框显示标准图幅**

(setq w (getint "请输入图幅宽度:《默认297》")) **提示输入图宽,限制为整数值**

(if (= w nil) (setq w 297)) **如果没输入任何值,系统接受默认值297**

(setq h (getint "请输入图幅高度:《默认210》"))

(if (= h nil) (setq h 210)) **同上**

(setq sc (getreal "请输入绘图比例 1:<1>"))

(if (= sc nil) (setq sc 1)) **输入绘图比例**

(setq w (* w sc)) **变量w=图宽*比例**

(setq h (* h sc)) **变量h=图高变量w*比例**

(setq kd (* 5 sc)) **按比例调整内图框缩进值5mm*比例**

(setq dj1 (list 0 0 0 ))

(setq dj2 (list w h 0))

(setq nj1 (list (* 5 kd) kd 0))



(setq nj2 (list (- w kd) (- h kd) 0)) **定义点dj1,dj2,nj1,nj2**

(setvar "OSMODE" 0) **关闭对象捕捉模式,以免干扰点定位**

(command "layer" "s" "02" "") **切换到02层**

(command "rectang" dj1 dj2) **以点dj1,dj2画矩形框**

(command "layer" "s" "01" "") **切换到01层**

(command "rectang" nj1 nj2) **以点nj1,nj2画矩形框**

(if (= qr2 "1") **qr2为1,即支持文件**

(progn

(command "insert" "heada.dwg" (list (- w kd) kd 0) sc "" "")

(command "insert" "headpl.dwg" (list (* 5 kd) kd) sc "" "") **heada,headpl文件在则插入该文件**

)

)

(setvar "CMDECHO"1) **打开command提示和输入**

(command "zoom" "E") **最大化显示全图**

(setvar "dimdec"3) **设置标注单位小数后3位,即0.001**

(setvar "dimunit"2) **单位为小数模式**

(setvar "dimscale" sc) **标注比例**

(setvar "dimtxt" (* 3.5 sc)) **标注文字高度3.5**

(setvar "dimclrd"1) **指定尺寸箭头**

(setvar "dimclre"1) **指定界线颜色**

(setvar "dimclrt"3) **指定文字颜色**

(setvar "dimdli"10) **尺寸线间距10mm**

(setvar "dimexe"3) **尺寸界线超出尺寸线距离3mm**

(setvar "dimasz"3) **箭头为3mm**

(SETVAR "DIMASO" 1) **定义尺寸标注模式为非关联对象**

(SETVAR "LUPREC" 3) **尺寸偏差精度**

(setvar "osmode" 161);捕捉设置为交点、垂足和端点 **定义点移动,标注值更新**

(setq aaa (rtos (* 3.5(getvar"dimscale")))) **定义aaa=标注比例*3.5**

(if (= qr1 "1") **如果qr1值为1**

(command "style" "standard" "txt,intecad" aaa "0.8" "" "" "" "") **定义一个文字样式standard,英文txt.shx,中文inntecad.shx高度为aaa,宽0.8

)

(gc) **清理无用内存变量**

(princ "ok") **打印ok**

(princ) **空行打印**

)

四、主要参考资料:

1.《AutoLISP机械设计高级应用实例》

作者:胡仁喜 等编 05版

机械工业出版社

2.《精通AutoCAD 2004中文版》

作者:徐建平 王新成 等编 03年12月第1版

清华大学出版社


AutoCAD二次开发.doc

返回顶部