AutoLISP程序

2024-06-04

AutoLISP程序(精选4篇)

AutoLISP程序 篇1

0 引言

AutoCAD是由美国Autodesk公司开发的通用计算机辅助绘图和设计软件包,它具有易于掌握、使用方便、体系开放等特点。AutoCAD已广泛应用于机械、建筑、电子、土木工程、轻工等各个领域。

传统的人机交互式绘图一般需要用精确的尺寸值定义几何元素,输入的每一条线都必须有确定的位置,图形一旦建立,即使结构相似但想改变图形大小尺寸,只能对图形进行编辑。在工程设计中,一方面,进行新产品设计时不可避免地需要多次反复修改,需要进行多方面的综合协调和优化;另一方面,许多的专业图样设计中,很多图形结构具有一定的相似性,往往只是尺寸的大小不同,其图形随尺寸参数的变化而相应变化。

在机械工程中,很多零部件的形状是相似的,例如键、销、螺钉、螺母、滚动轴承等,同时绝大多数机械产品为适应用户和市场的需求而成为系列产品。由于其规格品种多,零件结构相似,尺寸不同的特点,给参数化绘图程序设计提供了广阔的展示空间,编写一个程序,只要变更文件名,并对参数赋予不同的数值,即可绘出几个乃至几十个图形,避免了交互式绘图烦琐的重复劳动。采用这种方法,绘图点经过精确计算,出图正确,存储程序不仅比存储图形可靠,而且程序修改方便,占用存储空间小。参数化设计具有强有力的草图设计和尺寸驱动功能,通过约束参数的修改,能方便地设计出一系列功能和形状相似的设计模型,进行系列化产品开发。

1 程序参数化绘图

程序参数化绘图主要适用于图形结构形式基本固定而结构尺寸参数变化的图形。

运用程序参数化绘图,首先要分析图形的特点,确定图形的基本要素及特征点的序列,建立图形的几何尺寸和结构尺寸的关系,此时尺寸约束作为变量来定义。在工程设计中,所有图形都可以分解为点、直线、圆弧、圆这4种基本图元。在二维图形中,几何信息表示为图形元素的关键点,例如点的坐标、直线的起点和终点、圆弧的起点和终点和圆的圆心,基本图元用多种参数表示,进而将这些拓扑关系及控制变量信息编制成程序,就可以设计出一组在形状和结构上具有相似性的产品模型,当修改图形数据库中的参数时即可生成不同尺寸的图形。

程序参数化绘图的实质,就是将图形信息记录在程序中。图形的描述通常可分为:图形的拓扑关系、图形的几何参数以及这些几何参数与图形结构参数之间的联系。通常用一组变量记录图形的几何参数(如点的坐标),用一系列的赋值语句表达几何参数与结构参数(如图形的长、宽等)之间的关系,然后用一系列的调用语句来描述图形的拓扑关系。

程序参数化绘图不再需要用户逐条线地交互绘制图形。用户只需输入所需的参数,程序即可自动地完成图形的绘制工作。如图1所示图形的几何参数是6个点的坐标(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)和(x6,y6),结构参数是4个尺寸a,b,c,d。用户只要输入(x1,y1,a,b,c,d)等参数,程序将自动计算确定图形中的各节点参数:

x2=x3=x1+a,x4=x5=x1+a-b,x6=x1

y2=y1,y3=y4=y1+d,y5=y6=y1+c

图形中各实体间的拓扑关系:相对边互相平行、相邻边互相垂直等约束关系则由程序保证。

2AutoCAD 二次开发

AutoCAD是美国Autodesk公司开发的通用型绘图软件,具有强大的图形编辑和处理功能、开放性结构以及良好的性能价格比,其版本从早期的1.0版到目前的2009版,在国内外都已得到广泛的应用。

AutoCAD 软件二次开发是在现有软件基础上,为提高和完善软件功能,使之更符合用户需求而对软件所做的开发工作,目的是提高设计品质和效率及充分发挥通用AutoCAD软件价值。二次开发将应用对象的设计规范、构造描述、设计方法等以约束关系形式集成到通用AutoCAD 平台中去,使应用对象设计智能化、集成化,也是将AutoCAD 环境客户化的基本手段。

