AutoLisp程序设计教程解析.ppt

上传人(卖家):三亚风情 文档编号:3376288 上传时间:2022-08-25 格式:PPT 页数:57 大小:196.50KB
下载 相关 举报
AutoLisp程序设计教程解析.ppt_第1页
第1页 / 共57页
AutoLisp程序设计教程解析.ppt_第2页
第2页 / 共57页
AutoLisp程序设计教程解析.ppt_第3页
第3页 / 共57页
AutoLisp程序设计教程解析.ppt_第4页
第4页 / 共57页
AutoLisp程序设计教程解析.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、商业化的CAD/CAE/CAM系统在某些方面难以满足工程需要,为提高和扩展系统的功能,需要对CAD/CAE/CAM系统进行开发。开发的方式主要有三种:(1)在通用CAD/CAE/CAM软件基础进行二次开发,如SolidEdge,SolidWorks,AutoCAD等CAD系统的二次开发。(2)基于CAD/CAE/CAM软件平台的开发。如当前流行的图形核心技术开发平台有ACIS、Parasolid、CAS.CADE和Granite等,稳定性好,但成本高。(3)完全自主版权的开发,如C+等结合OpenGL进行开发。AutoCAD的显著特点之一是它不仅具有强大的图形绘制与编辑功能,而且体系结构开放,

2、允许用户对其进行定制与开发。可针对工程领域的特殊应用问题,开发一个既有计算分析功能和专用的工程图形数据库,又有强大图形处理功能的CAD应用系统。Lisp语言是人工智能领域中广泛采用的一种程序设计语言。AutoLisp 程序和autoCAD的绘图命令可以透明的结合起来,使设计和绘图完全融为一体。还可以实现对AutoCAD图形数据 直接访问、修改,为实现对图形的实时修改、交互设计、参数化设计以及在绘图领域中应用人工智能提供了必要的条件。是一种人工智能绘图语言。AutoLISP程序由注释和表达式组成。与其他的高级语言不同的是,它的注释用;来表示。而表达式用的是前缀表示法,即把运算符放在表的第一个元素

