




免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AutoLISPAutoLISP 入门入门 单元一 AutoLISP 主角登场 2 单元二 AutoLISP 的关键 基本结构及语法 4 单元三 快速分类浏览 AutoLISP 功能函数 一 10 单元四 快速分类浏览 AutoLISP 功能函数 二 13 单元五 轻松快速的掌握 AutoLISP 设计技巧 16 单元六 图元数据的取得与活用技巧 一 21 单元七 图元数据的取得与活用技巧 二 25 单元八 新手上路 参数设计的关键技巧 32 单元一 单元一 AutoLISP 主角登场主角登场 一 AutoLISP 是何方神圣 1 AutoLISP 是 AutoCAD 的最佳拍檔 2 AutoLISP 内含于 AutoCAD 软件内 不用另外花钱买 3 AutoLISP 是强化 AutoCAD 最好 最直接的 程序语言 4 AutoLISP 易学 易用 即使不会程序设计的 AutoCAD 使用者 都能在最短的 时间内 写出令人 惊讶 赞叹的功能 若说 AutoLISP 的出现 是替 AutoCAD 创造一片天的 最大功臣 实不为过一点也不夸张 5 AutoLISP 希望您去学习它 改善它 发挥它 享受它 真的 它的威力 魅力无穷 二 AutoLISP 程序语言的特质分析 学习 AutoLISP 是非常容易的 对初学者而言 即使没有学习过任何的程序语言 都能很快的上手 写 出精彩漂亮的 AutoLISP 程序 语法简单 不用特殊的变量宣告 非常富有弹性 比起其它的程序语言 它的语法可说是非常简单而 有其独特的风格 功能函数强大 除一般性的功能函数外 又拥有为数不少控制配合 AutoCAD 的特殊函数 再加上 AutoLISP 可直接呼叫执行所有 AutoCAD 的指令 以及掌握运用所有的 AutoCAD 系统变量 功能之 强大令人欣喜不已 撰写的环境不挑剔 只要是一般的文书编辑软件都适用 如 Windows 的记事本 PE2 PE3 DW3 书中仙 汉书 EDIT 等 直译式程序 不用再作编译 即写即测 即测即用 马上可以在 AutoCAD 中响应效果 马上就 有成就感 横跨各作业平台 悠然自得 虽然 AutoCAD 有 DOS Windows 版本之分但是 AutoLISP 却可在不 改写的原貌下 加载与执行 三 撰写 AutoLISP 的动机 1 欲强化 AutoCAD 原有指令时 2 欲创造更有用的 AutoCAD 新指令 3 欲简化繁琐的环境设定或绘图步骤时 4 欲处理参数式绘图时 5 欲做图面资料读文件 写文件 6 欲做 AutoCAD 简报展示时 7 欲达到真正灵活掌控 AutoCAD 时 8 欲提升自己跨上 AutoCAD 高手列车时 四 AutoLISP 的效益评估 1 对公司负责人或设计主管而言 A 也许某员工或干部花了 20 个小时撰写一个 AutoLISP 程序 表面上 这将近三天的时间 他连一 张图都没有画 甚至可能偶有发呆 沈思 若此程序一天可以替公司绘图部门节省 1 小时绘图时间 那算一算 只要 20 天就抵销开发成本 而 20 天以后都是赚的 用的愈久 省的愈多 B 若员工皆有此动力 在不影响正常工作 鼓励 都来不及 那有 压抑 的道理 甚至还要派遣 优秀人员出去受训 学习更好的设计技巧与创意呢 C 千万不要因为您的不懂或压抑 SHOW 您的权威与 POWER 如此 不但对员工造成打击 甚至您 可能成为阻碍了公司计算机化进步的罪魁祸首 D 当然 若要撰写的程序很多 内部设计人员的程序功力距离太远 达成需求的时间反而变得遥遥 无期 那倒不如求助于市面上已有的相关 AutoCAD 支持软件 2 对设计人员而言 A 得到一笔提升绩效奖金呢 当然 无形中 AutoCAD 高手的封号 也将功力又往前迈出了一 大步 对个人的成长帮助匪浅 幸运的话 搞不好还可以黄袍加身 不亦乐乎 B 半桶水 响叮当 千万不要因为会写 AutoLISP 程序而自傲 孤僻 嚣张起来 功力的增长 只是让您有更多 服务他人 服务公司 的机会 若自恃过重 宁可不要 C AutoLISP 程序功力的累进 是无远弗届的 千万不要 孤芳自赏 人外有人 天外有天 也许 您觉得是 宝贝加三级 的程序 只是其它设计师基本程序中的一部份罢了 D 既然 AutoLISP 是 AutoCAD 的 最大功臣 当然不会轻易被舍弃 如此 您的学习 保证不会 白费 E 精益求精 虚心求教 用心学习 观摩 决心成为高手 3 对程序本身而言 A 少少的几行 却可能有 大大满意 的时候 B 充份掌握了控制 创造 AutoCAD 的 尚方宝剑 让您在 AutoCAD 的设计运作中 得心应 手 享受无比的快乐与成就感 五 如何有效的学习 AutoLISP 1 先由小程序着手 认识 AutoLISP 语法规定 2 浏览所有的 AutoLISP 功能函数 重要的功能函数要熟记脑海 俗语说的好 一回生 二回熟 除 非您不用心 否则没有学不好的道理 3 要懂得偷懒 不要认为在绘图的过程中 繁琐的步骤是合理的 困难的绘图过程是必须忍耐的 试 着用 AutoLISP 解决看看 4 多观摩别人的程序设计 吸取精华 像海棉一样 吸 吸 吸 5 动手 写 程序比用眼睛看程序 更能够领略深记脑海 6 随时随地整理您的程序 并加以批注 以免因时间的飞逝 当时用心的成果也烟消云散 忘的一乾 二净 7 决心 是学好 AutoLISP 最重要的关键 8 期许自己 要由操作者变成创造者 单元二 单元二 AutoLISP 的关键 基本结构及语法的关键 基本结构及语法 一 学好 AutoLISP 的关键 基本结构与语法 1 AutoLISP 程序语言的特质 A 语法简单 B 功能函数强大 C 撰写的环境不挑剃 D 直译式程序 即写即测 即测即用 E 横跨 AutoCAD 各作业平台 悠然自得 注 以上五点 读者可以参考上一章的剖析 2 学好 AutoLISP 的关键 充份掌握 语法结构 后的内容均为批注 程序不处理 适时的增加批注 将使程 序更具可看性 学习性及完整性 规则 11 AutoLISP 最常用的变量型态是 整数 实数 字符串 点串行 四种 变量的 型态依据设定值而自动定义 变量会一直储存该值 直到被重新设定值或绘图结束自动消失 规则 12 以 setq 功能函数设定变量值 setq 变量名称 设定值 规则 13 欲在 AutoCAD 的环境中 查看一变量值 指令 下键入 变量名 即可 规则 14 以 defun C 函式名 自变量 变数 程序中 程序中的变量若在 右边变量内 则 称为 区域变量 否则为 整体变量 二 学好 AutoLISP 的关键 充份掌握 语法结构 后的内容均为批注 程序不处理 适时的增加批注 将使程 序更具可看性 学习性及完整性 范例 pp lsp 内容如下 本程序功能可快速画门 窗 设计者 QQ 博士 版权所有 欢迎使用 defun c pp 以下为画门子程序 以下为画窗子程序 规则 11 AutoLISP 最常用的变量型态是 整数 实数 字符串 点串行 四种 变量的型 态依据设定值而自动定义 变量会一直储存该值 直到被重新设定值或绘图结束自动消失 规则 12 以 setq 功能函数设定变量值 setq 变量名称 设定值 范例 setq a 100 变量 a 值设定成整数 100 setq b 123 56 变量 b 值设定成实数 123 56 setq c Good morning 变量 c 值设定成字符串 setq pt1 getpoint Enter POINT 变量 pt1 值设定成点串行 setq pt2 list a b 此时 a 值是 100 b 值是 123 56 变量 pt2 值设定成点串行 100 123 56 setq pt3 297 210 变量 pt3 值设定成点串行 297 210 注意 直接设定成点串行时 不能省略单引号 否则会被误认 297 210 又是一个表达式 297 是 操作数而出错 规则 13 欲在 AutoCAD 的环境中 查看一变量值 指令 下键入 变量名 即可 范例 指令 setq aa 100 75 传回 175 指令 aa 传回 175 指令 setq pp list 90 50 传回 90 50 指令 pp 传回 90 50 指令 ww 传回 nil 空值无设定 规则 14 以 defun C 函式名 自变量 变数 程序中 程序中的变量若在 右边变量内 则 称为 区域变量 否则为 整体变量 注 在 AutoLISP 中 未赋予值的变量 其值皆响应 nil 区域变量 于此程序执行完毕后 其值自动消失 整体变量 于此程序执行完毕后 其值仍然存在 范例 test lsp 内容如下 defun c tt sa sb sc setq sa 100 setq sb 20 setq sc 10 setq sd sa sb sc 回到 指令 键入 load tt 传回 c tt 指令 tt 传回 130 指令 sa 传回 nil 属区域变量 指令 sb 传回 nil 属区域变量 指令 sc 传回 nil 属区域变量 指令 sd 传回 130 属整体变量 单元三 快速分类浏览单元三 快速分类浏览 AutoLISP 功能函数功能函数 一一 一 看到以下那么多的 AutoLISP 功能函数 洋洋洒洒 17 大类 1 您第一个念头 一定惊讶怎么会那么多 您可能快吓坏了 2 您第二个念头 一定会想 那么多 怎么记得下来 您可能快放弃了 二 其实 您应该要 很兴奋 而 充满信心 的 怎么说呢 1 您有那么多的 大将 协助您撰写 AutoLISP 程序 当然左右又逢源 不但轻松 而且要快乐的 不得了 2 这些函数只要您先浏览有印象 要用时 再翻查该函数 了解用途语法再加入到您的程序中就可 以了 3 常用的函数 写久 用久后 自然会深深牢记脑海 想忘都很难 不常用的函数 若硬要您记下来 相信连高手都很困难 更何况是初学的您 4 您不用再摸不着头绪了 因为您幸运的拥有了本书 就是您成功的开始 第一类 数学运算功能函数 项目 函数语法 传 回 1 1 数值 数值 累计实数或整数数值 1 2 数值 数值 减去数值 1 3 数值 数值 所有数值乘积 1 4 数值 数值 第一个数值除以第二个以后数值的商 1 5 1 数值 数值 1 1 6 1 数值 数值 1 1 7 abs 数值 数值的绝对值 1 8 atan 数值 反正切值 1 9 cos 角度 角度的余弦值 角度值为弧度 1 10 exp 数值 数值的指数 1 11 expt 基数 指数 基数的指数值 1 12 fix 数值 将数值转换为整数值 取整 1 13 float 数值 将数值转换为实数值 1 14 gcd 数值 1 数值 2 二数值的最大公因子 greatest common divisor 1 15 log 数值 数值的自然对数值 相当于 ln e 2 71828182845904523 1 16 max 数值 数值 数值中的最大值 1 17 min 数值 数值 数值中的最小值 1 18 pi 常数 p 其值约为 3 1415926 1 19 rem 数值 1 数值 2 二数值的相除的余数 remainder 1 20 sin 角度 角度的正旋值 角度值为弪度 1 21 sqrt 数值 数值的平方根 第二类 检验 A Z 65 90 5 2 chr 整数 整数所对应的 ASCII 单一字符串 5 3 close 文件名称 关闭档案 5 4 open 文件名 模式 开启档案代码 准备读取或写入数据 5 5 read 字符串 串行中的字符串的第一组元素 5 6 read char 档案代码 经由键盘或档案中读取单一字符 5 7 read line 档案代码 经由键盘或档案中读取一行字符串 5 8 strcase 字符串 字样 转换字符串大小写 5 9 strcat 字符串 1 字符串 2 将各字符串结合成一字符串 5 10 strlen 字符串 字符串构成的字符数 即字符串长度 5 11 substr 字符串 起始 长度 取出子字符串 5 12 wcmatch 字符串 格式 T 或 nil 将字符串与通用字符进行比对 5 13 write char 数值 档案代码 将一 ASCII 字符写到档案或屏幕 5 14 write line 字符串 档案代码 将字符串写到档案或屏幕上 第六类 等待输入功能函数 项目 函数语法 传 回 6 1 getangle 基点 提示 请求输入十进制角度数值 响应一弧度值提示及参考点可有可无 6 2 getcorner 基点 提示 请求输入另一矩框对角点坐标 6 3 getdist 基点 提示 请求输入一段距离 6 4 getint 提示 请求输入一整数值 6 5 getkword 提示 请求输入 关键词 6 6 getorient 基点 提示 请求输入十进制角度 响应一弧度值不受 angbase angdir 影响 6 7 getpoint 基点 提示 请求输入一个点坐标 6 8 getreal 提示 请求输入一实数 6 9 getstring 提示 请求输入一字符串 6 10 initget 位 字符串 设定下次 getxxx 函数的有效输入 第七类 几何运算功能函数 项目 函数语法 传 回 7 1 angle 点 1 点 2 取得二点的角度弧度值 7 2 distance 点 1 点 2 取得二点的距离 7 3 inters 点 1 点 2 点 3 点 4 模式 取得两条线的交点 7 4 osnap 点 模式字符串 依辅助抓点模式取得另一坐标点 7 5 polar 基点 弧度 距离 依极坐标法取得另一坐标点 7 6 textbox 图元串行 取得文字符串的二对角点坐标 第八类 图元处理功能函数 项目 函数语法 传 回 8 1 entdel 图元名称 删除或逆删除图元 8 2 entget 图元名称 应用程序串行 取出图元名称的数据串行 8 3 entlast 取出图形数据中的最后一个图元 8 4 entmake 图元串行 建立一个新的图元串行 8 5 entmod 图元串行 依更新的数据串行更新屏幕上元体 8 6 entnext 图元名称 找寻图面中的下一个图元 8 7 entsel 提示 请求选取一个图元 响应包含图元名称及选点坐标的串行 8 8 entupd 图元名称 更新屏幕上复元体图形 8 9 handent 图码 图码的元体名称 8 10 nentsel 提示 BLOCK 所含副元体图元数据串行 8 11 nentselp 提示 点 BLOCK 所含副元体图元数据 以 4 x 4 矩形表示 单元四 快速分类浏览单元四 快速分类浏览 AutoLISP 功能函数功能函数 二二 第九类 选择集 符号表处理功能函数 项目 函数语法 传 回 9 1 ssadd 图元名称 选择集 将图元加入选择集或建立一新选择集 9 2 ssdel 图元名称 选择集 将图元自选择集中移出 9 3 ssget 模式 点 1 点 2 取得一个选择集 9 4 ssget X 过滤串行 取得依过滤串行所指定范围的选择集 9 5 sslenth 选择集 计算选择集的图元个数 9 6 ssmemb 图元名称 选择集 响应图元名称是否包含于选择集内 9 7 ssname 选择集 索引值 依索引值取出选择集中的图元名称 9 8 tblnext 符号表名称 T 检视符号表 有效的符号表 LAYER LTYPE VIEW STYLE BLOCK 9 9 tblsearch 符号表名称 符号 在符号表中搜寻符号 第十类 AutoCAD 相关查询 控制功能函数 项目 函数语法 传 回 10 1 command AutoCAD 指令 呼叫执行 AutoCAD 指令 10 2 findfile 檔名 传回 应该文件名的路径及文件名 10 3 getfiled 标题 内定档名 扩展名 旗号 透过标准 AutoCAD 档案对话 DCL 交谈框求得档案 10 4 getenv 环境变量 取得该环境变量的设定值 以字符串表示 10 5 getvar 系统变量 取得该系统变量的设定值 以字符串表示 10 6 setvar 系统变量 值 设定该系统变量的值 10 7 regapp 应用类项 将目前的 AutoCAD 图形登记为一个应用程序名称 第十一类 判断式 循环相关功能函数 项目 函数语法 传 回 11 1 if 表示式 2 检算比较式结果 如果为真 执行否则 执行 11 2 repeat 整数 重复执行次数 11 3 while 标题 内定档名 扩展名 旗号 透过标准 AutoCAD 档案对话 DCL 交谈框求得档案 11 4 cond 环境变量 取得该环境变量的设定值 以字符串表示 11 5 progn 表达式 1 表达式 2 连结其内的表达式为一组 常用于配合 if cond 等函数 第十二类 函数处理 定义 追踪 加上批注 defun c pbox 以下 pa ww hh 值须由使用者输入 setq pa 请求输入左下角点 setq ww 请求输入矩形宽度实数值 setq hh 请求输入矩形高度实数值 以下 pb pc pd 值须由程序依据 pa ww hh 求出 setq pb 依据相对极坐标法求出 pb 点坐标值 setq pc 依据相对极坐标法求出 pc 点坐标值 setq pd 依据相对极坐标法求出 pd 点坐标值 以下依据 pa pb pc pd 点画矩形 以 pline 指令画出矩形 以下 mp1 mp2 mp3 mp4 值须由程序依据 pa ww hh 以下依据 mp1 mp2 mp3 mp4 点画出二条线 以 line 指令画出 mp1 到 mp3 的线 以 line 指令画出 mp2 到 mp4 的线 本程序所需的 AutoLISP 功能函数及其用法 getpoint 基点 提示 请求输入一个点坐标 getreal 提示 请求输入一实数 polar 基点 弧度 距离 依极坐标法取得另一坐标点 其中 弪度值 之转换为 十进制角度弪度值十进制转弪度公式 0 度 00 90 度1 2 pi 2 或 pi 0 5 180 度 pi 270 度2 3 pi 1 5 N 度 N 180 pi n 180 command AutoCAD 指令 呼叫执行 AutoCAD 指令 注意 指令及其副选项皆要用双引号处理 假设 pa pb pc pd 皆为变量 其值为点坐标 正确 command pline pa pb pc pd c 错误 command pline pa pb pc pd c 原因 指令 pline 及其副选项 c 皆没用双引号括住 错误 command pline pa pb pc pd c 原因 副选项 c 代表 close 没用双引号括住 会被误认为是 AutoLISP 的变量名 但事实又没有 c 这个变数 错误 command pline pa pb pc pd c 原因 变数 pa pb pc pd 不须用双引号括住 注意 副选项中 若使用 连续二个双引号 代表按 ENTER 键 若想画一条 pa 到 pc 的 LINE 以下 pa ww hh 值须由使用者输入 setq pa getpoint Enter Left Low Point setq ww getreal Width setq hh getreal Height 以下 pb pc pd 值须由程序依据 pa ww hh 求出 setq pb polar pa 0 ww setq pc polar pb pi 2 hh setq pd polar pc pi ww 以下依据 pa pb pc pd 点画矩形 command pline pa pb pc pd c 以下 mp1 mp2 mp3 mp4 值须由程序依据 pa ww hh 以下依据 mp1 mp2 mp3 mp4 点画出二条线 command line mp1 mp3 command line mp2 mp4 4 第四步骤 回到 AutoCAD 下 加载 AutoLISP 程序 若您的 AutoCAD 环境设定 中 支持文件搜寻路径 有加上 c lisptool 则您可轻松载入 pbox lsp 程序 指令 load pbox 传回 c pbox 或 指令 load pbox 传回 c pbox 或 指令 load pbox lsp 传回 c pbox 若您的 AutoCAD 环境设定 中 支持文件搜寻路径 并未加上 c lisptool 则您载入 pbox lsp 程序时 须包含程序所在路径 错误的加载 指令 load pbox 会出现 无法开启 pbox lsp 做输入 错误 加载失败 LOAD pbox 取消 正确的加载方式 指令 load c lisptool pbox 传回 c pbox 或 指令 load c lisptool pbox 传回 c pbox 5 第五步骤 执行新的 AutoLISP 指令 指令 pbox 成功加载后 直接键入 pbox 指令 Enter Left Low Point 请给一左下角点 Width 给一实数当宽度 例如 100 Hieght 给一实数当高度 例如 50 指令 nil 指令 三 PBOX LSP 程序产生的问题 以下 pa ww hh 值须由使用者输入 setq pa getpoint Enter Left Low Point setq ww getdist pa nWidth setq hh getdist pa nHeight 以下 pb pc pd 值须由程序依据 pa ww hh 求出 setq pb polar pa 0 ww setq pc polar pb pi 2 hh setq pd polar pc pi ww 以下依据 pa pb pc pd 点画矩形 指令 pline pa pb pc pd c 以下 mp1 mp2 mp3 mp4 值须由程序依据 pa ww hh 以下依据 mp1 mp2 mp3 mp4 点画出二条线 指令 line mp1 mp3 指令 line mp2 mp4 prin1 prompt prin1 四 本章结语 经由简单的 PBOX LSP 程序设计全程演练 从 产生动机 预期目标 构思程序流程 相关 变量订定 撰写程序 加载程序 执行 PBOX 指令 改良 PBOX LSP 相信您已能更了解 AutoLISP 是怎么回事了 短短的十几行 能做的事却不少 一路循序渐进练习下 来 您应该觉得一点儿也不吃力 游刃有余 才对 果真如此 那恭喜您 好戏还在后头 还有体 力的话 就继续 征服下一章 吧 若您仍觉得有点 迷迷糊糊 那就休息一下 配合复习第二章 学好 AutoLISP 的关键 基本结构 与语法 再好好的把第四章 看 指令执行过程不响应 以下为 INPUT 图元选取 setq en entsel 选取已知圆 要求碰选一个圆 以下为图元数据取得元体资料串行 setq old rad list assoc 40 en data 取得半径子串行 setq old rr cdr rad list 取得旧有半径 princ n 旧半径 princ old rr 显示该旧圆半径值于指令区 以下为新半径输入一口气取得圆之圆心 setq new rr getdist cenpt New Radius 要求输入一半径值 setq new rad list cons 40 new rr 产生新半径子串行 setq en data subst new rad list old rad list en data 新旧交替 entmod en data 依新图元数据自动更新圆半径 prin1 何作用 在程序结束前加上 prin1 目的是不让命令行出现 nil prompt prin1 程序执行 请先在画面上任意的画一些圆 指令 load chgrad 回应 指令 CHGRAD 选取已知圆 碰选画面上已有的圆 新半径 20 输入一半径值 范例二 请撰写一个 MCIR LSP 当碰选画面上的 LINE 时 会在该线的中点 Midpoint 产生一个圆 此 程序的执行过程要求如下 指令 MCIR Select a LINE 选择画面上已有的线 Circle Radius 要求输入一半径值 MR 可给整数 实数或拉一段距离 自动的在该线的中点画出一个半径值为 MR 的圆 该如何设计 MCIR LSP 呢 解题关键 先取得线的二端点坐标 pt1 px1 py1 指令执行过程不响应 setq en entsel Select a LINE 要求碰选一条线 setq en data entget car en 取得元体资料串行 求得 pt1 取得群码 10 的子串行 setq pt1 cdr pts 取得起点 pt1 坐标 setq px1 car pt1 取得 pt1 坐标的 x 值 setq py1 cadr pt1 取得 pt1 坐标的 y 值 求得 pt2 取得群码 11 的子串行 setq pt2 cdr pte 取得终点 pt2 坐标 setq px2 car pt2 取得 pt2 坐标的 x 值 setq py2 cadr pt2 取得 pt2 坐标的 y 值 求得 mx 求得 mx 值 setq my py1 py2 2 求得 my 值 setq mpt list mx my 结合 mx Input 要求输入半径值 command circle mpt mr 完成中点画圆 prin1 prompt prin1 程序执行 请先在画面上任意的画一些线 指令 load mcir 回应 指令 MCIR Select a LINE 碰选画面上已有的线 Circle Radius 20 输入半径 20 注意 1 变数值查询 您若想进一步查询执行后变量值 没问题 请搭配 惊叹号 变量名 输 入在 指令 后如 en en data pts pt1 px1 py1 pte pt2 px2 py2 mx my mpt mr 2 以上程序中所用到的变量 读者皆可自行命名 以方便 好记 不会混淆为原则 3 若不加上最后两行 prompt prin1 则程序在加载后 将只响应 c mcir 4 建议读者们养成加入最后两行的习惯 以免未来程序越来越大 加载程序后 根本无从知道该如 何执行此 LISP 程序 因为程序内可能有好几个 C XX 的指令函数 也可能有很多子程序 范例三 请撰写一个 CPOLY5 LSP 碰选 CIRCLE 后 自动产生一个圆内接正五边形 此程序的执 行过程要求如下 指令 cpoly5 Select CIRCLE 碰选画面上已有的圆 自动产生一个内接正五边形 OK 该如何设计 CPOLY5 LSP 呢 解题关键 先取得圆的圆心点坐标 cenpt 设定变量 cmdecho 0 关闭指令响应 setq en entsel Select CIRCLE 要求碰选一个圆 setq en data entget car en 取得元体资料串行 setq cenpt cdr assoc 10 en data 求得圆心坐标串行 setq rr cdr assoc 40 en data 求得半径 rr command polygon 5 cenpt i rr 完成圆内接正五边形 prin1 prompt prin1 程序执行 请先在画面上任意的画一些圆 指令 load cpoly5 回应 指令 CPOLY5 Select CIRCLE 碰选画面上已有的圆 OK 完成一个内接正五边形 范例四 请撰写一个 CIRSCA LSP 其内有二个可执行函数 CIRA 碰选 CIRCLE 后 原 CIRCLE 大小自动缩为原来的 1 2 CIRB 碰选 CIRCLE 后 原 CIRCLE 大小自动放大为原来的 2 倍 此程序的执行过程要求如下 指令 cira Select CIRCLE to 碰选画面上已有的圆 自动产生 CIRCLE 大小自动缩为原来的 1 2 指令 cirb Select CIRCLE to 碰选画面上已有的圆 自动产生 CIRCLE 大小自动放大为原来的 2 倍 该如何设计 CIRSCA LSP 呢 解题关键 用 entget 函数取得圆的元体资料串行 cir data 用 assoc 函数取得群码 40 的半径 子串行 rad list 并以 cdr 取得半径值 old r 再依此值作放大 2 倍或缩小一半新的半径子串行可以用 cons 函数结合群码 40 取得元体资料串行 setq old rad list assoc 40 cir data 取得原半径子串行 setq old r r cdr rad list 求得半径 old r setq new rr old rr 0 5 求得新半径 new r setq new rad list cons 40 new rr 产生新半径子串行 setq cir data subst new rad list old rad list cir data entmod cir data prin1 defun c cirb setvar cmdecho 0 setq cir entsel Select CIRCLE to setq cir data entget car cir 取得元体资料串行 setq old rad list assoc 40 cir data 取得原半径子串行 setq old r r cdr rad list 求得半径 old r setq new rr old rr 2 求得新半径 new r setq new rad list cons 40 new r 产生新半径子串行 setq cir data subst new rad list old rad list cir data entmod cir data 画面上元体更新 prin1 prompt prin1 程序执行 请先在画面上任意的画一些圆 指令 load cirsca 回应 指令 cira Select CIRCLE to 碰选画面上已有的圆 OK 完成一个缩小为 1 2 倍的圆 指令 cirb Select CIRCLE to 碰选画面上已有的圆 OK 完成一个放大为 2 倍的圆 六 测验练习直接取得第一点 setq pt2 cdr assoc 11 en data 直接取得第二点 setq mx car pt1 car pt2 2 求得中点 X 坐标 setq my cadr pt1 cadr pt2 2 求得中点 Y 坐标 setq mpt list mx my setq mr getdist mpt Circle Radius 要求输入半径值 command circle mpt mr 完成中点画圆 prin1 prompt prin1 特殊解法 配合函数 OSNAP 选取时点选坐标 setq mpt osnap pts mid 直接取得中点 mid 终点 end 圆心 center setq mr getdist mpt Circle Radius 要求输入半径值 command circle mpt mr 完成中点画圆 prin1 prompt prin1 再改写 MCIR2 LSP MCIR3 LSP 程序而且以类似标准 circle 指令的半径拖动模式出现 defun c mcir3 setvar cmdecho 0 setq en entsel Select a LINE setq pts cadr en setq mpt osnap pts mid command circle mpt pause 注意 pause 的用法 prin1 prompt prin1 七 本章结语 图元数据的取得以下 pa ww kk 值须由使用者输入 setq pa 请求输入左下角点 setq ww 请求输入直角三角形底边长度 setq kk 请求输入直角三角形斜边长度 以下 pb pc hh 值须由程序依据 pa ww kk 求出 setq pb 依据相对极坐标法求出右下角 pb 点坐标 setq hh 依据 ww以下依据 pa pb pc 点画出直角三角形 将 hh 的结果响应在指令区 画出直角三角形 以下将三角形二夹角自动求出 并显示在指令区 setq ang pb 依据反正切求 pb 夹角弪度值 setq ang pb 将 ang pb 改推算成十进制角度值 setq ang pc 依据 90 度减去 ang pb 求得 ang pc 夹角 将 PB 的夹角响应在指令区 将 PC 的夹角响应在指令区 prin1 步骤三 撰写 5test1 lsp 并储存到 C LISPTOOL 资料夹内 defun c 5test1 以下 pa ww kk 值须由使用者输入 setq pa getpoint 请输入直角三角形左下角点 setq ww getreal n 请输入直角三角形底边长度 setq kk getreal n 请输入直角三角形斜边长度 以下 pb pc hh 值须由程序依据 pa ww kk 求出 setq pb polar pa 0 ww setq hh sqrt kk kk ww ww setq pc polar pa pi 2 hh 以下依据 pa pb pc 点画出直角三角形 princ n 另一边 hh 的长度 princ hh command line pa pb pc c 用 PLINE 也可以 以下将三角形二夹角自动求出 并显示在指令区 setq ang pb atan hh ww setq ang pb ang pb 180 pi setq ang pc 90 ang pb princ nPB 的夹角 princ ang pb princ 度 princ nPC 的夹角 princ ang pc princ 度 prin1 prompt n 自动直角三角形绘制 prin1 步骤四 执行程序 5test1 lsp 指令 load 5test1 加载程序 自动直角三角形绘制 传回之讯息 指令 5test1 请输入直角三角形左下角点 请给一左下角点 请输入直角三角形底边长度 请给一实数 80 请输入直角三角形斜边长度 请给一实数 95 另一边 hh 的长度 51 2348 PB 的夹角 32 6369 度 PC 的夹角 57 3631 度 执行结果 步骤四 程序改良以下 baspt rad num 值须由使用者输入 setq baspt 请求输入基准点 setq rad 请求输入小圆半径 setq num 请求输入欲相切的小圆数量 只要能求得 cenpt 点 再以 array 指令配合就万事 OK 了 以下 ang1 kk cenpt 值须由程序依据 baspt rad num 求出 setq ang1 依据全圆周除以 num 等分 再除以 2 求得 setq kk 依据 rad 以下依据 cenpt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度房屋租赁合同(按季度租赁)
- 2025标准房屋买卖合同范本
- 红苋菜养护知识培训
- 2025加强合同管理规范招标代理合作协议
- 流程优化与问题解决指导模板
- 土地流转技术支持合作协议
- 安全与管理培训课件
- 明源软件培训课件
- 企业采购合作框架协议
- 人工智能赋能的2025年智能制造示范工厂建设案例分析报告
- 广州交通辅警试题及答案
- 医院后勤考试试题及答案
- DG-T 028-2024 单粒(精密)播种机
- 生物降解材料在药包材中的应用前景-全面剖析
- 交通运输行业安全生产标准化指南
- 非标设备项目管理制度
- 智能装备故障诊断-第1篇-全面剖析
- 游戏攻略短视频行业跨境出海战略研究报告
- 人教版小学四年级上册《信息科技》全套完整版课件
- 高考志愿规划创业
- Unit 1 Back to School Reading 说课稿-2024-2025学年高一英语译林版(2020)必修第一册
评论
0/150
提交评论