AutoCAD是一个开放的、便于用户二次开发的绘图软件,AutoCAD具有开放的体系结构和先进的ACIS图形造型内核,是应用最广泛的交互式辅助设计系统,提供了丰富的开发环境。自1985年推出的2.17版中,AutoCAD就内嵌了AutoLISP语言,方便用户对其进行二次开发。随着AutoCAD版本的不断升级,它所支持的开发环境也不断增加,目前,支持AutoCAD二次开发环境的主要有:AutoLISP,Visual LISP,VBA,ADS,ObjectARX,DCL,VBA,ActiveX Automation等。

3AutoLISP

AutoLISP是开发AutoCAD 的最主要的工具,是AutoCAD R13以前版本所内嵌的基础性二次开发语言工具,不仅具有算术运算、逻辑运算、字符处理、输入输出的等高级语言常备的功能,而且具有图形扩展功能,直接与AutoCAD内部图形系统融合为一体,可以直接调用是AutoCAD命令,直接对屏幕图形进行搜索处理。AutoLISP具有直观、方便、程序文件小、通用性强、易掌握的特点。

3.1AutoLISP语言

AutoCAD系统提供了AutoLISP语言(list procesing language)编程,它是广泛应用的人工智能语言(common LISP) 的简化版本。AutoLISP语言是使用LISP语法并加入AutoCAD系统命令而编成一体的高级程序设计语言。

AutoLISP语言是一种运行在AutoCAD环境下的LISP编程语言,是内嵌于AutoCAD内部的表处理高级程序设计语言,是对AutoCAD进行二次开发的主要语言之一,同时也是迄今人工智能领域中应用最广泛的程序设计语言之一。AutoLISP既具备一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大图形处理功能,其在图形处理方面功能较强,可实现参数化绘图程序设计,以之建立标准件、非标准件库以及各种CAD系统等。

AutoLISP语言可直接调用几乎全部的AutoCAD 命令,它语法简洁,表达能力强,函数种类多,程序控制结构灵活。用户可以把AutoLISP和AutoCAD的绘图命令透明地结合起来,使设计和绘图完全融为一体,同时可以利用AutoLISP语言编程实现对AutoCAD当前图形数据库进行直接访问和修改,为实现对屏幕图形的实时修改、交互设计、参数化设计以及在绘图领域中应用人工智能提供了方便。概括地说,AutoLISP综合了人工智能语言LISP的特性和AutoCAD强大的图形编辑功能的特点,可谓是一种人工智能绘图语言。

3.2AutoLISP编程技术

AutoLISP编程采用了与CommonLISP(一种通用的LISP语言版本)相近的语法及习惯约定,并吸收了LISP语言的主要函数,同时增加了针对AutoCAD特点的许多功能。在LISP语言中,最基本的数据类型是符号表达式。其特点是程序和数据都采用符号表达式的形式,即一个LISP程序可以把另一个LISP程序作为它的数据进行处理。因此使用LISP语言编程十分灵活。

AutoLISP程序是以“*.LSP”为扩展名的ASCII码文本文件,源程序编辑过程是:1) 运行AutoCAD;2) 选取工具菜单栏的AutoLISP或VisualLISP,进入编辑窗口;3) 编辑程序、进行语法检查、加载;4) 由(1oad)函数调用并运行。

AutoLISP程序采用一对对圆括号构造的表处理结构,可多层嵌套,采用“前缀表示法”,即将运算符作为表的第一个元素,后面紧跟各类参数。AutoLISP语言程序运行过程就是对函数求值的过程,是在函数求值过程中实现函数功能; AutoLISP语言典型的程序结构是递归方式。递归方式的使用,使得程序设计简单易懂。

通用格式为:

(函数名 参数)

例如:数学表达式:X=(A+B)*C

AutoLISP赋值函数:(setq X (* (+ A B) C))

AutoLISP表元素可为整数、实数、字符串、表、图元名、符号和变量等多种数据类型。

常用AutoLISP函数有:计算函数、关系运算与逻辑运算函数、字符处理函数、命令函数、表处理函数、条件循环函数、文件处理函数、输入/输出函数、自定义函数等。

4AutoLISP程序实例

a) 用AutoLISP语言编写一个自定义函数。要求执行此函数时使用键盘输入一个矩形截面长和宽的值,然后自动绘出该矩形,并绘出剖面线。

b) 编制参数化绘制深沟球轴承的AUTOLISP程序,程序中各坐标点如图2所示。

在程序运行中,用户按提示输入所绘轴承的外径d,孔径d1和宽度b,并输入插入点后,程序自动进行各坐标点的计算,然后按深沟球轴承的绘图标准用简化方法绘出图形。

5 结语

AutoLISP是一种内嵌式表处理语言,可以广泛应用在AutoCAD各个版本中,AutoLISP语言作为AutoCAD的二次开发工具,可较好地实现参数化绘图。在机械设计中,通过对基本结构相似的零部件进行规格、系列化的整理和分类,分别输入到参数化设计系统中,设计人员只要输入相应的参数,计算机就可以自动进行设计,所以采用参数化技术后能够大大提高工作效率和设计的准确性。

参数化是智能化、集成化CAD系统的核心技术之一。参数化绘图技术克服了交互式绘图的缺点,尤其在定制标准化、系列化和通用化比较高的通用产品方面有很大的优势,效率高、可靠性好、原理简单、适用性广,因而得到设计界的广泛应用。

摘要:通过对程序参数化绘图原理进行分析,研究了AutoLISP语言的特点和AutoLISP编程技术,并结合实例,介绍了用AutoLISP对AutoCAD图形进行的参数化绘图程序设计。实践表明,AutoLISP语言功能强大,易学易用,是AutoCAD二次开发的重要工具。

关键词:AutoLISP,AutoCAD,参数化

参考文献

[1]梁春雪,崔洪斌,吴义忠.AutoLISP实用教程[M].北京:人民邮电出版社,1998.

[2]蓝屹生.AutoLISP学习导引(适用于R14—2002)[M].北京:中国铁道出版社,2003.

[3]赵景亮,李志刚.AutoCAD 2004与AutoLISP二次开发技术[M].北京:清华大学出版社,2005.

[4]郭朝勇.AutoCAD二次开发技术[M].北京:清华大学出版社,1999.

[5]苏鸿根,刘海滨,杨飞强.怎样开发AutoCAD R12[M].北京:清华大学出版社,1995.

[6]肖刚.机械CAD原理与实践[M].北京:清华大学出版社,1999.

AutoLISP程序 篇2

AutoLisp 是 Autodesk 公司集成在 Autocad 软件内部的二次开发编程语言, 其易学、易用, 即使是初学者也能在较短时间内编写出精彩程序, 与Autocad软件自身又具有完美的兼容性, 因此受到广大工程师的青睐, 用其撰写了无数工程实用工具, 大大提高了工作效率。在 AutoCAD 二次开发过程中, entmake 作为 AutoLisp 功能函数之一, 发挥着重要作用。

1 entmake函数的功能

在图形中创建一个新图元: (entmake [elist])

参数elist:图元定义数据表, 其格式与 entget 函数返回表的格式相似。elist 参数必须包含创建图元的全部必要数据, 如果省略了任何一个必须的定义数据, 该函数就会返回 nil 并拒绝创建该图元。如果省略了可选的定义数据 (如图层) , entmake 使用缺省值。

2 entmake函数的性能

在 AutoCAD 二次开发过程中, “entmake”并不是唯一在图形中创建一个新图元的方法, 也可采用“command”函数调用AutoCAD 内部命名的方法在图形中创建一个新图元。下面以实例分析两者性能的优缺点。

例子:在 AutoCAD 中以pt1和pt2为端点绘制一条直线

command方法: (command "line" pt1 pt2 "")

