当前位置:
文档之家› AutoCAD-AutoLISP基本函数
AutoCAD-AutoLISP基本函数
示例
1.75E+04 23.75 1'-5 1/2\" 17 1/2
工程(英尺 + 十进制英寸)5'-4.25"
• 参数precision指定数值的显示精度,对于表5-4中前3种格式,该参数 用来指定小数点后的小数位数。对于后两种格式,用来设定最小分数 的分母。如果没有指定precision的值,将采用系统变量LUPREC来设 定当前精度的值。 • 例如:在命令行中输入 • 命令: (setq x 17.5) • 17.5 • 命令: (setq fmtval (rtos x 1 4)) • "1.7500E+01" • 命令: (setq fmtval (rtos x 2 2)) • "17.50" • 命令: (setq fmtval (rtos x 3 2)) • "1'-5.5\"" • 命令: (setq fmtval (rtos x 4 2)) • "1'-5 1/2\"" • 命令: (setq fmtval (rtos x 5 2)) • "17 1/2" • · (angtos angle [ mode [ precision ] ] )
AutoCAD高级培训教程之二
AutoCAD应用开发
第三部分 AutoLISP基本函• • • • • • • • • • • • 3.1 赋值函数 3.2 数据类型转换函数 3.3 数学几何函数 3.4 关系逻辑函数 3.5 条件分支函数 3.6 循环函数 3.7 表处理函数 3.8 字符串处理函数 3.9 交互式数据输入函数 3.10 打印输出函数 3.11 Command函数 3.12 存取AutoCAD系统变量值函数 3.13 自定义函数和子程序 3.14 参数化编程实例
• • • • • • • • • · (+ x1 x2 ……) · x1 x2 ……) (· (* x1 x2 ……) · (/ x1 x2 ……) · (1+ x) · (1- x) · (abs x) · (sqrt x) · (expt x p) 加运算,求x1 + x2 + ……之和。 减运算,求x1 - x2 - ……之差。 乘运算,求x1 * x2 * ……之积。 除运算,求x1 / x2 / ……之商。 增量运算,返回x + 1。 减量运算,返回x - 1。 绝对值函数,求x的绝对值。 平方根函数,求x的平方根。 任意次方函数,求xp的值。
• · (fix x)
• 实型转换为整型,x为实型或整型数,返回x的整型数。取整过程是直 接截断x的小数部分,而非四舍五入。例如:(fix 3.7) 返回3。
• · (rtos number [ mode [ precision ] ] )
• 实型格式化函数rtos,该函数把实型数number(也可为整型数)按照 指定的模式mode和精度precision转换成字符串。中括号“[ ]”内的参 数可以不写。 • 参数number可以是整型或实型常量、变量或表达式。
3.4 关系逻辑函数
• · (> x1 x2 …… )
• 大于函数,判断x1 > x2 > …… 是否成立。若每个参数值 都大于它右边的参数值,则返回T,否则返回nil。如果函 数仅有一个参数,则返回T。如果没有参数,则提示出错。 例如:(> 12 13) 返回nil,(> "abd" "abc") 返回T。
• · (<= x1 x2 …… )
• • 小于等于函数,用法同小于函数,只是进行的是小于等于判断。 判断两个表达式的值是否相同,可以完成表的比较。参数expr1和expr2是用 于比较的表达式,参数fuzz为实数,用于定义expr1和expr2之间最大允许误 差。如果两表达式相等或两者相差在参数fuzz的范围内,认为两者相等,返 回T,否则返回nil。如果不提供参数fuzz,则系统默认误差值为0。 例如:在命令行输入 命令: (setq exp1 '(x y z) exp2 '(x y z)) (X Y Z) 命令: (setq exp3 exp2) (X Y Z) 命令: (equal exp1 exp3) T 命令: (setq x1 8.00004 x2 8.00005) 8.00005 命令: (equal x1 x2 0.00001) T 命令: (equal x1 x2) nil
3.1 赋值函数
• 格式:(setq <变量名> <表达式>) • 详见5.2.4。
3.2 数据类型转换函数
• · (float x)
• 整型转换为实型,x为整型数,返回x的实型数。例如:(float 3) 返回 3.0。
• · (itoa x)
• 整型转换为字符串,x为整型数,把x转化为字符串。例如:(itoa 53) 返回 "53"。
• · (distance pt1 pt2)
• • • • 距离计算函数,返回两点之间的距离, pt1和pt2为两个点的坐标。 例如:在命令行中输入 命令: (distance '(50.0 44.5 20.0) '(100.0 100.0 80.5)) 96.1275
• · (polar pt angle dist)
• 极坐标函数,求点坐标,已知一点pt,求距离为 dist,角度(两点连线与X轴正向之间的夹角)为 angle的另一点Q的坐标,其中angle为弧度,如 图5-5所示。例如: • 命令: (polar '(50 40) 0.785 50) • (85.3694 75.3413)
图5-5 Polar函数
• AutoLISP提供了大量的函数,每个函数都 实现特定的功能。通过调用AutoLISP函数, 并对这些函数做适当的组合和编排,就可 以编写一个AutoLISP程序,来完成用户的 特定的操作。AutoLISP语言是函数的语言, AutoLISP程序是由函数语句组成的。本节 将介绍最常用的AutoLISP函数,以便使读 者比较快地学习和理解AutoLISP程序设计。 详细而全面的函数说明可以参见AutoLISP 帮助。
• · (inters p1 p2 p3 p4 [ onseg ] )
• 求交点函数,返回两直线的交点坐标,其中p1、 p2为第一条直线的端点,p3、p4为另一条直线的 端点。如果设置了onseg参数且为nil,则认为两 条直线是无限长的,对于图5-6中的两种情况都能 求出交点。如果省略onseg参数或设置onseg为T (真值),则两条直线段不延长,那么对于图5-6, (a)情况可以求出交点,但(b)情况不能求出 交点。例如: • (setq a '(1.0 1.0) b '(9.0 9.0) c '(4.0 1.0) d '(4.0 2.0)) • (inters a b c d) ;; 返回nil • (inters a b c d T) ;; 返回nil • (inters a b c d nil) ;; 返回 (4.0 4.0)
• · (angtos angle [ mode [ precision ] ] )
• 角度格式化函数angtos,该函数把以弧度为单位的角度数值angle按 照指定的角度格式mode和精度precision转换成字符串,角度值angle 的大小在[0, 2π]之间。中括号“[ ]”内的参数可以不写。 • 参数angle可以是整型或实型常量、变量或表达式。 • 参数mode为角度格式编码,对应的系统变量为ANNITS。Mode的取 值为:0 — 十进制角度,1 — 度/分/秒,2 — 百分度,3 — 弧度, 4 — 勘测单位角度。 • 参数precision指定转换后小数点之后的小数位数,对应系统变量为 AUPREC。 • 例如:在命令行中输入 • 命令: (angtos 0.785398 0 4) • "45.0000" • 命令: (angtos -0.785398 0 4) • "315.0000" • 命令: (angtos -0.785398 4) • "S 45d E"
• · (>= x1 x2 …… )
• 大于等于函数,用法同大于函数,只是进行的是大于等于 判断。
• · (< x1 x2 …… )
• 小于函数,判断x1 < x2 < …… 是否成立。若每个参数值 都小于它右边的参数值,则返回T,否则返回nil。如果函 数仅有一个参数,则返回T。如果没有参数,则提示出错。 例如:(< 12 13) 返回T,(< "abc" "abd") 返回T。
• 参数mode为线性单位的格式编码,与AutoCAD 的线性格式相对应,具体对应关系如表5-4所示。 如果没有指定mode的值,将采用系统变量 LUNITS的值来指定当前的线性单位格式。
表5-4 rtos函数中mode的值与线性单位格式的对应关系
mode值 线性单位格式
1 2 3 4 5 科学 十进制小数 建筑(英尺 + 分数英寸) 分数
• · (equal expr1 expr2 [ fuzz ] )
• • • • • • • • • • • • •
(2)逻辑函数
• · (and [expr1] [expr2] [expr3] …… )
• AND函数,用于表达式的“逻辑与”运算,参数expr1,expr2,…… 为AutoLISP表达式。只有当所有参数的值都不为空时,函数才返回真 (T);只要有一个参数的值为空(nil),函数就停止求值并返回假 (nil);如果不提供参数而调用该函数也返回真(T)。 • 例如: (setq a 103 b nil c "string") ;; a = 103 b = 0 c = "string" • (and 1.4 a c) ;; 返回T • (and 1.4 a b c) ;; 返回nil,因为b = 0