autolisp实用编程四例

更新时间:2023-11-15 03:32:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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.快速画直线

在画给定坐标点的直线时,需要通过键盘输入坐标值。这样的情况下当然是利用右边的数字键盘输入

较为方便。但若直接使用autocad的line命令画直线,在x和y两个坐标值之间需要输入一个逗号“,”作为分隔,而数字键盘区又没有该逗号,所以仍然不方便。

本文的autolisp画直线程序只要求用户输入坐标值,而由程序自动调用line命令画出直线,因此用户不用离开数字键盘区就能完成工作。使用方法如下:

在autocad的command提示下,打入命令: xlin

然后根据提示依次输入x和y坐标。若要结束画线,在程序提示输入x坐标时直接打回车即可。

4.围绕圆弧写一段文本

有时为了美观的需要,希望能够围绕一段圆弧来写文本文字,本文的程序提供了这一功能。使用方法如下(粗体字表示autocad的提示,尖括号“ΙΛ"中的部分是需要用户输入的内容):

command:atxt

startpointoftext:Ι指定文本的起点Λ

textheight:Ι指定文本的高度值Λ

selectarc:Ι选择圆弧Λ

text:Ι输入文本Λ

输入以上相关内容后,程序自动围绕指定的圆弧写文本。如果当前的文本字型有固定高度,则程序不提示“textheight:”。

本文给出的程序只适合写英文文本,由于汉字是双字节,所以若要写汉字,需要对程序作一些修改。需要修改的地方为程序中第二个if函数,用下面的代码替换原来的if函数:

(if(Κtsize0)

(command″text″″c″ptsiztr(substrtxtcnt2))

(command″text″″c″pttr(substrtxtcnt2)) )

紧接该函数,在其后再增加一行代码:

(setqcnt(+cnt1))

修改后的程序支持中文文本(不支持中、英文混合书写)。

5.程序使用说明

以上每个功能的autolisp程序既可以以独立的文本文件形式存放,也可以合并在一个文本文件中。若以acad.lsp作为程序文件名,并将文件放在autocad支持文件所在的路径中,则在启动autocad时系统会自动加载该文件。否则需要通过系统菜单或load函数加载autolisp程序文件,然后才能使用。load函数的调用格式是:在autocad的command:命令提示状态下,打入:

(loadΙautolisp文件名Λ)

在Ιautolisp文件名Λ中可以包含dos路径,但需要注意的是:在autolisp中,反斜杠“ι”有特殊的定义,因此要使用正斜杠或连续两个反斜杠来表示dos路径中的反斜杠。如:

(load″acadιιcad1.lsp″)

扩展名lsp可以省略。

6.autolisp程序

以上四个功能的autolisp程序如下,该程序已在acadr13forwindows、中文windows95环境下调试通过。它适用于autocad10.0以上的dos和windows版本。

;更改文本高度程序

(defunc:cth(/sstxsizenindexenttypeoldsizenewsizeent1)

(setqss(ssget))

(setqtxsize(getdist″ιnnewtextheight:″))

(setqn(sslengthss))

(setqindex0)

(repeatn

(setqent(entget(ssnamessindex)))

(setqindex(+1index))

(setqtype(assoc0ent))

;检查选择的实体是否为文本

(if(Κ″text″(cdrtype))(progn

(setqoldsize(assoc40ent))

(setqnewsize(cons(caroldsize)txsize))

(setqent1(substnewsizeoldsizeent))

(entmodent1)) ) )

(princ) )

;延伸直线的长度程序

(defunc:stl(/eentpt1pt2madis)

(setqe(entsel″ιnselectline:″))

;取得选中实体的数据

(setqent(entget(care)))

(setqpt1(cdr(assoc10ent))pt2(cdr(assoc11ent)))

;找出离选择点最近的直线的端点

(if(ΙΚ(distance(cadre)pt1)(distance(cadre)pt2))

(setqptpt1m10a(anglept2pt1))

(setqptpt2m11a(anglept1pt2)) )

(setqdis(getdistpt″ιnstretchlength:″))

(setqpt(polarptadis))

(setqe(subst(consmpt)(assocment)ent))

(entmode)

(princ) )

;快速画直线程序

(defunc:xlin(/xy)

(setvar″cmdecho″0)

(command″line″)

(setqxt)

(while(/Κxnil)

(setqx(getreal″ιnenterx:″))

(if(/Κxnil)(progn

(setqy(getreal″entery:″))

(command(listxy))) ) )

(commandλ)

(princ) )

;围绕圆弧写文本程序

(defunc:atxt(/ospt1styetsizesizarctxtrlendiahfintangcntssnangpttr)

(setqos(getvar″osmode″))

(setqpt1(getpoint″ιnstartpointoftext:″))

(setqsty(getvar″textstyle″))

(setqe(tblsearch″style″sty))

(setqtsize(cdr(assoc40e)))

(setqsiztsize)

;检查当前的文本字型是否为固定高度

(if(Κtsize0)

(setqsiz(getdistpt1″ιntextheight:″)) )

(setvar″osmode″4)

(setqarc(getpoint″ιnselectarc:″))

(setvar″osmode″os)

(setqtxt(getstring1″ιntext:″))

(setqr(distancearcpt1))

(setqlen(strlentxt))

(setqdia(*(/(*sizlen)(*2.0pir))360.0))

(setqhf(/(*diapi)180.0))

(setqint(/hflen))

(setqang(anglearcpt1))

(setqcnt0)

(setqss(ssadd))

(while(Ιcntlen)

(setqnang

本文来源:https://www.bwwdw.com/article/byjv.html

Top