entmake函数在AutoLisp程序设计中的应用

点赞:31616 浏览:145724 近期更新时间:2024-03-30 作者:网友分享原创网站原创

摘 要 :主要介绍了AutoLisp二次开发AutoCAD过程中entmake函数的功能、性能以及使用方法.

关 键 词 :AutoCAD;AutoLisp;entmak

中图分类号:TP312文献标识码:A文章编号:16727800(2012)008003402

作者简介:郎建山(1979-),男,国电南京自动化股份有限公司/南京南自科林系统工程有限公司工程师,研究方向为发电厂水处理技术.

0引言

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

1entmake函数的功能

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

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

2entmake函数的性能

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

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

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

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


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

entmake函数在AutoLisp程序设计中的应用参考属性评定
有关论文范文主题研究: 工程师相关论文范文 大学生适用: 专升本毕业论文、高校大学论文
相关参考文献下载数量: 17 写作解决问题: 如何怎么撰写
毕业论文开题报告: 文献综述、论文摘要 职称论文适用: 期刊发表、中级职称
所属大学生专业类别: 如何怎么撰写 论文题目推荐度: 优秀选题

3entmake函数的使用方法

在实际编程过程中,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)))