利用Auto LISP 语言编程辅助计算机绘图


计算机应用 利用 Auto LISP 语言编程辅助计算机绘图 田育广 ( 广东省石油化工集团公司, 广州 510235) 摘 要: 介绍了Auto LISP 语言的编程方法, 通过编程应用于绘图工作实践, 大大提高计算 机绘图速度, 同时给用户带来方便。 关键词: Auto LISP; 编程; 绘图应用; 快捷 中图分类号:TP391. 72 文献标识码: B 文章编号: 1002- 3607( 2001) 03- 0041- 04 1 Auto LISP 语言编程准备 Auto LISP 作为 Auto CAD 所支持的一种内嵌式 编程语言, 熟练掌握其编程环境、方法和技巧, 对 Auto CAD 进行二次开发, 把日常绘图工作中常用的 某些操作以命令的形式添加到 Auto CAD 中, 就可以 像使用 Auto CAD 标准命令一样使用新添加的命令, 以完成特定的操作。编制 Auto LISP 程序之目的是 用来代替某些特定功能的操作, 所以在编写程序之 前, 必须了解: Auto LISP 程序可以解决什么操作问 题, 完成什么图形的制作; 该操作的具体步骤, 这是 编程的关键, 直接影响编程的难度及计算机的运行 速度, 应对操作结果的属性如插入点、线型、比例、颜 色等全面加以考虑; 一般情况下, 选择复杂性高、重 复性高的操作, 用编程的方法予以辅助, 使绘图工作 真正达到方便、快捷的效果。 2 Auto LISP 语言编程方法 Auto LISP 语言提供多个函数, 它们分两种类 型: 一种是Auto LISP 所提供的基本函数; 另一种是 用户自定义函数。通过对这些函数做法适当的组合 的编排, 以纯文本文件方式保存* LSP 文件, 形成 Auto LISP 应用程序, 以完成某一特定功能的操作, 使计算机绘图设计工作更快捷、更具专业性。 2. 1 用Auto LISP 自定义函数编制程序 Auto LISP 自定义函数 defun 的操作格式如下: ( defun C: ( ) 表达式 ) C: ( ) 是一种特定格式; 为自定 义函数的函数名。 表达式可由 Auto LISP 基本函数、变量、字符串 和运算符等组成, 是编程的核心部分。 定义完函数后, 就可以像调用 Auto CAD 命令一 样调用 ( ) 函数。下面是用记事本编辑器编 制的 Auto LISP 程序, 存盘路径为 C: / USER/ TYG LSP/ , 该程序已经在 Auto CAD R14 中顺利调用过。 用户还可以使用另外的文本编辑器进行编辑, 如写 字板、Word 等。 TYG. LSP ; ; ( 1) 绘制红白相间的六边形星星 ( defun C: Udy( ) ( setq p1( getpoint! \ n 选定一点:! ) ) ( command!line! p1! @ 10< 30!!! ) ( setq c1( entlast) ) ( setq p2( osnap p1!midp!) ) ( command!color! 1) ( command!polygon! 6 p1! i! 5) ( command!array! cl!!! p! p1 6 360! y! ) ( command!color!!bylayer! ) ( princ) ) ; ; ( 2) 调用自编线型作文本下划线 ( defun C: Ude( ) ( setq p1( getpoint! \ n 选定一点:! ) ) ( load! C: /USER/ NEW. LIN!) ( command!linetype! !s! !tt02!!! ) ( command!point!p1!!) ( command!dtext! !j! !bc! pl50/ P!!!! ) 41第 3 期 田育广: 利用Auto LISP 语言编程辅助计算机绘图 ( setq c1( entlast) ) ( command! line! p1!@ 40< 0!!! ) ( command! linetype! ! s! ! bylayer!!!) ( princ) ) ; ; ( 3) 输入两点完成文本引线标注 ( defun C: LXH( ) ( setq p1( getpoint! \ n 第一点:! ) p2( getpoint! \ n 第二点:!) ) ( command! line! p1 p2! @ 5< 0!!!) ( setq p3( osnap p2!midp! ) ) ( command! color!2) ( command! dtext! ! j! ! bc! p3 2. 5 0) ( setq txt( entlast) ) ( command!move!txt!! p1!@ 1< 90!) ( command! color! ! bylayer!) ( princ) ) ; ; ( 4) 绘制黄色圆形花样 ( defun C:MTU( ) ( setq p1( getpoint! \ n 选定一点: !) ) ( command! color!2) ( command! circle! p1 5!! ) ( setq c1( entlast) ) ( command! array! c1!!!p! !@ 20< 0! 20 360! y!) ( command! color! ! bylayer!) ( princ) ) ; ; ( 5) 绘制红色轴测网格 defun C: VALVE( ) ( setq p1( getpoint! \ n 确定第一点: ∀ ) ) ( command! color!1) ( command! pline! p1 ! @ 5< 60! !@ 5< 180! !@ 10< - 60! ! @ 5< 180! ! @ 5< 60! ! @ 2. 5< 0! ! @5< 180!!!) ( setq ll( entlast) ) ( command! array! ll!!! r! 21 54 8. 6602 5) ( command! line! p1!@ 5< - 120! ! @ 181. 8643< 90! !@ 270< 0! ! @181. 8643< - 90!!!) ( command! color! ! bylayer!) ( princ) ) ; ; ( 6) 绘制以A 为插入点的蓝色网格 ( defun C: WG( ) ( setq pl( getpoint! \ n 选定一点:∀ ) ) ( setq p2( list( - ( car p1) 3) ( - ( cadr pl) 8) ) ) ( command! dtext! ! j! ! bl! p2 5 0 ! A!!! ) ( command! color! ! 5!) ( command! line! p1 !@ 120< 0!!!) ( setp ll( entlast) ) ( command! array! ll!! ! r! 61 12) ( command!rotate! ll!! pl 90) ( command!array!ll!!!r! 161 2) ( command!line! p1 ! @ 120< 0!!! ) ( command!color! !bylayer! ) ( princ) ) ; ; ( 7) 输入实数值进行定点画线 ( defun C: fr( ) ( setq pl( getpoint! \ n 选定插入顶点:!) ) ( setq x1( getreal! 输入实数值 x1! ) ) ( setq x2( getreal! 输入实数值 x2! ) ) ( setq x3( getreal! 输入实数值 x3! ) ) ( setq x4( getreal! 输入实数值 x4! ) ) ( setq 11( list x1 x2) ) ( setq 12( list x3 x4) ) ( command!color! !4! ) ( command!line! p1 ! @ x1< 30!11 12!! ) ( command!color! !bylayer! ) ( princ) ) ; ; ( 8) 输入边长绘制红色等边三角形 ( defun C: THO( ) ( setq p1( getpoint! \ n 选定插入顶点: !) ) ( setq a( getreal! \ n 输入边长: !) ) ( setq p2( list ( + ( car p1) ( * a( / ( expt 3 0. 5) 2) ) ) ( + ( cadr p1) ( * a 0. 5) ) ) ) ( setq p3( list( car p2) ( - ( cadr p2) a) ) ) ( command!color! 1) ( command!pline! p1! W! 0!! p2 p3 ! close!!! ) ( command!color! !bylayer! ) ( princ) ) ; ; ( 9) 输入长宽绘制黄色矩形 ( defun C: rec( ) ( setq pl( getpoint! \ n 选定矩形插入顶点:! ) ) ( setq b( getreal! \ n 输入矩形的长:! ) ) ( setq a( getreal! \ n 输入矩形的宽: !) ) ( setq p2( list ( car p1) ( - ( cadr p1) ( a) ) ) ( setq p3( list ( + ( car p2) b) ( cadr p2) ) ) ( setq p4( list ( car p3) ( + ( cadr p3) a) ) ) ( command!color! 2) ( command!pline! p1 ! W! 0 !! p2 p3 p4 ! close!!!) ( command!color! !bylayer! ) ( princ) ) 2. 2 线型程序文件的编制 ( 1) 单线型文件 格式为: * DIAM, # ## ## # A, + , 0, - , ## 42 安 装 2001 年 6 月 带∀ * !行为注释行, 包括线型名称和样式。 带∀ A, !开头为循环固定格式, 其中正数代表划 线长度。 ∀ 0!代表画点, 负数代表空格长度 ( 2) 复合线型文件 格式: * DLAM, ∃ # # ∃ # # ∃ # # ∃ A, + , 0, - , % &, # # 其中:∀ % &!表示所嵌入字符串的定义。 下面是线型文件举例, 存盘路径为 C: /USER/ NEW.LIN/ 。线型文件加载后, 可以用 Auto LISP 程 序进行调用( 见举例 2) 。 new. lin ; ; Tian Yu Guang Linetype File ; ; customized for Bylayer Scaking ; ; * TT01, Hidden01_ _ _ _ _ A, 0. 5, - 0. 5 * TT02, hidden2_ _ _ _ _ A, 0. 5, - 0. 25 * TT03, Diam_# # _# # _# # _# # _ A, 3 Auto LISP 程序的加载和运行 3. 1 利用对话框加载程序 启动 Auto CAD 后, 在 command: 提示下, 输入 Appload( 或 ap) 并回车, 弹出程序加载对话框, 选择 编好存盘的Auto LISP 程序进行加载确认。 3. 2 利用 Auto LISP 函数加载程序 在 command: 提示符下, 输入( Load∀ 文件名!) 加 载所需的Auto LISP 程序。其中文件名应包括程序 所在的盘符和路径。文件分隔符使用正斜杠( / ) 或 两个反斜杠( \ \ ) 。例如: command: ( Load!C: / USER/ TYG. LSP!) 或 command: ( Load!C: \ \ USER \ \ NEW.LIN!) Auto LISP 程序加载后, 在 command: 提示下, 输 入程序文件下的任一程序名并回车即可运行该程 序。 用以上两种方法加载程序, 用户只能在当前图 形文件中执行( 或启动) , 如果退出当前图形文件并 打开另一图形文件时, 原来已加载的Auto LISP 程序 将会自动从内存中清除, 必须再次加载程序文件才 能启用, 这种不足可以通过下述的添加工具按钮方 法予以解决。 4 添加用户工具按钮 工具按钮是快速、高效启动 Auto CAD 命令和 Auto LISP 应用程序的一种捷径。通过创建新工具 栏, 向新工具栏添加工具按钮, 执行用户编制的一系 列Atuo LISP 程序, 可以满足用户的各种工作需要, 同时提高绘图效率。在 Auto CAD 中, 制定工具栏的 方法有两种: 一种是通过更改菜单源文件( ACAD MNC) 中* * * TOOL BARS 的内容来定制工具栏; 一 种是通过工具栏( Toolbars) 对话框来定制工具栏。 两种方法效果相同, 前者操作较为繁杂, 也容易搞乱 源程序的制式; 后者较为简易、快捷。下面以后者为 例作重点介绍。 4. 1 创建新工具栏 打开工具栏对话框的方法有三种, 其中移动鼠 标至任何一个工具按钮( 或工具栏) 上、按鼠标右键 的方法最为简便。打开工具栏对话框后, 单击新建 (New #) 选项, 弹出新工具栏对话框, 在对话框中要 求为新工具栏命名( 可以输入中文) 、指定菜单组, 输 入完毕单击∀ OK!键, 屏幕上生成一个已命名的新工 具栏, 并返回到工具栏对话框。这时, 新工具栏中无 任何工具按钮, 还不能执行 Auto CAD 的任何操作。 4. 2 向新工具栏添加工具按钮 在工具栏对话框中单击用户设置( Customize #) 按钮, 弹出 Customize Toolbars 对话框, 在 Categories 下 拉列表中, 单击 Custom 选项, 用鼠标选定一个空白 工具按钮, 将其拖出对话框并释放在屏幕上的新工 具栏中, 至此, 添加新工具按钮操作完毕。重复拖动 空白工具按钮至新工具栏中, 可以得到多个新工具 按钮。 4. 3 定制工具按钮属性 工具按钮属性包括按钮名称、图标、按钮注释信 息以及与之相对应的命令。一个空白工具按钮, 必 须经过定制其属性, 才能执行相应的命令。定制属 性最简捷的方法是: 将鼠标移至任一新工具按钮上, 连续按两次鼠标右键, 打开按钮属性( Botton Droper ties) 对话框, 输入相应的按钮名称、帮助注释信息, 在Macro 文本框输入Auto CAD 命令或用( Load) ( 下转第46 页) 43第 3 期 田育广: 利用Auto LISP 语言编程辅助计算机绘图 导线管: 168500 m , 电缆桥架( 含线槽) 43024 m; 变压器: 18 台( 容量 12~ 1. 5 MVA 不等) ; 发电机: 3 台( 2000 kVA 1500 kW/ 380 V) 。 4 重视合同管理, 维护分包效益 国际工程中都采用∀ 菲迪克( FIDIC) 条款!, 根据 合同要求, 分包商每月须按时提交当月完成工程量 报表, 经分项承包商、总包商的严格核查, 对于未达 到的节点目标或质量方面未能通过检验的部位或区 域, 其相应的工程量也同样不会被认可, 通过的部分 才上报业主委托的估价部门按合同认价, 最后进入 逐级的工程款支付流程, 一个付款周期大约需要四 个半月时间, 这一点对分包商来讲无疑是严峻的问 题, 这就迫使分包商必须认真对待每一次完成工程 量的上报工作。在此期间, 安装分包商、分项承包商 和总包之间对于现场完成量的认定工作难免会带来 意见分歧。分包商与承包商之间是直接的合同关 系, 面临的就是工序节点的完整性与严格的质量工 序检测, 彼此间没有商量的余地, 我们和国外分项承 包商之间的承发包关系是经过了痛苦的磨合, 有一 个适应、稳定、有序和提高的管理过程, 使得工程款 的回收工作也逐渐变得按时且有序, 同时由于资金 情况的转好, 也促进了现场安装工程的顺利进行, 起 到了良性循环的作用。 在金茂大厦工程施工中, 按照 FIDIC 条款形式 签定了与承包商之间的工程合同, 对工程范围的确 认、质量要求、进度要求、施工技术要求、劳动力要 求、工程量的增减与索赔以及产品保护等, 都作了明 确且详细的规定。与以往的工程合同有所不同, 在 执行过程中对遇到的分歧, 都是按合同的要求来界 定, 一切按合同办事, 减少了不必要的扯皮, 对于双 方确实认为有争议的地方, 采取了搁置问题、待后解 决, 先集中力量确保施工进度和工程质量的原则, 体 现了企业的社会信誉。合同的重要性, 尤其是涉外 合同关系到工程能否有效地实施, 影响到企业的信 誉、企业的经济效益、风险的承受能力和适应环境的 能力。 对于一项国际工程, 施工索赔与反索赔在工程 承包中经常发生%2&, 在本工程中同样存在, 并且必须 提高到体现国内安装企业管理水平和维护自身效益 的高度上去认真对待。面对一项特大型工程, 且是 高度密集施工的项目, 诸多的设计变更、各专业施工 间的碰撞、甚至人为的损坏经常发生。工程刚开始 时, 对承包商发来的备忘录, 还感到有些不能适应, 甚至不予理睬, 但随后就暴露出在工作中的被动局 面, 从中也真正体验到如果不能及时准确地运用这 个手段, 将直接造成完工后的经济索赔和反索赔因 缺少资料而无从谈起。由此从工程开始到安装工程 结束, 历时近 5 年的时间( 包括质保期) , 共向承包商 发出有经济价值的备忘录共计 726 份, 这些持续不 断的工作积累, 在最后的工程决算中起到了关键作 用, 抵扣了承包商的反索赔要求, 规避了所面临的风 险。 通过艰苦的努力, 这个超大型项目终于完成了, 它带给了我们新的观点、新的启发、以及新的视界: 国外公司的先进管理模式, 先进办公设施与管理配 套的实用软件, 对产品的保护意识和文明施工, 都对 国内施工企业在工作中起到了有益的推动作用, 也 贯穿在今后日常管理工作当中。 参考文献 %1& 蔡天才. 超高层建筑中电缆敷设施工%J&. 安装, 1998 ( 6) : 28- 29 %2& 孟解放. 施工索赔是工程合同管理的重要环节%J&. 安 装, 2001( 2) 收稿日期: 2001- 03- 22 ( 上接第 43 页) 函数加载用户编制的 Auto LISP 程序。这样, 当用户 用鼠标单击该工具按钮时,Auto CAD 会执行文本框 中的命令或Auto LISP 程序, 以上述自编程序为例, 具体操作如下: 在^C^C 提示下输入^P( Load!/ C: / USERLSP!) ; ; ^P, 其中 USERLSP 可以是包函多个 Auto LISP 自定义函数程序, 是 Auto CAD 标准命令 或已加载 Auto LISP 程序文件中的某一程序名。输 入完毕, 单击该工具按钮, Auto CAD 将加载 Auto LISP 程序并自动执行该程序下的某一程序名。 对话框中的Edit 选项用以编辑按钮图标, 用户 也可以调用功能强大的图画板绘制的 BMP 信件作 为按钮图标。 Auto LISP 编程简单易学, 使Auto CAD 绘图软件 成为满足用户特殊要求的专业绘图软件。 收稿日期: 2000- 08- 03 46 安 装 2001 年 6 月
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

lisu1314

贡献于2012-06-05

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf