AUTOLISP 程序命令(精校版本)

合集下载

每天一个命令学习AutoLisp-2

每天一个命令学习AutoLisp-2

第二天:command
command是一个调用CAD自身命令的函数。

一、语法:
(command 命令1[参数1 参数2 …]…..)
二、解释:
调用CAD自身命令“命令1”,并执行“命令1”。

三、举例(以下代码每行都需回车):
在命令行键入以下代码:
(setq pt1 '(2.0 3.0 0.0) pt2 '(7.0 9.0 0.0))
(command"line" pt1 pt2 "")
在屏幕上将画一条从点(2,3,0)到点(7,9,0)的直线。

在命令行键入以下代码:
(command"line" pause pause "")
在屏幕上通过操作人员画出任意两点的直线。

其中“pause”是让电脑等待操作人员输入数据(包括在屏幕上拾取点、实体等操作)。

在命令行键入以下代码:
(command"line")
你可以发现其实上面这行代码就是一个”line”命令。

编写以下程序段并将文件其名为”jhml.lsp”
将文件加载后,键入”ll”、”cc”、“r90”将分别执行“line”
、“copy”、”rotate”命令,其中rotate自动为旋转90度。

大家可以自己对CAD命令进行简化,并做一些修改。

AutoLisp

AutoLisp
1、抄写、改写、组装、开发
2、决绝复杂,循环性的任务
3、输入:命令行,窗口,鼠标修改图形
4、计算:就是对图元属性的设置和改变,CAD自己计算
5、输出:生成图形
6、可以直接在命令行里面输入
(setq a (list 1 2 3 4 ))
(setq a "123")
!a查看a的数值
nil 表示空
(getstring T "\n输入一个字符:") \n表示换行
输出函数:p打头的函数
alert
print
princ
entsel 选择对象
选择一个对象后,可以返回多个元素信息,对象名、拾取点坐标等
C打头的函数,可以对entsel函数返回的元素,进行提取,确定是要第一个、第二个、还是后面某个元素
(setq a (entget name)) a表示name对象的属性组码
(assoc 11 a) ,11表示组码中多个分表中的开始对应的数字
(cdr (assoc 11 a)) cdr在assoc的基础上把11去掉,得到有效的数据
(cons 10 (list 1 2 3))
T 示有
各个数字、字符串、单位之间的转换函数很多,a开始,c开始,s开始的函数
在写程序之前,每个表达式的值,均可以在CAD命令行输入,看看输出结果如何,保证程序编写正确
输入函数:G字母打头的函数
(getstring nil "输入一个字符:") 不可以输入空格
(getstring T "输入一个字符:")可以输入空格 T表示有,任何个一个数字均可表示有
entsel 的返回值是一个数表,即是组码,可以用cons编写

AUTOLISP 程序命令

AUTOLISP 程序命令

1.+ (加)返回所有数的和2.– (减)将第一个数减去其他数的和并返回差值3.* (乘)返回所有数的乘积4./ (除)将第一个数除以其他数的乘积并返回商5.= (等于)比较参数是否相等6./= (不等于)比较参数是否值不相等7.< (小于)如果每个参数值都小于它右边的参数则返回 T,否则返回 nil8.<= (小于或等于)如果每个参数值都小于或等于它右边的参数则返回 T,否则返回 nil9.> (大于)如果每个参数值都大于它右边的参数则返回 T,否则返回 nil10.>= (大于或等于)如果每个参数值都大于或等于它右边的参数则返回 T,否则返回 nil11.~ (按位非)返回参数的按位非(即 1 的补码)12.1+ (增1)将参数加 113.1– (减1)将参数减 114.abs返回参数的绝对值15.acad_colordlg显示标准的 AutoCAD 颜色选择对话框16.acad_helpdlg启动帮助工具(已废弃)17.acad-pop-dbmod恢复 DBMOD 系统变量的值到最近用 acad-push-dbmod保存的值18.acad-push-dbmod储存 DBMOD 系统变量的当前值19.acad_strlsort以ASCII码字母顺序对字符串表进行排序20.acad_truecolorcli从命令行中选择 AutoCAD 真彩色21.acad_truecolordlg显示 AutoCAD 真彩色选择对话框22.acdimenableupdate控制关联标注的自动更新23.acet-layerp-mode查询和设置 LAYERPMODE 配置24.acet-layerp-mark放置图层先前记录的开始和结束标记25.acet-laytrans转换图形中的图层为其它图形或标准文件中所定义的标准26.acet-ms-to-ps从模型空间单位转换实数值到图纸空间单位27.acet-ps-to-ms从图纸空间单位转换实数值到模型空间单位28.action_tile为某一对话框控件指定一个动作表达式,用户在对话框中选中这个控件时,就会执行该动作表达式29.add_list在当前激活的对话框的列表框中增加一个字符串或修改其中的一个字符串30.alert显示一个警告框,其中显示一条出错或警告信息31.alloc设置段长度以供 expand 函数使用32.and返回表达式的逻辑与 (AND) 运算结果33.angle以弧度为单位返回两点之间连线与当前 UCS 下 X 轴之间的夹角34.angtof将表示角度的字符串转换为实数(浮点数)形式的弧度值35.angtos将一个以弧度为单位的角度值转换成字符串36.append将任意多个表组合成一个表37.apply将参数表传给指定的函数38.arx返回当前已加载的 ObjectARX 应用程序名表39.arxload加载 ObjectARX 应用程序40.arxunload卸载 ObjectARX 应用程序41.ascii将字符串中的第一个字符转换成其 ASCII 码(整数)后返回42.assoc从关联表中搜索一个元素,如果找到则返回该关联表条目43.atan返回一个数的反正切值(以弧度为单位)44.atof将一个字符串转换成实数45.atoi将一个字符串转换成整数46.atom验证一个项是否是原子47.atoms-family返回由当前已定义的符号组成的一个表48.autoarxload预定义可自动加载某相关 ObjectARX 应用程序的命令名49.autoload预定义可自动加载某相关 AutoLISP 应用程序的命令名50.Boole用作一个通用的按位逻辑运算函数51.boundp检验符号是否被设置为某个值52.caddr返回表的第三个元素53.cadr返回表的第二个元素54.car返回表的第一个元素55.cdr返回去掉了第一个元素的表56.chr将代表字符 ASCII 码的整数转换成包含相应的单一字符的字符串57.client_data_tile将特定应用数据与一个对话框控件相关联58.close关闭一个已打开的文件mand执行一条 AutoCAD 命令60.cond多条件、多处理结果函数61.cons向表的头部添加一个元素,或构造一个点对62.cos返回弧度角度的余弦值63.cvunit在不同测量单位之间进行换算64.defun定义函数65.defun-q将函数定义为表66.defun-q-list-ref返回用 defun-q 定义的函数的表结构67.defun-q-list-set将符号设置为以表形式定义的函数68.dictadd在指定词典内添加非图形对象69.dictnext查找词典中的下一个条目70.dictremove从指定词典中删除一个条目71.dictrename重命名词典条目72.dictsearch在词典中搜索某个项73.dimx_tile返回控件的宽度74.dimy_tile返回控件的高度75.distance返回两个点之间的距离76.distof将一个表示实(浮点)数的字符串转换成一个实数77.done_dialog中断对话框78.end_image结束当前激活的对话框图像控件的操作79.end_list结束对当前激活的对话框列表的操作80.entdel删除对象(图元)或恢复先前删除的对象81.entget获得对象(图元)的定义数据82.entlast返回图形中最后那个未删除的主对象(图元)名称83.entmake在图形中创建一个新图元84.entmakex创建一个新对象或图元,赋给它一个句柄和图元名(但不指定所有者),并返回新图元的名称85.entmod修改对象(图元)的定义数据86.entnext返回图形中的下一个对象(图元)名87.entsel提示用户通过指定一个点来选择单个对象(图元)88.entupd更新对象(图元)的屏幕显示89.eq确定两个表达式是否具有相同的约束条件90.equal确定两个表达式的值是否相等91.*error*可由用户定义的错误处理函数92.eval返回 AutoLISP 表达式的求值结果93.exit强行使当前应用程序退出94.exp返回常数 e (2.718282...) 的指定次幂(自然反对数)95.expand为 AutoLISP 分配附加空间96.expt返回以某指定数为底数的若干次幂的值97.fill_image在当前激活的对话框图像控件中画一个填充矩形98.findfile在 AutoCAD 库路径中搜索指定文件或目录99.fix截去实数的小数部分,将它转换成整数后返回该整数100.f loat将一个数转换为实数后返回101.f oreach将表中的所有成员以指定变量的身份带入表达式求值102.f unction通知 Visual LISP 编译器将参数作为内置函数进行链接和优化103.g c强制收集无用数据,释放不再使用的节点104.g cd返回两个整数的最大公约数105.g et_attr获取对话框指定控件的某个属性值106.g et_tile获取对话框指定控件的当前运行时的值107.g etangle暂停以等待用户输入角度,然后以弧度形式返回该角度108.g etcfg从 acad.cfg 文件的 AppData 段中检索应用数据109.g etcname获取 AutoCAD 命令的本地化名或英文名110.g etcorner暂停等待用户输入矩形第二个角点的坐标111.g etdist暂停以等待用户输入距离112.g etenv以字符串方式返回指定的环境变量的值113.g etfiled用标准的 AutoCAD 文件对话框提示用户输入一个文件名,并返回该文件名114.g etint暂停以等待用户输入一个整数并返回该整数115.g etkword暂停以等待用户输入一个关键字并返回该关键字116.g etorient暂停以等待用户输入角度,并返回该角度117.g etpoint暂停以等待用户输入点,并返回该点118.g etreal暂停以让用户输入一个实数并返回该实数119.g etstring暂停以等待用户输入字符串,并返回该字符串120.g etvar获取一个 AutoCAD 系统变量的值121.g raphscr显示 AutoCAD 图形屏幕122.g rclear清除当前视口(已废弃)123.g rdraw在当前视口中的两个点之间显示一条矢量线124.g rread从 AutoCAD 的任何一种输入设备中读取数值125.g rtext将文本写到状态行或屏幕菜单区126.g rvecs在图形屏幕上绘制多个矢量127.h andent根据对象(图元)的句柄返回它的对象(图元)名128.h elp调用帮助工具129.i f根据对条件的判断结果,对两个表达式求值130.i nitdia强制显示下一个命令的对话框131.i nitget为随后的用户输入函数调用创建关键字132.i nters求两条直线的交点133.i toa将整数转换成字符串,并返回转换结果134.l ambda定义无名函数135.l ast返回表的最后一个元素136.l ayoutlist返回当前图形中所有图纸空间布局组成的表137.l ength以整数形式返回表中元素的数目138.l ist将任意数目的表达式组合成一个表139.l istp检查某个项是否是表140.l oad对一个文件中的 AutoLISP 表达式求值141.l oad_dialog加载 DCL 文件142.l og返回一个实数的自然对数143.l ogand返回一个整数表中的各数按位逻辑与 (AND) 的结果144.l ogior返回一个整数表中的各数按位逻辑或 (OR) 的结果145.l sh返回某整数作指定次逻辑移位后的结果146.m apcar将作为本函数参数的一个或多个表的各个元素提供给指定函数进行求值,并将由求值结果构成的表返回147.m ax返回给定各数中的最大者148.m em显示 AutoLISP 内存的当前状态149.m ember搜索表中是否包含某表达式,并从该表达式的第一次出现处返回表的其余部分150.m enucmd发出菜单命令,或设置并检索菜单项状态151.m enugroup检查是否加载了指定的菜单组152.m in返回给定各数中的最小者153.m inusp检查某个数是否是负数154.m ode_tile设置对话框控件的状态155.n amedobjdict返回当前图形的命名对象词典的图元名,它是所有非图形对象的根156.n entsel提示用户指定点来选择对象(图元),得到这个对象所指片段的对象名157.n entselp在没有用户输入的情况下,本函数的功能与 nentsel 函数类似158.n ew_dialog开始一个新的对话框并显示该对话框,而且能指定一个缺省操作159.n ot检查一个项的求值结果是否为 nil160.n th返回表中的第 n 个元素161.n ull检查某项的值是否设置为 nil162.n umberp检查某个项是否是实数或整数163.o pen打开一个文件,供其他 AutoLISP I/O 函数访问164.o r返回对表达式进行逻辑或 (OR) 运算的结果165.o snap将某种对象捕捉模式作用于指定点而获得一个点,并返回该点166.p olar在 UCS 坐标系下,求某点的指定角度和指定距离处的点,并返回该点167.p rin1在命令行打印一个表达式或将表达式写入已打开的文件中168.p rinc在命令行打印表达式,或将表达式写入已打开的文件中169.p rint在命令行打印表达式,或将表达式写入已打开的文件中170.p rogn顺序地对每一个表达式进行求值,并返回最后那个表达式的值171.p rompt在屏幕提示区显示一个字符串172.q uit强制退出当前应用程序173.q uote返回表达式而不对其求值174.r ead返回字符串中的第一个表或第一个原子175.r ead-char从键盘输入缓冲区或打开文件中读入一个字符,并将该字符转换成十进制的 ASCII 码值后返回176.r ead-line从键盘或已打开文件中读取行结束符前的字符串177.r edraw重画当前视口或当前视口中的一个指定对象(图元)178.r egapp为当前 AutoCAD 图形注册一个应用名,为使用扩展对象数据作准备179.r em将第一个数除以第二个数,并返回余数180.r epeat对循环体中的每一个表达式进行指定次数的求值计算,并返回最后一个表达式的值181.r everse将表的元素顺序倒置后返回182.r tos将数字转换成字符串183.s et将引号中的符号名的值设置成一个表达式的值184.s et_tile设置对话框控件的值185.s etcfg将应用数据写到 acad.cfg 文件的 AppData 段中186.s etenv将系统环境变量设为指定值187.s etfunhelp给帮助工具注册一个用户定义函数,这样,用户在请求该命令的帮助时,就会调用正确的帮助文件和主题188.s etq将一个或多个符号的值设置为相应表达式的值189.s etvar设置 AutoCAD 系统变量为指定值190.s etview为指定视口建立一个视图191.s in以实数形式返回角度的正弦值(以弧度为单位)192.s lide_image在当前激活的对话框图像控件中显示 AutoCAD 幻灯片193.s nvalid检查组成符号表名的各字符的有效性194.s qrt以实数形式返回一个数的平方根195.s sadd将对象(图元)加入到选择集中,或创建新的选择集196.s sdel从选择集中撤消对象(图元)197.s sget根据选定对象创建选择集198.s sgetfirst判断哪些对象是被选取的和被夹取的199.s slength求出一个选择集中的对象(图元)数目,并将其作为一个整数返回200.s smemb测试某对象(图元)是否是选择集的成员201.s sname返回选择集中由序号指定的那个对象(图元)的图元名202.s snamex获取关于选择集创建方式的信息203.s ssetfirst设置哪些对象既是被选取的又是被夹取的204.s tartapp启动 Windows 应用程序205.s tart_dialog显示对话框并将控制交给对话框206.s tart_image开始对对话框控件中的一个图像控件进行操作207.s tart_list开始处理对话框中的列表框或弹出式列表框中的列表208.s trcase将字符串中的所有字母转换成大写或小写后返回209.s trcat将多个字符串拼接成一个长字符串后返回210.s trlen以整数形式返回一个字符串中字符的个数211.s ubst在表中搜索某旧项,并将表中出现的每一个旧项用新项代替,然后返回修改后所得的表212.s ubstr返回字符串中的一个子字符串213.t ablet获取和设置数字化仪校准214.t blnext在符号表中查找下一项215.t blobjname返回指定符号表条目的图元名216.t blsearch在指定的符号表中搜索符号名217.t erm_dialog终止当前所有的对话框,就象用户取消了它们一样218.t erpri在命令行上输出一个换行符219.t extbox测量一个指定文本对象的尺寸,并返回围住该文本的一个矩形框的对角坐标220.t extpage从图形屏幕切换至文本屏幕221.t extscr切换至文本屏幕(相当于 AutoCAD Flip Screen 功能键)222.t race调试 AutoLISP 程序时的辅助函数223.t rans将一个点(或位移量)从一个坐标系转换成另一个坐标系224.t ype返回指定项的数据类型225.u nload_dialog卸载 DCL 文件226.u ntrace清除指定函数的跟踪标志227.v ector_image在当前激活的对话框图像控件上显示一个矢量线228.v er返回当前 AutoLISP 版本号的字符串229.v ports返回表示当前视口配置的视口描述符表230.w cmatch将模式字符串与某指定的字符串进行匹配比较231.w hile对测试表达式进行求值,如果它不是 nil,则执行循环体中的表达式,重复这个过程,直到测试表达式的求值结果为 nil232.w rite-char将一个字符写到屏幕上或一个已打开的文件中233.w rite-line将字符串写到屏幕上或一个已打开的文件中234.x droom返回对象可供使用的扩展数据 (Xdata) 空间的大小235.x dsize返回一个表作为扩展数据连接到对象(图元)上时所占用的空间大小(以字节表示)236.z erop检查一个数的值是否为 0。

AutoLISP开发用命令

AutoLISP开发用命令

命令修饰符坐标过滤器结合不同点的 X、Y 和 Z 值指定单个点命令条目:输入 .x、.y、.xy、.xz或 .yz在任意定位点的提示下,可以输入点过滤器以通过提取几个点的 X、Y 和 Z 值来指定单个坐标。

在下例中,直线的起点具有从第一个选定对象的中点的 X 值以及第二个选定对象的中点的 Y 和 Z 值构造的坐标。

命令: line指定第一个点: .x中点选择对象(需要 YZ)中点选择另一个对象下一点: 指定点直接距离输入将下一个点沿光标所指方向定位到指定的距离命令条目:在定位点的提示下,输入一个数字值使用直接距离输入,可以相对于输入的最后一点快速指定一点。

在任意点位置提示下,首先移动光标以指定方向,然后输入数值距离。

下例中直线的第二点将沿光标方向定位 5 个单位。

输入的直接距离将沿从最后一点到光标当前位置的路径进行测量。

此功能通常在正交或捕捉模式打开的状态下使用。

命令: line指定第一个点: 指定点指定下一个点: 沿所需的方向移动光标并输入 5注意当使用正交、对象捕捉追踪或极轴追踪的临时替代值键时,直接距离输入方法不可用。

FROM在命令中定位某个点相对于参照点的偏移。

工具栏:对象捕捉命令条目:在定位点的提示下,输入 from基点: 指定一个点用作基点<偏移>: 输入相对偏移在定位点提示下,输入 from,然后输入临时参照或基点(可以指定自该基点的偏移以定位下一点)。

输入自该基点的偏移位置作为相对坐标,或使用直接距离输入。

注意在命令(如 MOVE 和 COPY)中进行拖动时不能使用此方法。

通过键盘输入或使用定点设备指定绝对坐标值,可取消FROM 命令。

MTP定位两点间的中点。

命令条目:在定位点的提示下,输入 mtp两点的中点 (MTP) 命令修饰符可以在执行对象捕捉或对象捕捉替代时使用。

(OSNAP 命令)在定位点的任何命令提示下,输入 mtp 或 m2p。

第一个中点: 指定点第二个中点: 指定第二点TRACKING通过一系列临时点定位点。

AutoLISP开发用命令

AutoLISP开发用命令

AutoLISP开发⽤命令命令修饰符命令.....COLOR 定义新对象的颜⾊COMPILE 编译形⽂件和PostScript字体⽂件CONE 创建三维实体圆锥CONVERT 优化AutoCAD R13或更早版本创建的⼆维多段线和关联填充CONVERTCTB 将颜⾊相关打印样式表(CTB)转换为命名打印样式表(STB) 2002版新增CONVERTPSTYLES 将当前图形的颜⾊模式由命名打印样式转换为颜⾊相关打印样式 2002版新增COPY 复制对象COPYBASE 带指定基点复制对象COPYCLIP 将对象复制到剪贴板 Ctrl+C键COPYHIST 将命令⾏历史记录⽂字复制到剪贴板COPYLINK 将当前视图复制到剪贴板中CUSTOMIZE ⾃定义⼯具栏、按钮和快捷键 2000i版新增CUTCLIP 将对象复制到剪贴板并从图形中删除对象 Ctrl+X键CYLINDER 创建三维实体圆柱DBCCLOSE 关闭“数据库连接”管理器DBLCLKEDIT 控制双击对象时是否显⽰对话框 2000i版新增DBCONNECT 为外部数据库表提供AutoCAD接⼝ Ctrl+6键DBLIST 列出图形中每个对象的数据库信息DDEDIT 编辑⽂字和属性定义DDPTYPE 指定点对象的显⽰模式及⼤⼩可透明使⽤DDVPOINT 设置三维观察⽅向DELAY 在脚本⽂件中提供指定时间的暂停可透明使⽤DIM(或DIM1)进⼊标注模式DIMALIGNED 创建对齐线性标注DIMANGULAR 创建⾓度标注DIMBASELINE 创建基线标注DIMCENTER 创建圆和圆弧的圆⼼标记或中⼼线DIMCONTINUE 创建连续标注DIMDIAMETER 创建圆和圆弧的直径标注DIMDISASSOCIATE 删除指定标注的关联性 2002版新增DIMEDIT 编辑标注DIMLINEAR 创建线性尺⼨标注DIMORDINATE 创建坐标点标注DIMOVERRIDE 替换标注系统变量DIMRADIUS 创建圆和圆弧的半径标注DIMREASSOCIATE 使指定的标注与⼏何对象关联 2002版新增DIMREGEN 更新关联标注 2002版新增DIMSTYLE 创建或修改标注样式DIMTEDIT 移动和旋转标注⽂字DIST 测量两点之间的距离和⾓度可透明使⽤DIVIDE 定距等分DONUT 绘制填充的圆和环DRAGMODE 控制AutoCAD显⽰拖动对象的⽅式可透明使⽤DRAWORDER 修改图像和其他对象的显⽰顺序DSETTINGS 草图设置DSVIEWER 打开“鸟瞰视图”窗⼝DVIEW 定义平⾏投影或透视视图DWGPROPS 设置和显⽰当前图形的特性DXBIN 输⼊特殊编码的⼆进制⽂件EATTEDIT 增强的属性编辑 2002版新增EATTEXT 增强的属性提取 2002版新增EDGE 修改三维⾯的边缘可见性EDGESURF 创建三维多边形⽹格ELEV 设置新对象的拉伸厚度和标⾼特性可透明使⽤ELLIPSE 创建椭圆或椭圆弧ENDTODAY 关闭“Today(今⽇)”窗⼝ 2000i版新增ERASE 从图形中删除对象 Del键ETRANSMIT 创建⼀个图形及其相关⽂件的传递集 2000i版新增EXPLODE 将组合对象分解为对象组件RMAT 管理渲染材质RMLIN 从RML⽂件将插⼊图形 2000i版新增ROTATE 绕基点移动对象ROTATE3D 绕三维轴移动对象RPREF 设置渲染系统配置RSCRIPT 创建不断重复的脚本RULESURF 在两条曲线间创建直纹曲⾯SAVE ⽤当前或指定⽂件名保存图形 Ctrl+S键SAVEAS 指定名称保存未命名的图形或重命名当前图形SAVEIMG ⽤⽂件保存渲染图像SCALE 在X、Y和Z⽅向等⽐例放⼤或缩⼩对象SCALETEXT 改变指定⽂字的⼤⼩并保持其位置不变 2002版新增SCENE 管理模型空间的场景SCRIPT ⽤脚本⽂件执⾏⼀系列命令可透明使⽤SECTION ⽤剖切平⾯和实体截交创建⾯域SELECT 将选定对象置于“上⼀个”选择集中SETUV 将材质贴图到对象表⾯SETVAR 列出系统变量或修改变量值SHADEMODE 在当前视⼝中着⾊对象SHAPE 插⼊形SHELL 访问操作系统命令SHOWMAT 列出选定对象的材质类型和附着⽅法SKETCH 创建⼀系列徒⼿画线段SLICE ⽤平⾯剖切⼀组实体SNAP 规定光标按指定的间距移动可透明使⽤SOLDRAW 在⽤SOLVIEW命令创建的视⼝中⽣成轮廓图和剖视图SOLID 创建⼆维填充多边形SOLIDEDIT 编辑三维实体对象的⾯和边SOLPROF 创建三维实体图像的剖视图SOLVIEW 在布局中使⽤正投影法创建浮动视⼝来⽣成三维实体及体对象的多⾯视图与剖视图SPACETRANS 在模型空间和图纸空间之间转换长度值 2002版新增SPELL 检查图形中⽂字的拼写可透明使⽤SPHERE 创建三维实体球体SPLINE 创建⼆次或三次(NURBS)样条曲线SPLINEDIT 编辑样条曲线对象STANDARDS 管理图形⽂件与标准⽂件之间的关联性 2002版新增STATS 显⽰渲染统计信息STATUS 显⽰图形统计信息、模式及范围可透明使⽤STLOUT 将实体保存到ASCII或⼆进制⽂件中STRETCH 移动或拉伸对象STYLE 设置⽂字样式可透明使⽤STYLESMANAGER 显⽰“打印样式管理器”SUBTRACT ⽤差集创建组合⾯域或实体SYSWINDOWS 排列窗⼝TABLET 校准、配置、打开和关闭数字化仪TABSURF 沿⽅向⽮量和路径曲线创建平移曲⾯TEXT 创建单⾏⽂字TEXTSCR 打开AutoCAD⽂本窗⼝可透明使⽤TIME 显⽰图形的⽇期及时间统计信息可透明使⽤TODAY 打开“今⽇”窗⼝ 2000i版新增TOLERANCE 创建形位公差标注TOOLBAR 显⽰、隐藏和⾃定义⼯具栏TORUS 创建圆环形实体TRACE 创建实线TRANSPARENCY 控制图像的背景像素是否透明TREESTAT 显⽰关于图形当前空间索引的信息可透明使⽤TRIM ⽤其他对象定义的剪切边修剪对象U 放弃上⼀次操作UCS 管理⽤户坐标系UCSICON 控制视⼝UCS图标的可见性和位置。

用LISP语言自定义AutoCAD命令

用LISP语言自定义AutoCAD命令

用LISP语言自定义AutoCAD命令AutoLISP语言作为AutoCAD的二次开发工具,虽然在功能、运行速度和保密性等方面比起ARX等工具要逊色一些,但由于它易学易用,交互性好,灵活性强,对于那些经常使用AutoCAD进行绘图的普通用户来说,不失为一种理想的开发工具。

下面就介绍用AutoLISP 语言自定义的几个AutoCAD绘图命令,可以起到简化操作、提高作图效率的作用。

一、键槽尺寸视图的绘制命令“jct”在绘制轴、齿轮或带轮等零件图时,经常需要画轴上键槽处的剖视图或轮毂键槽的端面视图,比较麻烦;由于键槽的尺寸随轴径的变化而变化,所以我们可以用LISP程序来实现自动绘图。

加载下面的程序,在命令行中键入”jct”并回车,通过人机交互的形式输入有关参数,可自动完成轴上键槽的剖视图和轮毂键槽的端面视图的绘制。

代码示例如下所示。

