Auto LISP编程实例

Auto LISP编程实例
Auto LISP编程实例

目录

一、引言 (2)

二、总体设计

1、实现的方法和主要技术路线 (3)

2、绘制阀体二维工程图 (3)

3、程序流程图 (4)

三、详细设计

1 定义函数名 (5)

2 设置图层 (5)

3 设定参数 (6)

4 由参数选择图框并填写标题栏 (6)

5 绘制俯视图 (7)

6 添加倒圆 (8)

7 绘制主视图 (8)

8 左视图 (9)

9 剖面填充 (10)

10 添加螺纹 (10)

11 尺寸标注 (10)

12 粗糙度的标注 (12)

13 标注形位公差 (13)

14 技术要求 (14)

四、结论 (14)

五、心得体会 (15)

六、使用说明 (16)

七、参考文献 (16)

计算机辅助设计课程设计说明书

一、引言

AutoCAD二次开发的应用之一——典型零件的参数化设计在产品设计中发挥了越来越重要的作用,而参数化设计的重要环节是程序的编写,其在设计开发中占要想当大的比重,是参数化设计的核心,是整个设计任务的最精华的部分。本文的程序设计以阀体的零件图做了程序的设计。

参数化设计中有两个必须理解的问题:一、计算机辅助设计中需要对语句命令做参照,并做出优化选择。这对计算机的运行速度等都很重要。另外,对数学方法也必须有较好的理解,以求的一个好的计算方法。二、对图纸参数的选择要做出合理的选择。这对于以后的变参操作的正确性和应用性很重要。

该次设计中采用的AutoCAD二次开发的语言为LISP语言。它是AutoCAD中自带的一种高级语言。并对用户来是掌握起来比较容易,所以在当今比较流行。LISP(Lisp Processing Language)是人工智能领域中广泛采用的一种程序设计语言。主要用于人工智能、机器人、专家系统、博弈、定理证明等领域。LISP也称为符号语言,因为它处理的对象是符号表达式。LISP语言的程序和数据都以符号表达式的形式来表示,因此,一个LISP程序可以把另一个LISP程序作为它的数据来处理。

参数化设计是CAD中最为重要的研究领域之一。参数化技术使得设计者可以通过修改设计参数来驱动零件产品的几何模型。与传统的建模方式比较,参数化设计将设计者从琐碎的拼凑几何元素的操作中解放出来,大大简化了用户生成和修改零件模型的操作,提高了设计效率。

AutoCAD是一个通用CAD平台,它不仅具有强大的绘图、编辑功能,而且具有开放的体系结构,允许用户对其进行二次开发,参数化设计在其中占有很重要的比重。

这其中对基础知识和基本技能都有一定的要求才能灵活运用好编程语言。其中包括要求在AutoCAD环境下,可以通过命令行方式、菜单方式(下拉菜单或图标菜单)、工具栏方式实现常规零件的参数化设计过程;所设计的二维工程图,要求实现图层设置、线型线宽设置、颜色设置、尺寸标注、形位公差、粗糙度等常规二维工程图的要求;基本命令如镜像,偏移的灵活使用,等等

二、总体设计

1、实现的方法和主要技术路线

首先用AutoCAD绘制出阀体的二维工程视图,再参照二维工程视图,用AutoCAD 的高级语言Auto LISP语言编写程序,实现对阀体的参数化设计。编完程序,并修改正确后,用户可在Visual LISP集成开发环境中,也可以在AutoCAD环境中加载、运行Auto LISP程序。其实现介绍如下:

1)一旦在Visual LIS的文本编辑器中编写了程序或打开已有的程序就可以加载并

运行了。运行时需在控制台窗口中,在$提示符后输入用括号括起来的函数名

后按Enter键即可。

2)在Visual LISP集成开发环境中编写Auto LISP程序并加载、运行证明程序正确

后,就可以脱离Visual LISP环境,在AutoCAD环境中运行了。

2、绘制二维工程图

图1 二维工程图

3、程序流程图

图2 程序框图

三、详细设计

AutoCAD二次开发的应用之一——典型零件的参数化设计在产品设计中发挥了越来越大的优势,而参数化设计的重要环节是程序的编写,其在设计开发中占要想当大的比重,是参数化设计的核心,是整个设计任务的最精华的部分。现将本次开发阀体的参数化设计的程序的详细设计作如下介绍:

1、定义函数名

例如:(defun c:24hg( ) )

2、设置图层

根据所选的阀体工程图,需建立中心线、粗实线、细实线、标注线四个图层,

分别定义其层名、线型、线宽、颜色,实现方法是在Auto LISP中调用AutoCAD的

图层命令,命令格式举例如下:

