Autolisp编程心得

合集下载

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

AutoLISP 基础——认识自定义函数
这里所说的"符号"包括函数名、参数名和变量名。 需要说明的是,AutoLISP 函数名和变量名使用同一个命名空间(部 分其它的 LISP语言函数和变量使用不同的命名空间) 也就是说,变量 和函数重名时会冲突,后面定义(赋值)的会替代前面的。 可以看出,AutoLISP 的命名规则是很"宽松"的,除常见的字母数字 命名外,如"abc_1、+3+、xd::abc、<3"这类看似怪异的名字都是合法 的。 即便如此,也有些看似合法的名字是不能使用的,主要有: 系统的内部函数名,如 princ,car 等; 系统保留的常量名或其它符号,如 pi、t、nil、pause、^C 等; 系统有其它解释的符号组合,如 1e2(科学计数法) +3、-2(数 值)。 其它一些用于表达方向的字母(N、S、E、W)及表达角度的字母 (r、g、d)等 在某些时候也会产生意想不到的错误,所以,在使用的时候也应该 谨慎。因为 AutoLISP 对多字节字符的支持不是太好,所以,虽然理论 上可以使用汉字来作为函数名(或变量名),但实际上还是应该尽量避 免的,否则可能会出现无法预料的错误。 一些特殊的表达方式在 AutoLISP 中有特殊的含义,这些包括前缀c: 和函数名s::startup,前者表示定义了一个外部函数,而后在则定义了一个 自动执行函数。 我们用"c:3"来定义一个外部函数,使用命令"3"来执行,看起来这不 符合规则,似乎使用了数字"3"来作为函数名了,但其实不然,函数名是 "c:3" 。可以看出AutoLISP 中(或者说是 AutoCAD 中) 命令名是有独 立空间的。即便如此,我们也不建议这样用,一般说来,函数、变量, 尤其是命令的命名应 该能表达某种意义,向使用者和阅读者传递某种相 关的信息,而过度简单且不能引起联想的纯数字是无法承载这个任务 的。 从这个意义来说,函数名(或变量名)的命名每一个字节都应该仔

AutoLisp语言的学习和使用(1)

AutoLisp语言的学习和使用(1)

AutoLisp语⾔的学习和使⽤(1)第七节AutoLISP语⾔及其程序设计LISP(List Processing)是⼀种计算机的表处理语⾔。

LISP语⾔是⼈⼯智能领域中⼴泛应⽤的⼀种程序语⾔。

AutoLISP语⾔是⼀种运⾏在AutoCAD环境下的LISP编程语⾔,或称为AutoCAD的⼀种嵌⼊式语⾔。

它采⽤了与CommandLISP(⼀种通⽤的LISP语⾔版本)相近的语法及习惯约定,并吸收了LISP语⾔的主要函数,同时增加了针对AutoCAD特点的许多功能,如:可以把AutoLISP和AutoCAD的绘图命令透明地结合起来,使设计和绘图完全融为⼀体。

利⽤AutoLISP语⾔编程可以实现对AutoCAD当前图形数据库进⾏直接访问和修改。

在LISP语⾔中,最基本的数据类型是符号表达式。

LISP语⾔的特点是程序和数据都采⽤符号表达式的形式,即⼀个LISP程序可以把另⼀个LISP程序作为它的数据进⾏处理。

因此使⽤LISP语⾔编程⼗分灵活,看起来是⼀个⼀个的函数调⽤。

⽀持递归定义也是Auto LISP语⾔的重要特性。

AutoLISP语⾔是提供给⽤户的主要⼆次开发⼯具之⼀。

⽤AutoLISP语⾔编写应⽤程序,可以为AutoCAD增加新的命令或修改AutoCAD,以适应⽤户的特殊需要。

AutoCAD软件的开发者——AutoDesk公司许诺,将保证今后AutoCAD软件对AutoLISP 语⾔的⽀持。

掌握使⽤和编制AutoLISP应⽤程序的⽅法和技术将⼤⼤提⾼⽤户的⼯作效率和⼆次开发⽔平,增强AutoCAD的灵活性,并将得到长期、稳定的技术⽀持。

1.1 AutoLISP语⾔的基本知识1.1.1 AutoLISP语⾔的特性AutoLISP语⾔是⼀种解释型语⾔,它的特点如下:1.解释型语⾔编程语⾔有两种基本类型:解释型和编译型。