(defun C:jct ()(setq pt0 (getpoint "\n 请输入视图的中心位置点:"))(initget 7)(setq loop T)(while loop(setq d (getreal "\n请输入键槽处的轴径(12<d<130)(mm):"))(if(or (< d 12) (> d 130))(alert "轴径数据输入错误!\n\n请重新输入!")(setq loop nil));if);while(cond;根据轴径检索键槽尺寸((and (> d 12) (<= d 17)) (setq b 5 t1 3.0 t2 2.3));b表示键槽的宽度((and (> d 17) (<= d 22)) (setq b 6 t1 3.5 t2 2.8));t1表示轴上键槽的深度((and (> d 22) (<= d 30)) (setq b 8 t1 4.0 t2 3.3));t2表示轮毂上键槽的高度((and (> d 30) (<= d 38)) (setq b 10 t1 5.0 t2 3.3))((and (> d 38) (<= d 44)) (setq b 12 t1 5.0 t2 3.3))((and (> d 44) (<= d 50)) (setq b 14 t1 5.5 t2 3.8))((and (> d 50) (<= d 58)) (setq b 16 t1 6.0 t2 4.3))((and (> d 58) (<= d 65)) (setq b 18 t1 7.0 t2 4.4))((and (> d 65) (<= d 75)) (setq b 20 t1 7.5 t2 4.9))((and (> d 75) (<= d 85)) (setq b 22 t1 9.0 t2 5.4))((and (> d 85) (<= d 95)) (setq b 25 t1 9.0 t2 5.4))((and (> d 95) (<= d 110)) (setq b 28 t1 10.0 t2 6.4))((and (> d 110) (<= d 130)) (setq b 32 t1 11.0 t2 7.4)))(command "circle" pt0 "d" d)(command "zoom" "a")(setq s1 (ssget "l" ))(setq di (-(* (/ d 2.0) (/ d 2.0)) (* (/ b 2.0) (/ b 2.0)))dx (sqrt di)dy (/ b 2.0)pt1 (list (+ (car pt0) dx) (+ (cadr pt0) dy)))(initget "Zc Lc");Zc表示画轴键槽的剖视图,Lc表示画轮毂键槽的端面视图(setq zrl (getkword "\n 画轴键槽的剖视图还是轮毂键槽的端面视图(Z/L)?"))(if (= zrl "Zc")(progn;计算轴键槽上点的坐标(setq pt2 (list (+ (car pt0) (-(/ d 2.0) t1)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 0 (- dx (- (/ d 2.0) t1)))));progn);if(if (= zrl "Lc")(progn;计算轮毂键槽上点的坐标(setq pt2 (list (+ (car pt0) (+(/ d 2.0) t2)) (+ (cadr pt0) dy))pt3 (polar pt2 (- (/ pi 2.0)) b)pt4 (polar pt3 (- pi) (- (+ (/ d 2.0) t2) dx))));progn);if(command "pline" pt1 pt2 pt3 pt4 "");画键槽(setq s2 (ssget "l"))(command "layer" "m" 5 "l" "center" 5 "c" 1 5 "")(command "ltscale" 8)(command "line" (polar pt0 (- pi) (+ (/ d 2.0) 10));画中心线(polar pt0 0 (+ (/ d 2.0) 10)) "")(command "line" (polar pt0(-(/ pi 2.0)) (+ (/ d 2.0) 10))(polar pt0 (/ pi 2.0) (+ (/ d 2.0) 10)) "")(command "layer" "s" 0 "")(if (= zrl "Zc")(progn(setq s3 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s3 "");修剪形成键槽(command "hatch" "U" "45" "2" "n" s1 s2 ""));画轴上键槽处剖视图的剖面线);if(if (= zrl "Lc")(progn(setq s4 (entsel "\n 请选择修剪的目标:"))(command "trim" s2 "" s4 "");修剪形成键槽(command "rotate" s1 s2 "" pt0 90));将轮毂键槽的端面视图旋转90度);if);end defun二、螺纹孔剖视图的绘制命令“lwk”在绘制机械零件图时,经常要画螺纹孔的剖视图,同样由于螺纹孔的有关尺寸都随螺纹的公称直径而变化,我们可以用下面的程序自动完成其剖视图的绘制。

AutoLisp入门教程

AutoLisp入门教程

單元一:AutoLISP主角瀟灑登場一. AutoLISP 是何方神聖?1.AutoLISP是AutoCAD的最佳拍檔!2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買!3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』!4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短的時間內,寫出令人驚訝、讚嘆的功能!5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不為過一點也不誇張!6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅力無窮!二. AutoLISP 程式語言的特質分析:學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的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 支援軟體。

autocad-lisp教程

autocad-lisp教程

Lisp教程一.Lisp基础知识二.对话框基础一.基本知识第1节--------------------------------------------------------------------------------基本知识AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50年代末期出现,是一种擅于处理串行文字(List of Processing),属第四代「人工智能(Artificial Intelligence)」的计目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令.AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成.是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言.程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响.数据及程序均统一以串行(List)结构表示.可直接调用几乎全部的AutoCAD命令.既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力.内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境.可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框.缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取.第2节--------------------------------------------------------------------------------函数(Function)在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下:(函数名称参数1 参数2....)e.g. (PRINC "AutoLISP Programming")每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应.左边开括号后紧随函数名称.函数名称与参数之间,或参数与参数之间须最少留一个空格.函数可有一个或多个参数(也可能没有参数),视该函数而定.函数名称不分大小写,即大小写字母视为相同.第3节--------------------------------------------------------------------------------数据型态(Data Type)整数(INT)没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648实数(REAL)带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5当数值在1与-1之间时,必须加上前导零 e.g. 0.05可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6字符串(STR)一般文字,其前后必须加上双引号" e.g. "AutoCAD"控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD"像素名称(ENAME)是指定给图文件内对象的指针(Pointer,为16进位的数字卷标)e.g. <Entity name:14e5180>像素名称在图文件内是唯一的,不会重复对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象档案(FILE)以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量选集(PICKSET)用SSGET等函数建立的一个或多个对象的集合或群组转化(V ARIANT)可将像素名称转换为可与ActiveX配搭使用的VLA-Object对象符号(SYM)用以储存静态数据的名称;例如内建或使用者定义的函数符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外:左括号( 右括号) 句点. 单引号' 双引号" 分号;表(LIST)亦称为串行,是放在一对小括号( ) 内,一个或多个元素的有序集合e.g. (1.0 "Lisp" ( ) (5.6 7))元素可以是字符串,符号,整数或实数;也可以是另一个表元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为0,依此类推表的大小即为其顶层元素的数量(内层嵌套式的表,视为单一元素)点对(Dotted Pair)亦是表的一种;表内有2个元素,中间以一圆点分隔,且元素与圆点之间亦须以空格分开若表内没有任何元素,称为空串行或空表;以( ) 或(NIL) 表示第4节--------------------------------------------------------------------------------变数(Variable)为程序执行中动态储存数据的符号名称;主要分为2类:区域(Local)变量又称为局部变量;该变量只在该程序段落中有效,不能为其它程序使用全域(Global)变量又称为整体变量;变量在所有程序段落中均可使用变量名称与符号的限制相同,使用时宜采用有意义及易于辨别的名称变量在赋值或使用前无须先行设定相同的变量可以储存不同型态的数据(但同一时间内只可储存一种型态)在指定新的数据之前,变量储存的内容会保持不变赋值将数据给予指定的变量储存以内建函数SETQ进行(可用于绘图模式的指令行或AutoLISP程序),其语法如下:(SETQ 变量名称1 资料1 [变量名称2 资料2 ....] )e.g. (SETQ NAME "David" AGE 37 WEIGHT 72.5 POINT (LIST 10 20))在函数名称之后,各参数以两个一组,每组左边为变量名称,右边为存入变量的数据亦可将变量名称赋以空值(NIL) :e.g. (SETQ OCCUPATION NIL)要显示变量所储存的数据,可以使用内建函数PRINC(可用于绘图模式的指令行或AutoLISP程序),其语法如下:(PRINC 变量名称)e.g. COMMAND : (PRINC NAME) Result : David"David"在绘图模式中,亦可于指令行中使用感叹号! 来显示变量内容,或作为指令选项的输入值;语法如下: !变量名称e.g. COMMAND : !NAME Result : "David"在Visual LISP的主控台窗口中,于提示符号_$ 后键入要显示的变量名称_$变量名称e.g. _$NAME要检查变量所储存的数据型态,可使用内建函数TYPE;语法如下:(TYPE 变量名称)e.g. COMMAND : (TYPE NAME) Result : STR若检查的变量没有储存数据,则会传回NIL第5节--------------------------------------------------------------------------------练习(Exercises)将四个坐标分别存入四个变量中,并以LINE或PLINE指令,配合四个坐标变量,画出正四边形. COMMAND : (SETQ POINT1 (LIST 0 0) POINT2 (LIST 0 10) POINT3 (LIST 10 10) POINT4 (LIST 10 0)) COMMAND : LINE ;直线段指令COMMAND : !POINT1 ;第一点(左下角起点)COMMAND : !POINT2 ;第二点(左上角)COMMAND : !POINT3 ;第三点(右上角)COMMAND : !POINT4 ;第四点(右下角)COMMAND : C ;自动联机至起点以关闭四边形画圆: 将圆心坐标及半径长度分别存入两个变量中(变量名称及数据型态自订)COMMAND : (SETQ CEN (LIST 0 0) RAD 20) ;将圆心点设为坐标0,0;半径为20COMMAND : CIRCLE ;执行划圆指令Specify center.... : !CEN ;在提示后以变量CEN响应输入Specify radius.... : !RAD ;在提示后以变量RAD响应输入将不同型态的数据,分多次存入相同的变数内;每次均以PRINC及TYPE函数显示变量内容及其数据型态COMMAND : (SETQ TEMP 1.2) ;将实数1.2存入变数TEMPCOMMAND : !TEMP Result : 1.2COMMAND : (TYPE TEMP) Result : REALCOMMAND : (SETQ TEMP "AutoLISP") ;将字符串存入变量TEMPCOMMAND : !TEMP Result : "AutoLISP"COMMAND : (TYPE TEMP) Result : STR二数值资料第1节--------------------------------------------------------------------------------基本运算加函数(+ [数值参数1 数值参数2 ....] )e.g. (+ 2.5 4 6) Result : 12.5函数的结果为各参数之总和若仅提供一个参数,则以0加上此参数的结果为返回值若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数减函数(- [数值参数1 数值参数2 ....] )e.g. (- 10 2 3) Result : 5结果为第一个(最左边)参数减去其右边各参数的总和若只提供一个参数,返回值为0减去该参数的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数乘函数(* [数值参数1 数值参数2 ....] )结果为所有参数的乘积若只提供一个参数,则返回值为该参数乘以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数除函数(/ [数值参数1 数值参数2 ....] )e.g. (/ 24 2 3) Result : 4结果为第一个(最左边)参数除以其右边各参数的乘积若仅提供一个参数,则返回值为该参数除以1的结果若没有提供任何参数则传回0;各参数须为整数或实数型态若所有参数均为整数,结果亦为整数;若其中一个参数为实数型态,结果会转换为实数注意: 在本篇教程中,各函数的数值参数,均可以变量(储存值只可以是整数或实数,且不可以是空值nil)取代第2节--------------------------------------------------------------------------------练习(Exercises)计算式(2+4)*3COMMAND : (* 3 (+ 2 4)) Result : 18计算式(50-8*5)/4COMMAND : (/ (- 50 (* 8 5)) 4) Result : 2注意: 上式的正确答案应是2.5,因为函数中的各参数均为整数,所以传回的结果亦为整数递增及递减递增(1+ 数值参数)e.g. (1+ 2) Result : 3递减(1- 数值参数)e.g. (1- 4) Result : 3三角函数(Trinagular Function)正弦值(SIN 弧度参数)e.g. (SIN 1) Result : 0.841471余弦值(COS 弧度参数)e.g. (COS 1) Result : 0.540302反正切值(A TAN 弧度参数)e.g. (ATAN 1) Result : 0.785398第3节--------------------------------------------------------------------------------其它数值处理次方值(EXPT 数值参数次方值)e.g. (EXPT 2 4) Result : 16若参数及次方值两个均为整数,返回值亦是整数;若其中一个为实数,结果为实数开方根(SQRT 数值参数)e.g. (SQRT 30) Result : 5.47723(ABS 数值参数)e.g. (ABS -123) Result : 123余数(REM [数值参数1 数值参数2 ....] )e.g. (REM 50 26 5) = (REM (REM 50 26) 5) Result : 4将参数1整除参数2的余数若参数多于2个时,则会将余数再整除下一个参数,再得出余数;依此类推若其中一个参数为实数时,则结果为实数;否则为整数最大公约数(GCD 数值参数1 数值参数2 )e.g. (GCD 81 57) Result : 3两个参数均必须为整数值型态自然对数(LOG 数值参数)e.g. (LOG 3.5) Result : 1.25276是EXP函数的反函数;传回值为实数型态自然反对数(EXP 数值参数)e.g. (EXP 1.25276) Result : 3.49999是LOG函数的反函数;传回值为实数型态第4节--------------------------------------------------------------------------------数值资料转型实数转整数(FIX 数值参数)e.g. (FIX 12.56) Result : 12只会截去小数部份(小数字不会4舍5入)整数转实数(FLOAT 数值参数)e.g. (FLOAT 12) Result : 12.0整数转字符串(ITOA 数值参数)e.g. (ITOA -17) Result : "-17"数值转字符串(RTOS 数值参数[模式[小数字] ] )e.g. (RTOS 17.23333 2 3) Result : 12.266若不设定模式,则依系统变量LUNITS 的设定值转换数值为字符串若不设定小数字,则依系统变量LUPREC 的设定值转换模式设定值可以是下列数值之一:1 = 科学记号2 = 十进制3 = 英呎及十进制英吋4 = 英呎及分数位英吋5 = 分数当选用的模式为3,4或5,则传回的字符串受系统变量UNITMODE影响(ANGTOS 角度参数[模式[小数字] ] )e.g. (ANGTOS 0.785398 0) Result : "45"e.g. (ANGTOS 0.785398 4) Result : "N 45d E"若不设定模式,则依系统变量AUNITS的设定值转换数值为字符串若不设定小数字,则依系统变量AUPREC的设定值转换模式设定值可以是下列数值之一:0 = 度1 = 度/分/秒2 = 分度量3 = 弪度4 = 土地测量单位当选用的模式为4,则传回的字符串受系统变量UNITMODE影响反函数为ANGTOF;参阅第5篇教程第5节--------------------------------------------------------------------------------数值资料检查数值(NUMBERP 数值参数)e.g. (NUMBERP -3.45) Result : Te.g. (NUMBERP "AutoLISP") Result : nil注意: 在范例的传回值中,T表示函数的结果为真(成立),nil表示结果为假(不成立)负数值(MINUSP 数值参数)e.g. (MINUSP -3.45) Result : Te.g. (MINUSP 0) Result : nile.g. (MINUSP 3.45) Result : nil零值(ZEROP 数值参数)e.g. (ZEROP 0) Result : Te.g. (ZEROP 3.45) Result : nil其它应用最大值(MAX [数值参数1 数值参数2 ....] )e.g. (MAX -88 5 2) Result : 5若没有提供任何参数,则传回值为0最小值(MIN [数值参数1 数值参数2 ....] )e.g. (MIN -88 5 2) Result : -88若没有提供任何参数,则传回值为0第6节--------------------------------------------------------------------------------练习(Exercises)计算下列算式:(+ 1234567890 1234567890) Result : -1825831516上式中两个数值参数均为整数,而结果值大于整数型态所能容许之范围;固导致发生溢位问题,产生无效的结果.修正算式如下: 只要将其中一个参数改为实数型态即可.(+ 1234567890.0 1234567890) Result : 2.46914e+009(+ 9876543210 1234567890) Result : 1.11111e+010上式中两个数值参数均为整数,但其中一个(第一个)参数巳大于整数型态所能容许之范围;系统会自动将此参数先行转为实数型态才计算.计算下列算式:(FIX (SQRT (+ 1 (MAX 20 10 40 30)))) Result : 6---- 最先执行的是最内层的算式(MAX 20 10 40 30) ,求出最大值为40---- 其次执行加函数,将MAX函数所得的最大值加1,结果为41---- 再利函数SQRT,将41开方根,结果为6.4031---- 最后使用FIX函数,截去其小数字,得到最后的结果为6三程序设计第1节--------------------------------------------------------------------------------使用者定义函数是将一群表示式组合成一个函数或指令可应用于绘图模式的指令行提示,Visual LISP主控台,或供其它自定义函数内的表示式呼叫使用AutoLISP原始程序代码均以纯文字格式存盘,扩展名为LSP(2000版可编译成扩展名为FAS的档案可以一般文字编辑器进行开发,如DOS的EDIT,WINDOWS的WORD或WORDPAD等一个自定函数内最少要有一个表达式在原程序文件(LSP)里,自定义函数以DEFUN函数开始;其语法如下:(DEFUN [C:] 函数名称( [自变量串行...] [/ 局部变数串行...] ) 表达式...)在呼叫带有自变量的自定函数时,必须同时提供与定义函数时,同等数量的参数,使各参数传入自定函数的各自变量中自变量被视为一种特殊类型的局部变量,无法用于该自定函数以外的其它函数若自定函数中无须设定任何自变量,亦必须以空串行( )加在函数名称之后若有提供局部变量,必须以斜线/ 加在局部变量的开头(即使前面没有自变量串行)各自变量,斜线,局部变量之间要以空格分隔;但与左右小括号之间则不须以空格分开若自变量串行中有相同名称的自变量出现,则会忽略第一个以后的相同自变量;变数亦是一样若在函数名称前加上C:,表示该函数可以在绘图模式的指令行提示下,其执行方式与内建函数相同;亦可以在任何内建命令(执行中)的提示后,以通透方式执行(但须将函数名称包在一对小括号中) 若在函数名称前没有加上C:,在指令行提示下,必须将函数名称包在一对小括号中才可执行不可以在执行一自定函数时,以通透方式执行另一自定函数第2节--------------------------------------------------------------------------------加载程序自定函数在使用前,都要将其所在的程序文件(扩展名为LSP)加载才可执行ACAD.LSP程序文件(预设在SUPPORT子目录内)会在启动AutoCAD时自动加载(LOAD "程序文件名称" [加载失败] )e.g. (LOAD "TEST")若程序文件之文件名为LSP,则在程序文件名称之后,可以不加上扩展名若有需要,系统会顺序尝试其它的扩展名: VLX FAS LSP若程序文件不在系统的支持目录下,则需在文件名前加上目录路径注意: 必须以正斜线/ 或两个反斜线\\ 作为目录的分隔符可以在加载失败的参数中提供字符串,以供加载失败时显示;亦可提供有效的自定函数,该函数在加载程序文件失败时会被执行注意:在程序文件加载后,在提示行显示的返回值,一般是该程序文件中,最后被定义的函数名称或是在程序文件内没有包含在自定函数中,最后一个表达式的执行结果第3节--------------------------------------------------------------------------------练习(Exercises)启动文字编辑器,编写一AutoLISP程序作两个同心圆(第1个圆半径为50,第2个圆半径为80),程序代码如下所示:(DEFUN C: 2CIRCLE () (SETQ CEN (LIST 0 0) RAD 50)(COMMAND CIRCLE CEN RAD)(COMMAND CIRCLE CEN (+ RAD 30)))---- 输入后以纯文字格式存盘(C:\TEST.LSP)---- 在AutoCAD绘图模式的指令行提示后,用LOAD函数将程序文件加载COMMAND : (LOAD "C:/TEST")---- 在指令行提示后,输入程序(函数)名称执行COMMAND : 2CIRCLE程序说明1 使用DEFUN建立自定函数的名称,并用SETQ函数将中心点(LIST 0 0)存入变数CEN,半径(50)存入变数RAD中2 使用COMMAND函数执行AutoCAD内建指令CIRCLE,并以变量CEN(圆的中心点)及变数RAD(圆的半径)回应3 与第2行大致相同,但在指定其半径时,先将储存半径的变量加30,使划出半径为80的圆;注意最右边的关括号,与第1行DEFUN左边的开括号是一对的启动文字编辑器,开启TEST.LSP程序文件,复制2CIRCLE至新程序2C,并改为传入自变量方式执行;程序代码如下:(DEFUN 2C (CEN RAD) (COMMAND CIRCLE CEN RAD)(COMMAND CIRCLE CEN (+ RAD 30)))---- 输入后以纯文字格式存盘---- 在AutoCAD绘图模式的指令行提示后,用LOAD函数将程序文件重新加载---- 在指令行提示后,输入程序(函数)名称执行COMMAND : (2C (LIST 0 0) 50)第4节--------------------------------------------------------------------------------批注单行批注分号;表示在分号右边(同一行)的字符均为批注,程序执行时会将其忽略多行批注;| |;表示在两个批注符号中间所有字符皆为批注,即使字符跨越多行关系运算在各个关系运算中,都会传回一逻辑值;若关系成立,传回T,否则会传回nil各参数可以是字符串,整数或实数型态;若以字符串进行比较,则会以字符串的ASCII码为准若函数中只有一个参数,传回值恒为T等于函数(= 参数1 [参数2 ....] )会将参数1与其后各个参数比较,若全部相等则传回T,否则传回nil e.g. (= 2 2.0) Result : T不等于函数(/= 参数1 [参数2 ....] )若参数1不等于其后任何一个参数,即传回T e.g. (/= 1 2.0) Result : Te.g. (/= "a" CHR(65)) Result : Te.g. (/= 10 30 40 10 20) Result : T小于函数(< 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均小于右边的参数,即传回Te.g. (< 1 2) Result : Te.g. (< "a" CHR(65)) Result : T大于函数(> 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均大于右边的参数,即传回Te.g. (> 1 2) Result : nile.g. (> "a" CHR(65)) Result : nil小于或等于函数(<= 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均小于或等于右边的参数,即传回Te.g. (<= 1 2) Result : Te.g. (<= 2 2) Result : Te.g. (<= "a" CHR(65)) Result : T大于或等于函数(>= 参数1 [参数2 ....] )各参数顺序以2个为一组比较,若各组左边的参数均大于或等于右边的参数,即传回Te.g. (>= 1 2) Result : nile.g. (>= 2 2) Result : Te.g. (>= "a" CHR(65)) Result : nil第5节--------------------------------------------------------------------------------逻辑运算且运算(AND [表达式....] )若各表达式的传回值均为T,函数即返回T 值;若其中一个传回值为nil,函数传回nile.g. (AND (< 1 2) (> 8 5)) Result : T或运算(OR [表达式....] )若各表达式的传回值均为nil,函数即返回nil 值;若其中一个传回值为T,函数传回Te.g. (OR (> 1 2) (> 8 5)) Result : T否定运算(NOT 表达式)若表达式的传回值为T,函数即返回nil 值;相反若表达式传回值为nil,函数传回T 可用于检查传回值是否为nil另有一NULL函数与NOT函数功能相似e.g. (NOT (< 1 2)) Result : nil练习(Exercises)COMMAND : (= (- 50 25) (SQRT 625)) Result : T设计一简单程序(名称为AIR),在呼叫程序时,检查传入的数值自变量(为空气污染指数)是否大于200(即严重空气污染)---- 启动文字编辑器,开启TEST.LSP程序文件,输入下列程序代码:(DEFUN AIR (NUM) (> NUM 200))---- 输入后存盘(纯文字格式)---- 在AutoCAD绘图模式的指令行提示符号后,使用LOAD函数重新加载程序文件COMMAND : (LOAD "C:/TEST")---- 在AutoCAD绘图模式的指令行提示符号后,输入自定函数名称及参数执行COMMAND : (AIR 175) Result : nilCOMMAND : (AIR 215) Result : T四流程控制第1节--------------------------------------------------------------------------------条件判断是利用条件函数,配合关系及逻辑运算所设定的一些准则,令程序自行分析,因应情况作出适当行动.单一条件(IF 条件表达式是表达式[否表达式] )函数先检查条件表达式,若其传回值为T,便会执行其后的是表达式若有提供否表达式,且条件表达式的传回值为nil,函数将不会执行(跳过)是表达式而执行否表达式若没有提供否表达式,且条件表达式的传回值为nil时,函数将不作任何事情IF函数可以巢状方式嵌套,即在是或否的表达式中加入另一个IF函数练习(Exercises)判断空气污染指数: 大于100 = Very High, 51至100 = High, 26至50 = Medium, 25或以下= Low---- 启动编辑器,开启C:/TEST.LSP程序文件;新增AIR-1自定函数,程序代码如下:(DEFUN AIR-1 (NUM) (IF (> NUM 100) (PRINC "Very High"))(IF (AND (> NUM 50) (<= NUM 100)) (PRINC "High"))(IF (AND (> NUM 25) (<= NUM 50)) (PRINC "Medium"))(IF (<= NUM 25)) (PRINC "Low"))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于100;若是则显示字符串Very High响应2 用IF函数判断变量NUM是否大于50且(AND)小于或等于100;若是则显示High响应3 用IF函数判断变量NUM是否大于25且(AND)小于或等于50;若是则显示Medium4 用IF函数判断变量NUM是否小于或等于25;若是则显示Low5 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号IF函数的巢状练习: 修改上一课的程序练习,将多个IF函数合并成巢状嵌套---- 启动文字编辑器,开启C:/TEST.LSP程序文件---- 新增程序AIR-2,其程序代码如下:(DEFUN AIR-2 (NUM) (IF (> NUM 50) (PRINC (IF (> NUM 100) "Very high" "High"))(PRINC (IF (> NUM 25) "Medium" "Low")))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于50;若条件成立(变量NUM大于50)时,再用另一个IF函数判断变量是否大于100;若条件成立(变量NUM大于100)时,使用PRINC函数显示字符串Very High,否则显示High2 若在第1个IF函数判断中,条件不成立(变量NUM不大于50)时;再用另一个IF函数判断变量是否大于25;若条件成立(NUM大于25)时,显示字符串Medium,否则显示字符串Low3 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号注意:第1行最后一个关括号是对应前面的PRINC函数,尾2的关括号则是对应IF函数(判断NUM是否大于100)第2行最后一个关括号是对应第1行的IF函数(判断NUM是否大于50),尾2的关括号则是对应PRINC 函数,尾3的关括号则是对应IF函数(判断NUM是否大于25)最右边的关括号是对应第1行最左边的开括号PROGN 函数在以上各范例中,执行的表达式均为单一的函数运算;若要在表达式中顺序执行一连串的函数,便要将各函数包含在一个PROGN函数内;函数的传回值会是该PROGN函数中,最后一个表达式的运算结果---- 修改TEST.LSP程序文件的AIR-1程序,第1个IF函数如下,其余的IF函数请自行修改e.g. (IF (> NUM 100) (PROGN (SETQ DISP "Very High") (PRINC DISP)))注意: 最后一个关括号是对应前面的IF函数(判断变量NUM是否大于100)尾2的关括号是对应PROGN函数(用以包含SETQ及PRINC函数)尾3的关括号是对应PRINC函数的第2节--------------------------------------------------------------------------------条件判断多重条件(COND [ (条件表达式是表达式) ....] )函数会顺序检查各条件表达式;直到其中一个条件成立(传回T),即执行该条件式所对应的是表达式每个条件表达式只对应一个是表达式,而没有否表达式若条件式成立且执行对应的是表达式后,则不会再对余下的其它条件表达式进行检查若只有条件表达式而没有对应之是表达式,则只会传回条件表达式的逻辑值若没有提供任何条件表达式及是表达式,函数传回值恒为nil练习(Exercises)新增程序AIR-3,以改善上一课AIR-1程序;用一个COND函数判断多个条件表达式DEFUN AIR-3 (NUM) (COND((> NUM 200) (PRINC "Severe"))((> NUM 100) (PRINC "Very High"))((> NUM 50) (PRINC "High"))((> NUM 25) (PRINC "Medium"))((> NUM 0) (PRINC "Low"))(T (PRINC "Cannot Check")))(PRINC))程序说明1 设定函数名称,并将数据存入自变量NUM内;用COND函数进行多重判断2 判断变量NUM是否大于200,若条件成立,则显示Severe 讯息;第3至6行依此类推7 注意条件式为一个T 字母,表示条件式恒为真(成立),显示讯息Cannot Check作用是当以上各条件式均不成立时(变量小于或等于0),即执行此一表达式第3节--------------------------------------------------------------------------------循环(Loop)配合条件判断,关系及逻辑运算,令程序不断重复一些动作,以提高效率及减少重复动作时的人为错误可以多个循环形成巢状(嵌套式)循环,即在一个循环内嵌套另一个(或多个)循环指定的重复次数必须为正整数,亦可以是储存正整数的变量名称重复指定次数(REPEAT 重复次数[表达式....] )e.g. (REPEAT 10 (PRINC "David")) ;重复显示David字符串10次重复(WHILE 条件表达式[是表达式....] )若条件表达式的传回值为T,即会顺序执行函数内各表达式各表达式顺序执行完后,程序会返回函数的开头,重新检查条件表达式的传回值若条件表达式的传回值为nil,函数内各表达式将不会被执行e.g. (SETQ COUNT 1) ;将1存入变数COUNT(WHILE (<= COUNT 10) ;WHILE函数并检查变量COUNT是否<=10(PRINC "David") ;若条件成立则以PRINC函数显示David字符串(SETQ COUNT (1+ COUNT))) ;变量COUNT递增1,并将新值重新存入变量COUNT中取代原值注意: 第4行最右边的关括号,是对应第2行WHILE函数的开括号无限循环又称为死循环,即循环的条件判断式传回值恒为T,令循环不断重复而无法结束;在上例中:---- 若WHILE函数的条件表达式设定为(T) ;即条件永远成立---- 不作SETQ函数,或不将变量COUNT递增;变量COUNT储存值恒久不变,导致条件式永远成立第4节--------------------------------------------------------------------------------练习(Exercises)编写一程序SUM并将自变量存在NUM变量内,计算1+2+3+4 ....至变数NUM的总和(DEFUN SUM (NUM) (SETQ COUNT 1 TOTAL 0)(WHILE (<= COUNT NUM)(SETQ TOTAL (+ TOTAL COUNT)COUNT (1+ COUNT)))(PRINC TOTAL) (PRINC))程序说明1 设定函数SUM并将自变量存入变量NUM,设定变量COUNT以将数目由1开始递增,变量TOTAL(储存总和)初始值为0。

五个实用的AutoCAD的lisp程序

五个实用的AutoCAD的lisp程序

五个实用的AutoCAD的lisp程序1、计算CAD图形中所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度)(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、标注CAD图形中所有线段(加载后只需框选所有线段便可得标注这些线段)(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);;获取系统参数textsize(setq shh (getvar "textsize"))(setq str_hh (strcat "\n文字高度 <" (rtos shh 2) ">: "))(setq hh (getdist str_hh))(while hh(setvar "textsize" hh)(setq hh nil));;输入标注文字高度;;循环开始(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(princ (strcat "\n长度=" (rtos dd 2)));;寻找代表图层的字符串(setq aa (assoc 0 endata));;获取图层名称(setq aa1 (cdr aa));;判断线条种类(cond((= aa1 "SPLINE");;如果是spline(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss))(setq startPnt1 (vla-get-ControlPoints arcObj))(setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))((= aa1 "LWPOLYLINE");;如果是LWPOLYLINE(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-Coordinates arcObj)) (setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))(t;;如果是其他种类线条(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-StartPoint arcObj));;获取起点(setq endPnt1 (vla-get-EndPoint arcObj));;获取终点(setq pp1(vlax-safearray->list (vlax-variant-value startPnt1)))(setqpp2 (vlax-safearray->list (vlax-variant-value endPnt1)) ))))(setq x1 (car pp1))(setq y1 (cadr pp1))(setq z1 (caddr pp1))(setq x2 (car pp2))(setq y2 (cadr pp2))(setq z2 (caddr pp2))(setq x (/ (+ x1 x2) 2))(setq y (/ (+ y1 y2) 2))(setq z (/ (+ z1 z2) 2))(setq pt (list x y z));;取得线段两端的中点(setq ang (angle pp1 pp2));;获取角度(if (> (* (/ ang pi) 180) 180)(setq ang (+ ang pi)))(command "text""j""bc"pt""(* (/ ang pi) 180)(strcat "" (rtos dd 2))"")(setq i (1+ i)))(prin1))(prompt "\n <>在图中直接写出长度") (prin1)3、连续打断程序(defun c:br1 ()(command "break" pause "f" pause "@"))4、将CAD文字导入Excel表格(defun c:Q2()(setq ffn (getfiled "写出文件" "" "xls" 1))(princ "\n选取文字...")(setq ss (ssget))(setq ff (open ffn "w"))(setq i 0)(repeat (sslength ss)(setq ssn (ssname ss i))(setq ssdata (entget ssn))(setq sstyp (cdr (assoc 0 ssdata)))(if (or (= sstyp "TEXT") (= sstyp "MTEXT"))(progn(setq txt (cdr (assoc 1 ssdata)))(princ txt ff)(princ "\n" ff)))(setq i (1+ i)))(close ff)(princ (strcat "\n写出文件: " ffn))(prin1))5、删除带颜色图元以下程序在别人的贴子里贴过.为了说明问题,今天再贴一次。

