Visual Lisp 主程序结构分析
- 格式:pptx
- 大小:554.38 KB
- 文档页数:15
第5章Visual LISP集成开发环境(2)在AutoCAD的命令提示行输入vlisp或者vlide。
5.2 Visual LISP环境界面Visual LISP环境界面如图5-2所示。
图5-2 Visual LISP编辑器Visual LISP环境界面由以下几部分组成:(1)菜单栏:Visual LISP编辑器提供了各式各样的菜单栏来调用Visual LISP的命令。
当某个菜单栏高亮显示时,Visual LISP就会在底部的状态栏上显示关于此命令的说明文字。
(2)工具栏:Visual LISP中一共有五个工具栏,通过单击工具栏按钮可以快速地调用Visual LISP命令。
每一个工具栏代表一个在Visual LISP中实现不同功能的命令组,大多数命令都可以在工具栏中调用。
将鼠标指针停留在工具栏某个按钮上几秒钟,将弹出说明该按钮功能的提示,同时在状态栏上会显示该功能的详细介绍。
(3)文本编辑器:Visual LISP包括了一个集成的文本编辑器,可以用来编辑AutoLISP 代码。
每打开一个文件,Visual LISP将新开一个文本编辑窗口,并在这个窗口的状态栏上显示文件名。
如果用户在编辑器中对代码作了改动,或者添加了新的文本,Visual LISP就会在文件后面显示一个星号“*”,保存或关闭文件之后星号消失。
(4)控制台:控制台是一个单独的,内容可以滚动的窗口。
在控制台中,可以像在AutoCAD命令行那样输入AutoLISP命令。
还可以在控制台窗口输入Visual LISP命令,以7980AutoCAD 2008 Visual LISP 二次开发入门到精通 附录367891011121312第5章 4代替使用菜单和工具栏命令。
(5)跟踪窗口:在启动Visual LISP 时,可以看到一个最小化了的跟踪窗口,该窗口显示Visual LISP 当前版本的信息,以及当启动Visual LISP 遇到错误时的出错信息。
pclvisualizer 析构
当涉及PCLVisualizer的析构时,我们需要考虑到PCLVisualizer对象的生命周期和资源管理。
PCLVisualizer是点云库(Point Cloud Library)中用于可视化点云数据的类,它提供了在3D空间中渲染和交互式查看点云数据的功能。
在C++中,对象的析构函数会在对象生命周期结束时被调用,用于释放对象所占用的资源和执行清理操作。
对于PCLVisualizer 对象的析构,主要涉及到以下几个方面:
1. 释放渲染窗口和相关资源,PCLVisualizer对象通常会创建一个渲染窗口用于显示点云数据,析构函数需要确保关闭和释放这个渲染窗口以及相关的图形资源,以防止资源泄漏。
2. 释放内存,在PCLVisualizer对象的生命周期结束时,需要释放对象内部使用的内存,包括点云数据、渲染缓冲区等。
3. 断开连接,如果PCLVisualizer对象与其他对象或数据源有关联,比如与点云数据对象关联,析构函数需要断开这些关联,以避免悬空指针或者访问已释放的资源。
在使用PCLVisualizer时,我们通常会在程序结束或者不再需要可视化时手动调用其析构函数,以确保资源能够得到正确释放。
另外,需要注意的是,如果PCLVisualizer对象是作为指针动态分配的,需要在不再需要时手动调用delete操作来触发析构函数的执行。
总之,PCLVisualizer对象的析构函数在对象生命周期结束时起着重要作用,它负责释放资源、断开关联,并执行必要的清理操作,以确保程序的稳定性和资源的正确释放。
36.1.1Visual LISP与AutoLISPLISP是List Processor(表处理程序)的缩写,主要用于人工智能(AI)领域。
AutoLISP是人工智能语言CommonLISP的简化版本,作为通用LISP语言的一个小子集,AutoLISP严格遵循其语法和惯例,但又添加了许多针对AutoCAD的功能。
Autodesk公司在AutoCAD 2.1版引入AutoCAD作为应用程序编程接口(API),用于扩展和自定义AutoCAD功能。
借助AutoLISP,用户可以用适合编写图形应用程序的强大的高级语言来编写宏程序和函数,并开发各种软件包。
AutoLISP易于使用,并且非常灵活,多年来一直是自定义AutoCAD的标准。
从AutoCAD R14开始,Visual LISP被引入到AutoCAD中,它增强并扩展了AutoLISP语言,可以通过Microsoft ActiveX Automatio n接口与对象交互,并扩展了AutoLISP响应事件的能力。
作为开发工具,Visual LISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高自定义AutoCAD的效率。
另外,Visual LISP提供了发布用AutoLISP编写的独立应用程序的工具。
Visual LISP没有任何特殊的硬件需求,能运行AutoCAD系统即可运行Visual LISP。
36.1.2Visual LISP与AutoCADVisual LISP作为一个完整的集成开发环境(IDE),具有自己的窗口和菜单,但它并不能独立于AutoCAD运行。
当用户从Visual LIS P IDE中运行AutoLISP程序时,经常需要与AutoCAD图形交互或在命令窗口响应程序提示。
如果Visual LISP把控制传给AutoCAD时AutoCAD已被最小化,用户必须手动恢复并激活AutoCAD才可继续,Visual LISP不会自动恢复AutoCAD窗口。
Visual_LISP指南目录第一章简介 (1)1.1 使用 Visual LISP (1)1.2教程概述.............................................................1 第二章设计和开始编程. (2)2.1定义整个程序的目标 (2)2.2Visual LISP 入门 (2)2.2.1查看Visual LISP 等待控制从AutoCAD 返回的步骤 (2)2.2.2使用Visual LISP 开始编写应用程序的步骤 (3)2.3Visual LISP 代码格式设置 (4)2.4分析代码 (4)2.5填补程序 (4)给应用程序加上简单空函数的步骤 (4)2.6让Visual LISP 检查您的代码 (5)2.7在Visual LISP 中运行程序 (6)2.8第一课回顾...........................................................6 第三章使用Visual LISP 调试工具.. (7)3.1局部变量和全局变量的区别 (7)3.1.1在程序中使用局部变量 (7)3.1.2检查gp:getPointInput 函数 (8)3.2使用关联表来捆绑数据 (9)3.2.1使用关联表 (10)将gp:getPointInput 的返回值保存到变量中 (10)3.3检查程序变量 (11)3.4修改程序代码 (12)3.5给程序代码加注释 (14)3.6设置断点并进行更多监视 (15)3.6.1使用“调试”工具栏 (15)3.6.2单步执行代码 (17)3.6.3单步执行程序时监视变量 (17)3.6.4跳出函数gp:getPointInput 并进入C:Gpmain (18)3.7第二课回顾..........................................................19 第四章绘制小路边界.. (20)4.1规划可重用的实用程序函数 (20)4.1.1将度转换为弧度 (20)4.1.2将三维点转换为二维点......... (20)4.2绘制 AutoCAD 图元 (22)4.2.1使用ActiveX 函数创建图元 (22)4.2.2使用entmake 创建图元 (22)4.2.3使用AutoCAD 命令行 (22)4.3启用边界轮廓绘制函数 (22)4.3.1向函数传递参数 (23)4.3.2使用关联表 (23)4.3.3使用角度并设置点 (24)4.3.4理解gp:drawOutline 中的ActiveX 代码 (25)4.3.5确保已加载ActiveX (26)4.3.6获取指向模型空间的指针 (26)4.3.7构造多段线端点数组 (27)4.3.8由点表构造变体 (28)4.3.9程序集成 (28)4.4第三课回顾..........................................................30 第五章创建工程和添加界面.. (32)5.1模块化代码 (32)5.2使用 Visual LISP 工程 (33)5.3添加对话框界面 (33)5.3.1用DCL 定义对话框 (33)3.5.2保存DCL 文件 (36)3.5.3预览对话框 (36)5.4用AutoLISP 代码与对话框交互 (37)5.4.1设置对话框的值 (37)5.4.2加载对话框文件 (37)5.4.3将指定对话框加载到内存中 (38)5.4.4初始化默认的对话框值 (38)5.4.5给控件指定动作 (38)5.4.6启动对话框 (40)5.4.7卸载对话框 (40)5.4.8确定下一步的动作 (40)5.4.9代码集成 (41)5.4.10更新简单空函数 (41)5.5提供可选的边界线类型 (42)5.6清除反应器 (43)5.7运行应用程序 (43)5.8第四课回顾..........................................................44 第六章绘制砖. (45)6.1更多的Visual LISP 编辑工具 (45)6.1.1括号匹配 (45)6.1.2自动完成词语 (45)6.1.3按系统匹配完成词语 (46)6.1.4获取函数帮助 (46)6.2在花园小路中添加砖 (47)6.2.1应用逻辑知识 (47)6.2.2几何分析 (47)6.2.3绘制一行砖 (47)6.2.4绘制每一行砖 (50)6.2.5阅读代码 (51)6.3测试代码 (53)6.4第五课回顾..........................................................54 第七章使用反应器. (55)7.1反应器基础 (55)7.1.1反应器类型 (55)7.2设计花园小路应用程序的反应器 (55)7.2.1选择花园小路应用程序的反应器事件 (55)7.2.2规划回调函数 (56)7.2.3规划多重反应器 (57)7.2.4附着反应器 (57)7.2.5用反应器存储数据 (58)7.2.6更新C:GPath 函数 (58)7.2.7添加反应器的回调函数 (61)7.2.8清除反应器 (61)7.3测试反应器 (62)7.3.1详细检查反应器的行为 (63)7.4第六课回顾..........................................................63 第八章程序集成.. (64)8.1规划反应器整体过程 (64)8.1.1响应更多的用户调用命令 (65)8.1.2将信息保存在反应器对象中 (66)8.2添加新的反应器功能 (68)8.2.1实现对象反应器的回调函数 (69)8.2.2设计gp:command-ended 回调函数 (70)8.2.3处理多种图元类型 (70)8.2.4在反应器回调函数中使用ActiveX 方法 (71)8.2.5处理非线性的反应器序列 (71)8.2.6编写command-ended 函数 (73)8.2.7更新gp:Calculate-and-Draw-Tiles (76)8.2.8修改其他调用gp:Calculate-and-Draw-Tiles 函数的代码 (78)8.3重新定义多段线边界 (79)8.3.1查看gppoly.lsp 文件中的函数 (79)8.3.2理解gp:RedefinePolyBorder 函数 (80)8.3.3理解gp:FindMovedPoint 函数 (80)8.3.4理解gp:FindPointInList 函数 (81)8.3.5理解gp:recalcPolyCorners 函数 (82)8.3.6理解gp:pointEqual 、gp:rtos2 和gp:zeroSmallNum 函数 (82)8.4代码回顾 (82)8.5生成应用程序 (83)8.5.1启动“生成应用程序”向导启动“生成应用程序”向导 (83)8.6教程回顾 (84)8.7LISP 和AutoLISP 参考书 (84)第一章简介本教程用于示范 AutoCAD.的 AutoLISP. 编程环境的一些强大功能,并介绍 AutoLISP 语言的新功能。
Lisp程序结构;;在明经混了许多年,又在晓东混了几年了,渐发现原来写的程序不是太合理,全改又没有那么多精力了.;;对于lisp程序结构,我自己有了自己的看法,自己总结一下,今后套用这种格式。
自贡黄明儒 2014.10.15;;1 建立通用和自定义函数库,分别保存为Public.lsp和MyLsp.lsp,今后加载和修改就方便了;;今后只需要加载两个文件,这就方便了;通用函数的建立,给自己修改来方便。
;;2 自定函数(defun C:w1 (/ CMD1 OSM1 SS);;2.1 错误处理;;定义在函数内部,作用范围也只限于此函数。
;;写在开头,以保证后面的代码发生错误,均会执行错误处理。
(defun *error* (msg);;2.1.1 写在开头,错误处理反跟踪,找出调试错误所在。
调试完毕后,可注释掉(vl-bt);;2.1.2 如果命令还在执行,中断它(while (not (equal (getvar "cmdnames") "")) (command nil));;2.1.3 在错误发生之前改变的变量,发生错误时后面的代码不再执行,必须恢复(setvar "nomutt" 0);容量忘了它,没恢复成0后面使用起来怪怪的(cond (cmd1 (setvar 'cmdecho cmd1)))(cond (osm1 (setvar 'osmode osm1)))(princ "\n 出错啦!");;2.1.4 静默退出(princ));;2.2 其它临时函数,非通用的();;2.3 一般说来,执行一个程序,总是要选择对象。
如果希望先择后执行,就要有这句,而且写在开头(cond ((cadr (ssgetfirst)) (setq ss (ssget "_P" '((0 . "*TEXT"))))));;2.4 检查加载vl扩展,有这句没有坏处,也不会造成程序多大的额外负担,因为如果已经加载扩展,不做任何事情(VL-LOAD-COM);;2.5 *acad* 是常用的,不必释放。