(2)通过光标输入设备输入点通过光标输入设备输入点的优点是方便和快捷。
壹般情况下,用光标输入设备输入点的坐标值是不精确的,通过AutoCAD的Snap功能,能够使输入点达到壹定的精度。
(3)利用目标捕捉功能输入点这是利用光标输入设备精确输入点的壹种方式,根据AutoCAD的Osnap功能,它能够精确捕捉到图形的特定点位置,例如线段的端点、中点,圆和圆弧的圆心及象限点,切点和垂足等等。
(4)利用LISP函数输入点利用LISP语言中的函数功能也能够输入点,这是自动绘制图形的基础,在AutoCAD二次开发中经常使用这种方式完成点的输入。
2.直线的绘制
绘制直线的命令是LINE。
壹般只要输入直线的俩个端点,即可生成直线。
绘制好圆弧后,在LINE命令后直接键入回车,然后输入直线长度,能够在圆弧终点处绘制圆弧的切线。
3.圆的绘制
绘制圆的命令是CIRCLE。
圆的绘制参数是圆心和半径(或直径)。
也能够根据需要绘制和其他图线相切的圆。
4.圆弧的绘制
绘制圆弧的命令是ARC。
和直线和圆相比,圆弧的绘制比较复杂,考虑到圆弧具有顺时针和逆时针俩种方向,AutoCAD共安排了7种绘制圆弧的方法,其绘制参数分别为圆弧的①起点、中点、终点;②起点、圆心、终点;③起点、圆心、角度;④起点、圆心、弧长;⑤起点、终点、角度;⑥起点、终点、半径;⑦起点、终点、起始方向。
绘制和刚绘制的直线或圆弧相切的圆弧时,能够直接键入回车,然后输入圆弧终点,此时圆弧的起点即为前绘线段的终点,圆弧的起始方向即为前绘线段的终止方向。
5.多段连线
多段连线(POLYLINE)是由直线和圆弧首尾相连组合成的复合线段,绘制多段连线采用PLINE命令,类同于绘制直线和圆弧。
实践中常用PEDIT命令编辑直线和圆弧来得到多段连线。
二、图形编辑
AutoCAD提供的图形编辑方法能够有效地修改图形,且能够显著提高绘图效率。
常用的图形编辑命令有删除(ERASE)、复制(COPY)、镜面对称复制(MIRROR)、阵列复制(ARRAY)、等距偏移复制(OFFSET)、移动(MOVE)、转动(ROTATE)、缩放(SCALE)、修剪(TRIM)、延伸(EXTEND)、倒角(CHAMFER)、倒圆角(FILLET)、分解(EXPLODE)和多段连线编辑(PEDIT)。
熟练掌握这些图形编辑命令能够有效地提高AutoCAD应用水平。
三、其他功能
AutoCAD的其他功能仍有图形显示、文字、剖面线、尺寸标注、图层管理、图块定义及调用、动画、三维图形、二次开发工具等。
第三节AutoCAD的二次开发工具
一、AutoCAD定制菜单
表3-1菜单文件类型
菜单文件类型
类型说明
.MNU
原始ASCII菜单文件,即用户通常编辑或创建的文件。
.MNC
已编译的菜单文件;壹种二进制文件,包含用于定义菜单或其他界面元素的功能及外观的命令字符串和菜单语法。
首次加载MNU文件时,AutoCAD将编译此文件。
.MNR
菜单资源文件;壹种二进制文件,包含由菜单或其他界面元素使用的位图。
AutoCAD每次编译MNC文件时,均生成菜单资源文件。
.MNS
源菜单文件;壹种和MNU文件相同的ASCII文件,可是不包含注释或特殊格式。
每次菜单文件的内容被更改时,AutoCAD将修改源菜单文件。
.MNT
菜单资源文件。
仅在MNR文件无效(例如,只读)时生成该文件。
.MNL
菜单LISP文件;包含菜单文件使用的AutoLISP表达式。
当加载和菜单LISP文件具有相同文件名的菜单文件时,AutoCAD会将菜单LISP文件加载至内存。
用文本编辑器打开ACAD.MNU文件观察菜单文件的结构,能够见到其内容包含如表3-2所示的几个区域。
其中***POP1至***POP11定义了下拉菜单。
菜单文件中包含的壹些特殊字符的说明见表3-3。
表3-2ACAD.MNU文件的菜单区域及其功能
主菜单名称
区数N
功能用途
***MENUGROUP
菜单组
***BUTTONSn
1~4
定点设备按钮菜单
***AUXn
1~4
系统定点设备菜单
***POPn
0~999
0对象捕捉快捷菜单
1~16基本型下拉菜单
17~499将menuload加入下拉菜单中
500~999快捷菜单区域
***TOOLBARS
工具栏定义
***IMAGE
图像菜单
***SCREEN
屏幕菜单
***TABLETn
1~4
数字化仪菜单
***HELPSTRINGS
辅助功能说明区(显示于状态区)
***ACCELERATORS
加速键定义
注意事项
如果没有定义POP1~POP16,AutoCAD会自动插入2个预设的下拉菜单(File和Edit)
表3-3菜单字符说明
字符
说明
**
子菜单
--
菜单项分隔符
->
引出子菜单
<-
子菜单结束
~
禁用菜单项的前缀符
!
.
给菜单项打上复选标记的前缀符
&
指定菜单快速键,如S&le显示为Sample,快捷键为a
/
指定菜单快速键,如/aSample显示为Sample,快捷键为a
=*
显示当前顶层的图像、下拉或快捷菜单
*^C^C
重复项的前缀
$
宏表达式的特殊字符
^
CTRL
\
暂停等候用户输入(不能用于加速键)
_
转换AutoCAD命令及其后的关键字
+
延续宏到下壹行
;
RETURN
//
注释行,不限行数,用作版权声明或注释
[]
方括号内为菜单项名称
用文本编辑器打开ACAD.MNU文件,在pop11菜单后面插入图3-1所示的pop12菜单ASCII代码,将其保存在DCAD.MNU文件中,用AutoCAD的MENU命令加载DCAD.MNU后,能够见到下拉菜单在Help菜单项的后面增加了名为DCAD的壹列新菜单,其效果如图3-2所示。
方括号内的字符串构成了下拉菜单的显示内容,DCAD下拉菜单列中包含了“工艺性分析”、“排样”、“CAM”、“模板”和“模具标准件”5个子菜单。
点取“CAM”子菜单中“3B指令”项,其对应的菜单项内容为“[3B指令]^C^C(load"dcad-ww")w3b”。
其中“[3B指令]”规定了菜单项显示文字为“3B指令”;“^C^C”相当于先从键盘输入俩次CTRL-C以终止任何AutoCAD可能正在执行的命令,以便无障碍地执行后面的指令;“(load"dcad-ww")”的作用是加载LISP程序文件“dcad-ww.lsp”;“w3b”表示执行AutoCAD二次开发新建的命令“w3b”——从AutoCAD图形产生数控线切割机床3B加工指令程序。
菜单项中的空格所起的作用相当于输入回车。
***pop12
[DCAD]
[输入清单]^C^C(load"dcad-i-2000")(if(nullc:
fdcad)(load"DCAD"))input
[->工艺性分析]
[小孔]^C^C(load"dcad-b-2000-k")(load"DCAD")(load"Dcad-b")DCADBK
[孔距]^C^C(load"dcad-b-2000-jb")(load"DCAD")(load"Dcad-b")DCADBJB
[凸臂]^C^C(load"dcad-b-2000-tz")(load"DCAD")(load"Dcad-b")DCADBTZ
[窄槽]^C^C(load"dcad-b-2000-tz")(load"DCAD")(load"Dcad-b")DCADBTZ
[圆弧]^C^C(load"dcad-b-2000-y")(load"DCAD")(load"Dcad-b")DCADBY
[孔间壁厚]^C^C(load"dcad-b-2000-b")(load"DCAD")(load"Dcad-b")DCADBB
[<-复合模]^C^C(load"dcad-b-2000-f")(load"DCAD")(load"Dcad-b"))DCADBF
[->排样]
[定搭边值]^C^C(load"dcad-l-2000-d")(load"DCAD")(load"dcad-l-2000")dbz
[单排排样]^C^C(load"dcad-l-2000-s")(load"DCAD")(load"dcad-l-2000")lay1
[<-多排排样]^C^C(load"dcad-l-2000-v")(load"DCAD")(load"dcad-l-2000"))LAYN
[->CAM]
[3B指令]^C^C(load"dcad-ww")w3b
[穿孔代码]^C^C(load"dcad-ww")punch
[代码校验]^C^C(load"dcad-ww")check
[<-穿孔码转换3B指令]^C^C(load"dcad-ww")p2b
[设计]^C^CDESIGN
[->模板]
[上模座]^C^C(load"dcad-mb")(mb)smz
[垫板]^C^C(load"dcad-mb")(mb)db
[固定板]^C^C(load"dcad-mb")(mb)gdb
[卸料板]^C^C(load"dcad-mb")(mb)xlb
[凹模]^C^C(load"dcad-mb")(mb)am
[下模座]^C^C(load"dcad-mb")(mb)xmz
[下固定板]^C^C(load"dcad-pt")(mb)xgdb
[下垫板]^C^C(load"dcad-pt")(mb)xdb
[空心垫板]^C^C(load"dcad-mb")(mb)kxdb
[--]
[<-图框]^C^C(load"dcad-mb")tukuang
[->模具标准件]
[模柄](if(nullc:
mb)(load"dcad-pt"))mb
[橡皮](if(nullC:
XP)(load"dcad-pt"))XP
[导柱](IF(NULLC:
DZ)(LOAD"DCAD-PT"))DZ
[导套](IF(NULLC:
DT)(LOAD"DCAD-PT"))DT
[导料板](IF(NULLC:
DT)(LOAD"DCAD-PT"))DLB
[承料板](IF(NULLC:
DT)(LOAD"DCAD-PT"))CLB
[卸料螺钉](if(nullc:
XLLD)(load"dcad-pt"))XLLD
[固定导销](IF(NULLC:
DT)(LOAD"DCAD-PT"))GDDLX
[<-圆凸模](IF(NULLC:
DT)(LOAD"DCAD-PT"))YTM
[装配示意图]^C^C(load"dcad-z")zpt
图3-1DCAD子菜单ASCII代码
二、LISP语言
AutoCAD内嵌的俩种LISP语言(AutoLISP和VisualLISP)是和AutoCAD结合最为完美的程序语言。
AutoLISP是AutoCAD选用的第壹个强有力的开发工具,从1985年问世的AutoCADV2.18版本开始,壹直沿用至今。
AutoLISP是解释型语言,它的欠缺之处是运行效率较低,源程序缺乏保密性。
针对AutoLISP的弱点,AutoCAD在其2000版本中又推出了具有高运行效率的编译型LISP语言——VisualLISP。
VisualLISP在AutoLISP的基础上增加了源程序编辑环境、编译器以及壹些增强函数。
实际上,过去编写的AutoLISP程序都能够在VisualLISP中编译和运行,即VisualLISP能够完全兼容AutoLISP。
(壹)LISP语言简介
LISP是英语LIStProcessing的缩写,意思是壹种编制计算机程序的表处理语言。
LISP语言1960年起源于美国麻省理工学院(MIT),是壹种著名的人工智能计算机语言。
和BASIC等其他计算机语言壹样,LISP语言也有许多版本,当下使用最多的是COMMONLISP。
AutoCAD软件中镶嵌的AutoLISP和COMMONLISP很接近,它增加了调用AutoCAD命令的功能和壹些几何函数,且削减了COMMONLISP中壹些不常用的函数。
作为壹种高级语言,LISP能够完成其他许多高级语言(如FORTRAN、BASIC、PASCAL、C等)能够完成的工作,诸如计算、逻辑判断、循环运算等等。
LISP语言具有壹些独特的优点,使它特别适用于人工智能和CAD领域,这也是AutoCAD在众多计算机语言中首先选择其作为开发工具的主要理由。
表(List)在LISP语言中具有极其重要的意义。
表是LISP语言的重要成份,它由若干个元素(Element)和壹对圆括号组成。
元素则包括表和原子(Atom)俩种类型。
原子指常数(Constant)或者符号变量(Variable)。
表中的元素能够是表,因此表可具有嵌套结构。
在LISP语言中,表既能够构成数据,也能够组成程序。
如(0.51.2)和(15.33)都是用表的形式表示的数据。
前者能够表示壹个二维点,x坐标值为0.5,y坐标值为1.2。
后者能够表示壹个三维点,x坐标值为1,y坐标值为5.3,z坐标值为3。
(1258.2“A”9)能够表示壹个六维向量,和其他计算机语言中的壹维数组相当,可是表中元素的数据类型能够各不相同,而同壹数组中各个数据的类型都必须相同。
利用表的嵌套结构,容易获得类似的多维数组,可是其中各维的长度能够不相等,且且表中元素的数据类型能够各不相同,所以在表示数据时,表比其他计算机语言中的多维数组更显优越性。
AutoCAD中的图形数据(包括类型、图层、颜色、线型、特征、坐标值等)都可采用表的形式表达。
如AutoCAD中表达壹根直线所用的表为((-1.24082f8>)(0."LINE")(330.2406cf0>)(5."2F7")(100."AcDbEntity")(67.0)(410."Model")(8."0")(100."AcDbLine")(10187.701-45.84750.0)(115.0-45.84750.0)(2100.00.01.0));表达壹个圆所用的表为((-1.7ef50e80>)(0."CIRCLE")(330.7ef50cf8>)(5."88")(100."AcDbEntity")(67.0)(410."Model")(8."0")(100."AcDbCircle")(100.00.00.0)(40.10.0)(2100.00.01.0))
LISP语言的程序结构非常简单,它也是由表组成。
LISP程序采用前缀形式:
(元素0元素1元素2…)
构成LISP程序时,表中元素0必为函数名称,其后的各个元素为该函数(元素0)的变量。
LISP程序对字母的大小写是不加区分的。
例如
(+12)
是壹个LISP程序的例子,其中+为函数名,1和2为+函数的变量。
LISP语言是壹种函数型计算机语言,LISP语言拥有的功能是通过其函数表现出来的。
(二)LISP函数
LISP函数具有返回值和特定的功能。
如上例中,函数返回值为3,函数+的特定功能是求和。
各种类型的LISP函数用来完成LISP语言所有的功能,下面将壹些最基本的LISP函数进行分类,以便大家能够对LISP语言及其在CAD中的应用有所了解。
1.代数运算函数
代数运算函数用于完成代数运算,包括赋值函数(SETQ),四则运算函数(+、-、*、/),三角函数(SIN、COS、ATAN)以及其他代数函数(ABS、EXP、EXPT、SQRT)。
代数运算函数的使用方法很容易掌握,唯壹要注意的是LISP程序具有前缀结构的特点,各种函数运算都必须将函数名作为LISP表达式中最前面的元素。
1)SETQ函数的格式为(SETQv1e1[v2e2…vnen])。
其功能是将ei的计算值赋予变量vi,函数返回值为en的计算值。
(注:
方括号部分是可选项,以下同。
)
例如,(SETQx1y(+12))将常数1的计算值1赋予变量x,LISP表达式(+12)的计算值3赋予变量y,函数返回值为3。
2)+函数的格式为(+n1n2[n3…nm])。
其功能是对函数变量求和,函数返回值为变量之和:
n1+n2+n3+…+nm。
3)-函数的格式为(-n1[n2n3…nm])。
其功能是对函数变量求差。
当m=1,函数只有壹个变量n1时,函数返回值为0-n1,即-n1;当m≥2时,函数返回值为n1-(n2+n3+…+nm)。
4)*函数的格式为(*n1n2[n3…nm])。
其功能是对函数变量求积,函数返回值为变量的乘积:
n1·n2·n3·…·nm。
5)/函数的格式为(/n1n2[n3…nm])。
其功能是求函数变量的商,函数返回值为
n1/(n2·n3·…·nm)。
当/函数变量均为整型数时,函数返回值也为整型数;当函数变量中至少有壹个为实型数时,函数返回值为实型数。
例如,(/32)的返回值为1,而(/32.0)的返回值则为1.5。
6)SIN函数的格式为(SINn)。
其功能是求函数变量n的正弦值,函数返回n的正弦值。
变量n的单位为弧度。
例如,(SIN(/PI2))的返回值为1.0,式中PI为LISP符号变量,表示圆周率π值。
7)COS函数的格式为(COSn)。
其功能是求函数变量n的余弦值,函数返回n的余弦值。
变量n的单位为弧度。
用法和SIN函数相同。
8)ATAN函数的格式为(ATANn1[n2])。
其功能是求反正切值arctann1或arctan(n1/n2)。
当只有壹个函数变量时,函数返回值的范围为(-π/2,π/2),当存在2个函数变量时,函数返回值的范围为(-π,π]。
函数返回值的角度单位为弧度。
例如:
(ATAN0)返回值0.0
(ATAN1)返回值0.785
(ATAN11)返回值0.785
(ATAN1–1)返回值2.356
(ATAN–11)返回值-0.785
(ATAN–1–1)返回值-2.356
(ATAN10)返回值1.5708
(ATAN–10)返回值-1.5708
(ATAN0–1)返回值-3.14
(ATAN01)返回值3.14
9)ABS函数的格式为(ABSn)。
其功能是求绝对值,函数返回n的绝对值。
10)EXP函数的格式为(EXPn)。
其功能是求e的指数,函数返回en。
11)EXPT函数的格式为(ESPTmn)。
其功能是求m的指数,函数返回mn。
12)SQRT函数的格式为(SQRTn)。
其功能是求平方根,函数返回n的平方根。
2.自定义函数
LISP语言提供了许多基本函数,称为内部函数或系统函数(如前述函数),利用这些函数能够直接编写LISP程序,例如tanα的LISP程序可编写为(/(SINx)(COSx))。
对于复杂的程序,直接利用基本函数编写程序且不是壹个好方法,编写LISP程序更多是利用自定义函数来编写程序,反之,大多数LISP程序也都编写成为自定义函数的形式。
自定义函数和其他语言中的子程序或函数最接近。
自定义函数是用户自己定义的函数,又被称为用户函数或外部函数。
自定义函数的使用和系统函数的使用方法是壹致的,用户在使用方面不会感觉到俩者的差异。
自定义函数的格式为
(DEFUNname([A1A2…AL][/V1V2…VM])e1e2…en)
上表中第0个元素DEFUN是自定义函数的函数名,第1个元素name是符号变量,为自定义函数所定义的用户函数的名称。
用户函数名称后是用户函数的变量表,变量表中的元素都是所定义的用户函数的局部变量,可分成以“/”分隔的俩个部分,方括号表示可选项,表中“/”前的可选项[A1A2…AL]为新设立的用户函数name的函数变量,