autolisp实用编程四例

autolisp实用编程四例

autolisp实用编程四例江苏崔华明autocad是一个功能强大的通用图形设计软件,其内嵌的autolisp语言为用户进行二次开发提供了方便。

下面就介绍几则用autolisp编写的实用程序,这些程序相当于新增的autocad命令,可以弥补autocad本身的一些不足,为日常使用带来方便。

1.快速更改文本的大小在标准的autocad中,要更改已有文本的大小,需要使用change命令。

该命令的缺陷是:即使只更改文本的大小,也要重新确认文本的插入点、字型、倾斜角等一系列参数。

也就是说,除输入文本的新高度值外,还需要按5次回车键才能完成一个文本的更改!而且每次只能修改一个文本。

这对于同时更改多个文本的大小非常不便。

本文的autolisp程序使这一工作变得十分方便和快捷。

使用方法如下:在autocad的command提示下,打入命令:cthautocad将提示“selectobjects:”,这时可以使用autocad允许的任意方式选择目标。

对于有多个文本需要更改的情况,使用窗口选择比较方便,而且你不用担心选择窗口中包含了非文本目标,程序能够自动在选择的目标中查找出文本实体,并只对文本进行更改。

选择目标后,autocad提示“newtextheight:”,这时输入一个新的文本高度值然后回车,则所有选中的文本被更改成新设定的高度。

