中国科技论文在线
http://www.paper.edu.cn
基于 AutoLISP 开发的 AutoCAD 三维图形的
单轴缩放功能#
黄温钢1,2,马晓光1,2,张 朋1,2*
(1. 中国矿业大学矿业工程学院,江苏徐州 221116;
2. 中国矿业大学煤炭资源与安全开采国家重点试验室,江苏徐州 221008)
摘要:在实际工作中,由于需要突出局部结构或者其它原因,有时需要将 AutoCAD 图形沿
各方向进行不同比例地缩放,即实现图形的单轴缩放。AutoCAD 软件的缩放命令(scale)
只具备各轴统一比例缩放的功能,而采用一般方法操作繁琐、工作量大。好在 AutoCAD 拥
有多种可供二次开发的编程语言,使用者可根据自己的需要通过编程实现一些 AutoCAD 不
具备的功能。AutoLISP 是一种嵌入 AutoCAD 内部的编程语言,完全针对 AutoCAD 进行编
程,它具有语法简洁、表达能力强、控制结构灵活等特点,是开发一些简单功能的首选编程
语言。本文主要介绍了基于 AutoLISP 程序实现的 AutoCAD 三维图形的单轴缩放功能及其
使用方法。
关键词: 采矿工程;AutoCAD;AutoLISP;二次开发;单轴缩放
中图分类号:TD213
The Single Axle Scaling Function of AutoCAD
Three-Dimensional Drawing Developed Based on AutoLISP
HUANG Wengang1,2, MA Xiaoguang1,2, ZHANG Peng1,2
(1. School of Mines, China University of Mining and Technology, Xuzhou, Jiangsu 221116;
2. State Key Laboratory of Coal Resources and Mine Safety, China University of Mining and
Technology, Xuzhou, Jiangsu 221008)
Abstract: Sometimes, we need to scale the drawings of AutoCAD in different proportions along
different axles because of the demand for highlight local structure or other reasons in practical work.
The scaling command of AutoCAD can only have the function that scale the drawings in one
proportion. However, it always shows complex operation and heavy workload with general methods.
Fortunately, AutoCAD has many programming languages for secondary development that users can
use to develop some functions that autocad didn’t have according to their needs. AutoLISP, which is a
kind of embedded programming languages of AutoCAD and dsigned all for AutoCAD, is the first
choice to develop some simple functions with these characteristics, such as simple grammar, strong
expression ability and control structures flexibly. This paper mainly introduces the single axle scaling
funtion of AutoCAD three-dimensional drawings that developed based on AutoLISP language and its
application.
Key words: mining engineering; AutoCAD; AutoLISP; secondary development; single axle scale
0 引言
AutoCAD 作为一种通用计算机辅助设计软件,其二维图形设计功能非常强大,目前已
广泛应用于机械、电子、电气、建筑、土木、服装等领域,成为目前世界上应用最广的计算
机辅助设计工具。近年来,AutoCAD 在煤炭行业也得到了广泛应用,利用 AutoCAD 进行剖
面图、采掘工程图、地形地质图、储量图等矿图的编制工作,取得了较好的效果,对促进矿
基金项目:中国矿业大学“211 工程”三期建设项目(A90101 和 A90109);教育部科学技术研究重点项
目(02019)
作者简介:黄温钢(1986-),男,中国矿业大学硕士在读,主要研究方向:煤炭地下气化. E-mail:
wengang-huang@163.com
- 1 -
中国科技论文在线
http://www.paper.edu.cn
图的标准化、规范化,提高准确度和精度、降低劳动强度、提高了效率[1]。此外,AutoCAD
也同时具有强大的三维绘图功能,可以用于绘制矿山井上下对照立体图,不仅操作简单,而
且由于均为 Autodesk 公司开发的软件,AutoCAD 的三维图形也兼容于 3DMarx,利于图形
的后期效果处理。AutoCAD 虽然拥有强大的功能,但由于矿区地表地形及井下围岩构造的
复杂性,为突出局部结构,需要对二维或三维图像进行单轴缩放,即只将图形沿其中一轴缩
放比例,其余轴的比例保持不变,如能实现这一功能,尤其是对结构比较复杂的图形而言,
则无需再根据比例计算结果重新绘图,可大大降低操作强度,提高绘图效率。
1 AutoCAD 三维图像的单轴缩放技巧
1.1 定义块实现单轴缩放
对于简单的二维或三维图形,可以通过定义块的方法实现图形的单轴缩放,其具体操作
如下[2]:
1)定义块:打开 AutoCAD,执行【菜单栏】/【绘图】/【块】/【创建】命令,打开“块
定义”对话框,选择对象和基点,并定义块的名称,单击“确定”按钮;
2)插入块:执行【菜单栏】/【插入】/【块】命令,打开“插入”对话框,输入块的名
称;然后,在对话框“缩放比例”一栏中任意输入 X、Y、Z 方向的比例,单击“确定”按
钮;最后,在绘图区适当位置插入图像即可。
采用定义块的方法实现图像的单轴缩放功能,虽然方法简单,但当图形文件较大,需要
多次操作才能完成时,操作就比较繁琐,关键是每次缩放后的图像相互拼接时容易出错。
1.2 利用 AutoLISP 程序实现单轴缩放
1)AutoLISP 简介
对于 AutoCAD 在使用过程中存在较多的不足之处,Autodesk 公司在开发 AutoCAD 之
初,就意识到这一点,并为早期版本的 AutoCAD 提供了二次开发语言 AutoLISP。AutoLISP
最早出现在 AutoCADR2.18 中,是一种嵌入在 AutoCAD 内部的二次开发语言,全名为表处
理语言(LIST Processing Language),来源于人工智能语言 LISP[3],并具有强大的 AutoCAD
图形编辑功能[4]。AutoLISP 可以直接访问和修改 AutoCAD 当前的图形数据库,为 AutoCAD
增加新命令或修改 AutoCAD,实现参数化绘图程序设计[5]。此外,AutoLISP 应用程序既可
完成通常的科学计算和数据分析,又能调用几乎全部的 AutoCAD 命令[6]。它与主流编程语
言如 C/C++、BASIC 等相比语法非常简单,也较灵活,可作为初学者开发一些 AutoCAD
简单功能的首选编程语言。因此,可以尝试利用 AutoLISP 程序来实现 AutoCAD 图形的单
轴缩放,使这一功能操作简单化,这对提高绘图效率具有重要意义。
2)二次开发实现单轴缩放的基本原理
上面提到将图形定义成块可实现图形的单轴缩放,若能通过编程来实现这一过程,从而
达到输入命令即可完成所有操作的目的,那么要实现图形的单轴缩放就变得简单易操作了,
并且具有很强的可重复性。具体的程序流程,如图 1 所示。
- 2 -
中国科技论文在线
http://www.paper.edu.cn
开始
选择缩放对象
生成块
指定基准点
N
输入各轴
比例参数
Y
按比例生成图形 原比例生成图形
能否分解块
N
Y
分解块
输出图形
结束
保留块
图 1 程序流程图
Fig. 1 Flow process diagram of program
2 基于 AutoLISP 语言二次开发的单轴缩放程序
资料[7]的程序可以实现 AutoCAD 二维图象的单轴缩放,即只能修改 X、Y 轴的比例,
而无法单独改变 Z 轴的比例,作者在此基础进行了改进,使其具备可以实现三维图象的单
轴缩放功能。程序清单如下:
(defun C:XSCALE(/ bp ss xscal yscal zscal entL)
(defun errexit (s)
(princ "\nError: ")
(princ s)
(restore)
)
(defun restore ()
(setvar "CMDECHO" (car oldvar))
(setq *error* olderr)
(princ)
)
(defun MAKEUNBLOCK (ss ip / tmp errexit mbx BLAYER)
(setq T (not nil))
(setq olderr *error*
*error* errexit
)
- 3 -
中国科技论文在线
http://www.paper.edu.cn
(setq oldvar
(list
(getvar "CMDECHO")
)
)
(setvar "CMDECHO" 0)
(terpri)
(if BLAYER
(command "._LAYER"
(if (tblsearch "LAYER" BLAYER) "_S" "_M")
BLAYER
""
)
)
(if (and ip ss)
(progn
(entmake (list
(cons '0 "BLOCK")
(cons '2 "*U")
(cons '70 1)
(cons '10 ip)
))
(setq cnt (sslength ss))
(while (>= (setq cnt (1- cnt)) 0)
(setq tmp (ssname ss cnt))
(entmake (setq el (entget tmp)))
(if (> (cdr (assoc 66 el)) 0)
(while
(/= "SEQEND"
(cdr
(assoc 0
(entmake (setq el (entget (entnext (cdr (assoc -1 el))))))
)
)
)
)
)
(entdel tmp)
- 4 -
中国科技论文在线
http://www.paper.edu.cn
)
(setq tmp (entmake (list (cons '0 "ENDBLK"))))
(entmake (list
(cons '0 "INSERT")
(cons '2 tmp)
(cons '10 ip)
))
)
)
(restore)
)
(setq ss (ssget)) ;;; 选择缩放实体
(if ss
(progn
(setvar "cmdecho" 0)
(setq bp (getpoint "缩放基准点 (<0,0,0>): "))
(if (not bp) (setq bp (list 0 0 0)))
(setq xscal (getreal "X 向比例因子 <1>: "))
(if (not xscal) (setq xscal 1))
(setq yscal (getreal "Y 向比例因子 <1>: "))
(if (not yscal) (setq yscal 1))
(setq zscal (getreal "Z 向比例因子 <1>: "))
(if (not zscal) (setq zscal 1))
(MAKEUNBLOCK ss bp)
(setq entL (entget (entLast))
entL (subst (cons 43 zscal) (assoc 43 entL) entL)
)
(entmod entL)
(command "_explode" "l" "")
)
)
(princ "X,Y,Z 不同比例缩放, 命令:XSCALE")
)
entL (subst (cons 41 xscal) (assoc 41 entL) entL)
entL (subst (cons 42 yscal) (assoc 42 entL) entL)
- 5 -
中国科技论文在线
3 单轴缩放命令的使用方法及其实例
3.1 单轴缩放命令的使用方法
http://www.paper.edu.cn
1)将上述单轴缩放程序写入记事本,保存并将其扩展名改为*.lsp;
2)打开 AutoCAD,执行【菜单栏】/【工具】/【加载应用程序】命令,打开“加载/卸
载应用程序”对话框,将文件*.lsp 载入;
3)在命令栏中输入“xscale”,根据命令栏的提示即可实现三维图形的单轴缩放。
注:每次关闭 AutoCAD 后再启动,均需重新加载程序方可使用“xscale”(单轴缩放)
命令。
3.2 程序应用实例
利用“实体”工具栏中的“长方体”命令,绘制一边长为 10 的正方体,如图 2 所示。
然后进行如下操作:
命令:xscale↙
选择对象:(选择正方体)↙
缩放基准点(<0,0,0>):(指定正方体任意一角)↙
X 向比例因子<1>:2↙
Y 向比例因子<1>:3↙
Z 向比例因子<1>:4↙
结果如图 3 所示。
图 2 缩放前的正方体
Fig. 2 The cube before being scaled
- 6 -
中国科技论文在线
http://www.paper.edu.cn
图 3 缩放的结果
Fig. 3 The cuboid after being scaled
4 结语
利用 AutoLISP 编程语言进行二次开发,实现了 AutoCAD 三维图像的单轴缩放,并使
其操作“一键化”,不仅操作简单,而且可重复性强,这大大提高了绘图效率。但同时也存
在一些不足,如每次关闭 AutoCAD 后再启动,均需重新加载程序方可使用单轴缩放命令;
就本程序而言,其实现单轴缩放功能的基本原理是通过将图像定义成块,再重新改变各轴比
例,最后将形成的块进行分解再输出图形,因此,缩放后的图形属性可能与其最初属性有所
差异。这些都有待于进一步完善。
[参考文献] (References)
[1] 谭英佳,段广富,肖雨江,等. AutoCAD 图形缩放技巧[J]. 煤炭技术,2004,23(5):99~100.
[2] 胡仁喜. AutoCAD2009 水暖电施工图十日通[M]. 北京:中国建筑工业出版社,2009.
[3] 方贵盛,王建军. AutoCAD 二次开发技术及其应用研究[J]. 机床与液压,2007,35(6):185~187, 212.
[4] 祁宇明,曹巨江,高文华. 基于 AutoLISP 的二次开发参数优化设计[J]. 陕西科技大学学报,2006,24
(1):76~79.
[5] 梁雪春,宋德明. AutoCAD2002 二次开发技术指南[M]. 北京:清华大学出版社,2001.
[6] 陈羽中. 用 AutoLISP 二次开发 AutoCAD[J]. 电脑知识与技术,2005,(35):156~157,173.
[7] Apooollo. x、y 方向不同比例缩放[OL]. [2005/06/22]. http://www.co188.com/ neteaseivp/enterp/gps/
toLogin.jsp?source=downSoftware&pk=38397799&way=5
- 7 -