3、位置,后面才是其他参数。表达式一般是通过调用函数来执行。1.符号:用来作为变量、函数的名字。符号可包含数据和字符(、)、.、“、;除外)。符号的长度最好不要超过6个字符。2.变量的数据类型:不需对变量事先进行类型说明,变量被赋值时,值的类型就是变量的类型。在程序运行过程中,同一变量在不同的时刻可以赋予不同类型的值。3.赋值:(setq 变量1 值1 变量2 值2)表达式相当于程序的语句,主要是由原子或表构成的。1.以表的形式存在的表达式 格式:(函数名 变元)2.前缀表示法:将函数名放在所有的操作数之前:如x=(a+b)*c 用Lisp表示为:(setq x(*(+a b)c),相当于说运算符

4、也属于函数。3.表达式的求值过程 在Lisp语言中,函数之间不存在优先关系,运算的先后顺序只能通过表的层次来实现,最里层的表最先被求值,再传给外层的表,直到求值完毕。4.表达式的求值规则(1)整型数、实型数、字符串,以它们本身的值作为求值结果(2)符号以它们当前的约束值作为求值结果(3)表是根据其第一个元素来进行计算的。其中quote函数表示直接引用,可用 单号来表示。如(setq p1(quote(25 10)可写成:(setq p1(25 10)1.计算函数(+n m)、(-n m)、(*n m)、(/n m)(1+m)、(1-m)、(sqrt m)2.关系运算函数(=n m)(/=n m

5、)(=n m)3.逻辑运算函数(and 表达式1 表达式2)(or 表达式1 表达式2)(not(项)4.赋值函数 (setq )5.引用函数 (quote)或简写成()6.转换函数 (itoa):整数转换为字符串 (atoi):字符串转换为整数 (atof):字符串转换为浮点数7.字符串处理函数 (strcat ):将字符串按顺序连结成一个新字符串(substr ):从开始处截取某长度的字符串。(strlen ):求字符串的长度。8.求值函数 (distance ):两点之间的距离 (polar ):以相对极坐标方式返回另一个点(angle ):返回两点连线与X轴正向夹角(osnap 字符串

6、):返回以点来指定对象的捕捉点(car):返回第一个元素(cdr):返回除第一个元素外内容的表9.主要的交互输入函数(1)(getangle pt msg):等待用户输入角度(2)(getcorner pt msg):等待用户输入一个角点(3)(getdist pt msg):等待用户输入一个距离(4)(getpoint pt msg):等待用户输入一个点mand函数:执行AutoCAD标准命令 利用command函数AutoLISP几乎可以调用CAD里的全部命令。格式:(command“AutoCAD 命令”“命令所需的数据”)如画圆:(command“circle”“2,4”5)如直线:(

7、command “line”“100,120”23,116”):调用line、pline、layer时以“”结尾,等效于按一次空格键。1.定义函数格式:(defun 函数名(变量表/局部变量表)表达式)如定义一个加10的函数(defun add10(x)(setq x(+10 x)2.调用函数格式:(函数名变元)如(sqrt 4)(add10 3)(setq y(add10(+2 3)3.定义AutoCAD命令用defun C:函数可以定义AutoCAD命令,格式如下:(defun C:AutoCAD命令名(/局部变量表)表达式如定义通过矩形的对角点画矩形的命令,源代码如下:(defun C:

8、rect(/p1 p2 p3 p4)(setq p1(getpoint“n 输入矩形的一个角点”)(setq p3(getcorner p1“n 输入矩形的另一个角点”)(setq p2(list(car p3)(cadr p1)(setq p4(list(car p1)(cadr p3)(command“pline”p1 p2 p3 p4“c”)4.递归调用函数:可以在一个函数的内部定义另一个函数,也可以递归地定义和调用函数如求阶乘(defun factorial(x)(if(=x 0)1 (*x(factorial(-x 1)1.分支结构 (1)cond(测试表达式1 结果表达式1)(测试

9、表达式2 结果表达式2)该函数从第一个表起进行测试,若测试表达式成立,则返回结果表达式的值,否则计算下一个表。如 (setq n(cond(=i 1)1)(=i 2)4)(a 1)(setq b 2);如果a1,则b=2 (if(a 1)(setq b 2)(setq b 3);如果a1,则b=2,否则 b=33.(progn 表达式)将n个表达式组合成一个表达式,按顺序计算这n个表达式,并返回最后一个表达式的计算结果。该函数主要用于if函数,利用progn同时执行n个表达式。(if(a 1)(progn(setq b 2)(print(list b c)(progn(setq b 4)(pr

10、int(list b 4)(setq e b)(1)(repeat 整数n 表达式)重复执行n次对所有表达式的求值,并返回最后一次最后一个表达式的计算结果。(setq a 1 b 100)(repeat 10(setq a(+1 a)其他表达式(setq b(+10 b)(2)(while 测试式 表达式)若测试结果不为nil,则执行各表达式,直到测试结果为nil。如(setq i 1 a 10)(while (=i 10)(setq a(+a 10)其他表达式 (setq i (1+i)1.扩展名:.lsp,以 ASCII码文本格式保存。在命令行提示下,可以直接输入表达式定义或调用LISP函

11、数,但不便于保留或调试程序。因此通常以文件形式实现函数的定义和调用。在一个LISP文件中,可以定义多个函数或命令。1.整行或后半行注释 分号“;”开头,到行尾为注释部分。2.整段或行间注释以“;|”开头,以“|;”结尾。如(setq tmode ;|此处添加注释此处添加注释|;(getvar“tile mode”)1.进入VLISP 工具菜单AutoLISPVisual lISP 编辑器或是在命令行的提示下输入命令:vlide.2.切换到AutoCAD窗口 窗口激活AutoCAD 1.菜单栏:(1)文件 菜单(2)编辑菜单(3)搜索菜单(4)视图菜单(5)工程菜单(6)调试菜单:设置断点或查看

12、变量的状态等(7)工具菜单:设置文本代码的格式、窗口属性、设计开发环境等(8)窗口菜单:控制窗口的显示模式(9)帮助菜单:在线帮助1.加载AutoLisp程序(1)启动Visual Lisp集成开发环境 工具/AutoLisp/Visual Lisp编辑器(2)编辑新程序或打开已有的AutoLisp程序 新建文件(3)编写Lisp程序(4)工具菜单/检查编辑器中的文字 检查文字是否有语法错误(5)工具栏/加载活动编辑窗口或工具菜单/编辑器中的文字。1.启动Visual LISP2.设置其格式并输入程序代码3.保存程序4.加载、运行程序5.设置断点6.单步执行程序 (下一嵌套表达式)7.跟踪变量

13、,通过监视窗口添加跟踪变量,观察变量的值9.跟踪表达式的运行结果:监视最新结果。在控制台窗口中可以直接运行已加载的LISP程序中的函数,方法如下:$(函数名 参数1 参数2)l(defun c:rect1(/p1 p2 p3 p4)l (setq p1(getpoint n 请输入矩形的一个角点:)l (setq p3(getcorner p1 n 请输入矩形的另一个角点:)l (setq p2(list(car p3)(cadr p1)l (setq p4(list(car p1)(cadr p3)l (command pline p1 p2 p3 p4 c)l )l(defun c:rec

14、t2()l (setq p1(getpoint n 请输入矩形的一个角点:)l (setq w(getdist p1 n 请输入矩形的长:)l (setq h(getdist p1 n 请输入矩形的宽:)l (setq alf(getangle p1 n 请输入矩形的旋转角:)l ;交互方式输入各个参数l (setq p2(polar p1 alf w)l (setq p3(polar p2(+alf(*0.5 pi)h)l (setq p4(polar p1(+alf(*0.5 pi)h)l (command pline p1 p2 p3 p4 c)l )l(defun c:lingxing

15、()l (setq p1(getpoint 输入菱形的一个角点:)l (setqalf(getangle p1 输入菱角:)l (setql(getdist p1 输入菱长:)l (setqp2(polar p1(*0.5(-pi alf)l)l p3(polar p2(*0.5(+alf pi)l)l p4(polar p1(*0.5(+alf pi)l)l )l (command pline p1 p2 p3 p4 c)l (princ)l)l(defun c:screw()l (setq p(getpoint n输入圆角矩形的中心点P)l (setq R(getpoint n输入圆角矩形

16、的圆角半径R:)l (setq L1(getdist n输入螺钉孔的水平间距l1:)l (setq L2(getdist n输入圆角矩形的长度l2:)l (setq W1(getdist n输入螺钉孔的垂直间距w1:)l (setq W2(getdist n输入圆角矩形的宽w2:)l (setq d1(getdist n输入大圆直径d1:)l (setq d2(getdist n输入小圆直径d2:)l (command ucs p)l (setq a(/L1 2)b(/W1 2)l (setqp1(list a b)l (command circle p(/d1 2)l (command ci

17、rcle p1(/d2 2)l (setq a(-(car p1)l2)b(-(cadr p1)w2)l (setqp2(list a b)l (command rectang F R p1 p2)l)1.加载load(1)command:(load“驱动器:驱动器:路径路径文件名文件名”)(2)工具菜单/加载应用程序(3)间接自动加载:将LISP文件的文件名及路径追加到AutoCAD 2002 supportAcad2002Doc.lsp文件的后面2.卸载 unload(1)command:(unload“驱动器:驱动器:路径路径文件名文件名”)(2)工具菜单/加载应用程序在AutoCAD环

18、境中加载了LISP程序后就可以运行程序中定义的函数了。运行方法有两种:(1)如果LISP函数在LISP程序中 以“defun c:函数名”的格式来定义的话,加载该程序后,程序中定义的函数可以作为AutoCAD的命令来使用(2)如果要运行的LISP函数是其LISP的内部函数或在LISP程序中以“defun 函数名”的格式来定义的话,加载该程序后,在CAD命令行提示下用括号括起来的函数名后回车才会执行该函数。如(函数名 参数1 参数2)将LISP源代码编译为可执行程序后再加载执行,可以提高执行的速度及对源代码保密。可vlisp-compile 及“文件”菜单/“生成应用程序向导”将Lisp文件编译

19、成应用程序。(1)通过vlisp_complie函数编译单个文件,格式 (vlisp-compile mode“filename”out-filename)如:(vlisp-compile st“d:/user/sample.lsp”)(2)加载已编译的程序 在LISP控制台窗口中加载已编译的程序:(load“d:/user1/sample.fas”)或文件菜单下的加载文件/加载LISP文件(3)运行已编译的程序 在LISP控制台窗口中输入用括号括起来的函数名,即可运行该函数。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。1992年7月,SGI公司发布了OpenGL的1.0

20、版本。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。lOpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。lOpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS2之间进行移植。l这个接口由近二百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。在电子游戏工业里,它是颇普遍的,而另一种编程接口系统是仅用于Microsoft Windows上的Dire

21、ct3D。lOpenGL常用于CAD、虚拟实境、科学视觉化程序和电子游戏开发。l模型绘制模型绘制l模型观察模型观察l颜色模式的指定颜色模式的指定l光照应用光照应用l图象效果增强图象效果增强l位图和图象处理位图和图象处理l纹理映射纹理映射l实时动画实时动画l交互技术交互技术l基于OpenGL标准开发的应用程序必须运行于32位Windows 平台下,如WindowsNT或Windows95以上环境;而且运行时还需有动态接库OpenGL32.DLL、Glu32.DLL,一般在WINDOWSsystem32里面(注:window2000以上系统均带有OPENGL32.DLL和glu32.dll)l一般

22、来说,VC6和VS.NET里面就带有GL的基本库VC6:Microsoft Visual StudioVC98IncludeGLVS.NET.2005:Microsoft Visual Studio 8VCPlatformSDKIncludegl一般是Gl.h,Glaux.h,Glu.hLib里也有:OpenGL32.lib,GLu32.lib,GLaux.libl所以开发者在VC下可以使用#include/Header File For The OpenGL32 Library#include/Header File For The GLu32 Library#include/Header

23、File For The Glaux LibrarylGLUT(OpenGL Utility Toolkit)l安装:在windows下通过 C/C+语言编写 GLUT 程序,你需要以下三个文件:GLUT.H-你需要在你的源代码中包含这个文件。通常情况下,这个文件应该放在你系统的包含目录下的 GL 文件夹中。GLUT.LIB(SGI windows版本)以及 glut32.lib(微软版本)-这个文件必须被连接到你的程序中,确保它放在 LIB 目录中。glut32.dll(Windows)和 glut.dll(SGI Windows版本)-根据你所使用的OpenGL选择一个,如果你正在使用微软

24、公司的版本,那么你必须选择 glut32.dll。你应该把DLL放置在你的系统文件夹中。l举例:在window XP下使用VC6安装GLUT下载glutdlls并解压复制glut32.dll和glut.dll到windowssystem32复制glut.h到.Microsoft Visual StudioVC98IncludeGL复制glut32.lib和glut.lib到Microsoft Visual StudioVC98Libl所有OpenGL函数采用了以下格式:库前缀有gl、glu、aux、glut、wgl、glx等等,分别表示该函数属于OpenGL某开发库等,从函数名后面中还可以看出

25、需要多少个参数以及参数的类型。有的函数参数类型后缀前带有数字2、3、4。2代表二维,3代表三维,4代表alpha值(以后介绍)。有些OpenGL函数最后带一个字母v,表示函数参数可用一个指针指向一个向量(或数组)来替代一系列单个参数值。如void glBegin(GLenum mode);l glColor3f(1.0,0.0,0.0);l1、核心库,包含最基本的函数,前缀是gl;用于常规的、核心的图形处理。l(1)绘制基本几何图元的函数。如glBegain()、glEnd()、glNormal*()、glVertex*()。l(2)矩阵操作、几何变换和投影变换的函数。l(3)颜色、光照和材质

26、的函数。如设置颜色模式函数glColor*()、glIndex*()。l(4)显示列表函数,纹理映射函数,特殊效果函数,光栅化、象素操作函数,选择与反馈函数,曲线与曲面的绘制函数,状态设置与查询函数。l2、实用库(OpenGL utility library),包含的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等前缀为glu。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。l如辅助纹理贴图函数,坐标转换和投影变换函数,多边形镶嵌工具,二次曲面绘制工具,非均匀有理B样条绘制工具 l3、OpenGL辅助库(OpenGL auxiliary期而

27、至library,GLAUX),包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,前缀为aux。l如窗口初始化和退出函数:auxInitDisplayMode()和auxInitPosition()。,窗口处理和时间输入函数,窗口处理和时间输入函数,三维物体绘制函数:网状体和实心体,如长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体auxWireTetrahedron()、十二面体auxWireDodecahedron

28、()、圆锥体auxWireCone()和茶壶auxWireTeapot()。绘制实心体只要将上述函数中的确Wire更换成Solid就可以了。l4、OpenGL工具库(penGL Utility Toolkit)l(1)窗口操作函数,如:glutInit()glutInitDisplayMode()、glutInitWindowSize()glutInitWindowPosition()等。(2)回调函数,如响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc()、glutPostRedisplay()、glutReshapeFunc()、glutTimerFunc()

29、、glutKeyboardFunc()、glutMouseFunc()。(3)创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。(4)菜单函数创建添加菜单的函数GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu()和glutAttachMenu()。(5)程序运行函数。glutMainLoop()。#include void renderScene(void)/绘制一个简单的二维的三角形 glClear(GL_COLOR_B

30、UFFER_BIT);glBegin(GL_TRIANGLES);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,0.0,0.0);glVertex3f(0.0,0.5,0.0);glEnd();glFlush();void main(int argc,char*argv)glutInit(&argc,argv);/初始化glutglutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);/设置窗口的模式深度缓存,单缓存,颜色模型glutInitWindowPosition(100,100);/设置窗口的位置gl

31、utInitWindowSize(320,320);/设置窗口的大小glutCreateWindow(“3D Tech-GLUT Tutorial”);/创建窗口并赋予titleglutDisplayFunc(renderScene);/调用renderScene把绘制传送到窗口 glutMainLoop();/进入循环等待 l#includelfloat angle=0.0;lvoid changeSize(int w,int h)lif(h=0)h=1;lfloat ratio=1.0*w/h;lglMatrixMode(GL_PROJECTION);lglLoadIdentity();l

32、glViewport(0,0,w,h);lgluPerspective(45,ratio,1,1000);lglMatrixMode(GL_MODELVIEW);lglLoadIdentity();lgluLookAt(0.0,0.0,5.0,l 0.0,0.0,-1.0,l 0.0f,1.0f,0.0f);llvoid renderScene(void)lglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);lglPushMatrix();lglRotatef(angle,0.0,1.0,0.0);lglBegin(GL_TRIANGLES);lg

33、lVertex3f(-0.5,-0.5,0.0);lglVertex3f(0.5,0.0,0.0);lglVertex3f(0.0,0.5,0.0);lglEnd();lglPopMatrix();langle+;lglutSwapBuffers();llvoid main(int argc,char*argv)lglutInit(&argc,argv);lglutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);/设为双缓冲区,/平滑动画需要 lglutInitWindowPosition(100,100);lglutInitWindowSi

34、ze(320,320);lglutCreateWindow(Lighthouse 3D-GLUT Tutorial);lglutDisplayFunc(renderScene);lglutIdleFunc(renderScene);/register a callback function to be called when the application is idle lglutReshapeFunc(changeSize);/Preparing the window for a reshapelglutMainLoop();llweb:OpenGL 官方主页:http:/www.open

35、gl.orgOpenGL 2.1 Reference:http:/www.opengl.org/sdk/docs/manGLUT:http:/www.opengl.org/resources/libraries/glut/NEHE的在线GL教程:http:/lspecification:The OpenGL Utility Toolkit(GLUT)Programming Interface (PDF)OpenGL 2.1 specification (PDF)lbook:OpenGL编程指南(四版)(中文),人民邮电出版社OpenGL Shading LanguageWindows下的图形编

36、程是与硬件无关的,编程者首先在一个逻辑设备(DC)上实现图形的绘制,然后通过Windows系统提供的一个标准接口(GDI)与设备驱动程序打交道,最后,设备驱动程序在具体的图形设备上将图形实现。6.2.3 使用VC+实现图形绘制VC+将所有的Win32API函数封装在MFC中,将设备环境DC封装在CDC基类中,将GDI封装在CGdiObject基类中。类的成员函数名与相应的Win32API函数名一样,但有些函数的参数数量可能会有所变化。图形交换文件可实现不同语言编写的程序与AutoCAD系统的连接。图形交换文件主要有三种:(1).DXF:专门格式的ASCII码文本文件,易于为其它程序处理,主要实现高级语言程序与AutoCAD系统连接。(2).DXB:专门格式的二进制文件。是面向具有CAD/camera软件包的用户用某些程序通过外部功能执行的。(3).IGS:按美国国家标准IGES所规定格式的ASCII码文本文件。4.STEP中性文件采用EXPRESS语言来描述三维建模过程中所生成的三维形体的全部几何和拓朴信息,以及配置信息。为了进行有限元单元的自动剖分,首先需将EXPRESS语言所表达的全部实体信息,转换为某一高级语言的内存信息。如转换成面向对象+语言。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(AutoLisp程序设计教程解析.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|