2.延伸直线的长度在实际使用中,常常要将一条直线延伸指定的长度。

通常的做法是:在需要延伸的直线的端点画一个辅助圆,圆的半径等于直线要延伸的长度,然后使用extend命令将直线延伸到与圆相交,最后删除辅助圆。

本文的autolisp程序将使你非常容易地实现这一点。

你只需选择要延伸的直线并输入要延伸的长度即可,其余的工作由程序自动完成。

使用方法如下:在autocad的command提示下,打入命令:stl然后根据提示选择要延伸的直线(选择点要靠近直线需要延伸的端点),并输入延伸的长度。

一步步学AutoLisp(二)

一步步学AutoLisp(二)

一步步学AutoLisp(二)在第一步中我们是在CAD命令行中进行一些练习,这显然无法满足我们正常的使用要求,所以我们一般将程序写成文件,LISP程序文件的扩展名为“.lsp”。

在AutoCAD2004及以后的CAD中有专门的软件编写程序Visual Lisp,也可以用普通的文本编写软件如记事本进行编写,但文件的扩展名一定要是“.lsp”。

为使大家能对lsp文件的使用有更好的理解,本文一律按使用普通文本编辑器编写的方式进行描述。

打开文本编辑器编写一个文件,文件名为“key.lsp”,将文件保存到C盘根目录下。