entmake方法: (entmake (list ' (0 . "LINE") (cons 10 pt1) (cons 11 pt2) ) )

上例中, command方法在编程结构上比较简洁, 操作习惯符合常规的CAD命令使用。但在如“捕捉”等环境因素影响下, 有时候可能得不到正确的图元, 同时command运行速度较慢。entmake方法不受环境因素影响, 在运行速度上大约是command方法的300倍, 实践证明在创建大量图元时使用entmake对提高程序的效率具有积极的意义。初学者通常喜欢采用command方法, 对于有经验的工程技术人员, 在等同的条件下, 会优先使用entmake。

3 entmake函数的使用方法

在实际编程过程中, entmake 所需的elist参数——图元定义数据表结构非常复杂, 不同图元的数据表不同, 相同图元的必要数据和可选的定义数据的组合又非常多。如果缺少必要数据, entmake则无法创建图元, 如果定义数据过多又会使得程序冗长, 初学者很难灵活掌握。因此, 熟悉各种图元的必要数据是正确使用entmake的关键。

下面总结了entmake创建各种图元的必要数据, 省略了如图层、颜色等可选的定义数据。编程人员可根据实际情况灵活添加可选的定义数据。

直线

(entmake (list ' (0 . "LINE") (cons 10 pt1) (cons 11 pt2) ) )

两顶点多段线 (多顶点类似)

(entmake (list ' (0 . "LWPOLYLINE") ' (100 . "AcDbEntity") ' (100 . "AcDbPolyline") (cons 90 2) (cons 10 pt1) (cons 10 pt2) ) )

点表生成多段线

(entmake (append (list ' (0 . "LWPOLYLINE") ' (100 . "AcDbEntity") ' (100 . "AcDbPolyline") (cons 90 (length lst) ) ) (mapcar ' (lambda (pt) (cons 10 pt ) ) lst ) ) )

(entmake (list ' (0 . "CIRCLE") (cons 10 pt) (cons 40 r) ) )

圆弧

(entmake (list ' (0 . "ARC") (cons 10 pt) (cons 40 r) (cons 50 ang1) (cons 51 ang2) ) )

单行文本

(entmake (list ' (0 . "TEXT") (cons 1 str) (cons 10 pt) (cons 40 5) ) )

多行文本

(entmake (list ' (0 . "MTEXT") ' (100 . "AcDbEntity") ' (100 . "AcDbMText") ' (7 . "Standard") (cons 1 str) (cons 10 pt) ) )

半径标注

(entmake (list ' (0 . "DIMENSION") ' (100 . "AcDbEntity") ' (100 . "AcDbDimension") (cons 10 pt) ' (70 . 36) ' (100 . "AcDbRadialDimension" ) (cons 15 pt1) ) )

直径标注

(entmake (list ' (0 . "DIMENSION") ' (100 . "AcDbEntity") ' (100 . "AcDbDimension") (cons 10 pt1) (cons 11 pt2) ' (70 . 163) ' (100 . "AcDbDiametricDimension") (cons 15 pt3) ) )

水平标注

(entmake (list ' (0 . "DIMENSION") ' (100 . "AcDbEntity") ' (100 . "AcDbDimension") (cons 10 pt) ' (70 . 32) ' (1 . "") ' (100 . "AcDbAlignedDimension") (cons 13 pt1) (cons 14 pt2) ' (100 . "AcDbRotatedDimension") ) )

垂直标注

(entmake (list ' (0 . "DIMENSION") ' (100 . "AcDbEntity") ' (100 . "AcDbDimension") (cons 10 pt) ' (70 . 32) ' (1 . "") ' (100 . "AcDbAlignedDimension") (cons 13 pt1) (cons 14 pt2) ' (50 . 1.5708) ' (100 . "AcDbRotatedDimension") ) )

倾斜标注

(entmake (list ' (0 . "DIMENSION") ' (100 . "AcDbEntity") ' (100 . "AcDbDimension") (cons 10 pt1) ' (70 . 33) ' (1 . "") ' (100 . "AcDbAlignedDimension") (cons 13 pt2) (cons 14 pt3) ) )

选择集做成普通块

(defun emkblk (ss pt name / i) (entmake (list ' (0 . "block") (cons 2 name) ' (70 . 0) (cons 10 pt) ) ) (repeat (setq i (sslength ss) ) (entmake (cdr (entget (ssname ss (setq i (1- i) ) ) ) ) ) ) (entmake ' ( (0 . "ENDBLK") ) ) (command "_.erase" ss "") (entmake (list ' (0 . "INSERT") (cons 2 name) (cons 10 pt) ) ) )

插入普通块

(entmake (list ' (0 . "INSERT") (cons 2 name) (cons 10 pt) ) )

生成无名块

(defun emkunamebIk (ss pt/i name) (entmake (1ist' (0, "block") ' (2."*U") ' (70.1) (Cons 10pt) ) ) (repeat (setq i (sslength ss) ) (entmake (car (entget (ssname ss (setq 1 (1-i) ) ) ) ) ) ) (setq name (entntake ' ( (0 . "ENDBLK") ) ) ) (conmand"_.erase" ss"") (entmake (1ist' (0. "INSERT") (cons 2 name) (cons 10 pt) ) ) name)

将选择集做成属性块

(defun emkattblk (SS pt name/ent i) (entmake (1ist' (0."block") (cons 2 name) 。 (70.2) (cons10 pt) ) ) (repeat (setq i (sslength ss) ) (setq ent (entget (ssname SS (setq i (1-i) ) ) ) ) (if (= (cdr (assoc 0 ent) ) "TEXT") (entmake (list' (0."ATTDEF") (assoc 10 ent) (assOC 40 ent) (assoc 1 ent) (cons 3 (cdr (assoc 1 ent) ) ) (cons 2 (cdr (assoc 1 ent) ) ) ' (70 .0) ) ) (entmake (cdr ent) ) ) ) (entmake ' ( (0."ENDBLK") ) ) )

生成图层

(entmake (list ' (0 . "LAYER") ' (100 . "AcDbSymbolTableRecord") ' (100 . "AcDbLayerTableRecord") ' (70 . 0) ' (6 . "Continuous") (cons 2 name) ) )

文字样式

(entmake (list ' (0 . "STYLE") ' (100 . "AcDbSymbolTableRecord") ' (100 . "AcDbTextStyleTableRecord") (cons 2 name) ' (70 . 0) (cons 40 h) (cons 41 w) ' (3 . "romans.shx") ' (4 . "Hztxts.shx") ) )

创建新线型

(entmake (1ist ' (0 . "LTYPE") ' (100 ."AcDbSvrnboITableRecord") ' (100 ."AcDbLinetvDeTableRecord") (cons 2"BERDlG 5-545") ' (3."Border_ _ _ _ _) ' (70.0) ' (73.2) ' (40.15.0) ' (49.10.0) ' (74.0) ' (49.5.0) ' (74.0) ) )

引线

(entmake (list ' (0 . "LEADER") ' (100 . "AcDbEntity") ' (100 . "AcDbLeader") (cons 10 pt) (cons 10 pt1) (cons 10 pt2) ) )

构造线

(entmake (list ' (0 . "XLINE") ' (100 . "AcDbEntity") ' (100 . "AcDbXline") (cons 10 pt) (cons 11 pt1) ) )

(entmake (list ' (0 . "POINT") (cons 10 pt) ) )

4 结语

通过entmake函数在AutoLisp程序设计中的应用研究, 总结了entmake创建各种图元的必要数据。初学者通过灵活使用entmake向编程高手进阶, 能够编写出更为精彩的程序。

参考文献

[1]吴永进, 林美樱.AutoLISP&DCL基础篇[M].北京:中国铁道出版社, 2003.

AutoLISP程序 篇3

在进行工程图纸的绘制时, 表面粗糙度是一个经常需要标注的项目。但在迄今为止的各个版本的AutoCAD中, 这都是一个空白点。当遇到需要标注的情况时, 一般采用的方法是:先画出粗糙度符号, 然后再将绘制好的粗糙度符号定义成块或属性块 (可改变粗糙度值) , 供以后调用。这种方法标注表面粗糙度时需要定义两个属性块, 一个用来标注位于左方、上方及左上方位的需加工表面粗糙度符号;一个专用于标注下方、右方及右下方位的需加工表面粗糙度符号, 增加了绘图的工作量, 降低了工作效率, 因此需要改进。改进的方法就是进行二次开发, 使原来很多步的工作可以通过一个命令来完成。

1 表面粗糙度的标注

1.1 表面粗糙度的构成内容

表面粗糙度的标注方法在国标GB/T131-2006中有详细的规定。包括基本符号、扩展图形符号, 完整图形符号。其中扩展图形符号又包括用不去除材料的表面图形符号和去除材料的方法获得的表面图形符号, 其内容的构成如图1所示, 其中AB为粗糙度高度参数数值。

1.2 AutoLISP程序的编制

以用去除材料的方法获得的表面粗糙度符号为例, 根据AutoLISP程序设计规则, 编制程序如下:

将该程序保存成文本文件。

1.3 标注表面粗糙度

(1) 打开需要标注表面粗糙度的图形文件。

(2) 加载标注表面粗糙度的AutoLISP程序。

点击“工具”菜单“加载”, 打开如图2所示“加载卸载应用程序”对话框, 加载前面保存了AutoLISP程序的文本文件, 此时命令窗口提示:

命令:appload已成功加载粗糙度.txt.lsp。

已成功加载“粗糙度.txt.lsp”。

单击“关闭”按钮完成AutoLISP程序的加载。

(3) 在命令行输入Rough, 回答“插入点, 文字高、旋转角度、表面粗糙度数值”即可在所需要位置标注出所需要的表面粗糙度。

2 结语

上述表面粗糙度的标注只是利用AutoLISP程序的一个实例。AutoLISP是一种内嵌于AutoCAD中的表处理程序设计语言, 具有很强的表处理功能, 可以直接被A u t o C A D所接受。因此, 人们经常利用AutoLISP语言对AutoCAD进行二次开发或进行参数绘图。扩充了AutoCAD命令的使用范围, 使AutoCAD更好地为用户服务。

参考文献

[1]张欣, 袁钰.AutoCAD2002工程开发实例教程[M].北京希望电子出版社, 2002, 7.

[2]郭朝勇.AutoCAD2002定制与开发[M].清华大学出版社, 2002, 6.

AutoLISP程序 篇4

一、Auto CAD在水利工程中的应用

Auto CAD强大的绘图功能使得计算机绘制工程图得到进一步完善。目前对Auto CAD应用最广的是以机代手, 进行屏幕设计, 省略了人工描图过程, 从而大大提高了设计速度, 且设计图纸美观、修改方便。

对于熟练掌握Auto CAD且设计经验丰富的设计者, 往往能够将具有相近形式和条件的设计图进行归类。例如, 涵洞可分为洞径0.8m、1.0m、1.2m等几种类型, 事先绘出设计图纸, 形成图形库。当设计需要时, 只需把满足条件的图纸从图形库中调出, 修改具体的尺寸、高程等数据, 即可使用。也就是说, 在应用Auto CAD阶段, 建立图纸模型库是提高设计速度的一个好方法。若要使设计速度得到进一步提高, 则可以对Auto CAD进行二次开发:利用Auto LISP语言编程, 用DCL语言进行对话框设计, 从而形成Auto CAD的二次开发软件包, 实现参数化设计。

二、Auto LISP简介

Auto CAD的二次开发工具包括Auto LISP、ADSDCL、ASE等工具。其中, Auto LISP语言简学易懂, DCL对话框美观实用, 因而受到人们的青睐, 并得到广泛应用。

Auto LISP语言是一种嵌入在Auto CAD内部的LISP编程语言。LISP (List Processing Language) 是一种计算机表处理语言, 在人工智能学科领域得到广泛应用。LISP语言的特点是程序和数据都采用符号表达式的形式, 也就是说, 一个LISP程序可以把另一个LISP程序作为它的数据进行处理。因此, 使用LISP语言编程灵活方便, 就像是进行一个个的函数调用。

三、Auto LISP语言编程实例

1. 工程概况。

十八里河发源于新郑市小乔乡孟庄南沟, 河道全长24.8km, 流域面积112.3km2, 其中郑州市区段长10.5km, 是郑州市重要的排洪河道。随着经济的快速发展和人民生活水平的日益提高, 人们对河道的功能也提出了更高要求。郑州市十八里河生态治理工程在满足防洪除涝标准的前提下, 达到了合理开发利用、提高土地利用率、治理河道、防洪除涝、改善人居生态环境和提高城市品位的目的。

2. 工程设计。

根据《防洪标准》 (GB50201-94) 、《水利水电工程等级划分及洪水标准》 (SL252-2000) 和《堤防工程设计规范》 (GB50286-98) 等有关规范的规定, 十八里河河道治理工程属于三等工程, 堤防级别为二级。根据《郑州市城市防洪规划》的要求, 结合城市发展需求, 十八里河河道治理防洪标准按照50年一遇的标准设计, 除涝标准按照5年一遇的标准设计。为减少土方外运量, 在河道两岸修筑微地形, 微地形隔一定距离设置排水口, 以方便两岸排涝。十八里河除了要具有一般河道的防洪、除涝等功能外, 还应具有生态和景观功能。因此, 本次河道轴线的确定以河道现状中心线为准, 宜弯则弯, 原则上不进行裁弯取直或改道改线处理。结合十八里河的河道特点, 河道行洪断面设计采用梯形断面方案。在满足行洪断面要求的基础上, 为适应生态和景观的要求, 对单一梯形断面采取子槽开挖、边坡植草、局部防护等措施, 以使治理后的河道断面自然、美观、顺畅、和谐。

3. Auto LISP语言编程及河道平面设计图的绘制。

在进行河道平面图设计时, 首先在测量的平面带状地形图上勾勒出河道中心轴线, 并依次描绘出设计河底线、设计上口线、设计堤顶线等要素。在河道轴线上的每一个拐点处、设定桩号间距确定的整桩号处、圆弧连接的端点和中点处 (若河道轴线中包含圆弧段) 等关键点, 标示出该点的桩号、序号、X坐标、Y坐标、圆弧段圆心坐标和圆弧半径。本程序可实现上述功能, 通过对河道中心轴线CAD实体的获取, 分析其数据表, 进行数学计算, 绘制相应图形添加到CAD图形中, 最后生成一个记事本文件。下面汇总列出程序代码片段:

绘制出的CAD图片段如图1所示。

生成的记事本片段如表1所示。

四、Auto LISP的调试方法

新编写的程序并不是完全按照用户编写的意图来执行的。因此, 在获得错误结果或发生程序终止的情况下, 就需要对程序进行调试。而在Auto LISP程序调试中, 一般使用Visual LISP提供的调试器进行调试, 且调试方法不唯一。以下, 给出2种简单的调试方法, 即全局变量调试法和内部函数调试法。

1. 全局变量调试法。

在Auto LISP程序中, 使用的变量分为局部变量和全局变量2种。局部变量仅仅存在于定义该变量的函数中, 只有在该函数的运行过程中, 变量才能使用。而全局变量则不同, 只要未退出Auto CAD环境, 已使用过的全局变量始终保存在内存中, 随时可以查询、修改这些变量的值, 所以在程序的调试阶段, 可以把程序中的某些关键变量定义成全局变量, 在程序运行结束后, 无论是正常退出还是出错退出, 依然可以使用这些全局变量。如, 用Auto LISP的PRINC函数可以查询变量的值, 用SETQ函数可以修改变量的值。变量定义成全局变量后, 在程序出错中断运行时, 可以通过检查各个变量的值, 了解程序运行的情况, 确定问题出在什么地方。

2. 内部函数调试法。

Auto LISP内部带有一个调试跟踪函数, 使用格式为:TRACE函数名。这个函数的作用是给指定的函数设置跟踪标志。设置跟踪标志后, 调用函数时系统会给出提示。在函数运行结束返回时, 系统会给出返回结果。在使用TRACE函数时, 首先要把需要调试的程序段单独定义成一个函数, 然后在主程序段中调用。Auto LISP定义函数有2种形式:DEFUN函数名和DEFUNC函数名。

上一篇:苗期病虫害下一篇:幼儿同伴冲突