AutoLisp编程入门

AutoLisp编程入门
AutoLisp编程入门

AUTOLISP编程

基本指南:两数求和

在命令行输入:(+ 2 3) (- 2 3) (* 2 3) (/ 2 3)

如果直接输入(/ 2 3)则会显示0 因为2和3是整型所以AutoLisp把这些数字译为整型(AutoLisp进行了四舍五入)所以输入(setq x (/2.0 3))就可得到0.666667六位小数

在命令行输入:!p则会显示p这个变量的值

SETQ和变量

Setq是来保存计算的结果的,相当于给一个变量赋值例:

(setq x (/2.0 3)) 这边x是变量就是把2.0/3的值赋给x

Setq能完成多项“设置相等”例如:

(setq x 1.0 y 2.0 z 3.0) 就是分别赋给x y z 赋值

AutoLISP函数

1.数学函数

(min 7 3 5 11) 就是取7 3 5 11这四个数的最小值

(setq minbr (min 7 3 5 11))

(setq rad (*(/ 45 180.0)pi))

2.几何函数

(setq p1 '(1.3 5.7)) ‘表示指定2个(3个)的坐标值,这样AutoLISP就不会计算这些值了

(setq p2 '(7.5 3.1))

(setq p3 '(9 4))

(setq p4 '(0.1 2.5))

(distance p1 p2)

(angle p1 p2)

(inters p1 p2 p3 p4)

(osnap p1 "mid")

2.

例:在一个绘制楼梯间的AutoLISP例程中,一部分程序检查层高是否大于8英寸:如果大于,就绘制出14级台阶,如果小于就绘制13级台阶。

3.

(strlen “Using AutoCAD”)

STRLEN函数将报告Using AutoCAD为13个字符,计算空格。可以看到Using AutoCAD被引号括起来表明它是字符串。如果输入(strlen Using AutoCAD),AutoLISP会试图查询变量Using 和AutoCAD所包含字符串的长度。

(strlen autocad “A software package”)

(strlen using “the planet Earth”)

(strlen using autocad)返回34

STRCAT函数通过混合变量和文字将字符串连接在一起并创建返回信息。

如何把45度37分11秒即AutoCAD表示的45d37’11’’呢?这就要用到一个名称为ANGTOF 的转换函数。它把包含格式化的角度的字符串转换为弧度(实数),如下例:

(angtof “45d37’11\’’”1)返回0.796214 d表示度‘表示分\’’表示秒之所以这样用是为了不至于与后引号(”)混淆,后引号表示字符串的结束。

ANGTOF函数能完成几种AutoCAD支持的单位之间的转换,而用状态值来表示转换的类型,本例中的1是状态值。几个用到模式值的AutoLISP函数如表:

得模式的数值。

(angtof “45d37’11\’’” (getvar “aunits”)) 返回0.796214

4

任何在命令提示行中完成的操作都可以很轻松地用COMMAND函数来完成。例如:(command “circle”“2,2”“D”“1.5” ) 该命令行的意思是创建以一个圆心坐标为(2,2)直径为1.5的圆其实这表示的意思都是我们平常画圆操作的顺序。

我们可以看到所有的文字都用引号括起来,所有的内容都被认为是字符串,即使是数字也是如此。

(command“text”“5,10”“1.5”“”“Using AutoCAD”) 其中那个红色引号的意思是旋转文字属性按enter键结束就是不旋转文字的意思。另一方面通常代表ENTER来退出TEXT命令会以闭括号结束。然而,对于那些自动回复的命令如LINE命令,“”是需要的。

(command “line “1,2”“3,4”“”) 当您最后忘记””时候,AutoCAD会留下下一点的信息不会结束命令。

要高效地应用CAMMAND函数,你必须知道AutoCAD的300条命提示顺序。可以看下“参考书”

注意的是“任何在COMMAND函数提示下输入信息可用于CAOMMAND。”注意“输入”这个词。该函数不能对对话框和工具栏宏起作用。用对话框的命令不能用在COMMAND中。

获取系统变量

AutoLSIP提供了2个更直接的函数:GETVAR(获取一个系统变量的值)和SETVAR (设置或者修改这个值)

系统变量SPLFRAME用于确定样条多段线控制框是否显示。默认值是0意思是不显示。(getvar “splframe”) 返回值为0

(setvar “splframe” 1) 就是设置splframe显示控制框

Get函数

GETSTRING函数提示用户输入文字,并把它保存在txtstr

在命令行输入:(setq txstr (getstring T “What do you want to write?”) )

在命令行出现:What do you want to write?然后输入Using AutoCAD

返回Using AutoCAD

注意这里附加的AutoLISP标识符T,它是一个AutoLISP操作,可允许GETSTRING 中的字符串的包含空格。如果省去T,GETSTRING只会接纳首空格之前的文字,在COMMAND:提示下也是同样的情况(结尾只有Using 而没有AutoCAD)GETREAL函数提示用户输入一个高度值。例如:

(setq txtHt(getreal “How big do you want the letter?”)

在命令行出现:How big do you want the letter?输入2

在命令行返回2.0

GETREAL函数会自动把2(整数)转化为实数2.0,你也可以不用输入数值,直接在工作窗口单击2点让AutoLISP自动读取2个点的距离。如果你误输入了文字,AutoCAD会重新叫你输入。

(setq TxtAng(getangle “Tilt the text by how much?”)

GETANGLE函数提示用户输入一个角度,并把它转换成弧度值。与上面函数一样可以在工作窗口单机2点。

(setq TxtIns (getpoint “Where do you want the text to start?”))

在命令行出现:Where do you want the text to start?

这时你就选取一个点假如我选取的是(27,30,20)

GETPOINT函数提示用户输入文字的起点坐标:可以输入一个值,一个二维坐标或者三维的,或者在制作窗口单击一点。若只输入一个值则认为是0,0点到当前点的极轴距离。若输入文字则会返回错误信息。

通过以上的变量参数可以执行TEXT命令:

(command“text” TxtIns TxtHt TxtStr)

会出现Using AutoCAD

5

AutoCAD的SELECT命令一次只可对一个选择集进行操作,但是AutoLISP的SSxxx命令却可对最多128个选择集操作。

大部分对象操作函数以ent开头,是entity的简写,是AutoCAD对象的原名。

要创建并操作对象,ENT函数要作用于DXF格式的变体。该变体被称为“点对”。

比如,作用于一个名为RightOfWay的层,就要用以下的格式、

“2 .RightOfWay”引号表明数据的开始与结束。中间的点(.)用于分隔两个值:2是层名的DXF代码:而RightOfWay是层名。要应用对象操作函数就需要对DXF 格式有较好的理解。

AutoDesk公司提供了差不多4打函数来控制AutoCAD图形中的对象与外部数据库中的记录之间的ASE(AutoCAD结构化查询语言扩展名)连接。这些函数不难定位:他们都以Ase_开头,如ASE_LSUNITE和ASE_DOCMP

还有2打AutoLISP函数用来载入和控制对话框。如LOAD_DIALOGUE和NEW_DIALOGUE.有一组5个函数用来进行内存管理。但它们用途很小,所以Autodesk公司建议不必使用。

6.编写AutoLISP函数

指南:步骤1——选取点

在COMMAND函数中用ID命令,如(command “id”);

在GETVAR函数中用LASTPOINT系统变量,如(getvar “lastpoint”);

在GETPOINT函数,如(getpoint”Pick a point”)

1.在command:提示下输入:(command "id")选取一个点假如x=

2.3 y=

3.0 z=5.0

然后输入(setq xyz (getvar “lastpoint”)) 则会出现(2.3 3.0 5.0)“LASTPOINT”

是被引号括起来的系统变量名,因为他是字符串。

2.(setq xyz (getpoint “Point:”)) getpoint将显示提示文字point:,并等待用户

选取一个点。假设x=2.3 y=3.0 z=5.0

指南:步骤2——放置文字

要把文字放在图形中有一个简单的办法:用COMMAND函数与text命令结合(高级手段是用ENTMAKE)

一个够格的AutoLISP程序:(setq xyz (getpoint "Pick point"))

(command “text” xyz 200 0 xyz)

程序命名

为了对程序命名,用DEFUN函数括起全部代码,如下所示:

(defun c: label (/xyz)

(setq xyz (getpoint “Pick point:”))

(command “text” xyz 200 0 xyz)

)

DEFUN用来定义程序名(在AutoLISP中,函数,程序和例程这些词汇交替使用)

Label 是给出的程序名。可以给出任意名称,只要与AutoLISP内置数名和用户定义的全局函数名不冲突就行。

C:是使是使AutoLISP例程与AutoCAD命令一致的前缀。这使用户在COMMAND:提示下简单的输入label就可以了。

如:在命令行中输入:label 然后选取一个点

如果前缀c:省略,那么程序必须作为一个AutoLISP函数来运行——用括号括起来。

如:在命令行输入:(label)然后选取一个点

注意:可以不用c: 而用其他前缀,以此来区分您编写的子程序。如下例:(defun zhg:label)

(/xyz)给出了输入和局部变量的名称,斜线用于分隔两种类型的变量:

输入变量为AutoLISP例程提供数据,输入变量名出现在斜线前面,如:(name/); 局部变量只在程序中应用,局部变量出现在斜线之后。如(name/xyz)

闭括号”)”是程序开始时开括号的平衡符。

指南:保存和载入程序

(defun c:label (/ xyz)

(setq xyz (getpoint "Pick point"))

(command "text" xyz 200 0 xyz)

)

把该程序以文件名label.lsp存入AutoCAD的\support文件夹中。

所有的AutoLISP程序用.lsp后缀来识别。

要在AutoCAD中载入AutoLISP程序,使用LOAD函数(该函数区别于AutoCAD 中用来载入图形文件的LOADA命令。)

(1 )在命令提示行中输入load函数,该函数包含载入AutoCAD的程序名称。如:

(load “label”)

(2) 如果没有找到AutoLISP程序,会提示:未能找到label文件。在这种情况

需要指定路径。假设label.lsp保存在\my documents文件夹中,您应当输入如下信息:(load “\\my documents \\label”)

注意双反斜线(\\)的使用。也可以用一个正斜线:(load “/my documents/label”)

(3) 可以运行载入程序:

Label 然后选取一个点

AutoCAD提供了一个自动载入AutoLISP程序的方法。AutoCAD开始启动

时会自动查找一个名为acaddoc.lsp的文件,并自动载入该文件列出的

AutoLISP程序名。

要添加label.lsp并不难

(1)用文字编辑软件打开acaddoc.lsp文件。

(如果acaddoc.lsp不存在,则新建一个文件并把他保存在AutoCAD

的\support文件夹中。)

(2)添加AutoLISP程序的名称

(load “label.lsp”)

(3) 存acddoc.lsp文件

(4)启动AutoCAD,label程序会自动载入。

使用CAR和CDR:

假设我们在cad中点击一下则出现点的坐标,假设某一个点的坐标是(6.104809 8.145555 10.332554)显然小数位比较多,有时候我们只需要保留一位或者两位的小数位。下面我们就来编写一段减小小数位的程序:

首先给大家介绍一个系统变量LUPREC,他其实就是UNITS命令的一个设置精度的功能如图我们输入LUPREC也可以实现我们所需要的小数位如图

首先编写代码并保存为文件名label.lsp

(defun c:label ()

(Setq xyz (getpoint “Pick point:”))

(command “text” xyz 200 0 xyz)

)

题外话:每次我在word文档编辑的时候复制代码到cad的命令行都会出

现错误,因为双引号的问题,在word文档打入英文的双引号你一复制到记事本中就变成中文的双引号了。

可以运行试一试可以在命令行输入!xyz 就可以输出其xyz的坐标值AUTOLISP有专门的函数用来查分列表。假设一个点xyz的坐标是(3.22154 5.02685 50.54552)我想取x坐标的值或者y,z。

CAR函数就是提取列表中的首项目。在命令行输入(car xyz) 则会显示xyz的x的坐标值3.22154

CDR函数是CAR函数的互补函数:它从列表中剔除首选项目并选择余下的内容。在命令行输入(cdr xyz)则会输出(5.02685 50.54552)

AUTOLISP允许以多种方式组合a和d,以提取列表中其他位置的项目。为了提取y的坐标,使用CADDR:

在命令行输入(cadr xyz)则会显示(5.02685)

用CADDR提取z坐标:

在命令行输入(caddr xyz)则会显示50.54552

用刚学的代码将每个坐标保存在独立的变量中:

在命令行输入(setq ptx (car xyz)

Pty (cadr xyz)

Ptz (caddr xyz)

)

3个坐标已经分离,现在用来减少小数位的位数。ROTS函数一次完成2个任务:改变小数位数并把实数转换成字符串。

在命令行输入(rtos ptx 2 uprec)就会显示你想保留小数位数的值。不懂接着往下看。RTOS函数用到3个参数

Ptx是包含实数值的变量名

2是转换类型,本例中是小数类型。数字2基于系统变量LUNITS,该变量定义了

类型。比如:类型3对小数单位而言是“3个小数位”,而对建筑单位而是“8英寸”。如果Uprec指定精度为1,那么RTOS函数会将6.10049显示为6.1

哎呀,就是保留几位小数啦。

对x , y , z 坐标值截尾并保存,代码如下:

(setq ptx (rtos ptx 2 uprec)

Pty (rtos pty 2 uprec)

Ptz (rtos ptz 2 uprec)

)

可以设置与一个它本身等价的变量名,用RTOS获取后面的ptx值后,前面的ptx 保存x坐标的新值。变量名的再利用可以节省内存。

坐标截尾后用STRCAT函数把他们串接起来:

(strcat ptx pty ptz)

但是最终会显示“6.18.110.0”你分辨不出来是哪几个数字吧。但是AUTOlisp又没有空格,所以代码要写成(setq xyz (strcat ptx “,” pty “,” ptz ))最终会显示“6.1,8.1,10.0”这样就比较像样了。

在这边我建议大家用记事本编写下面代码:

(defun c:label (/ xyz xyz1 uprec ptx pty ptz)

(setq uprec (getint “Label precision:”))

(setq xyz (getpoint “Pick point:”))

(setq ptx (car xyz)

Pty (cadr xyz)

Ptz (caddr xyz)

)

(setq ptx (rtos ptx 2 uprec)

Pty (rtos pty 2 uprec)

Ptz (rtos ptz 2 uprec)

)

(setq xyz1 (strcat ptx “,” pty “,” ptz))

(command “text” xyz 200 0 xyz1)

)

注意:如果你把上面的代码复制粘贴到你的记事本并保存为label.lsp 格式的文件,cad载入该文件时有可能会说有错误。那是因为你复制的代码中的””英文输入法状态的双引号会变成中文状态的双引号。把它改成英文状态的双引号就可以了。我的电脑就是有这种问题,我是在word文档里写代码的,复制到记事本的。

(16)最后,在代码中添加注释,以便以后查看。分号(;)表示内容的开始:

;Label.Lsp labels a picked point with its x ,y ,z coordinates.

;by Chen Pingfeng,10,September,2012.

(defun c:label (/xyz xyz1 uprec ptx pty ptz)

;Ask user for the number of decimal places;

(setq uprec (getint “Label precision”))

;Ask the user to pick a point in the drawing;

(setq xyz (getpoint “Pick point:”))

;Separate 3D point into individual x,y,z-values:

(setq ptx (car xyz)

pty (cadr xyz)

ptz (caddr xyz)

)

;Truncate values:

(setq ptx (rtos ptx 2 uprec)

pty (rtos pty 2 uprec)

ptz (rtos ptz 2 uprec)

)

;Recombine individual values into a 3D point:

(setq xyz1 (strcat ptx “,” pty “,” ptz “,”))

;Place text:

(command “text” xyz 200 0 xyz1))

(17)把文件保存为label.lsp,然后载入AutoCAD中测试AutoLISP程序

在命令行输入:(load “label”)

“C:LABEL”

(18) 运行程序如图:

将数据保存到文件中

用OPEN WRITE-LINE和CLOSE函数可以很方便地将x,y,z坐标作为数据保存在文件中。但是它比较简单,所以AUTOLISP函数从文件中获取的数据功能相对较弱。

他只能按顺序读写ASCII文件。AUTOLISP不能处理二进制文件,也不能随机获取数据(AUTOCAD用户要求增加这些功能,但Autodesk公司不予支持。)

将数据写进一个文件分为3步:

1.打开数据文件;

2.将数据写进文件

3.关闭文件

其他大多数程序设计语言会要求用户首先创建文件,如果文件不存在AutoLisp 会创建的。

第一步:打开数据文件

用OPEN函数打开一个文件有3个目的:(1)从文件中读取数据;(2)把数据写进该文件;(3)在文件中追加数据。AUTOLISP一次只能完成其中的一项,所以用户必须用类型符来指定操作(必须是小写):

“r”-----read 从文件读取数据

“w”----write 原有数据全部删除,然后添加新数据

“a”----append 将新数据添加到原有数据的末尾。

要使程序一直向文件中添加数据,选择追加模式。AUTOLISP代码如下:

在命令行输入:(setq fil (open “xyzdata.txt”“a”))则显示:#

几乎所有的程序设计语言都采用文件描述符而不是文件名。描述符是操作系统把文件实名按一定的字母和数字顺序排列产生的名称。可以看到AUTOCAD用#

该代码把文件描述符存放在变量fil中,从此程序指向fil而不是文件名xyzdata.txt。“a”提示AUTOLISP打开xyzdata.txt追加数据。类型符的小写相当重要,这也是

用WRITE-LINE函数将数据写进文件。该函数只能将一行数据写进文件中(与之相关的,WRITE函数写一行字符到文件中)。代码如下:

(write-line xyz1 fil)

一些软件如电子表格,数据库程序,甚至一些文字处理软件用逗号分隔数字来读取数据,这称为“逗号分隔值”或称CSV

8.1518,3.2752,0.0000

这些程序把逗号当作一个分隔符而不当作字面上的逗号。这就允许电子表格软件在每个单元格中放一个数值,以便用户的后期处理。

回顾用STRCAT函数和CDR,CADR和CADDR函数分隔x,y,z插入坐标的方法,在两两之间逗号。

第三步:关闭文件

关闭文件是为了更好地保管(用户忘记时AUTOCAD会自动关闭文件,但优秀的程序员会随手关闭)。关闭文件很简单:

(close fil)

用记事本添加数据,并使之以粗体字出现在label.lsp副本的下一页中。

;Label.Lsp labels a picked point with its x ,y ,z coordinates.

;by Chen Pingfeng,10,September,2012.

(defun c:label (/ xyz xyz1 uprec ptx pty ptz)

;Ask user for the number of decimal places;

(setq uprec (getint “Label precision”))

;Ask the user to pick a point in the drawing;

(setq xyz (getpoint “Pick point:”))

;Separate 3D point into individual x,y,z-values:

(setq ptx (car xyz)

pty (cadr xyz)

ptz (caddr xyz)

)

;Truncate values:

(setq ptx (rtos ptx 2 uprec)

pty (rtos pty 2 uprec)

ptz (rtos ptz 2 uprec)

)

;Recombine individual values into a 3D point:

(setq xyz1 (strcat ptx “,” pty “,” ptz “,”))

;Place text:

(command “text” xyz 200 0 xyz1)

;Open the data file for appending:

(setq fil (open “xyzdata.txt”“a”))

;Write the line of data to the file:

(write-line xyz1 fil)

;Close the file

(close fil)

)

将代码载入AUTOCAD再次测试并运行。在您在图形中选取点的同时,例程标记了所选点并把该3D数据写进文件。稍后,该数据文件出现下列信息:

8.1548,3.2752,0.0000

7.0856,4.4820,0.0000

62.5562,5.5635,0.0000

可以根据需要把xyzdata.txt文件输入一个电子表格程序中。

注意:xyzdata.txt这个文件会自动生成,并保存在“我的文档”中。

附加程序增强功能

回顾期望列表中的一个项目是控制文字放置的图层,有2种方法达到此目的:

1.无代码法:在启动AutoLISP函数前设置图层;

2.有代码法:提示用户输入层名,然后用系统变量CLAYER进行设置:

(setq lname (getstring “Label layer:”))

(setvar “CLAYER” lname)

在Pick point 提示行前添加上面2行代码。

另一个增强功能是指定文字样式。同样有2种方法:无代码法在启动例程前设置文字风格;另一种方法是添加下列AUTOLISP代码:

(setq tsname (getstring “Label text style:”))

(setvar “TEXTSTYLE” tsname)

在一次在Pick point提示前添加上面2行代码。

AutoLISP使用小贴士:

将LSP代码载入AutoCAD中

1.用LOAD命令把AutoLISP代码载入AutoCAD:

在命令行输入:(load “points”)

2.如果你觉得上面比较烦的话,可以编写(defun c:x () (load “points”))

现在每次需要载入points.lsp程序时,只要键入x再按下ENTER键就可以了:在命令行直接输入:x

3.windows有一个快捷的方法:把.lsp文件从外面拖拽到CAD中如图:

切换系统变量:

系统的变量有0和1两个值,分别表示关于开。比如:系统变量GRIDMODE默认值为0;关闭时,网格不显示。(在低版本的CAD中)

当AutoLISP改变系统变量的值时,该办法可把它们设置回初始状态。

下面是一个代码段(setq splvar (getvar “splframe”))

(setvar”splframe” splvar)

取消NIL

每次运行一个AutoLISP例程时,在结尾都会显示令人讨厌的nil。Nil的出现是有原因的,但是有原因并不表明就该保留nil。用(PRINC)作为例程的结尾就可以禁止nil出现了。

;Label.Lsp labels a picked point with its x ,y ,z coordinates.

;by Chen Pingfeng,10,September,2012.

(defun c:label (/ xyz xyz1 uprec ptx pty ptz)

;Ask user for the number of decimal places;

(setq uprec (getint “Label precision”))

;Ask the user to pick a point in the drawing;

(setq xyz (getpoint “Pick point:”))

;Separate 3D point into individual x,y,z-values:

(setq ptx (car xyz)

pty (cadr xyz)

ptz (caddr xyz)

)

;Truncate values:

(setq ptx (rtos ptx 2 uprec)

pty (rtos pty 2 uprec)

ptz (rtos ptz 2 uprec)

)

;Recombine individual values into a 3D point:

(setq xyz1 (strcat ptx “,” pty “,” ptz “,”))

;Place text:

(command “text” xyz 200 0 xyz1)

;Open the data file for appending:

(setq fil (open “xyzdata.txt”“a”))

;Write the line of data to the file:

(write-line xyz1 fil)

;Close the file

(close fil)

)

(princ)

标点符号的问题:

文本字符串中的转义符必需用小写。比如\e是转义符(相当于ASCII 27),\t是制表符。注意他们用的是反斜线,因此不能应反斜线来分隔文件夹名。AutoLISP 会误认为您键入一个转义符。

AUTOLISP用引号(””)来识别字符串。这样您不能用一个引号来表示引号或者英寸了。如25英寸写作25”。代替方法是用转义符,专门用ASCII字符对应的八进制代码来表示引号。只要把042弄清楚,举一反三,其他就容易了。把字符串指定到变量中,如下表示:

(setq distxt “The length is ”)

(setq distval 25)

(setq qumark “\42”)

可以看到八进制码042指定给了变量qumark。反斜线提示了AUTOLISP后面的数字是八进制的(八进制是十六进制的一半:0 1 2 3 4 5 6 7 10 11 12 ……16 17 20 21 ….)。然后用STRCAT函数将以上3个字符串接起来:

(strcat distxt distval qumark)

文字已经正确:

“The length is 25”

对提示语句同样适用:

(prompt “The diameter is 2.54 \042”)

相类似的,可以把\009用于带制表符的空格文本。(prompt “The diameter is \009 2.54\42”)

AutoLISP-程序创建过程

AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。

(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图

Autolisp基础教程

Autolisp基础教程 单元一: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 支持软件。

autocad lisp教程

Lisp教程 一.Lisp基础知识 二.对话框基础 一.基本知识 第1节 -------------------------------------------------------------------------------- 基本知识 AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50

目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令. AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成. 是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言. 程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响. 数据及程序均统一以串行(List)结构表示. 可直接调用几乎全部的AutoCAD命令. 既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力. 内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境. 可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框. 缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取. 第2节 -------------------------------------------------------------------------------- 函数(Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 第3节 -------------------------------------------------------------------------------- 数据型态(Data Type) 整数(INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数(REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6 字符串(STR) 一般文字,其前后必须加上双引号" e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD" 像素名称(ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象 档案(FILE) 以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量 选集(PICKSET)

AUTOLISP详细讲解

AutoLISP详细讲解 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCADR2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+num1num2num3…) 此函数(+)计算加号(+)右边所有数字的和(+num1num2num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

用AutoLISP程序提高绘图效率的几个实例

2007.12 科技广场 254

工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。现在提供AutoLISP程序,即可解决绘制螺旋线的问题。然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。 根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下: 图二园台螺旋线 X=[r0+hg *α/(2π)]*cosα Y=[r0+hg *α/(2π)] *sinα Z=±vg *α/(2π) 其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。 下面提供圆台螺旋线的AutoLISP程序清单: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r1 (getreal "指定初始半径:")) (setq disp (getreal "指定节距:")) (setq angtg (getreal "输入锥形角:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq tg (*(/ angtg 180) pi)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r1 0 0)) (repeat (* m n) (setq k(+ k 1)) (setq ang(+ delta ang)) (setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg))))) (setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k)))) (command pt2) ) (command "") ) 根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。圆柱螺旋线程序清单如下: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r (getreal "指定初始半径:")) (setq vg (getreal "指定节距:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r 0 0)) 255

养成良好的AutoLISP书写习惯

养成良好的AutoLISP书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 autolisp的入门教程+autolisp函数! Lisp是一门历史悠久的语言,全名叫LISt Processor,也就是“表处理语言”,它是由John McCarthy于1958年就开始设计的一门语言。和Lisp同时期甚至更晚出现的许多语言如Algo 等如今大多已经消亡,又或者仅仅在一些特定的场合有一些微不足道的用途,到现在还广为人知的恐怕只剩下了Fortran和COBOL。但唯独Lisp,不但没有随着时间而衰退,反倒是一次又一次的焕发出了青春,从Lisp分支出来的Scheme、ML等语言在很多场合的火爆程度甚至超过了许多老牌明星。那么这颗常青树永葆青春的奥秘究竟在哪里呢? 如果你只接触过C/C++、Pascal这些“过程式语言”的话,Lisp可能会让你觉得十分不同寻常,首先吸引你眼球(或者说让你觉得混乱的)一定是Lisp程序中异常多的括号,当然从现在的角度来讲,这种设计的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力,简化语言本身的设计在那时算得上是当务之急了。 Lisp的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我听你们的),它只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式同时也就是程序结构,但是正如规则最简单的围棋却有着最为复杂的变化一样,Lisp使用最基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。 废话少说,现在我们就来看看Lisp语言中的基本元素。 Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。

autolisp教程

第十四章 AutoLISP 14.1 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 14.2 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 269

AutoLISP基础入门案例,很受用精编版

单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3.AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4.AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短 的时间内,写出令人惊讶、赞叹的功能! 5.若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不 为过一点也不夸张! 6.AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅 力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的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. 对设计人员而言:

autolisp教程

第十二章从菜单执行函数 1.制作简单的菜单 (a)首先定义一个函数,并保存为plus32.lsp: (defun plus32() (setq a (+ 3 2)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENUGROUP=Mylisp ;菜单组的名称 ***POP1 ;第一组下拉菜单 [Mylisp] ;第一组下拉菜单总的名称 [plus] ^c^c^p(load “plus32.lsp”) (plus32) ;菜单名,加载,执行 ;一定是一个空行 (c)加载菜单和执行函数 用menuload函数执行加载. 2.制作较为复杂的菜单 (a)首先定义两个函数,并保存为plus32.lsp和plus45.lsp : (defun plus32() (setq a (+ 3 2)) ) (defun plus45() (setq a (+ 4 5)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENYGROUP=MYLISP ***pop1 [mylisp1] [first] ^c^c^p(load "plus32.lsp") (plus32) [first2] ^c^c^p(load "plus45.lsp") (plus45) ***pop2 [mylisp2] [first2] ^c^c^p(load "plus32.lsp") (plus32) [first4] ^c^c^p(load “plus45.lsp”) (plus45) (c)加载菜单和执行函数 用menuload函数执行加载. 第十三章保持程序畅通 1.程序示例 (a)首先定义一个函数,并保存为myline.lsp: (defun myline() (graphscr) (setq pt1 (getpoint "\n请输入第一个点:")) (setq pt2 (getpoint pt1 "\n请输入第二个点:")) (command "line" pt1 pt2 "") )

AutoLisp入门教程

單元一:AutoLISP主角瀟灑登場 一. AutoLISP 是何方神聖? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買! 3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』! 4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短 的時間內,寫出令人驚訝、讚嘆的功能! 5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不 為過一點也不誇張! 6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅 力無窮! 二. AutoLISP 程式語言的特質分析: 學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的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 高手的封號』也將黃功力又往前邁出了一大步,對個人的成長幫助匪淺,幸運的話,搞不好還可以袍加身,不亦樂乎!!!

AutoCAD之AutoLisp入门教程

AutoLisp入门教程 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。 36.2.1 Visual LISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD 命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 36.2.2 实例1 最简单的LISP程序——“Hello.lsp” Step 1 创建新文件 (1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。 (2) 单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。 Step 2 输入代码并保存文件 (1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。程序清单如下: ;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!") ;调用“Commnad”函数与AutoCAD进行通信 [img]https://www.360docs.net/doc/e42281014.html,/Files/AutoCad/146-1.JPG[/img]

2021年AutoLISP从入门到精通初级教程(新手必备)

AutoLISP入门 欧阳光明(2021.03.07) 单元一: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、欲简化繁琐的环境设定或绘图步骤时.

AutoLISP从入门到精通初级教程(新手必备)

AutoLISP入门 单元一:AutoLISP主角登场 (2) 单元二:AutoLISP的关键、基本结构及语法 (4) 单元三:快速分类浏览AutoLISP功能函数(一) (10) 单元四:快速分类浏览AutoLISP功能函数(二) (13) 单元五:轻松快速的掌握AutoLISP设计技巧 (16) 单元六:图元数据的取得与活用技巧(一) (21) 单元七:图元数据的取得与活用技巧(二) (25) 单元八:新手上路-参数设计的关键技巧 (31)

单元一: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 支持软件。

AUTOLISP教程

函数 (Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号; 如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 数据型态 (Data Type) 整数 (INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数 (REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小 e.g. 12.5 数) 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示 : 在E或e后加上次方值 e.g. 4.1e-6 字符串 (STR) 一般文字,其前后必须加上双引号 " e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜 e.g. "\AutoCAD"杠 \ 像素名称 (ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予 该对象 档案 (FILE) 以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量 数据型态 (Data Type) 选集 (PICKSET)

autolisp入门教程

一、学好AutoLISP的关键、基本结构与语法: 1. AutoLISP程式语言的特质 A.语法简单 B.功能函数强大 C.撰写的环境不挑剃 D.直译式程式,『即写即测、即测即用』 E.横跨AutoCAD各作业平台,悠然自得(注:以上五点,读者可以参考上一章的剖析!!!) 2.学好AutoLISP的关键:充份掌握『语法结构』&『功能函数』的搭配!!! 3.重要的AutoLISP的基本语法结构 规则1:以括弧组成运算式,、相对称左右括弧数一定要成双成对 规则2:运算式型态:(运算元运算子运算子运算子) 1.1运算元包括『功能函数』&『自定函式』 1.2运算子(引数)包括: A.整数(Integer)如8,-17,500,9999 ..... B.实数(Real)如8.5,-17.456 ..... C.字串(String)如"AutoCAD","123" D.串列(List)如("a" "b" "c"),(xy)

E.图元名称代码如 F.档案代码如..... G.选择群集代码如 规则3:运算式中的『运算子』,可以是另一『运算式』或『副程式』规则4:多重的括弧运算式,运算的先后顺序是『由内而外、由左而右』规则5:以档案型态存在的AutoLISP程式(ASCII档案),其副档名必须是.lsp 规则6:撰写的环境,只要是一般的文书编辑软体、记事本,可编辑ASCII 档案者都适用 规则7:以defun功能函数定义新的指令或新的功能函式 规则8:新定义的功能函式名称,若为『C:函式名』,则此函式可为AutoCAD新指令 规则9:载入AutoLISP程式的作法:=>指令:后直接键入(load "LISP 主档名") 规则10:AutoLISP程式中,在『分号;』后的内容均为注解,程式不处理,适时的增加注解,将使程式更具可看性、学习性及完整性 规则11:AutoLISP最常用的变数型态是『整数』、『实数』、『字串』、『点串列』四种,变数的型态依据设定值而自动定义,变数会一直储存该值,直到被重新设定值或绘图结束自动消失

用Autolisp对AutoCAD进行二次开发

用AutoLISP对AutoCAD进行二次开发 一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发) 我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开发,往往能够大大提高工作效率和技术水平。 二、什么是AutoLisp?如何用其进行二次开发? AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp 编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。 当前AutoCAD的二次开发工具主要有:VisualLisp(它是AutoLisp的集成开发环境)、VBA、ObjectARX和.NET API等,这里只介绍AutoLisp。 下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。 最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。 稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候先加载到CAD中,然后输入自定义的函数名执行。 当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度的时候就需要用到用户自定义的工具按钮、菜单和对话框了。 图1 根据程序数量选择二次开发形式 (1)在命令行中编写和执行程序 例1:(+ 2 3) 例2:(setq a 2) (setq b 3) (+ a b) 例3:(setq a 2)(setq b 3)(+ a b) 例4:(setq p1 (list 0 0))(setq p2 (list 200 200))(command “line” p1 p2 “”) ;;语句之间不空格 例5:(setq p1 (list 0 0)) (setq p2 (list 200 200)) (command “line” p1 p2 “”) ;;语句之间空格 ;; 表示语句(程序代码)的注释

相关主题
相关文档
最新文档