键入如下一行程序:(defun c:cm() (command "COPY" pause "" "m"))保存后,在CAD命令行键入:(load"c:/key"),即可将key.lsp调入CAD,返回c:cm。

如下图:在命令行键入“cm”可以执行对一个图元进行多次拷贝的命令,在lisp程序中函数及参数不区分大小写,但参数的返回值有大小之分。

先对程序进行解读:defun 定义函数的函数,后面的c:cm是一个函数的名称。

c:cm 自我定义的函数名称,带“c:”的函数是可以作为操作命令的函数,我们姑且将这类函数称为命令函数。

如果没有“c:”,只有“cm”,则得到的返回值是“cm”,在命令行键入“cm”则不会执行前面的多重拷贝操作。

键入“(cm)”就会执行该操作,我们就称之为一般函数。

() 这个空括弧是用来填写参数的,由于我们的这段程序没有用到任何其他参数,所以括弧内是空的。

command 调用CAD原有命令的函数,这是lsp程序中应用非常多的一个函数,许多操作可以直接调用CAD自己的命令,不许再重新编写。

"copy" 调用的CAD命令名称,名称与前面的command之间有没有空格都可以,而且要用命令全名,不能用简化命令,而且要用引号。

AutoLISP开发用命令

AutoLISP开发用命令

命令修饰符命令.....COLOR 定义新对象的颜色COMPILE 编译形文件和PostScript字体文件CONE 创建三维实体圆锥CONVERT 优化AutoCAD R13或更早版本创建的二维多段线和关联填充CONVERTCTB 将颜色相关打印样式表(CTB)转换为命名打印样式表(STB) 2002版新增CONVERTPSTYLES 将当前图形的颜色模式由命名打印样式转换为颜色相关打印样式 2002版新增COPY 复制对象COPYBASE 带指定基点复制对象COPYCLIP 将对象复制到剪贴板 Ctrl+C键COPYHIST 将命令行历史记录文字复制到剪贴板COPYLINK 将当前视图复制到剪贴板中CUSTOMIZE 自定义工具栏、按钮和快捷键 2000i版新增CUTCLIP 将对象复制到剪贴板并从图形中删除对象 Ctrl+X键CYLINDER 创建三维实体圆柱DBCCLOSE 关闭“数据库连接”管理器DBLCLKEDIT 控制双击对象时是否显示对话框 2000i版新增DBCONNECT 为外部数据库表提供AutoCAD接口 Ctrl+6键DBLIST 列出图形中每个对象的数据库信息DDEDIT 编辑文字和属性定义DDPTYPE 指定点对象的显示模式及大小可透明使用DDVPOINT 设置三维观察方向DELAY 在脚本文件中提供指定时间的暂停可透明使用DIM(或DIM1)进入标注模式DIMALIGNED 创建对齐线性标注DIMANGULAR 创建角度标注DIMBASELINE 创建基线标注DIMCENTER 创建圆和圆弧的圆心标记或中心线DIMCONTINUE 创建连续标注DIMDIAMETER 创建圆和圆弧的直径标注DIMDISASSOCIATE 删除指定标注的关联性 2002版新增DIMEDIT 编辑标注DIMLINEAR 创建线性尺寸标注DIMORDINATE 创建坐标点标注DIMOVERRIDE 替换标注系统变量DIMRADIUS 创建圆和圆弧的半径标注DIMREASSOCIATE 使指定的标注与几何对象关联 2002版新增DIMREGEN 更新关联标注 2002版新增DIMSTYLE 创建或修改标注样式DIMTEDIT 移动和旋转标注文字DIST 测量两点之间的距离和角度可透明使用DIVIDE 定距等分DONUT 绘制填充的圆和环DRAGMODE 控制AutoCAD显示拖动对象的方式可透明使用DRAWORDER 修改图像和其他对象的显示顺序DSETTINGS 草图设置DSVIEWER 打开“鸟瞰视图”窗口DVIEW 定义平行投影或透视视图DWGPROPS 设置和显示当前图形的特性DXBIN 输入特殊编码的二进制文件EATTEDIT 增强的属性编辑 2002版新增EATTEXT 增强的属性提取 2002版新增EDGE 修改三维面的边缘可见性EDGESURF 创建三维多边形网格ELEV 设置新对象的拉伸厚度和标高特性可透明使用ELLIPSE 创建椭圆或椭圆弧ENDTODAY 关闭“Today(今日)”窗口 2000i版新增ERASE 从图形中删除对象 Del键ETRANSMIT 创建一个图形及其相关文件的传递集 2000i版新增EXPLODE 将组合对象分解为对象组件RMAT 管理渲染材质RMLIN 从RML文件将插入图形 2000i版新增ROTATE 绕基点移动对象ROTATE3D 绕三维轴移动对象RPREF 设置渲染系统配置RSCRIPT 创建不断重复的脚本RULESURF 在两条曲线间创建直纹曲面SAVE 用当前或指定文件名保存图形 Ctrl+S键SAVEAS 指定名称保存未命名的图形或重命名当前图形SAVEIMG 用文件保存渲染图像SCALE 在X、Y和Z方向等比例放大或缩小对象SCALETEXT 改变指定文字的大小并保持其位置不变 2002版新增SCENE 管理模型空间的场景SCRIPT 用脚本文件执行一系列命令可透明使用SECTION 用剖切平面和实体截交创建面域SELECT 将选定对象置于“上一个”选择集中SETUV 将材质贴图到对象表面SETVAR 列出系统变量或修改变量值SHADEMODE 在当前视口中着色对象SHAPE 插入形SHELL 访问操作系统命令SHOWMAT 列出选定对象的材质类型和附着方法SKETCH 创建一系列徒手画线段SLICE 用平面剖切一组实体SNAP 规定光标按指定的间距移动可透明使用SOLDRAW 在用SOLVIEW命令创建的视口中生成轮廓图和剖视图SOLID 创建二维填充多边形SOLIDEDIT 编辑三维实体对象的面和边SOLPROF 创建三维实体图像的剖视图SOLVIEW 在布局中使用正投影法创建浮动视口来生成三维实体及体对象的多面视图与剖视图SPACETRANS 在模型空间和图纸空间之间转换长度值 2002版新增SPELL 检查图形中文字的拼写可透明使用SPHERE 创建三维实体球体SPLINE 创建二次或三次(NURBS)样条曲线SPLINEDIT 编辑样条曲线对象STANDARDS 管理图形文件与标准文件之间的关联性 2002版新增STATS 显示渲染统计信息STATUS 显示图形统计信息、模式及范围可透明使用STLOUT 将实体保存到ASCII或二进制文件中STRETCH 移动或拉伸对象STYLE 设置文字样式可透明使用STYLESMANAGER 显示“打印样式管理器”SUBTRACT 用差集创建组合面域或实体SYSWINDOWS 排列窗口TABLET 校准、配置、打开和关闭数字化仪TABSURF 沿方向矢量和路径曲线创建平移曲面TEXT 创建单行文字TEXTSCR 打开AutoCAD文本窗口可透明使用TIME 显示图形的日期及时间统计信息可透明使用TODAY 打开“今日”窗口 2000i版新增TOLERANCE 创建形位公差标注TOOLBAR 显示、隐藏和自定义工具栏TORUS 创建圆环形实体TRACE 创建实线TRANSPARENCY 控制图像的背景像素是否透明TREESTAT 显示关于图形当前空间索引的信息可透明使用TRIM 用其他对象定义的剪切边修剪对象U 放弃上一次操作UCS 管理用户坐标系UCSICON 控制视口UCS图标的可见性和位置。

AutoCAD Autolisp语言