(command "layer" "n" "中心线" "c" 4 "中心线" "l" "center" "中心线" "lw" 0.3 "中

心线" "")

(command "layer" "n" "粗实线" "c" 7 "粗实线" "l" "continuous" "粗实线" "lw" 0.6

"粗实线" "")

(command "layer" "n" "细实线" "c" 1 "细实线" "l" "continuous" "细实线" "lw" 0.3

"细实线" "")

(command "layer" "n" "标注线" "c" 3 "标注线" "l" "continuous" "标注线" "lw" 0.3

"标注线" "")

当画不同的线型时需调用其对应的图层,其调用有多种命令,现提供两种可供参考,

命令如下:

(command "layer" "s" "细实线" "")

(command "layer" "s" "粗实线" "")

(command "layer" "n" "标注线" "")

(command "layer" "n" "中心线" "")

3、设定参数

为得到不同的阀体结构,可设定阀体的总长L、总高H、总宽W、进油口内径d1、出油口内径d2等参数。其命令格式可参考下例:

(setq d1 (getreal"\n 输入进油口内径<15>:"))

而对不合理的参数可用if语句来判定并给与提示,其实现命令格式如下:

(setq d1 (getreal"\n 输入进油口内径<15>:"))

(setq d2 (getreal"\n 输入出油口内径<15>:"))

(if (< d1 (distance z3 z4))

(princ "ok")

(setq d1 (* (distance z3 z4) (/ 15 40)))

)

(if (< d2 (distance z11 z12))

(princ "ok")

(setq d2 (* (distance z11 z12) (/ 15 30)))

)

4、由参数选择合适作图图框并填写标题栏

可由参数选择最合适图框,用户输入参数后由计算机再根据参数按比例处理。图框的绘制可用绘制四边形的命令来实现,且全屏显示如:

(command "layer" "s" "细实线" "")

(setq width (getreal"\n输入图幅宽度(297):"))

(setq highty (getreal"\n输入图幅高度(210):"))

(command "limits" '(0 0) p0 "zoom" "a") ;全屏显示

(command "rectang" '(0 0) p0)

(command "offset" "5" p0 "@-20,-20" "")

而标题栏的绘制可用直线及偏移命令来实现例如:

(command "line" p5 p6 p7"")

(command "offset" 20 p9 p4 "")

(command "offset" 45 p9 p4 "")

(command "offset" 30 p8 p3 "")

(command "offset" 55 p8 p3 "")

(command "line" p4 p3 "")

(command "line" p9 "@-60,0" "")

(command "line" p8 "@55,0" "")

标题栏填写之前须对文字样式进行定义及转化可由如下命令实现:

(command "style" "hz" "仿宋_GB2312" 7 0.7 0 "n" "n" "n")

标题栏文字的填写可用如下命令:

(command "style" "hz" "仿宋_GB2312" 7 0.7 0 "n" "n" "n")

(command "mtext" p1 "j" "mc" p6 " " "")

(command "mtext" p5 "h" 4 "j" "mc" "@15,-8" "比例" "")

(command "mtext" p8 "h" 4 "j" "mc" "@15,-8" "1 : 1" "")

(command "mtext" "from" p5 "@15,0" "h" 4 "j" "mc" "@15,-8" "数量" "")

5、绘制俯视图

为得到合理的视图布局,可俯视图画起,取其中间圆心的点(f0)来确定,再确定工程各视图上的基点(z0),可由下述程序实现:

(setq p10 '(0 0))

(setq x1 (/ (* 90 width) 297)

y1 (/ (* 48 highty) 210)

)

(setq f0 (polar (list 0 0) (angle (list 0 0) (list x1 y1)) (distance (list 0 0) (list x1 y1))))

再由该基点定义主、左视图上各个点,为了方便,对对称的图形可定义一半的点,再由镜像来完成另一半,例如程序:

(command "line" f7 f6 "")

(command "line" f6 f5 "")

(command "line" f8 f9 "")

(command "line" f9 f10 "")

(command "line" f12 f1 "")

(command "line" f1 f2 "")

(command "line" f11 f10 "")

(command "layer" "s" "粗实线" "")

(command "circle" f0 (/ (* 5 l) 118))。

对于作图过程中多余的辅助边要及时剪切,例如:剪切771边,有如下程序

(command "arc" f4 "e" f1 "r" (/ w 2))

(command "arc" f3 "e" f2 "r" (/ (* 23 w) 56))

(setq f61 (polar f7 0 5))

(setq f31 (polar f0 (/ pi 4) (/ w 2)))

(command "trim" f31 "" f61 "")

6、添加倒圆

添加过渡圆角要选择合适的线上点,不取交点和二异点。过程可参下:

(setq c101 (polar c10 (* -0.5 pi) 5))

(setq c81 (polar c8 (* 0.5 pi) 5))

(setq c91 (polar c9 0 5))

(command "fillet" "r" 3 "fillet" c81 c91)

(command "fillet" "r" 3 "fillet" c91 c101)

7、绘制主视图

主视图及左视图的绘制与俯视图相同,主要是选取的主视图基点要和俯视图联系,达到等比例联系变化,例如:(setq z1 (polar f0 (* 0.5 pi) (+ (* 0.5 w) 15))) 。

并再次设置参数,程序为:

(setq d1 (getreal"\n 输入进油口内径<15>:"))

(setq d2 (getreal"\n 输入出油口内径<15>:"))

(if (< d1 (distance z3 z4))

(princ "ok")

(setq d1 (* (distance z3 z4) (/ 15 40)))

)

(if (< d2 (distance z11 z12))

(princ "ok")

(setq d2 (* (distance z11 z12) (/ 15 30))))

8、绘制左视图

左视图的绘制与俯视图近似相同,主要是选取的左视图基点要和主视图联系,达到等比例联系变化,例如:

取点命令:

(setq c1 (polar z1 0 (+ (/ (* 88 l) 118) (/ w 2))))

(setq c2 (polar c1 pi (/ w 2)))

(setq c3 (polar c2 (/ pi 2) h))

(setq c4 (polar c3 0 (/ w 2)))

(setq c5 (polar c4 0 (/ w 2)))

(setq c6 (polar c5 (* -0.5 pi) h))

(setq c7 (polar c1 (/ pi 2) (/ (* 70 h) 105)))

(setq c8 (polar c7 pi (/ (* 20 w) 56)))

(setq c9 (polar c8 (/ pi 2) (/ (* 20 h) 105)))

(setq c10 (polar c9 0 (/ (* 40 w) 56)))

画线命令:

(command "layer" "s" "粗实线" "")

(command "line" c1 c2 c3 c5 c6 c1 "")

(command "line" c8 c9 c10 c11 "")

(command "line" c14 c15 "")

(command "line" c16 c13 "")

(command "line" c14 c13 "")

(command "arc" c8 "e" c11 "r" (/ (* 20 w) 56))

(command "circle" c7 (/ d1 2))

并再次使用剪切命令:

(setq c151 (polar c15 (* -0.5 pi) 2))

(setq c161 (polar c16 (* -0.5 pi) 2))

(setq c111 (polar c7 (* -0.25 pi) (/ (* 20 w) 56)))

(command "trim" c111 "" c151 "")

(command "trim" c111 "" c161 "")

9、剖面填充

程序的编写参考了AutoCAD的命令,先设定若干参考点,再由参考点偏移得到填充面域的内部点进而选中所要填充的剖面,主要是选择图形一定要闭合设置,其实现由下列所示:

(command "layer" "s" "细实线" "")

(setq pp1 (polar z2 (/ pi 4) 5))

(setq pp2 (polar z24 (/ pi 4) 2))

(setq pp3 (polar z16 (/ pi 4) 5))

(setq pp4 (polar z22 (/ pi 4) 2))

(command "bhatch" "p" "u" 45 3 "n" pp1 pp2 pp3 pp4 "")

10、添加螺纹

设置螺纹可以用连点法,也可以用画矩形命令。但前者较好,因为螺纹一般要在剖面线后加(为了避免剖面线不能填充),用后者也不能用镜像命令。例如程序:(command "layer" "s" "细实线" "")

(command "rectang" z24 z33)

(setq z34 (polar z33 (* -0.5 pi) (+ d1 2)))

(command "rectang" z34 z25 "")

(command "layer" "s" "粗实线" "")

(command "line" z34 z33 "")

11、尺寸标注

在标注之前需进行文字样式的转换,将仿宋_GB2312改为默认的txt样式,然后再进行标注,命令参考如下:

(command "clayer" "标注线")

(command "style" "standard" "txt" 2.5 0.9 0 "n" "n" "n")

(command "dimlinear" p3 a6 "h" "@0,-7" )

(command "dimlinear" p35 p38 "h" "@0,-7" )

(command "dimlinear" p13 a1 "h" "m" "%%c<>H9" "@0,10" )

(command "dimlinear" p12 "from" a1 "@-2,0" "h" "m" "%%c<>" "@0,4" )

引线型的标注采用的是画直线的方法,所以其标注文字也需进行一次文字样式的转变,可由下述命令实现:

(command "line" "from" p19 "@2,0" "@-6,15" "@-5,0" "")

(command "line" a9 "@13,20" "@15,0" "");写引线标注文字

(command "style" "standard" "txt" 2.5 0.9 0 "n" "n" "n")

(command "style" "hz" "仿宋_GB2312" 2.5 0.7 0 "n" "n" "n")

(command "mtext" "from" p19 "@-4,15" "j" "mc" "@-5,3" "G1/2" "")

(command "mtext" "from" a9 "@13,20" "j" "mc" "@15,3" "2-M10深25" "")

(command "mtext" "from" a9 "@13,20" "j" "mc" "@15,-3" "孔深28" "")

在本程序中中心线的标注采用了单独找点连线的方法,程序如下:

;俯视图的中心线

(command "layer" "s" "中心线" "")

(setq f15 (polar f0 (* -0.5 pi) (/ (* 28 w) 56)))

(setq f8000 (polar f8 pi 10))

(setq f5000 (polar f5 0 5))

(setq f1001 (polar f1 (/ pi 2) 5))

(setq f1500 (polar f15 (* -0.5 pi) 5))

(command "line" f8000 f5000 "")

(command "line" f1001 f1500 "")

;主视图的中心线

(setq z2911 (polar z29 0 5))

(setq z2912 (polar z29 (* 0.5 pi) 10))

(setq z2811 (polar z28 pi 10))

(setq z1111 (polar z1 (* -0.5 pi) 5))

(setq z3111 (polar z31 pi 8))

(setq z3011 (polar z30 0 8))

(command "line" z2911 z2811 "")

(command "line" z2912 z1111 "")

(command "line" z3111 z3011 "")

;左视图的中心线

(setq c8111 (polar c8 pi 10))

(setq c1111 (polar c11 0 15))

(setq c1000 (polar c1 (* -0.5 pi) 10))

(setq c7000 (polar c7 (* 0.5 pi) 45))

(command "line" c8111 c1111 "")

(command "line" c1000 c7000 "")

12、粗糙度的标注

对此程序以块的形式生成,若粗糙度标注较多时可用插入块的命令形式方便的得到各个标注,提高程序可利用性,但对于少量的粗糙度图纸,也可以用连点法画。前者程序参考如下:

(command "block" "k3" a10 a11 a12 a13 a012 "");创建块

(setq a14 (polar p011 (* 0.5 pi) 10))

(command "insert" "k3" a14 0.6666 0.6666 90);插入块

(command "insert" "k3" a10 1 1 0);插入块

(command "mtext" a11 "j" "mc" "@-5,5" "12.5" "")

(command "mtext" a12 "j" "mc" "@-5,5" "其余" "")

(command "style" "standard" "txt" 2.5 0.9 0 "n" "n" "n")

(command "mtext" "from" a14 "@-3.464,-2" "j" "mc" "r" 90

"@-7.464,2" "0.8" "")

后者程序参考:

(setq z700 (polar z7 0 10))

(setq bp1 (polar z700 0 8))

(setq ang pi)

(command "line" bp1 (polar bp1 (+ ang (/ pi 3)) 10) "")

(setq pt1 (polar bp1 (+ ang (/ pi 1.5)) 5))

(command "line" bp1 pt1 "")

(command "line" pt1 (polar pt1 ang 5)"")

(command "style" "hz" "仿宋_GB2312" 2.5 0.9 0 "n" "n")

(command "text" "from" pt1 "@-5,-3" 0 "12.5")

13、标注形位公差

对形位公差的标注可以利用相关命令也可以使用定点连线的方法。本程序设计使用的是后者。其中包含着引线的使用。可以说是分两部分来是实现的。第一部分是箭头的引线标注,第二部分是框架和数据的填充。

具体实现过程是:

(setq xw1 (polar f4 0 (+ (/ (* 30 l) 118) 3)))

(setq xw2 (polar xw1 (/ pi 4) 10 ))

(setq xw3 (polar xw2 0 10))

(command "leader" xw1 xw2 xw3 "" "" "n" "") ; 箭头引线

(setq xw4 (polar xw3 (/ pi 2) 2.5))

(setq xw5 (polar xw3 (- (/ pi 2)) 2.5))

(command "line" xw4 xw5 "")

(setq xw6 (polar xw4 0 5) )

(setq xw7 (polar xw6 0 10))

(setq xw8 (polar xw5 0 5))

(setq xw9 (polar xw8 0 10))

(command "line" xw4 xw7 "")

(command "line" xw5 xw9 "")

(command "line" xw6 xw8 "")

(command "line" xw7 xw9 "") ;直线度

(setq xw10 (polar xw3 0 1))

(setq xw11 (polar xw10 0 3))

(command "line" xw10 xw11 "")

(command "mtext" xw6 "h" 3 "j" "mc" xw9 "%%c 0.01" "")

14、技术要求

对图纸必须有一定的技术要求,它包含很多的方面,例如倒角的要求,精度的要求,铸造的要求及粗糙度要求,等等。例如:

(command "style" "standard" "仿宋_GB2312" 6 0.7 0 "n" "n" "n")

(command "mtext""from" p0 "@-50,-68" "h" 4 "j" "ml" "@100,8" "1.未注粗糙

度为Ra25;""")

(command "mtext""from" p0 "@-50,-76" "h" 4 "j" "ml" "@100,8" "2.铸造尺寸

精度IT18.""")

(command "mtext""from" p0 "@-60,-50" "h" 8 "j" "mc" "@50,12" "技术要求

""")

四、结论

该次课程设计主要研究对象是对AutoCAD二次开发,运用Auto LISP语言编程来实现零件三视图的选择性设计,即通过在AutoCAD环境中加载运行所设计的Auto LISP 程序,实现典型零件的参数化设计。这充分体现了AutoCAD是一个透明的、面向用户的二次开发的可开发软件。

我们在一定的图幅比照下完成程序设计后,输入不同其他合理的参数即可得到不同结构的阀体的主视图、左视图及俯视图,且根据参数不同可由计算机自动选择合适的图框,同时粗糙度及随参数变化的标注一次生成。程序对参数的合理性可进行识别判断并限定了输入判断提示。总言之,运用Auto LISP语言对典型零件的参数化设计大大简化

了用户生成和修改零件模型的操作,提高了设计效率。

虽然用户在操作上得以方便简化,但在程序设计上有的程序比较繁琐,有待进一步的改进。尽管参数的合理性可进行识别判断,但个别的参数仍需用户自己判断,以符合实际。而且不同的参数在选择图框时,有时视图的布局分配不太合理,这一问题总会随着参数的不同而存在。

对比之下,在比较烦琐或经常需要改变一定参数的零件图及装配图,利用AutoCAD 二次开发的参数化设计实现产品设计的要求,适应了这种需求。所一使新产品的更新换代周期不断缩短,大大降低了设计者的劳动强度。

五、心得体会

这次课程设计虽然只有短短的两周,但其中的实际收获和知识的掌握却是非书本知识所能体会的。该次课程设计是对AutoCAD二次开发中典型零件的参数化设计,根据参数的不同得到不同阀体结构及合适的图框,提高了效率,大大降低了劳动强度。充分体现着计算机的发展及应用软件的使用推广给企业厂家带来的利益。

通过这次AutoCAD二次开发设计,我对AutoCAD的使用有了进一步了解,对AutoCAD的应用体会很深,并初步树立运用现代设计方法的理念,培养了自己分析问题和解决问题的实际能力。同时明确了AutoCAD二次开发的任务之一——典型零件的参数化设计的各个环节、步骤。认识了参数化设计的概念的重要性,真正感受到其应用的优越性。设计中我还学习了AutoCAD的开发语言之一的Auto LISP语言,并对其进行编程、修改、运行。

课设中同学们积极交流,其氛围也是我日后工作中要学习的,现代社会是需要一个合作的社会。在次尤为要感谢刘老师在百忙中抽时间来为我们答疑解惑,并最后为我们提供答辩。

六、使用说明

该程序运行于AutoCAD环境中,用户加载Auto LISP后,可根据自己的需要输入阀体不同的参数,以得到所需阀体结构,在输入参数时用户可看到参数的提示,图框可根据参数来进行合理的选择,用户可不用考虑。在输入参数时请用户根据所需阀体的参数输入,使其符合实际。

其中有点注意事项:当输入参数的油口内径不在定义范围中时,程序自动将其按比

例取值。参考其程序段(if (< d1 (distance z3 z4))

(princ "ok")

(setq d1 (* (distance z3 z4) (/ 15 40)))

)

(if (< d2 (distance z11 z12))

(princ "ok")

(setq d2 (* (distance z11 z12) (/ 15 30)))

):

具体可依据实际的使用情况将其比例值在程序中调整设定。

七、参考文献

[1] 崔洪斌,方忆湘,张嘉钰等编著. 计算机辅助设计基础及应用. 北京: 清华大学出

版社, 2004.

[2] 张嘉钰, 方忆湘, 刘文学编写.《计算机辅助设计》课程设计指导书. 河北: 河北

科技大学, 2005.

[3] 于弈峰, 杨松林主编. 工程CAD技术与应用. 北京: 化学工业出版社, 2002.

[4] 郭剑峰编著. 用Visual LISP开发AutoCAD2000应用程序. 北京: 人民邮电出版

社, 2004.

[5] 汤峻编著. AutoCAD2000高级应用与Visual LISP开发宝典. 北京: 人民邮电

出版社, 2004.

[6] 陈伯雄编著. Visual LISP for AutoCAD2000程序设计. 北京: 机械工业出版社,

2004.

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(加载/卸载应用程序)”对话框,如图

LISP函数大全

AutoLisp函数 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l、 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1就是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1就是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1就是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1就是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1就是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1就是否大于等于表达式2 2.7 (~数值)返回:数值的位 not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算AutoLisp函数2/8 2.10(eq 表达式1 表达式2)比较表达式1与表达式2就是否相同,适用列表比较(实际 相同) 2.11(equal 表达式 1表达式 2[差量])比较表达式 1与表达式 2就是否相同,差量可省 略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值

超经典CAD lisp程序集锦、CAD快捷键大全

超经典CAD lisp程序集锦 如果您使用 AutoCAD,下面的内容对您一定有帮助。在某些方面能大大提高 您的工作效率。下面的程序均以源程序方式给出,您可以使用、参考、修改它。 bg.lsp --- 表格自动生成 asc.lsp --- 将文本文件内容写入图中,字符是单个的 wf.lsp --- 将图中字符写入磁盘 exstr.lsp --- 将字符串分解成单字 pgtxt.lsp --- 将字符合成字符串 pb.lsp --- 通过给出长度将字符串分成两个串 cht.lsp --- 直接修改文字内容或块属性 ct.lsp --- 对数字串进行加减 chh.lsp --- 直接修改文字高度 chhw.lsp --- 直接修改文字高宽比(针对PKPM软件将字符定位点改为左下角) chst.lsp --- 直接修改文字字体 txt.shx --- 修改后的标准txt.shx文件。(kuozhan.sld为增强的内容幻灯片) tiao.lsp --- 配合修改过的标准字体文件,将中文字符调大 tiao1.lsp --- 配合修改过的标准字体文件,将英文字符调小 untiao.lsp --- 上两个程序的复原 sht.lsp --- 在图中查找字符串 zhuang.lsp --- 桩点及钎探号绘制(勘测图) dim.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:1) dimm.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:100)

di1.lsp~di8.lsp --- 直接连续标注尺寸(用于1:1的图) di100.lsp~di800.lsp --- 直接连续标注尺寸(用于1:100的图) 详细内容及附件下载请浏览北纬服务论坛 https://www.360docs.net/doc/916177333.html,/thread-2724-1-1.html

CADLISP程序

1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (defun c:LL () (setvar "cmdecho" 1) (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0) (setq ll 0) (repeat (sslength en) ? (setq ss (ssname en i)) ? (setq endata (entget ss)) ? (command "lengthen" ss "") ? (setq dd (getvar "perimeter")) (setq ll (+ dd ll)) ? (setq i (1+ i)) ) ? (princ "所选线条总长为:")(princ ll)(princ) ) 2.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (defun c:LLL () (COMMAND "UCS" "") (setvar "cmdecho" 1) (SETVAR "OSMODE" 0) (setq ? ?AcadObject ? (vlax-get-acad-object) ? ?AcadDocument (vla-get-ActiveDocument Acadobject) ? ?mSpace ? ? ? (vla-get-ModelSpace Acaddocument) ) ;;选取需要测量的样条曲线、圆弧、直线、椭圆 (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0)

AutoLISP 基础——认识自定义函数

AutoLISP基础——认识自定义函数 (本文由LL_J?认识自定义函数?和?Autolisp编程心得?两篇巨著合成,并融入了其他人的一些经验,以快速打通你的任督二脉——自贡黄明儒注) 一、初识Lisp 在AutoCad命令输入(+ 1 2 3),回车返回6,如下 命令: (+ 1 2 3) 6 恭喜你,你已经会写Lisp程序了。这里,我们用到了一个系统定义的函数+,这个函数的作用就是对后面的数字求和。 上式一对英文括号组成的表达式,称之为表,Lisp语言也称为表的语言。表有两种形式,一种是?口袋式?表;一种是?函数式?表。前者如’(0 0)表示一个2维点,前面加’表示此表不求值。如果不加‘,则通常是认为是?函数式?表。?函数式?表如下: ①结构特点:左括号(紧跟函数,函数所需要的参数,右括号)结束。 ②函数是指:系统定义的函数、自定义的函数、匿名函数lambda。如 ((lambda(x y z) (* x y z)) 3 4 5)是合理的。 ③参数可以是:数字(整数、实数)、字符串、T、nil、表(如果此 表是表、函数,就构成了复杂表,这就是lisp程序)、函数。 ④表可以作为函数的参数。如(+ 1 (- 5 2) 3)中,表(- 5 2)就作为+函数 的参数。 ⑤表的返回值也可以传递给其它变量,如(setq x (+ 1 2 3)) ⑥接受输入参数,如(- 5 2)中,-函数接受5和2两个参数。 二、什么是函数 函数一词最早来源于数学,维基百科这样说:函数是将唯一的输出值赋予每一输入的"法则"以及该输出值与对应输入值的集合。 在计算机领域,对函数并没有一个完整的定义,百度百科有这样一句话:"许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数。 综合以上描述,我们可以看到"函数"的基本组成: 输入值:一般称为参数; 表达式:函数体,是代码的集合,共同组成上面所说的"法则";

AUTO LISP函数参考5

AUTO LISP函数参考 4实体数据函数 下列函数可让用户检索和修改定义实体的数据,所有函数都用实体名指定要操作的实体. 4.1(entdel<实体名>) 如果由<实体名>指定的实体在当前图中,它就被删掉,如果在这次编辑中该实体已被删除,那么它将被重新恢复出来(从当前图中).退出图形编辑程序时,被删除的实体便从图中 彻底清除掉了,所以ENTDEL只能在删除实体的那次编辑过程中使实体再恢复.ENTDEL只对 主实体进行操作.对属性和多义线的顶点是不能脱离其双亲实体而予删除的(可使用COMM AND函数执行ATTEDIT或PEDIT命令来达到这一目的). 例如: (setq e1(entnext));置E1为图中第一个实体的名 (entdel e1);删去实体E1 (entdel e1);不删除(恢复)已被删去的实体E1 4.2(entget<实体名>) 从数据库中检索到名为<实体名>的实体,并以表形式返回,此表包含实体的定义数据表的结果以LISP的关联表形式编制,用ASSOC函数可以容易地从中检索每一项.表中的对象是用AutoCAD的DXF组码形式定义的,它们是为实体数据的每个部分准备的.例如,用下列命令序列画线,然后再检索此线: 对下面的例子,我们假定: .当前层是"0", .当前线型是"CONTINUOUS"(缺省值), .当前Z向高度是零(缺省值), .实体标号功能被关闭,而且 .FLATLAND系统变量值为零. 假设用下列命令画一条线: Command:LINE From point:1,2 To point:6,6 To point:RETURN 然后可以用下述命令为线检索实体数据: Command:(setq a(entget(entlast))) 假定系统变量FLATLAND为零(即要求3D点).这样,将把A置为下表(为了可读,作了缩进排列): ((-1.) (0."LINE");Entity type (8."0");Layer (101.02.00.0);Start point (116.06.00.0);End point ) 表的开头-1项包含这个所代表的实体名.下面描述的ENTMOD函数将用这种表来识别要修改的实体. 表示某一值的点对表可以很容易地用ASSOC提取,再用CDR分离出它们的值.实体中各部分的编码是DXF所用的那些编码,在AutoCAD参考手册的附录C中有描述.和DXF一样,实体题头项(实体的颜色和线型,属性跟随标志,厚度,及实体标号)只有在不为缺省值时才被输出. 和DXF不同的是,任选的实体定义字段不管是否和它们的缺省值相等都将被输出.这样做的

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解释程序,这样,只有通过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程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+ num1 num2 num3…) 此函数(+)计算加号(+)右边所有数字的和(+ num1 num2 num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

AutoCAD二次开发所用的autolisp函数

AutoCAD二次开发所用的autolisp函数。 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(*数值数值…)返回:所有数值乘积 1.4(/数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan数值)返回:反正切值 1.9(cos角度)返回:角度的余弦值,角度值为弧度 1.10(exp数值)返回:数值的指数 1.11(expt底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max数值数值…)返回:数值中的最大值 1.17(min数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1是否大于等于表达式2 2.7 (~数值)返回:数值的位not值,(1的补码)

autolisp多段线处理函数集

;;164.1 [功能] 曲线是否封闭 ;;164.2 [功能]使多段线封闭 ;;164.3 [功能] 多段线端点列表 ;;164.4 [功能] 矩形中点坐标 ;;164.5 [功能] 参数param处的切线方向的角度;;164.6 [功能] 参数param处的法线方向的角度;;164.7 [功能] 曲线一点的切线方向的角度;;164.8 [功能] 曲线一点的法线方向的角度;;164.9 [功能] 去除多段线重点 ;;164.10 [功能] 判断点是否在曲线上 ;;164.11 [功能] 曲线长度 ;;164.12 [功能] 多段线子段数量 ;;164.13 [功能] 曲线中点 ;;164.14 [功能] 曲线一点的参数param ;;164.15 [功能] 参数param处的坐标 ;;164.16 [功能] 多段线第n子段的起点坐标;;164.17 [功能] 多段线第n子段的终点坐标;;164.18 [功能] 多段线所点击子段的两端点列表;;164.19 [功能] 多段线所点击点最近的一个顶点;;164.20 [功能] 多段线所点击子段param(索引) ;;164.21 [功能] 多段线所点击子段的起点坐标;;164.22 [功能] 多段线所点击子段的终点坐标

;;164.23 [功能] 多段线所击点离起点近 ;;164.24 [功能] 多段线所点击子段否是直线(返回nil是弧) ;;164.25 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心by caoyin ;;164.26 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 ;;164.27 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.28 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.29 [功能] 连接线、弧成多段线 ;;164.30 [功能] 构造矩形by highflybird ;;164.31 [功能] 点表生成多段线 ;;164.32 [功能] 3D多段线 ;;164.33 [功能] 多段线反向(起点反成终点) byzml84 ;;164.34 [功能] 多段线删除顶点 ;;164.35 [功能] 多段线增加顶点 ;;164.36 [功能] 多段线修改顶点 ;;164.37 [功能] 多段线拷贝子段 ;;164.38 [功能] 修改多段线子段 ;;164.39 [功能] 修改多段线子段为直线 ;;164.40 [功能] 点在封闭多段线内返回T,其余nil By 狂刀 ;;164.41 [功能] 点在封闭多段线内返回T,其余nil By SmcTools ;;164.42 [功能] 判断点在封闭曲线内外,自交曲线不适用By Gu_xl ;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil ;;164.44 [功能] 多段线弧段全改为直线段

用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编程心得 1.养成良好的书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大 费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等 专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 2.函数中循环与转移的使用 在高级语言中一般有类似“goto”的语句实现转移,在AutoLisp中没有转移的函数。我们可 以使用自定义函数实现转移,用if及cond辅助实现条件转移。 当我们需要实现在满足一定条件时进行循环的功能,一般使用while函数,但有时需要判断的条件较复杂时,使用while函数往往不能实现或使得程序不够简洁。这时我们可以使用“转移”, 将需要实现的功能作为(子)函数,使用恰当,可以在程序中任意“转移”。 一般认为,当一段代码在不同处重复使用时,我们才会使用子函数定义,其实,利用函数的更大的优点是使得程序更加结构化。这就使得我们不必拘泥于程序中的循环语句,而使用函数的循环调用,辅助适当的判断,实现“转移”,如A->B->A。当然也可以进行自身调用,构成一个“标准的”循环。 如例一中,“程序执行完毕返回”与“空选返回”两种情况如果使用循环语句,其条件是完全不同的,而将函数本身作为子函数调用,程序简洁明了。 3.initget函数中关键字“ ”(空格)的使用 空格可以被用作关键字,一般多用来定义鼠标右键退出。 ⑴当用户输入函数不支持控制位(如entsel、nentsel、nentselp)时,可直接使用“(initget " ")”。 ⑵当用户输入函数支持控制位(如getpoint等)时,可使用“(initget 1 " ")”禁止空输入,而将回车等空输入作为关键字使用。 ⑶当同时使用其它关键字时,应该将空格作为一系列关键字的最后一个,用 “(initget "C ")”(两个空格)调用,否则无效。 见例一。 ************************************************ ;;例一 (defun ett_ct()

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函数大全

函数大全 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l、 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1就是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1就是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1就是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1就是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1就是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1就是否大于等于表达式2 2.7 (~数值)返回:数值的位 not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算

AUTOLISP实用编程四例

autolisp实用编程四例 江苏崔华明 autocad是一个功能强大的通用图形设计软件,其内嵌的autolisp语言为用户进行二次开发提供了方便。下面就介绍几则用autolisp编写的实用程序,这些程序相当于新增的autocad命令,可以弥补autocad本身的一些不足,为日常使用带来方便。 1.快速更改文本的大小 在标准的autocad中,要更改已有文本的大小,需要使用change命令。该命令的缺陷是:即使只更改文本的大小,也要重新确认文本的插入点、字型、倾斜角等一系列参数。也就是说,除输入文本的新高度值外,还需要按5次回车键才能完成一个文本的更改!而且每次只能修改一个文本。这对于同时更改多个文本的大小非常不便。本文的autolisp程序使这一工作变得十分方便和快捷。使用方法如下: 在autocad的command提示下,打入命令: cth autocad将提示“selectobjects:”,这时可以使用autocad允许的任意方式选择目标。对于有多个文本需要更改的情况,使用窗口选择比较方便,而且你不用担心选择窗口中包含了非文本目标,程序能够自动在选择的目标中查找出文本实体,并只对文本进行更改。 选择目标后,autocad提示“newtextheight:”,这时输入一个新的文本高度值然后回车,则所有选中的文本被更改成新设定的高度。 2.延伸直线的长度 在实际使用中,常常要将一条直线延伸指定的长度。通常的做法是:在需要延伸的直线的端点画一个辅助圆,圆的半径等于直线要延伸的长度,然后使用extend命令将直线延伸到与圆相交,最后删除辅助圆。 本文的autolisp程序将使你非常容易地实现这一点。你只需选择要延伸的直线并输入要延伸的长度即可,其余的工作由程序自动完成。使用方法如下: 在autocad的command提示下,打入命令: stl 然后根据提示选择要延伸的直线(选择点要靠近直线需要延伸的端点),并输入延伸的长度。该程序将自动在离选择点较近的直线端点,按指定的长度延伸直线。 3.快速画直线 在画给定坐标点的直线时,需要通过键盘输入坐标值。这样的情况下当然是利用右边的数字键盘输入

CAD创建Lisp程序步骤

使用Visual LISP创建简单的LISP应用程序 作者:佚名点击数:1523 更新:2007-2-2 7:08:10 热★★★ 【字体:小大】 a> 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCA D中的加载和运行的方法。首先来创建一个最简单的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进行通信

CAD-LISP-程序

CAD-LISP-程序

1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (defun c:LL () (setvar "cmdecho" 1) (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0) (setq ll 0) (repeat (sslength en) (setq ss (ssname en i)) (setq endata (entget ss)) (command "lengthen" ss "") (setq dd (getvar "perimeter")) (setq ll (+ dd ll)) (setq i (1+ i)) ) (princ "所选线条总长为:")(princ ll)(princ) ) 2.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (defun c:LLL () (COMMAND "UCS" "") (setvar "cmdecho" 1) (SETVAR "OSMODE" 0) (setq AcadObject (vlax-get-acad-object) AcadDocument (vla-get-ActiveDocument Acadobject) mSpace (vla-get-ModelSpace Acaddocument) ) ;;选取需要测量的样条曲线、圆弧、直线、椭圆 (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0)

CADLISP函数

CADLISP语言 数据类型 1.表 2.文件描述符 3.实体名 4.选择集 5.内部函数(Auto LISP子程序) 赋值与数值计算函数 1.(1+ 数) 加1函数 2.(1- 数) 减1函数 3.(abs 数)求绝对值 4.(max数数……)求最大数 5.(min数数……)求最小数 6.(sqrt数)求平方根 7.(expt数幂)乘方 8.(exp 幂)e的任意次方 9.(log数)对数 10.(sin 角)正弦函数 11.(cos角)余弦 12.(atan数1[数2])反正切函数 13.(rem数1 数2)求余数 14.(gcd数数……)最大公约数 15.(~ 整数)求补注:用pi表示圆周率π 16.(logand数数……)按位逻辑”与”函数 17.(logior数数……)按位逻辑”或”函数 18.(~ 数)按位逻辑”非”函数 19.(and 表达式……)逻辑”与”函数 20.(or 表达式……)逻辑”或”函数 21.(not 表达式)逻辑”非”函数 22.(lsh 数位数)位移函数 23.(boole 方式数1 数2……)布尔运算。方式有16种,如1为and,6为xor(异或),7为or,8为not等。 24.(= 原子原子……)等于函数 25.(/= 原子原子)不等于函数 26.(< 原子原子)小于函数 27.(<= 原子原子)小于等于函数 28.(> 原子原子)大于函数 29.(>= 原子原子)大于等于函数 30.(atom 项)原子测试

31.(listp 项)表测试 32.(boundp 原子)原子值测试 33.(null 项)空测试 34.(numberp 项)数值测试 35.(minusp 项)负值测试 36.(zerop 项)零测试 37.(eq 式1 式2)相同表达式测试 38.(equal式1 式2)相等测试 39.(wcmatch 字符串模式)字符匹配测试 分支与循环 1.(if 条件式1[式2])若条件为真,则执行式1;否则执行式2。 2.(cond(条件1 式1……)(条件2 式2……)……)分支函数。如:(cond((minusp a)(- a))(T a))求a的 绝对值。注:cond是AutoLISP中最基本的条件函数,由它为核心构成的自定义函数可以实现循环和递归等功能。 3.(repeat 次数式1 式2 ……)重复函数。将多个表达式重复执行多次。 4.(while 条件式1 式2 ……)循环函数。条件为真,执行表达式。否则结束循环。如:(setq s 0 a 1)(while(< a 101)(setq s(+ s a))(setq a(1+ a)))(print s) 计算0~100之间所有整数的和。 5.(progn 式1 式2 ……)求多个表达式值函数。在只能用一个表达式的地方,使用他可完成多个表达式的计算。 如if 语句中 字符串与类型转换函数 1.(ascii 字符串)ASCII码转换 2.(chr 整数)字符转换 3.(strcat 字符串……)字符串连接 4.(strlen 字符串……)字符串长度测试 5.(substr 字符串起点 [长度])取子字符串。如果不设置长度,则取到最后一个字符。 6.(strcase 字符串 [方式])字符串大小写转换。若指定了方式且非空(NIL),则把所有的字母转换为小写; 否则转换为大写。 7.(float 数)整型变实型 8.(fix 数)实型变整型 9.(itoa 整型数)整型变字符串 10.(atoi 字符串)字符串变整型 11.(atof 字符串)字符串变实型 12.(angtos 角方式精度)角度单位转换。“角”是以弧度为单位的实数,转换为其它单位,返回一个字符串。 该字符串是以“方式”和“精度”的要求,按AutoCAD的系统变量UNITMODE(单位模式)对“角”进行处理得到的,“精度”为小数点后的位数。“方式”有:0为度,1为度/分/秒,2为梯度,3为弧度等。 13.(rtos 数方式精度)实数计数制转换。方式:1为科学计数法,2为十进制,3为工程制(英寸与小数英寸), 4为建筑制(英寸与分数英寸) 14.(cvunit 值旧单位新单位)单位制转换。单位名称可以是acad.unt文件中给出的任意单位格式,否则返回 NIL (trans 点旧坐标系新坐标系)坐标转换。坐标:0为WCS(世界坐标系),1为UCS(用户坐标系),2为DCS(显示坐标系) 表处理函数 1.(quote 表达式)引用函数。作用:告诉程序不要对后面的表达式求值。如:(quote(x y z))可简写为’ (x y z) 2.(car 表)取表中的第一个元素 3.(cdr 表)取子表函数。返回除第一个元素以外的所有元素组成的新表 4.由car与cdr组合而成的函数

相关文档
最新文档