AutoLISP属于解释型语⾔。

在解释型语⾔中,⽤户编写的源程序直接由解释器解释并执⾏。

AutoLISP编程实例

AutoLISP编程实例

目录一、引言 (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中最为重要的研究领域之一。

AutoLISP心得笔记

AutoLISP心得笔记

AutoLISP心得笔记函數名缺省設置定義ATTDIA確定用戶使用INSERT命令插入一個包括特征的塊時,是否彈出一個對話框。

0---關閉對話框。

attreq控制屬性的提示:0=沒有屬性提示或對話框(屬性使用缺省值);1=插入屬性時出現正常的提示或對話框。

BLIPMODE控制標記符號的可見性。

CDATE用於保存日期和時間Cecolor控制賦予新象的當前缺省顏色Celtscale控制個別對象當前線型比例Celtype控制賦予新象的當前缺省線型CLAYER當前層值CMDDIA控制對話框。

0---禁止對話框;1---(缺省值)允許對話框。

cmdecho控制是否顯示autocad提示dimadec-1控制角度尺寸標注文字中小數的位數;-1=使用尺寸標注變量Dimdec的設置值;0-8=確定小數位數.DIASTAT保存最近一個對話框中退出的方式(OK或Cancel)Dimalttz替換單位公差尺寸文本零抑制dimaltz替換單位尺寸文本零抑制dimcen圓心標記大小dimblk0用戶定義的箭頭塊名稱dimblk10用戶定義的用於Dimsah變量的尺寸標注線第一個點箭頭塊名稱dimblk20用戶定義的用於Dimsah變量的尺寸標注線第二個點箭頭塊名稱dimdec基本尺寸小數點精度DIMFIT3在沒有空間的情況下控制延伸線文字及箭頭的位置,0=文字及箭頭置於外邊;1=文字優先,箭頭置於外邊.2=箭頭優先;3=由AUTOCAD根據dimlfac1用指定的比例因子乘以測量得到的距離.這個因子應是零件相對於全尺寸的比例的倒數dimlim是否按缺省尺寸文本標注極限尺寸dimpost0或byblock給尺寸標注文字添加前後綴.exp:"2-<>沉頭孔深","2-"為前綴,…….dimrnd設置尺寸文本圓整值DIMSAH關閉允許在尺寸線兩端有不同的箭頭dimscale 1.000尺寸標注的總體比例因子dimsd1/dimsd2尺寸界限抑制dimstyle保存當前樣式名dimtad0尺寸標注文字是否放在尺寸線上方.dimtdec設置尺寸公差文本小數點精度dimtfac設置尺寸公差文本相對尺寸文本字高比例系數dimtih打開打開時延伸線內的尺寸標注文字為水平方向dimtm當(dimtol/dimlim)on時,設置尺寸下偏差值dimtofl關閉強制尺寸線畫在尺寸界限之間(有內線)[直徑,半徑標注有無內線]dimtoh打開打開時延伸線外的尺寸標注文字為水平方向dimtol控制是否標注尺寸公差dimtp當(dimtol/dimlim)on時,設置尺寸上偏差值dimtvp呈垂直位置尺寸文本是否標注在尺寸線上方dimtxt0.18文字高度dimzin0控制尺寸標注中的0的顯示;4=壓制前導0, 8=壓制後隨0 12=前後均壓制.dimtzin尺寸公差文本零抑制4=壓制前導0, 8=壓制後隨0 12=前後均壓制.DWGNAME保存當前圖的名稱DWGPREFIX保存當前圖的路徑。

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

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

AutoLISPxx单元一: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的记事本、P2、P3、D3、书中仙、汉书、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语言编程方法与技巧

AutoLISP语言编程方法与技巧

AutoLISP语言编程方法与技巧
胡海明;汪传生
【期刊名称】《青岛化工学院学报:自然科学版》
【年(卷),期】1997(018)004
【摘要】论述了编制模具零件,密炼机转子,密炼室设计程序中,用AutoLISP语言编程遇到的问题并介绍了具体的处理方法和使用技巧。

【总页数】4页(P365-368)
【作者】胡海明;汪传生
【作者单位】青岛化工学院机械工程学院;青岛化工学院机械工程学院
【正文语种】中文
【中图分类】TH122
【相关文献】
1.浅谈用Flash开发CAI的常用编程方法技巧 [J], 赵伟
2.用UGNX的糖果盒型芯模的编程方法与技巧 [J], 范瑜珍
3.浅析数控铣削编程方法及其技巧 [J], 常淑芳;马立坤
4.数控车床特征曲线宏程序编程方法与技巧研究 [J], 邵勇
5.数控铣削编程方法及其技巧探讨 [J], 郭鑫;张海丽;王振霄
因版权原因,仅展示原文概要,查看原文内容请购买。

AUTOLISP程序设计技巧

AUTOLISP程序设计技巧

AUTOLISP程序设计技巧AUTOLISP(即AutoCAD Lisp)是一种用于AutoCAD软件的编程语言。

它基于Lisp语言,可以用于创建自定义命令和功能,以自动执行一系列任务。

在编写AUTOLISP程序时,可以采用一些技巧来提高代码的可读性和性能。

下面将介绍一些常用的AUTOLISP程序设计技巧。

1.变量命名:为了增加代码的可读性,应该选择具有描述性的变量名。

避免使用单个字母或简写的名称,而应使用有意义的名称来描述变量的用途或含义。

2.注释:在代码中使用适当的注释是非常有帮助的,可以解释代码的目的、逻辑和特定部分的功能。

注释应该清晰明了,不冗余,并使用大写字母或其他方法来突出显示。

3.函数:使用函数来分割代码段,以便在需要时可以多次调用相同的代码块。

函数的使用可以提高代码的可读性,并使其更容易维护。

4.错误处理:在代码中加入适当的错误处理机制非常重要,可以避免程序崩溃或产生不期望的结果。

使用条件语句和错误处理函数来检测和处理可能发生的错误。

5.循环:使用循环语句来处理重复性任务,并减少代码的冗余。

根据任务的特点选择合适的循环类型(例如FOR循环、REPEAT循环等)。

6.嵌套:在必要时使用嵌套结构,将代码组织成逻辑结构清晰的块。

使用适当的缩进和代码布局来增加代码的可读性。

7.字符串处理:AUTOLISP中的字符串处理功能非常强大,可以使用字符串函数来处理、操作和格式化字符串。

了解并熟练使用字符串函数可以提高代码的灵活性和功能。

8.数组和列表:使用数组和列表可以存储和处理多个值。

熟练使用与数组和列表相关的函数(如CAR、CDR、CONS、LIST等)可以简化代码并提高性能。

9. 命令行交互:通过与用户进行命令行交互,可以提高程序的交互性。

使用getstring、princ等函数来获取用户输入,并使用条件语句来根据输入执行相应的操作。

10.优化:编写高效的代码可以提高程序的性能。

使用较少的迭代步骤、减少不必要的计算、选择合适的数据结构等都可以提高程序的效率。

AUTOLISP程序设计技巧

AUTOLISP程序设计技巧

盛年不重来,一日难再晨。

及时宜自勉,岁月不待人AUTOLISFPS序设计技巧一、引言在AutoCAD中的角度捕捉只有当正交状态打开时的直和水平方向,对于其他特殊角度无能为力;另外,其网点捕捉也是相对于X轴和丫轴,无法实现其他方向的特殊长度捕捉,给绘图带来极大的不方便。

在应用AutoCAD进行设计制图的操作中,LINE和POLYLINE是使用频率最高的两个命令,经常要遇到在某些特定角度上绘制特定长度的简单线或复合线的情况,因而实现这两个捕捉对提高AutoCAD作图效率很有实用价值。

二、方法原理所谓角度捕捉,是指当十字光标在某一角度a的一定范围内选取一点时,该点自动落在该a角度线上;当我们设定捕捉角度为a时,将会以基准点作为原点、自X轴正方向出发,将整个屏幕划分为[360/ a]个区间,则NZ角度就是角度捕捉线,其中,0 V NS [360/ a], [360/ a]表示不大于360/ a 的整数。

所谓长度捕捉,是在角度捕捉的基础上,在某一角度线上有一系列捕捉点,该系列点离基准点的距离为捕捉长度的正整数倍,当选取直线上的一点时,落点自动落到离其最近的捕捉点上。

实现特定角度和长度捕捉的关键点是:当十字光标(即十字交叉线)移动时,程序要随时跟踪其交叉点的位置,并将该位置与用户所设定的捕捉角度与长度对应起来,从而计算出在该角度上的落点。

以下举例说明该两个捕捉的实现过程:假定捕捉角度为a =30°,捕捉长度为L。

当十字光标在任意的某一区间内移动时,比如在第5区间(120°〜150 ° )内移动时,此时,落点只能在120°或150°线上(该线在图中并不直接显示),该两根角度线的中心线为135°。

当十字光标的中心点处在120°〜135°之间时,则落点应在120°线上,该落点的具体位置为由十字光标的中心点向120。

线作垂线来获得,其交点D(称为垂点)即为落点,为直观起见,此时由基准点(此处为。

VLISP学习要点

VLISP学习要点
处理工程数据,就想用AutoCAD之外的软件,不知道AutoCAD是个优秀的数据库。
……
无论用什么工具给AutoCAD写应用程序,最基础的东西就是对AutoCAD现有功能的熟悉和掌握、以及对设计过程的熟悉。我们遗憾地看到,甚至一些增值软件开发商,也存在着不太熟悉AutoCAD和设计过程,却在给AutoCAD编写专业应用程序的现象。这样一来,在许多情况下,他们实际上是在做重复的开发,费时间、费钱,开发的结果也不见得比AutoCAD中的同类功能更好。
想写一个将三维模型平行投影转换成透视投影的程序。因为不知道有3Dorbit。
求两条图线的交点,费尽心力构建解析模型。因为不知道AutoCAD有CAGD功能。
化了许多时间编写图层管理功能,却不知道AutoCAD自己就有这样的功能。
编程序分解尺寸标注、以便写出公差,不知道尺寸文字是MText,格式控制功能很强。
实际上,对计算机专业知识的掌握并不是开始进行应用最必要的东西,对此,可用“急用先学,立杆见影,在用字上狠下工夫”的原则,CAD技术是一套包罗万象的综合技术,不能指望象在校学习那样按步就班地学会,总原则是在已有的专业知识基础上,延伸和扩展,突破几点、联点成线、组线成网、网密到一定程度,就会产生质变,成为完整的知识面。对AutoCAD的理解越深,命令的使用就越加准确自如,效率才会表现出来。应当不断地研究命令和功能的含义和特点、进行各个方向的模拟实验,仅按AutoCAD手册、资料上说的去用,会有很大的局限性。
尤其是在 VLISP 程序设计中,越熟悉AutoCAD、越熟悉设计,程序就会越加简单、好写,用起来也就越顺利。还是那句老话“计算机应用的目标是我们已知如何做的事情的自动化”,我们按照使用要求,给AutoCAD写程序,同样是“我们已知如何在AutoCAD中完成的事情的自动化”,如果不是“已知”,或者不甚“已知”,自动化的描述当然不可能是优化、巧妙的,程序的效率、安全性、可靠性也就不会理想。更为重要的是,在AutoCAD中,不用她的已有功能完成操作,自己重新另写一套,无论如何难以理解。所以学习VLISP的程序设计技术,基本功就是“熟练使用AutoCAD解决自己的专业设计问题”。

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

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

AutoLISP从入门到精通初级教程(新手必备)AutoLISPxx单元一: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的记事本、P2、P3、D3、书中仙、汉书、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编程的几点体会

AutoLISP编程的几点体会

AutoLISP编程的几点体会
王和平
【期刊名称】《《工程设计CAD与智能建筑》》
【年(卷),期】1999(000)009
【总页数】2页(P69-70)
【作者】王和平
【作者单位】江汉石油管理局勘察设计院
【正文语种】中文
【中图分类】TP311
【相关文献】
1.AutoLISP编程在工程计算中的应用 [J], 王小波;侯英杰
2.AUTOLISP编程实现正交开孔圆管展开图快速绘制 [J], 王克波;马兆明
3.应用VBA与Autolisp交叉编程的中心孔二次开发 [J], 闫海峰;王科社;查初亮
4.AutoLISP在数控编程加工轧辊中的应用 [J], 阮晓光;马万里;赵荣荣;刘江;宫树红
5.基于AutoLISP编程解算市政道路中边桩坐标的应用及方法 [J], 吴洪平
因版权原因,仅展示原文概要,查看原文内容请购买。

巧用AutoLisp提高房产测量工作效率

巧用AutoLisp提高房产测量工作效率

巧用AutoLisp提高房产测量工作效率姚益飞1前言房产测量主要是采集和表述房屋和房屋用地的有关信息,为房产产权、产籍管理、房地产开发利用、交易、征收税费,以及城镇规划建设提供数据的资料。

它是关系到民生的重要工作,这就要求在日常工作中做到细致认真,保证数据质量可靠。

而面对繁琐复杂的工作,充分利用电脑提高我们的工作效率就是首选。

本文主要讨论lisp语言编程提高房产测量工作效率。

2AutoLisp语言简介AutoLisp语言完全嵌套在AutoCAD内部,同AutoCAD有机地结合成一体,它既具备一般高级语言的基本结构和功能,又具备一般高级语言所没有的图形处理能力。

可直接调用几乎全部AutoCAD的命令,从而进行AutoCAD的二次开发。

利用AutoLisp开发AutoCAD 的一个典型例子就是实现参数化绘图的程序设计。

3AutoLisp常用函数介绍3.l getangle ,请求输入十进制角度数值。

3.2 getdist ,请求输入一段距离。

3.3 getkword ,请求输入“关键词”。

3.4 getPoint ,请求输入一个点的坐标。

3.5 getstring ,请求输入一个字符串。

3.6 rtos ,实数转成字符串。

3.7 strcat ,将各字符串合并为一个字符串。

3.8 entlast,取出图形信息中的最后一个对象。

3.9 command ,调用执行 AutoCAD命令。

3.10 If ,检算比较式结果。

3.11 While ,当条件成立则执行表达式内容。

3.12 setq,设定表达式结果给各符号。

3.13 Prinl,将表达式打印于命令区或已打开的文件句柄字符则以“\”为前缀展开。

4房产测量相关工作简介房产测量中我们需要绘制图形,查询和标注面积,标注房号等。

5程序示例点击工具/AutoLISP/Visual Lisp编辑器,进入lisp语言编辑界面,新建一个lsp文件,以下介绍几个常用的小程序。

学习AutoLISP语言的一点体会

学习AutoLISP语言的一点体会

第 2 期 总第 2 0 4 5 期
学 习 Au P 语 言 的 一 点 体 会 t I o S L
李 健 许 新 生 ,
005) 1 0 1 (. 蒙古 地 图 制 印 院 ;. 1内 2 内蒙 古 测 绘 院 , 蒙古 呼 和 浩 特 内 摘 要 : t LI P 语 言 是 开 发 Au o Au o S t CAD 的 主 要 工 具 , LI P 语 言 和 Au o 是 S t CAD 有 机 结 合 的 产 物 , 在 Au o tCAD 的 发 展 及 壮 大 过 程 中 起 到 了 重 要 的 作 用 。主 要 论 述 了 如 何 向 Au o t CAD 增 加 一 个 命 令 以 及
要 的 概 念 , Au o 在 t CAD 图 形 编 辑 窗 口 中 绘 制 、 辑 编 的 图形 , 直 线 、 等 , 是 图 元 , 是 指 绘 图 的 基 本 如 圆 都 就
5 O
5பைடு நூலகம் 21 O
单 元 。 数 学 角 度 看 , 确 定 一 个 基 本 图 形 单 元 都 需 从 每 要 一 定 的 要 素 , 这 些 要 素 集 中起 来 组 合 成 一 个 表 , 把 这 个 表 被 称 为 图 元 组 码 。 每 种 图 元 有 固 定 格 式 的 图 元 组 码 , 个 图 元 有 名 称 不 同 的 图 元 组 码 。 Au o 每 t— CAD 二 次 开 发 的 程 序 员 必 须 熟 悉 代 表 各 种 图 形 的 图 元 组 码 , 解 这 些 图 元 组 码 的 结 构 和 读 取 、 改 图 了 修 元 组 码 中 图 元 要 素 的 方 法 , 便 编 写 Au o S 程 以 t LI P 序 来 创 建 和 操 作 图 形 图 元 组 码 中并 不 是 所 有 的 数 据 都 适 合 编 程 操 作 。 能 够 操 作 的 图 元 组 码 见 表 1和

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

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

AutoLISP入门单元一:AutoLISP主角登场 (2)单元二:AutoLISP的关键、基本结构及语法 (6)单元三:快速分类浏览AutoLISP功能函数(一) (17)单元四:快速分类浏览AutoLISP功能函数(二) (23)单元五:轻松快速的掌握AutoLISP设计技巧 (29)单元六:图元数据的取得与活用技巧(一) (39)单元七:图元数据的取得与活用技巧(二) (47)单元八:新手上路-参数设计的关键技巧 (58)单元一: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-3

每天一个命令学习AutoLisp-3

第三天:princ
princ是一个显示或书写函数,可以将文本显示在显示器或写入文本文件中。

一、语法:
(princ “字串1”)
二、解释:
显示字串“字串1”
三、举例及练习:
1、在命令行输入:(princ “你好!”)↙,在命令行会显示不带引号的你好! 和带引号的“你好!”
第一个你好是正常显示的文本,带引号的是该语句的返回值。

在命令行中如下输入:
会如下显示:
返回值不在显示。

因此(princ)可以用来消除返回值的显示。

2、在命令行如下图输入:
显示如下:
“小明,你好!”在同一行显示。

继续在命令行如下图输入:
在上一字串中加入一个“\n”符号,显示如下:
在加入“\n”处换行显示。

princ语句可以将字串写入文本文件中,由于目前已较少使用,本文不在讲述,感兴趣的朋友可以自己查看相关书籍。

3、综合练习:
按下图编写程序文件“lisp-3.lsp”。

加载程序文件“lisp-3.lsp”,在命令行输入名利“lx”,按提示进行可在CAD中写入“我的第一个综合练习”,在命令行显示“我完成了我的第一个综合练习!”。

Autolisp编程心得---精品管理资料

Autolisp编程心得---精品管理资料

(setq s0 (entsel ”\n设置颜色C / 选取文本:"))(cond((= s0 ”C”)(ett_col));转设置颜色子函数((= s0 ”") nil) ;空格退出( (and (= (type s0)’LIST);选择实体(= (cdr (assoc 0 (entget (car s0))))"TEXT”);判别文本)... ;操作内容(ett_ct);编辑后返回选择)(t (ett_ct)) ;空选返回选择))************************************************有时需要进行复杂的判断,使用如“(= s0 "”)”语句可能不能准确判别输入的空格关键字与空选择,可以使用“(= (type s0) ’STR)”语句。

4.Lisp的暂停与while的特殊使用Lisp一般在交互输入时才会暂停,如果只需要实现屏幕显示暂停,可使用grread函数, grread函数对所有合法的输入设备均会作出反应,有时我们只希望对键盘有反应,可使用while 函数进行循环。

*******************(princ ”\nPress ENTER to continue:”)(while (/= (car (grread)) 2))*******************while用于满足一定条件的循环,其标准语法为:(while testexpr [expr。

])其中expr解释为“在 testexpr 为 nil 之前要求值的一个或多个表达式”,为可选项(在R14之前没有方括号,但仍为可选项)。

正常我们使用while时,总会有expr项,更多的时候,我们是为了expr项才会使用这种循环语句,所有我们往往有expr项是不可缺少的感觉。

这里我们使用while函数的语法是while函数的特例,即没有expr项的情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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()(initget "C ") ;关键字“C”及空格(setq s0 (entsel "\n设置颜色C / 选取文本:"))(cond( (= s0 "C") (ett_col)) ;转设置颜色子函数( (= s0 "") nil) ;空格退出( (and (= (type s0) 'LIST) ;选择实体(= (cdr (assoc 0 (entget (car s0)))) "TEXT") ;判别文本)... ;操作内容(ett_ct) ;编辑后返回选择)(t (ett_ct)) ;空选返回选择))************************************************有时需要进行复杂的判断,使用如“(= s0 "")”语句可能不能准确判别输入的空格关键字与空选择,可以使用“(= (type s0) 'STR)”语句。

4.Lisp的暂停与while的特殊使用Lisp一般在交互输入时才会暂停,如果只需要实现屏幕显示暂停,可使用grread函数,grread函数对所有合法的输入设备均会作出反应,有时我们只希望对键盘有反应,可使用while 函数进行循环。

*******************(princ "\nPress ENTER to continue:")(while (/= (car (grread)) 2))*******************while用于满足一定条件的循环,其标准语法为:(while testexpr [expr...])其中expr解释为“在 testexpr 为 nil 之前要求值的一个或多个表达式”,为可选项(在R14之前没有方括号,但仍为可选项)。

正常我们使用while时,总会有expr项,更多的时候,我们是为了expr项才会使用这种循环语句,所有我们往往有expr项是不可缺少的感觉。

这里我们使用while函数的语法是while函数的特例,即没有expr项的情况。

如果希望对鼠标右键同时反应,可以使用:*******************(princ "\nPress ENTER to continue:")(while (and (/= (setq a(car (grread))) 2) ;键盘(/= a 11) ;鼠标右键(SHORTCUTMENU=0)(/= a 25) ;鼠标右键(SHORTCUTMENU≠0)))*******************5.输入距离Lisp语言中输入距离的函数为getdist,但我们有时需要输入负值,有时需要在输入距离的同时得到角度,使用getdist函数就显得无能为力,这时,我们可以灵活使用其它交互输入函数如getpoint、getcorner等,通过计算得到我们所需要的值。

例二是一段输入长度的同时得到默认角度的代码,使用getpoint函数。

************************************************;;例二(setq pt0 (getpoint "\n直线基点: ")pt1 (getpoint pt0 "\n直线长度: ") ;长度及角度可用键盘或鼠标定位dst (distance pt0 pt1) ;计算长度ang (angle pt0 pt1) ;计算默认角度ang1 (getangle pt0 (strcat "\n直线方向<" (angtos ang 1) ">: ")))************************************************例三是可以按阵列方式输入行列间距的代码,输入距离为正值,修改部分代码可输入负值,使用getcorner函数,同时使用initget的控制位128。

************************************************;;例三(defun lc_dist ()(initget 128) ;允许任意输入(setq disr (getpoint "\n指定单位单元或输入行间距: "))(if (= (type disr) 'LIST) ;鼠标输入(progn(initget 1)(setq dis (getcorner disr "\n指定对角点: ") ;鼠标输入对角disc (abs (- (car dis) (car disr))) ;正值行距disr (abs (- (cadr dis) (cadr disr))) ;正值列距) ;计算行列间距)(if (= (type disr) 'STR) ;键盘输入行距(if (setq dis (distof disr)) ;判断输入的是否距离(progn(initget 6)(setq disc (getdist "\n输入列间距: ")) ;输入列距)(progn ;键盘输入格式不符返回(princ "\n需要正数值或两个二维角点。

")(lc_dist)))(progn ;空输入返回(princ "\n需要正数值或两个二维角点。

")(lc_dist)))))************************************************6.数学运算函数的数量界限在Lisp中对表中数据进行求和、求最大值等数学运算时,往往直观的对表直接赋予运算函数,使用语句如“(eval (cons 'MAX numlist))”,一般都可以进行计算,但当表中数据数量大于255时,将会出现错误“bad argument value: does not fit in byte: 256”。

对于这种情况,我们不必对数据表进行分段,可以直接使用函数apply,语法更简单:(apply 'MAX numlist)。

apply可将数据表传送给指定的函数进行求值而不受数据数量的影响。

受表中数据数量影响的数学运算函数有:+、-、*、/、max、min、logand及logior。

7.选择集与表选择集是一种特殊结构的表,只能通过特定的函数进行操作,但这些函数对大量重复的操作只能通过循环实现,显得力不从心,不能体现Lisp语言表结构的优越性。

其实我们只要通过存取实体名或实体句柄,将它们存为一个普通结构的表,完全可以通过常规表操作函数实现对实体的操作。

例四是一段使用apply、mapcar函数联合求文本选择集中文本基点最大y值得代码,只是一个示例,如果结合VL-sort函数,可轻松实现对文本的排序。

************************************************;;例四(setq sl nil i -1)(repeat (sslength (setq ss (ssget '((0 . "TEXT"))))) ;选择文本(setq i (1+ i)en (ssname ss i) ;从选择集中取出文本sl (cons en sl) ;构造包含实体名的表))(setq maxy (apply 'max ;求文本基点最大y值(mapcar'(lambda (x)(caddr (assoc 10 (entget x))) ;提取y值)sl)))************************************************当然,选择集也有其优势的一面,比如对选择集中实体的删除操作非常简单、选择集中的实体不会重复及选择集可以与Acad命令交互使用等特征是一般表所不具备的,所以,编程时应根程序要求,灵活运用。

8.cal的使用与加载Acad随机附带了一些外部定义命令,其中cal(计算器)命令是最常用的命令之一,在加载gromcal.arx后cal可以在Lisp程序中像其它函数一样使用,这就使得我们在程序中对文本的四则运算处理变得简单,如“(cal "1+2/3")”,其中字符串"1+2/3"可以从图形的文本中提取,也可以是符合cal要求格式的任一字符串(详见Acad联机帮助)。

相关文档
最新文档