AutoCAD Autolisp语言
… (<条件n (cdr<表>) (last<表>) (nth<n><表>) (list<表达式>…)
(getint<提示>) (getreal<提示>) (getstring<提示>) (getpoint<提示>)
(getcorner<点><提示>) (getangle<提示>)
局部变量
如果不想计算结果保留下来,可以申明 局部变量 (defun x3(x/yy) (setq yy (* x x x)) ) 执行之后会出现yy这个全局变量,一直 存在于内存之中。可以用!yy查询
自定义一个绘制圆的函数
(defun c:My-circle()
(setq pt (list 100 100)) ;;; 得到圆心坐标
(setq ans (/ 3 2)) )
建立一个小程序用于计算平方 X2.lsp (defun x2(x)
(* x x) ) X是一个参数
全局变量
如果想要计算结果保留下来,可以将上 面这个程序改一下 (defun x2(x) (setq yy (* x x)) ) 执行之后会出现yy这个全局变量,一直 存在于内存之中。可以用!yy查询
(and<表达式>…) (or<表达式>…) (not<项>)
(itoa <整型数>) (atoi <字符串>)
(atof <字符串>) (fix <数>) (float<数>)
(itoa <整型数>) (atoi <字符串>)

AutoLISP语言编制AutoCAD实用程序

AutoLISP语言编制AutoCAD实用程序

些 小 程 序 段 串 联 起 来 实 现 界 面 化 与 系 统


P C
P l
p 3


中 国科教创新 导刊
C i d c t n In v t n H r l h a E u a i no a i ead n o o
19 6
( e q P8 ( Ol P7 4 1 6) st P a r . )
(o c mma d ” l e n p i ”p ” n 3 h” 0 2 0 2 P1 . .
行 修 改 和扩 充 。 A t CAD 台上 进 行应 言 编 制 基 准 标 注 的 参 数 化 绘 图 的 程 序 。 在 uo 平 通 根据 基准 点给 P 参 数 赋 值 5 过 实例 来 分析 Au o I P 序 语言 的 程序 结 tL S 程
标 注应 用 的要 求 。 用 L SP语 言 可 以 方 便 利 I 地调 用 Au o t CAD的 绘 图命 令 , 使设 计 和 绘 接 访 问 、 改 , 现 对 屏 幕 图 形 的 实 时 修 修 实
( m n ” r e p ) c ma d c c ” 7 3 o il
圆命 令 绘 制 圆弧 半 径 为 3 心 为P7 圆
( e q P3 ( 1 P1 a 3 ) St P0 ar )
最基 本 的数 据类 型是 符 号表 达 式 (y oi S mb l 根 据 基 准 点 给 P 参 数 赋 值 c 3
(e q 4 ( o a P1 ( a i 3 ) st p p lr + p ) ) 参 户编 写 的 函 数 , 实现 命 令 的 扩 展 与 增加 。 下 根据 基 准 点 给P4 数 赋值

每天一个命令学习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教程

第十四章AutoLISP14.1 关于AutoLISPAutoLISP是由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调用AutoCAD绘图命令

AutoLISP调用AutoCAD绘图命令

AutoLISP调用AutoCAD绘图命令画直线段(command “line”p1 p2 p3 “”)(command “line”p1 p2 p3 “C”)画圆(command “circle”p0 R)(command “circle”p0 “D”D)(command “pline”p1 p2 “A”p3 “L”p4 “A”p5 “L”p6 “”)(弧沿逆时针方向绘制,且自动与直线相切。

)画边数为sides的正多边形(command “polygon”sides “E”p1 p2)(已知多边形某边所在两点)(command “polygon”sides p0 “I”p)(多边形内接于P点所在的圆)(command “polygon”sides p0 “C”p)(多边形外切于P点所在的圆)(command “donut”D1 D2 p0 “”)画椭圆(command “ellipse”p1 p2 p3) (command “ellipse”“c”p0 p1 p2)画弧(command “arc”p1 p2 p3)(三点画弧)(command “arc”ps “c”p0 pe)(默认沿逆时针方向画弧)(command “arc”ps “c”p0 “A”A)(角度A以逆时针方向为正)书写文字(command “text”p H A “技术要求” )(左对齐)(command “text”“c”p H 0 “技术要求” )(居中对齐,字高为H)(command “text”“A”p1 p2 “技术要求” )(两边对齐,字高为默认值)目标选择“L”: 选择最后一个实体对象(Last选择)“W”p1 p2 : 选择以p1和p2为角点的矩形内的实体对象(Window选择)p : 选择p点所在的实体对象(point选择)打剖面线(command “hatch”“u” A dist “N”“w”p1 p2 “”)(command "bhatch" p "p" "u" A dist "" "") (此行中p是区域内一点) 镜像实体对象(command “mirror”目标选择“”p1 p2 “”)阵列(command “array”目标选择“”“R” 3 4 x y)(复制3行4列)(command “array”目标选择“”“p”p0 N 360 “”)(阵列份数为N)。

AutoLISP编程

AutoLISP编程

AutoLISP编程第五篇机械CAD/CAM技术实验指导书《机械CAD/CAM技术》课程已作为本科及大专教学的一门必修课,为了加强实践环节训练,配合《机械CAD/CAM技术》课程的教学,本篇精选8项实验内容进行阐述, 以便于教师的教学参考和学生的实验指导。

实验一:数表的文件化处理实验二:最小二乘法的应用实验三:图形变换实验四:B样条曲线的绘制实验五:零件三维造型实验六:AutoLISP编程实验七:零件编码系统实验八:零件加工数控编程与仿真1实验六:AutoLISP编程一、实验目的1(熟悉AutoCAD中的二次开发工具AutoLISP的各功能函数;2(了解AutoLISP的编程过程和方法。

二、AutoCAD常用绘图指令1( 图形的绘制直线的绘制(LINE命令)点的绘制(POINT命令)圆的绘制(CIRCLE命令)圆弧的绘制(ARC命令)粗线的绘制(TRACE命令)填实线的绘制(SOLID命令)多边形的绘制(POLYGON命令) 圆环的绘制(DOUGHNUT命令)椭圆的绘制(ELLIPSE命令)复合线的绘制(PLINE命令)图素的等分(DIVIDE命令)图素的测量(MEASURE命令)图形的层(LAYER命令)线型的设置(LINETYPE命令)图形的颜色(COLOR命令)图形剖面线的绘制(HATCH命令) 图形的视图(VIEW命令)图幅的边界(LIMITS命令)2( 图形的编辑与查询图形的擦除(ERASE命令)图形的映像(MIRROR命令)图形的数组(ARRAY命令)图形的倒圆(FILLET命令)图形的倒角(CHAMFER命令)复合线的编辑(PEDIT命令)图形的修改(CHANGE命令)图线的切断(BREAK命令)图线的修剪(TRIM命令)图形的延伸(EXTEND命令)图形的平行偏移(OFFSET命令)图形的拉伸(STRETCH命令)图块与复合线的分解(EXPLODE命令)23( 图形的变换图形的变焦放缩(ZOOM命令)图形的快速变焦放缩(VIEWRES命令)图形的比例变换(SCALE命令)移屏幕(PAN命令)图形的平移(MOVE命令)图形的复制(COPY命令)图形的旋转(ROTATE命令)4( 辅助绘图方式抽点网格(SNAP命令)点阵网格(GRID命令)轴对刻度线的显示(AXIS命令)正交绘图方式(ORTHO命令)选择当前轴测平面绘制正等测图(ISOPLANE命令) 目标抽点方式(OSNAP命令)调节标示框尺寸(APERTURE命令)5( 块与形块定义(BLOCK命令)块的调用(INSERT命令)将块写入磁盘(WBLOCK命令)形(SHAPE)6( 图形的标注文字标注(TEXT命令)字体定义(STYLE命令)文字的动态书写(DTEXT命令)尺寸单位制的设置(UNITS命令)三、AutoLISP函数AutoLISP语言是在LISP语言的基础上,扩充了许多适用于CAD应用和专用功能后形成的一种能以解释方式运行于AutoCAD内的程序设计语言。

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

1.+ (加)返回所有数的和
2.– (减)将第一个数减去其他数的和并返回差值
3.* (乘)返回所有数的乘积
4./ (除)将第一个数除以其他数的乘积并返回商
5.= (等于)比较参数是否相等
6./= (不等于)比较参数是否值不相等
7.< (小于)如果每个参数值都小于它右边的参数则返回 T,否则返回 nil
8.<= (小于或等于)如果每个参数值都小于或等于它右边的参数则返回 T,
否则返回 nil
9.> (大于)如果每个参数值都大于它右边的参数则返回 T,否则返回 nil
10.>= (大于或等于)如果每个参数值都大于或等于它右边的参数则返回 T,
否则返回 nil
11.~ (按位非)返回参数的按位非(即 1 的补码)
12.1+ (增1)将参数加 1
13.1– (减1)将参数减 1
14.abs返回参数的绝对值
15.acad_colordlg显示标准的 AutoCAD 颜色选择对话框
16.acad_helpdlg启动帮助工具(已废弃)
17.acad-pop-dbmod恢复 DBMOD 系统变量的值到最近用 acad-push-dbmod
保存的值
18.acad-push-dbmod储存 DBMOD 系统变量的当前值
19.acad_strlsort以ASCII码字母顺序对字符串表进行排序
20.acad_truecolorcli从命令行中选择 AutoCAD 真彩色
21.acad_truecolordlg显示 AutoCAD 真彩色选择对话框
22.acdimenableupdate控制关联标注的自动更新
23.acet-layerp-mode查询和设置 LAYERPMODE 配置
24.acet-layerp-mark放置图层先前记录的开始和结束标记
25.acet-laytrans转换图形中的图层为其它图形或标准文件中所定义的标

26.acet-ms-to-ps从模型空间单位转换实数值到图纸空间单位
27.acet-ps-to-ms从图纸空间单位转换实数值到模型空间单位
28.action_tile为某一对话框控件指定一个动作表达式,用户在对话框中选
中这个控件时,就会执行该动作表达式
29.add_list在当前激活的对话框的列表框中增加一个字符串或修改其中的
一个字符串
30.alert显示一个警告框,其中显示一条出错或警告信息
31.alloc设置段长度以供 expand 函数使用
32.and返回表达式的逻辑与 (AND) 运算结果
33.angle以弧度为单位返回两点之间连线与当前 UCS 下 X 轴之间的夹角
34.angtof将表示角度的字符串转换为实数(浮点数)形式的弧度值
35.angtos将一个以弧度为单位的角度值转换成字符串
36.append将任意多个表组合成一个表
37.apply将参数表传给指定的函数
38.arx返回当前已加载的 ObjectARX 应用程序名表
39.arxload加载 ObjectARX 应用程序
40.arxunload卸载 ObjectARX 应用程序
41.ascii将字符串中的第一个字符转换成其 ASCII 码(整数)后返回
42.assoc从关联表中搜索一个元素,如果找到则返回该关联表条目
43.atan返回一个数的反正切值(以弧度为单位)
44.atof将一个字符串转换成实数
45.atoi将一个字符串转换成整数
46.atom验证一个项是否是原子
47.atoms-family返回由当前已定义的符号组成的一个表
48.autoarxload预定义可自动加载某相关 ObjectARX 应用程序的命令名
49.autoload预定义可自动加载某相关 AutoLISP 应用程序的命令名
50.Boole用作一个通用的按位逻辑运算函数
51.boundp检验符号是否被设置为某个值
52.caddr返回表的第三个元素
53.cadr返回表的第二个元素
54.car返回表的第一个元素
55.cdr返回去掉了第一个元素的表
56.chr将代表字符 ASCII 码的整数转换成包含相应的单一字符的字符串
57.client_data_tile将特定应用数据与一个对话框控件相关联
58.close关闭一个已打开的文件
mand执行一条 AutoCAD 命令
60.cond多条件、多处理结果函数
61.cons向表的头部添加一个元素,或构造一个点对
62.cos返回弧度角度的余弦值
63.cvunit在不同测量单位之间进行换算
64.defun定义函数
65.defun-q将函数定义为表
66.defun-q-list-ref返回用 defun-q 定义的函数的表结构
67.defun-q-list-set将符号设置为以表形式定义的函数
68.dictadd在指定词典内添加非图形对象
69.dictnext查找词典中的下一个条目
70.dictremove从指定词典中删除一个条目
71.dictrename重命名词典条目
72.dictsearch在词典中搜索某个项
73.dimx_tile返回控件的宽度
74.dimy_tile返回控件的高度
75.distance返回两个点之间的距离
76.distof将一个表示实(浮点)数的字符串转换成一个实数
77.done_dialog中断对话框
78.end_image结束当前激活的对话框图像控件的操作
79.end_list结束对当前激活的对话框列表的操作
80.entdel删除对象(图元)或恢复先前删除的对象。

相关文档
最新文档