




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章 二维几何建模方法 *1CAD/CAM n6.1 交互几何建模 n6.2 AUTOLISP语言 n6.3参数化几何建模 n6.4形状特征法拼合法几何建模 Date2 CAD/CAM 6.1 交互几何建模 自学 返 回 第 六 章 Date3 CAD/CAM 解释型语言解释型语言 用户编写的源程序代码直接由解释器用户编写的源程序代码直接由解释器 解释并执行。解释并执行。 平台和操作系统独立平台和操作系统独立 AutoLispAutoLisp程序可移植性好,程序可在程序可移植性好,程序可在 多种平台和操作系统上运行。多种平台和操作系统上运行。 版本独立版本独立 AutoLispAutoLisp语言向后兼容,为任意版本语言向后兼容,为任意版本 AutoCADAutoCAD编写的编写的AutoLispAutoLisp程序可以在以后版程序可以在以后版 本的本的AutoCADAutoCAD中运行。中运行。 6.2 AutoLisp语言 Date4 CAD/CAM l l AutoLispAutoLisp与主流编程语言的比较: AutoLispAutoLisp与其他语言最大的区别是用表存与其他语言最大的区别是用表存 放数据,没有数组、结构等。放数据,没有数组、结构等。 变量没有明确的类型,变量类型在赋值时变量没有明确的类型,变量类型在赋值时 动态确定动态确定, ,不用事先定义变量类型。不用事先定义变量类型。 没有语句、关键词以及运算符。它是函数没有语句、关键词以及运算符。它是函数 定位的语言,所有运算都由函数调用完成。定位的语言,所有运算都由函数调用完成。 Date5 CAD/CAM l l AutolispAutolisp 有如下优点:有如下优点: (1 1)Lisp Lisp 是所用编程语言中最容易学习和掌握的是所用编程语言中最容易学习和掌握的 。 (2 2)AutolispAutolisp提供的大多数函数都是直接针对提供的大多数函数都是直接针对 AutoCADAutoCAD的操作,可用它编写访问的操作,可用它编写访问AutoCADAutoCAD的数的数 据库的操作。据库的操作。 (3 3)解释执行,立竿见影)解释执行,立竿见影 可以在可以在AutoCADAutoCAD的提示符:的提示符:command:command:下逐条输下逐条输 入入 AutolispAutolisp 指令,立即得到结果指令,立即得到结果。 (4 4)AutolispAutolisp 可在功能强大的开发工具可在功能强大的开发工具Visual lispVisual lisp上上 开发运行开发运行 Date6 CAD/CAM AutoLISP是开发AutoCAD的最主要的 工具。 用户可以利用AutoLISP语言实现对 AutoCAD当前图形数据库的直接访问和 修改,增加AutoCAD新命令和开发参数 化绘图程序等。 Date7 CAD/CAM (1) 符号 符号用于存储数据,“符号符号”与“变量变量”含义相当,可 互相交换使用。 符号: 除了一些特殊字符(如(、)、. 、 、 “、 ;)以外的任何可打印字符; l符号的大小写是等效的。 l不允许使用数字作为符号名的第一位。 l合法符号:abc、$AD、a3; l非法的符号:(a)、3d、a.b、A;等 6.2.1 6.2.1 AutoLISPAutoLISP的数据类型的数据类型 Date8 CAD/CAM (2) 字符串 字符串是由双引号引起来的字符序列组成。 字符串中同一字母的大小写被认为是不同的字符 ,空格也是一个有意义的字符。 例如:例如: ABC abc abc abc 在字符串中用可以添加控制字符。 例如:例如: r : 表示回车; n :表示换行; : 表示 ; e :表示ESC 键 Date9 CAD/CAM (3) 表 它是指放在一对左、右圆括号中的元素 的有序集合。 表中的项称为表的元素。 元素可以是:整型数、实型数、字符串 、符号、表、函数名; 例1:(21 30 45 60)为一个表,包含4 个元素。 例例2 2:(setq a 63)为一个表,表中包含 3个元素。 Date10 CAD/CAM 在Auto LISP语言中,用表来表示图形中 点的坐标。 例如: (56.4 30.0 8.0)表示三维点的坐 标; 第一、二、三个元素分别对应点的X、Y 、Z坐标值。 (setq a 63)表中三个元素: setq -为函数名;a -变量;表示:a=63 ( setq b ( + a 108) ) 表示:b = a + 108 Date11 CAD/CAM 表有两种基本类型:标准表和引用表; l标准表:表中第一个元素第一个元素必须是一个合法的已 存在的AutolispAutolisp函数函数,AutoCAD将按照此函数的 功能完成其操作; 例如: (setq b ( + a 108) ) l引用表: 在表前加一单引号( ),表示不对此 表作求值处理。 例如:(setq po (100 58 96) 表示:Po=(100 158 96) Date12 CAD/CAM (4) (4) 文件描述符文件描述符 文件描述符是一个指针文件描述符是一个指针,指向指向用Auto LISP语 言的OPEN函数打开了的某个文件文件。 该指针返回为一个数字标号; 在访问该文件时,根据该文件描述符对指定文 件进行操作。 例如:例如:(setq fp (open “myfile.dat” “w”)) (print “1563” fp) 第一句:以写的方式打开数据文件 myfile.dat,并把文 件的指针赋予文件描述符 fp ; 第二句:将字符串 “1563”输出到fp指向的数据文件。 Date13 CAD/CAM (5)实体名 实体名是AutoCAD系统在绘图过程中赋予所绘实 体的一个数字符号。 利用实体名,AutoLISP函数可以查找到实体的数 据库记录,并对实体进行各种处理。 例如例如:(setq elast (entlast)) 把最后绘制的实体用变量elast表示。 (6) 选择集 选择集是多个实体的集合。 在AutoLISP程序中可以构造一个选择集,并 把它赋予一个变量(或符号)供其它函数调用 。Date 14 CAD/CAM 1AutoLISP语言表达式与高级语言的区别 高级语言采用“中缀表示法”:运算符、赋 值符位于中间。 如:如:表达式 x=(a+b)c x=(a+b)*c AutoLISP语言采用“前缀表示法”:运算 符、赋值符位于前面。 如:如:表达式 x=(a+b)c (setq x ( * ( + a b) c ) 式中: setq = 6.2.2 AutoLISP语言的程序结构 Date15 CAD/CAM 2AutoLISP语言的程序结构与高级语言的程序 结构的区别: 高级语言的程序由一系列的语句组成。 AutoLISP语言的程序由一系列的表组成。 表的格式为: (function1 (function2 (function3 参数1 参数2 ) l l 表中第一个元素是表中第一个元素是函数,其余元素是该函数所需 要的参数,每个参数又可以是另一个表,即表可以 嵌套。 l l 表的运算过程表的运算过程:先内后外 Date16 CAD/CAM 例如: (defun init_global_date ( ) (setvar “cmdecho“ 0) (setq dssf (getvar “osmode“) (setvar “osmode“ 0) (setq p1 (/ pi 2) (setq p2 ( * (/ pi 2) 3) (setq p3 (/ pi 4) (setq a0 ( * pi (/ 20.0 180.0 ) ) ) (setq list_n “1“) (setq init_point (list 100 100 ) ) ) Date17 CAD/CAM (1)加函数 ( ) ) 该函数返回 + 相加 的和 (2) 减函数 ( ) ) 该函数返回- 的差。 (3) 乘函数(* * ) ) 该函数返回相乘的积 。 6.2.3 AutoLISP的数值计算函数 Date18 CAD/CAM (4) 除函数(/ / ) ) 该函数返回的商。 (5)乘方函数(expt expt ) 该函数返回数为底的次幂的值 (6)平方根函数(sqrtsqrt ) 该函数返回数的实型平方根。 Date19 CAD/CAM (7)正弦函数(sin sin ) 该函数返回角度的正弦值,其中 的单位为弧度。 (8) 余弦函数(cos cos ) 该函数返回角度的余弦值,其中 的单位为弧度。 (9)求整函数(fix fix ) 该函数返回小于或等于的最大整数 。 Date20 CAD/CAM (1)等于函数(= 原子1 原子2 原子3 ) 原子:数或字符串; 所有原子都相等,函数返回 T,否则返回 NIL ; 例如:(if (= x y z) (fx1) (2)不等于函数(/= 原子1 原子2 ) 所有原子都不相等,函数返回T,否则返回 NIL; 例如:(if (/= x y z) (fx2 ) 6.2.4 逻辑运算函数 Date21 CAD/CAM (3)小于函数 (原子1 原子2 原子3 ) 如果 原子1原子2原子3,函数返回T,否则 返回NIL; Date22 CAD/CAM (5)表达式相等测试函数 (eq 式1 式2)(略) 若表达式1与表达式2完全相同,函数返回T,否 则返回NIL; (6)表达式值相等测试函数 (equal 式1 式2)( 略) 若表达式1的函数值与表达式2的函数值完全相同 ,函数返回T,否则返回NIL; 如:a=3 b=6 c=16 ; d=3 e=6 f=16 (setq s1 ( + ( a b c)) (setq s2 ( + (d e f) ( eq s1 s2) (equal s1 s2) 返回NIL 返回T. Date23 CAD/CAM 6.2.5表处理函数 (1)取表中第一个元素 (car ) 该函数返回中的第一个元素。 (2)取子表(cdr ) 该函数返回中去掉第一个顶层元素后剩下 的元素组成的表。 (3)取表中第n个函数(nth ) 该函数返回中第n个元素。 n为元素序号,从0开始计数。 例如:例如:(nth 0 (a b c d e f ) a (nth 3 (a b c d e f ) d Date24 CAD/CAM (4)构建表函数 (list ) 该函数返回所有表达式 的值构成的表。 例如:例如:(setq x 58 y 62) (list x y) (list ( + x 100) (+ y 100) 157) (58 62) (158 162 157) Date25 CAD/CAM (5)取表中最后一个元素 (last ) 该函数返回中的最后一个元素。 (6)测表长度函数(length ) 该函数返回的长度,即表中元素的个数。 例:例:(length (a b c) 3 (length (a (b c) 2 Date26 CAD/CAM 执行族输入函数时,计算机将暂停下来 ,等待接受来自键盘、数字化仪或鼠标器的输入 。 (1) 整型数输入函数(GETINT 提示) 执行该函数时,将等待用户输入一个整型数,并 返回该整型数。 例如:例如:(setq z ( getint “请输入齿数Z=” )) 屏幕显示:屏幕显示:请输入齿数Z= 20 6.2.6 GET 族输入函数 Date27 CAD/CAM (2) 实型数输入函数(GETREAL GETREAL 提示提示 ) 执行该函数时,将等待用户输入一个实数,并返执行该函数时,将等待用户输入一个实数,并返 回该数对应的实型数。回该数对应的实型数。 例如:例如: (setq M setq M (GETREAL “(GETREAL “请输入模数请输入模数M =” )M =” )) 屏幕显示:请输入模数请输入模数M= M= 2.52.5 Date28 CAD/CAM (3)(3)点输入函数点输入函数( (GETPOINT GETPOINT 基点基点 提示提示 ) 执行该函数时,将等待用户输入一个点。执行该函数时,将等待用户输入一个点。 输入方法:输入方法:键盘键盘或用或用光标在屏幕上拾取一点光标在屏幕上拾取一点。 1) 1) (GETPOINT GETPOINT 提示提示 ) 例如: (setq P1 (GETPOINT “请输入基点坐标P1 =” )) 屏幕显示:屏幕显示:请输入基点坐标P1 =100,100 或在屏 幕上拾取一点,赋值给P1 Date29 CAD/CAM 2) 2) (GETPOINT GETPOINT 基点基点 提示提示 ) 例如:例如:(setq P2 (GETPOINT P1 “请输入第 二点坐标P2 =” )) 屏幕显示:屏幕显示:请输入第二点坐标P2= 50,50 或 在屏幕上拾取一点,赋值给P2; 此时,在屏幕从基点P1点向P2点(或光标处 )出现一条可拖动的直线。 Date30 CAD/CAM (4) 角度输入函数 (GETANGLE 基点提示) 执行该函数时,将等待用户输入一个角度值,并 返回以弧度表示的该角度值。 角度的确定原则: 以ANGBASE变量的当前角度值为零度基准线 ,按输入角度逆时针方向测量。 Date31 CAD/CAM 1) 1) (GETANGLE (GETANGLE 提示提示 ) 等待用户输入一个角度 并将该角度以弧度返回,角度按逆时针方向测 量绘制。 45 例如:例如: 设ANGBASE变量的当 前角度值为零度。 (setq A (GETANGLE “请输入 角度A =” )) 屏幕显示:屏幕显示:请输入角度 A = 45 ,赋值给A Date32 CAD/CAM 等待用户在屏幕上指定两点的方式输 入一个角度 例如:例如:设ANGBASE变量的 当前角度值为零度。 (setq A (GETANGLE “ 请输入角度A =” )) 屏幕显示:屏幕显示:请输入角度A =P1,P2 A P1 P2 Date33 CAD/CAM 2) 2) (GETANGLE GETANGLE 基点基点 ) 等待用户在屏幕上指定第二点的方式输入一个等待用户在屏幕上指定第二点的方式输入一个 角度角度 例如:例如:(setq ANGBASE 90) (setq P2 (GETPOINT P1 “请输入第二点坐标 P2 =” )) P1 P2 屏幕显示:屏幕显示:请输入第二点坐标 P2= 50,50 或在屏幕上拾取一 点,同上获取一个角度。 Date34 CAD/CAM (5)(5)字符串输入函数字符串输入函数 (GETSTRING T GETSTRING T 提示提示 ) 执行该函数时,将等待用户输入一个字符串, 并返回该字符串 1 1)()(GETSTRING T GETSTRING T 提示提示 ) T表示:输入的字符串中可以有空格,用回车键 终止字符串的输入。 2 2)()(GETSTRING GETSTRING 提示提示 ) 表示:输入字符串时,用空格键或回车键终止字符串 的输入。 Date35 CAD/CAM 例如:例如:要求输入参数: “This is a book”,并 赋值给变量 S1 。 (setq s1(GETSTRING T “请输入参数 :”) 屏幕显示:屏幕显示:请输入参数:This is a book S1=“This is a book” (setq s1 (GETSTRING “请输入参数:” ) 屏幕显示:屏幕显示:请输入参数:This S1=“This” Date36 CAD/CAM (6)距离输入函数 (GETDIST 基点 提示) 执行该函数时,将等待用户输入一个距离值 。 输入方法有两种: 等待用户输入一个距离值 例:(setq L1 (GETDIST “请输入L1的长度 =” )) 屏幕显示:屏幕显示:请输入L1的长度 =153 1) 1) (GETDIST GETDIST 提示提示 ) Date37 CAD/CAM 等待用户在屏幕上指定两点的方式输入一 个距离值 例如: (setq L1 (GETDIST “请输入L1的长度 =” ) ) 屏幕显示:请输入L1的长度 = 用户在屏幕上 用光指定两点 P1,P2,返回两点间的距离 Date38 CAD/CAM 2)(GETDIST 基点 提示) 已知第一点坐标,输入第二点坐标,求两点 间的距离 例如:(setq L1 (GETDIST P1 “请输入第二 点坐标P2 =” )) 屏幕显示:屏幕显示:请输入第二点坐标P2 = 83,92 计算机将返回P1,P2 两点间的距离,并赋值 给L1 Date39 CAD/CAM 位值的作用:控制允许 输入的方式,取值范围1 127; 位置位置含义含义 1 1 不允许空输入不允许空输入 2 2 不接受零值不接受零值 4 4 不接受负值不接受负值 8 8 不检查屏幕限定范围不检查屏幕限定范围 1616未使用未使用 3232用虚线画拖动线和矩形框用虚线画拖动线和矩形框 6464忽视三维点的忽视三维点的z z坐标坐标 (7)输入控制函数 (INITGET INITGET 位值位值 关键字列表关键字列表 ) 表中的位值位值可以组合 相加得到一个值,该值可 同时起几种控制作用。 该函数为其后使用的GET族函数建立各种控制选项。 Date40 CAD/CAM 关键字列表的作用: 定义一个关键字表,用于对其后GET族函数的输 入值进行检查,判断用户的输入是否与表中规定的 输入类型相符。若不相符,AUTOCAD将要求用户 重新输入 关键字列表的两种形式:关键字列表的两种形式: 1) “关键字1 关键字2 关键字3 ,大写的缩写 字母1 大写的缩写字母2 大写的缩写字母3 ” 输入时只输入相应得大写的缩写字母。 Date41 CAD/CAM 例如: (initget 7 “Radius Diameter ,R D” ) (setq W (GETSTRINGGETSTRING “n请选择:直径(D)/半径 (R)“) (If (= W “Diameter” )(SETQ D (GETREALGETREAL “ 请输入直径” )(SETQ R (GETREALGETREAL “请输入半径” ) ) ) Date42 CAD/CAM 2 2)列表:“关键字1 关键字2 ” 关键字中保留的字母用大写,其余的用小写。 例1:(initget 7 “Ltype Color” ) (setq W (GETSTRINGGETSTRING “n请输入:线形(L)/颜 色(C)“) Date43 CAD/CAM (defun gety( ) (initget 1 “Pi Two-pi,P T”) (setq x (getreal “Pi /Two-pi/:”)) (cond (eq x “Pi”) (setq y pi) (eq x “Two-pi”) (setq y ( * pi 2) (setq y x) ) (print y) ) 例2: 若x=“Pi”, 则 y=3.14159 若x=“Two-pi”, 则 y=6.28318 其余 y=x Date44 CAD/CAM (8)关键字输入函数 ( getkword 提示) 该函数要求用户输入一个关键字。 在调用本函数之前需先用INITGET函数设置一 个关键字表。 例例1 1: (initget 1 “Yes No”) (setq W (getkword “Are you sure ?(Yes/ No)”) 输入Y 或N Date45 CAD/CAM 例2: (initget 7 “6 8 10 12 15 16 18 20 “) (setq M (getkword “n请选择螺栓直径 M”) ) Date46 CAD/CAM 6.2.7 计算函数 1 求方位角函数 (angle (angle 点点1 1 点点2)2) 该函数返回两点连线的方位角。该函数返回两点连线的方位角。 从当前作图平面的从当前作图平面的X X轴正向开始,按逆时针方向轴正向开始,按逆时针方向 计算该角度。计算该角度。 例如:例如: (angle (1.0 1.0) (1.0 8.0)angle (1.0 1.0) (1.0 8.0)) 1.57071.5707 3.1415933.141593 (angle (5.0 1.33) (2.4 1.33)angle (5.0 1.33) (2.4 1.33)) Date47 CAD/CAM 6.2.7 计算函数 2 求两点间距离函数 (distance 点1 点2) 该函数返回两个三维点之间的距离 (distance (1.0 2.5 3.0) (7.0 2.5 3.0) 6.000000 Date48 CAD/CAM 6.2.7 计算函数 3 已知一点求另一点坐标的函数 (polar polar 已知点已知点 方位角度方位角度 距离距离 ) 该函数可以根据一个已知点求出另一个点。 角度是另一点所在方位角; 例如: 若P1=(26 150 562),求距 P1 点L,方位角30的点坐 标; (SETQ P2(polar P1 30 L )) Date49 CAD/CAM 6.2.7 计算函数 4求交点函数 (inters 点1 点2 点3 点4 方式) 该函数返回两条线的交点。 点1 与 点2 :为第一条线的两个端点; 点3 与 点4: 为第二条线的两个端点; 相交方式: 若方式为 “NIL”,则交点可以在两 条线段的延长线上; 若无方式,则交点只在两条线段内; Date50 CAD/CAM 6.2.8 字符串处理函数 (1)字符串长度函数 (strlenstrlen 字符串字符串1 1 字符串字符串2 2 ) 该函数返回字符串的长度,即字符串 中所含字符的个数。 例如: (strlen “about”) 5; (strlen “a” “b” “ t”) 3 Date51 CAD/CAM 6.2.8 字符串处理函数 (2) (2) 字符串连接函数 (strcatstrcat 字符串字符串1 1 字符串字符串2 2 ) 该函数返回由字符串该函数返回由字符串 2 构成的长字符串。构成的长字符串。 例如:例如: ( strcatstrcat “M” “50 ” “M” “50 ”) ( strcatstrcat “%C” “50” “%C” “50” ) “ “M50”M50” ( strcatstrcat “R” “50” “R” “50”) “ “R50”R50” “ “ 50”50” Date52 CAD/CAM 6.2.8 字符串处理函数 (3)求子字符串函数: (substrsubstr 长度长度mm) 该函数返回从字符串第该函数返回从字符串第 字符位置开始,连字符位置开始,连 续读取续读取个字符组成一个个字符组成一个新字符串新字符串。 例如:例如: (substrsubstr “ “abcdefgabcdefg” 4 3” 4 3) “ “def”def” “ “bcdefgbcdefg” ”(substrsubstr “ “abcdefgabcdefg” 2 ” 2 ) Date53 CAD/CAM 6.2.8 字符串处理函数 (4) 整型数转换为数字型字符串函数 (itoaitoa 整型数)整型数) 该函数将整型数转换为一个该函数将整型数转换为一个 例如:例如:(itoaitoa 65 65) “ “65” 65” R65 R65 ( strcatstrcat “R” “R” (itoaitoa 65 65) ) Date54 CAD/CAM 6.2.8 字符串处理函数 (5) 数字型字符串转换为整型数函数 (atoiatoi ) 该函数将该函数将 转换为一个整型数。转换为一个整型数。 例如:例如: (atoiatoi “5785” “5785”) 57855785 (atoiatoi “5785.863” “5785.863”) 57855785 Date55 CAD/CAM 6.2.8 字符串处理函数 (6) 数字型字符串转换为实型数 (atofatof ) 该函数将该函数将 转换为一个转换为一个 实型数实型数。 例如:例如: (atofatof “5785.863” “5785.863”) 5785.8635785.863 (atofatof “5785” “5785”) 5785.05785.0 Date56 CAD/CAM 6.2.8 字符串处理函数 (7) 整型变实型函数 (floatfloat整型数)整型数) 该函数将该函数将“ “整型数整型数” ”转换为一个转换为一个实型数实型数。 例如:例如:(float 6float 6) 6.06.0 (8) 实型变整型函数 (fix fix 实型数)实型数) 该函数将该函数将“ “实型数实型数” ”转换为一个整型数。转换为一个整型数。 例如:例如: (fix 5.6fix 5.6) 5 5 Date57 CAD/CAM 6.2.8 字符串处理函数 (9)角度单位制转换函数 (angtosangtos 角角 方式方式 精度)精度) 该函数将该函数将“ “角角” ”(单位为弧度)转换为其他(单位为弧度)转换为其他单位制单位制 ,并以,并以字符串字符串的方式返回角度。的方式返回角度。 方式:方式:0 0 转换为度;转换为度; 1 1 转换为度转换为度/ /分分/ /秒秒 2 2 转换为梯度;转换为梯度;3 3 转换为弧度;转换为弧度; 精度:精度:小数的位数;小数的位数; 例如:例如:(angtosangtos 0.3928 0 2 0.3928 0 2) (angtosangtos 0.3928 1 1 0.3928 1 1) 22.5022.50 2230022300 Date58 CAD/CAM 6.2.8 字符串处理函数 (10)实型数计数制转换函数 (rtosrtos 实数实数 方式方式 精度)精度) 该函数对该函数对“ “实数实数” ”按要求的按要求的“ “方式方式” ”和给定的和给定的“ “ 精度精度” ”进行进行计数制计数制的转换,并以的转换,并以字符串字符串的方式返的方式返 回。回。 方式:方式: 1 1 科学计数法;科学计数法; 2 2 十进制;十进制; 3 3 工程制(英寸与小数英寸);工程制(英寸与小数英寸); 4 4 建筑制(英寸与分数英寸);建筑制(英寸与分数英寸); Date59 CAD/CAM 6.2.8 字符串处理函数 例如例如:(rtos 10 1 3rtos 10 1 3) (rtos 1000000 2 2rtos 1000000 2 2) ( strcatstrcat “%C” “%C” (rtos 1000000 2 2rtos 1000000 2 2) ) “ 10”10” “ “1.850E+011.850E+01” ” “ “10”10” Date60 CAD/CAM 6.2.9 条件分支函数 (1)(1)条件函数 (if 表达式表达式2)2) 该函数根据该函数根据“ “条件条件” ”的真或假来执行后面的表达的真或假来执行后面的表达 式。式。 若测试若测试条件条件为真(为真(T T),则执行),则执行“ “表达式表达式1 1” ”, 否则,就执行否则,就执行“ “表达式表达式2 2” ”。 (setq x (getreal “setq x (getreal “请输入请输入 x=”)x=”)) (if ( = x 0) (setq (if ( = x 0) (setq fxfx ( ( x 5) x 5) (setq (setq fxfx ( ( x 6) )x 6) ) (print (print fxfx) ) 例如:例如:f (x) = = x x-6 x ) ( ) ( ) ) 该函数将依次检查每一个该函数将依次检查每一个 的值,若查的值,若查 到某个到某个 的值为真(的值为真(T T),则执行与该),则执行与该 相关的那些表达式。此时函数不再对剩余的相关的那些表达式。此时函数不再对剩余的 其它分支进行测试。其它分支进行测试。 Date62 CAD/CAM 6.2.9 条件分支函数 例例 如:如: f (x) f (x) = = x+2x+2 x x00 x x2 2 +3+3x x+5 +5 x x x 0) (setq fx (+ x 2 ) ( ) 该函数按照给定的该函数按照给定的“ “次数次数” ”,重复执行后面的,重复执行后面的 所有表达式,并返回最后一次循环的最后一个所有表达式,并返回最后一次循环的最后一个 表达式的值。表达式的值。 例如:求例如:求 (defun sum ( / n s)defun sum ( / n s) (setq n 1 s 0setq n 1 s 0) (repeat 100(repeat 100 (setq s (+ s n) (setq s (+ s n) (setq n ( 1 + n) (setq n ( 1 + n) ) ) ) ) Date64 CAD/CAM 6.2.10 循环函数 (2)(2)循环函数循环函数 (while ) 该函数先对测试该函数先对测试 求值,若为真求值,若为真(T)(T),则,则 执行后面所有的表达式,然后再次对测试执行后面所有的表达式,然后再次对测试 求值。重复上述过程,一直循环到测试求值。重复上述过程,一直循环到测试 的的 值为值为nilnil为止。为止。 WhileWhile返回最后一次循环时的最后一个表达式返回最后一次循环时的最后一个表达式 的值。的值。 Date65 CAD/CAM 6.2.10 循环函数 例如:求例如:求 (defun sum (/ n s)defun sum (/ n s) (setq n 1 s 0setq n 1 s 0) (WHILE ( ) 如:如:(if 表达式表达式2)2) 其中,式其中,式1 1和式和式2 2 只能有一个表达式。只能有一个表达式。 Date67 CAD/CAM 6.2.10 循环函数 (If ( D 50) If ( D 50) (PRONG (PRONG (SETQ A 20 ) (SETQ A 20 ) (SETQ B 30) (SETQ B 30) (SETQ C (+ A B) (SETQ C (+ A B) (PRINT CPRINT C) ) (PRONGPRONG (SETQ A 35 ) (SETQ A 35 ) (SETQ B 42) (SETQ B 42) (SETQ C (+ (SETQ C (+ (* *A 2) A 2) B) B) (PRINT CPRINT C) ) ) 例如:例如: 若若 D50D50: A=20A=20,B=30B=30,C=A+BC=A+B; 若若 D ./ ./ .2.) 形参:形参:在函数调用时必须用实参代替;在函数调用时必须用实参代替; 局部变量:局部变量:仅用于函数内部,不参与函数传递。仅用于函数内部,不参与函数传递。 Date70 CAD/CAM (defun sum (n /s) (setq i 1 s 0) (WHILE ( 3 ) 2 调用AutoCAD标准命令的函数 Date72 CAD/CAM n n 为调用为调用AutoCADAutoCAD命令所需要的全部命令所需要的全部 数据,它们的格式取决于数据,它们的格式取决于AutoCADAutoCAD命令时实际命令时实际 需要的数据。需要的数据。 n n CommandCommand命令有以下约定:命令有以下约定: n n (1 1)作为参数的)作为参数的AutoCADAutoCAD命令,相应的选项命令,相应的选项 均应以不含空格的字符串表示,大小写均可。均应以不含空格的字符串表示,大小写均可。 n n (2 2)调用)调用lineline、plinepline、layerlayer等命令时,最后以等命令时,最后以 “”“”结尾结尾 n n (两个双引号间不能加空格),等效于在键盘(两个双引号间不能加空格),等效于在键盘 上按一次空格键,以终止该命令的执行。上按一次空格键,以终止该命令的执行。 n n (3)(3)用用commandcommand命令可执行多条命令可执行多条AutoCADAutoCAD命令命令 。 Date73 CAD/CAM (command “circle” (20 16) 5 )(command “circle” (20 16) 5 ) 例例1 1: 从点(从点(5 5,4 4) 到点(到点(2020,1515)画一条直线。)画一条直线。 (command “line” “5command “line” “5,4” “204” “20,15” “”15” “”) 或或 (command “line” (5 4) (20 15) “”command “line” (5 4) (20 15) “”) 例例2 2:过中心(过中心(20, 1620, 16)画半径为)画半径为5 5的圆。的圆。 Date74 CAD/CAM 格式:格式: (defundefun C: C:命令名(命令名( / 2) 表达式表达式 ) 用该方法定义的命令,在用该方法定义的命令,在AutoCADAutoCAD环境下可以利环境下可以利 用用Load Load 命令被加载到内存中,可以像命令被加载到内存中,可以像AutoCADAutoCAD的命的命 令一样使用。令一样使用。 调用格式:调用格式: 命令名命令名 3 3 定义定义AutoCADAutoCAD命令的函数命令的函数 Date75 CAD/CAM 例如:例如:已知一点坐标与边长。定义画一个正方形的已知一点坐标与边长。定义画一个正方形的 命令。命令。 (defundefun C:squareC:square ( / pt1 pt2 pt3 pt4) ( / pt1 pt2 pt3 pt4) ( (setqsetq pt1 ( pt1 (getpoitgetpoit “ “输入左下角坐标:输入左下角坐标:” ” ) ) ( (setqsetq lenlen ( (getdistgetdist “ “输入边长:输入边长:” ” ) ) ( (setqsetq pt2 (polar pt1 0.0 pt2 (polar pt1 0.0 lenlen ) ) ( (setqsetq pt3 (polar pt2 ( / pi 2) pt3 (polar pt2 ( / pi 2) lenlen ) ) ( (setqsetq pt4 (polar pt3 pi pt4 (polar pt3 pi lenlen ) ) (initgetinitget 1) 1) (InitgetInitget 7) 7) Date76 CAD/CAM (command “PLINE” pt1 pt2 pt3 pt4 “c”)(command “PLINE” pt1 pt2 pt3 pt4 “c”) ) ) 调用格式:调用格式: command: command: squaresquare Date77 CAD/CAM 简单示例:绘制下图的长方形和圆。已知长方形 的长和宽,圆的半径。要求圆在长方形内。 分析:绘制该图首 先应有一个绘图基 点pt_base。长方 形的绘制可用line 、pline和rectang 命令绘制。绘制该 图时用到的点位图 及相关参数如右图 所示。 程序设计小技巧:将问题分散解决,逐步完善程序的功能 。 本例中先编制绘制长方形和圆,将“要求圆在长方形内”条件 及中心线绘制一个一个地解决,将问题分散解决。Date78 CAD/CAM 文件名:lt1.lsp Date79 CAD/CAM Date80 CAD/CAM 程序设计的核心是算法设计,算法的特性之一 是:健壮性,即程序的容错处理技术。 运行出错时显示如下: 问题1:可否将while改为if? 动态数据提示 问题2:圆与长方形内切,程序怎么改? Date81 CAD/CAM 应用举例 趣味程序 绘制下图所示的趣味图形,以指定点为起点, 绘指定长度的任意多条直线,每绘一条直线就自动 变化一种颜色,且在360内画完所有直线。 Date82 CAD/CAM Date83 CAD/CAM 该程序还存在不足,当输入直线条数255时则出错。运行时输入500,出错内容如下: 命令: color 输入默认对象颜色 真彩色(T)/配色系统(CO) : 256 颜色编号无效。 ; 错误: 函数被取消 输入默认对象颜色 真彩色(T)/配色系统(CO) : Date84 CAD/CAM Date85 CAD/CAM 首要应掌握的简单基本函数 (+ ) (- ) (* ) (/ ) (1+ ) (1- ) (abs ) (sin ) (cos ) (= ) (/= ) () ( ) (and) (or) (not) (itoa ) (atoi ) (atof ) (fix ) (float) (itoa ) (atoi ) (atof ) (fix ) (float) Date86 CAD/CAM (strcat ) (substr ) (strcase ) (strlen ) (polar) (angle) (osnap (car) (cdr) (last) (nth) (list) (while ) (repeat) (open) (close) (getint) (getreal) (getstring) (getpoint) (getcorner) (getangle) (if) (cond() () Date87 CAD/CAM 6.3 参数化几何建模 一、参数法图形程序设计的特点 在机械图中,像键、销、螺钉、螺母、 滚动轴承等标准件,其形状是相似的,因此它 们的二维视图也很相似,所以常采用参数化编 程方式来绘图。 参数化绘图:将图形中的某些尺寸或全部尺寸 定义为变量,在画几何形状类似的图形时给变 量赋以新值,就可以得到大小不同的图形。参 数化绘图主要是确定基本参数和参数化处理。 返 回 第 六 章 Date88 CAD/CAM 参数化绘图特点: 1、在参数化程序方式下,用户无需逐步绘 图,只需输入一些参数即可。 2、参数化绘图减少了用户输入数据的 数量,提高了作图精度和作图效率。 3、可以解决用交互方式难以绘制的图 形。 Date89 CAD/CAM 二、参数法编程步骤与方法 1、确定参数 1)对抽象的几何图形,可用尺寸标注作为图形参数 。 2)机械图中的图形表示具体的零件或结构,因此参 数的名称和定义应尽量结合工程实际,如普通平键的 图形参数为: L RR L a) 不好 b) 好 3)优先考虑描述零件规格、性能的参数作为图形参 数。如:螺钉外径、滚动轴承内径、用齿轮的模数、 齿数和变位系数代替分度圆和齿顶圆直径等。 Date90 CAD/CAM 4)为便于用户操作,参数的数量应尽量少。 方法:利用规格尺寸,从文件或数 据库中检索出其它尺寸数据;(开槽圆 柱头螺钉可由D和 L查其它参数) 在不影响零件表达情况下,图形的 某些部分采用简化画法,使其参数间建 立一定关系,从而可省去一些参数。( 如螺栓的简化画法) Date91 CAD/CAM 2、通过已确定参数确定构成图形的各个实体 的几何参数 3、调用图形函数或图形命令绘制图形 如:用Autolisp语言绘制 Date92 CAD/CAM (defun c:featureg() (setq p0 (getpoint “n插入点:“) (setq alf (getangle p0 “n旋转角:“) (setq L (getdist p0 “n键槽长:“) (setq b (getdist p0 “n键槽宽:“) (setq r (* 0.5 b) L1 (- L b) (setq p1 (polar p0 (+ (* 0.5 pi) alf) r) (setq p2 (polar p1 alf L1) (setq p3 (polar p2 (+ (* 1.5 pi) alf) b) (setq p4 (polar p1 (+ (* 1.5 pi) alf) b) (command “pline“ p1 p2 “a“ p3 “L“ p4 “a“ “cl“) ) p1p1 p3p3 p2p2 b p4p4 L 图图6-32(g) 6-32(g) featureafeaturea p0p0 L1 Date93 CAD/CAM n以下图所示的平头螺钉为例,利用内嵌在AutoCAD 内部的Autolisp语言编写参数化绘制平头螺钉的程序 。 Date94 CAD/CAM n如图8-8所示,设P0点为该螺栓的插入点坐标,d、 ld为规格参数,该螺栓水平放置,可以确定P1P12个 点的坐标分别为(代表相对符号,pi代表圆周率) nP1P0 pi/2 d/2 P7P0 0 ld-0.1d nP2P1 0 ld-2d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土施工过程中质量监督与检查方案
- 建筑工程建筑物电气接地施工方案
- 胎膜早破47课件
- 跨境电子商务双语教程 课件 第5章 跨境电商物流与海外仓
- 混凝土浇筑后的钢筋保护方案
- 文库发布:水电站课件
- 正确认识人的本质37课件
- 直线回归与相关的区别和联系王万荣65课件
- 2025版汽车配件品牌区域总经销服务合同
- 2025版离婚协议书及财产分割及子女抚养及赡养费及共同债务及共同债权及子女教育协议
- 2025年贵州贵阳市水务环境集团有限公司招聘27人笔试参考题库附带答案详解(10套)
- 2025届中国南方航空“明珠优才管培生”全球招聘30人笔试参考题库附带答案详解(10套)
- 原发性系统性淀粉样变性的护理措施课件
- 《阿房宫赋》课件 统编版高中语文必修下册
- 桥小脑角肿瘤护理查房
- 2025小学教师招聘考试试题及答案
- 2025年纪律作风测试题及答案
- 2025江苏苏州昆山国创投资集团有限公司第一期招聘17人笔试参考题库附带答案详解版
- 安全生产网格化管理工作实施方案
- 入场安全教育培训
- 艺术设计专业教学标准(高等职业教育专科)2025修订
评论
0/150
提交评论