文档库 最新最全的文档下载
当前位置:文档库 › CAD展点程序lisp

CAD展点程序lisp

CAD展点程序lisp
CAD展点程序lisp

CAD展点程序lisp

2009年02月17日星期二 01:08 P.M.

(1)

依网上资源文件修改的:

----------------------

CAD展点程序

把下文保存到文本文件中,扩展名改为.lsp,

按数据格式要求准备好数据点文件。

在CAD中加载lsp文件。运行命令:kszd

----------------------

;LISP展点程序

;展1000点:在H

P(AMD Athlon64 3000+ 256MB)电胶上仅耗时0.142秒;

; 在金利(Geleron(R) CPU 2.40GHz 256MB)电胶上耗时0.882秒

;数据文件格式为:每一点的数据(点号、X、Y、H)为一行,用逗号或空格作为分隔符,即;点号1 X1 Y1 H1 或者点号1, X1, Y1, H1

;点号2 X2 Y2 H2 或者点号2, X2, Y2, H2

;点号3 X3 Y3 H3 或者点号3, X3, Y3, H3

;......

;点号n Xn Yn Hn 或者点号n, Xn, Yn, Hn1

(defun c:kszd()

(setq ff (open (getfiled "请选择要展点的数据文件" "" "txt" 2) "r")

fhb nil t0 (getvar "cdate")

cm (getvar "cmdecho") os (getvar "osmode")

tcm1 "高程注记" tcm2 "点记"

)

(setvar "cmdecho" 0)(setvar "osmode" 0)

(if (= (tblsearch "layer" tcm1) nil) (command "layer" "n" tcm1 ""))

(if (= (tblsearch "layer" tcm2) nil) (command "layer" "n" tcm2 ""))

(while (setq zb (read-line ff))

(while (vl-string-search "," zb) (setq zb (vl-string-subst " " "," zb))) (setq zb (read (strcat "(" zb ")"))

zb (list (list (nth 2 zb) (nth 1 zb)) (vl-princ-to-string (last zb)));注记高程

;zb (list (list (nth 2 zb) (nth 1 zb)) (vl-princ-to-string (car zb)));提示:注记点号请用该行

fhb (append fhb (list zb))

)

)

(setq t1 (getvar "cdate"))

(close ff)

(setq zb (vl-sort fhb '(lambda (e1 e2) (< (car (car e1)) (car (car e2))))) x0 (car (car (car zb))) x1 (car (car (last zb)))

zb (vl-sort fhb '(lambda (e1 e2) (< (cadr (car e1)) (cadr (car e2)))))

y0 (cadr (car (car zb))) y1 (cadr (car (last zb)))

)

(command "zoom" "w" (list x0 y0) (list x1 y1))

(setq t2 (getvar "cdate"))

(foreach zb fhb

(setq zfc (last zb)

;pt (mapcar '+ (car zb) '(1.5 -1.25));这行改为如下

pt (car zb)

)

(entmake (list '(0 . "TEXT") '(100 . "AcDbEntity") '(100 . "AcDbText") '(62 . 3) '(40 . 2) '(50 . 0.0)

;(cons 8 tcm1) (cons 1 zfc) (cons 10 pt);这行改为如下

(cons 8 tcm1) (cons 1 zfc) (cons 10 (mapcar '+ pt '(1.5

-1.25))) )

)

(entmake (list '(0 . "OINT") '(100 . "AcDbEntity") '(100 . "AcDbPoint") '(62 . 2)

(cons 8 tcm2) (cons 10 pt)

)

)

)

(setq t3 (getvar "cdate")

dt1 (* 1000000 (- t1 t0))

dt2 (* 1000000 (- t3 t2))

)

(princ (strcat "读入数据共耗时:" (rtos dt1 2 3)

"秒展点共耗时" (rtos dt2 2 3) "秒"

"展点数:" (itoa (length fhb))

"个每展一点耗:"

(rtos (/ dt2 (length fhb)) 2 10) "秒"

)

)

(setvar "cmdecho" cm)(setvar "osmode" os)(princ)

)

----------------------

-------------------------------------------------------------

-------------------------------------------------------------

-------------------------------------------------------------

修改上面的程序,以根据数据点的坐标加入自写的块,

块名称这里为:inblock.dwg

依情况自行修改程序相应位置,块文件应放在与待插入块的文件同一目录,即工作目录。

------------------------

;LISP展块程序(yiling)

;点号1 X1 Y1 或者点号1, X1, Y1

;点号2 X2 Y2 或者点号2, X2, Y2

;点号3 X3 Y3 或者点号3, X3, Y3

;......

;点号n Xn Yn 或者点号n, Xn, Yn

(defun c:inb()

(setq ff (open (getfiled "请选择要展点的数据文件" "" "txt" 2) "r")

fhb nil t0 (getvar "cdate")

cm (getvar "cmdecho") os (getvar "osmode")

)

(setvar "cmdecho" 0)(setvar "osmode" 0)

(while (setq zb (read-line ff))

(while (vl-string-search "," zb) (setq zb (vl-string-subst " " "," zb))) (setq zb (read (strcat "(" zb ")"))

zb (list (list (nth 2 zb) (nth 1 zb)));

fhb (append fhb (list zb))

)

)

(close ff)

(setq t1 (getvar "cdate"))

(setq t2 (getvar "cdate"))

(foreach zb fhb

(setq pt (car zb))

(command "-insert" "inblock.dwg" pt "1" "" "0")

)

(setq t3 (getvar "cdate")

dt1 (* 1000000 (- t1 t0))

dt2 (* 1000000 (- t3 t2))

)

(princ (strcat "读入数据共耗时:" (rtos dt1 2 3)

"秒展点共耗时" (rtos dt2 2 3) "秒"

"展点数:" (itoa (length fhb))

"个每展一点耗:"

(rtos (/ dt2 (length fhb)) 2 10) "秒"

)

)

(setvar "cmdecho" cm)(setvar "osmode" os)(princ)

)

------------------------

------------------------------------

-------------------------------

------------------------------------------------------------

-------------------------------------------------------------

-------------------------------------------------------------

修改上面的程序,以根据数据点的坐标加入自写的块,块有一个属性,依点的属性修改了插入块的属性。

块名称这里为:inblock.dwg

依情况自行修改程序相应位置,块文件应放在与待插入块的文件同一目录,即工作目录。

------------------------

;LISP展点程序(yiling)

;展1000点:在HP(AMD Athlon64 3000+ 256MB)电胶上仅耗时0.142秒;

; 在金利(Geleron(R) CPU 2.40GHz 256MB)电胶上耗时0.882秒

;数据文件格式为:每一点的数据(点号、X、Y、H)为一行,用逗号或空格作为分隔符,即;点号1 X1 Y1 H1 或者点号1, X1, Y1, H1

;点号2 X2 Y2 H2 或者点号2, X2, Y2, H2

;点号3 X3 Y3 H3 或者点号3, X3, Y3, H3

;......

;点号n Xn Yn Hn 或者点号n, Xn, Yn, Hn1

(defun c:inbd()

(setq ff (open (getfiled "请选择要展点的数据文件" "" "txt" 2) "r")

fhb nil t0 (getvar "cdate")

cm (getvar "cmdecho") os (getvar "osmode")

)

(setvar "cmdecho" 0)(setvar "osmode" 0)

(while (setq zb (read-line ff))

(while (vl-string-search "," zb) (setq zb (vl-string-subst " " "," zb))) (setq zb (read (strcat "(" zb ")"))

zb (list (list (nth 2 zb) (nth 1 zb)) (vl-princ-to-string (last zb)));注记高程

;zb (list (list (nth 2 zb) (nth 1 zb)) (vl-princ-to-string (car zb)));提示:注记点号请用该行

fhb (append fhb (list zb))

)

)

(setq t1 (getvar "cdate"))

(close ff)

(setq zb (vl-sort fhb '(lambda (e1 e2) (< (car (car e1)) (car (car e2))))) x0 (car (car (car zb))) x1 (car (car (last zb)))

zb (vl-sort fhb '(lambda (e1 e2) (< (cadr (car e1)) (cadr (car e2))))) y0 (cadr (car (car zb))) y1 (cadr (car (last zb)))

)

(command "zoom" "w" (list x0 y0) (list x1 y1))

(setq t2 (getvar "cdate"))

(foreach zb fhb

(setq zfc (last zb)

pt (car zb)

)

(command "-insert" "inblock.dwg" pt "1" "" "0" zfc)

;(entmake (list '(0 . "TEXT") '(100 . "AcDbEntity") '(100 . "AcDbText") ;'(62 . 3) '(40 . 2) '(50 . 0.0)

;(cons 8 tcm1) (cons 1 zfc) (cons 10 pt);这行改为如下

; (cons 8 tcm1) (cons 1 zfc) (cons 10 (mapcar '+ pt '(1.5

-1.25))) )

;)

;(entmake (list '(0 . "OINT") '(100 . "AcDbEntity") '(100 . "AcDbPoint") ;'(62 . 2)

; (cons 8 tcm2) (cons 10 pt)

; )

;)

)

(setq t3 (getvar "cdate")

dt1 (* 1000000 (- t1 t0))

dt2 (* 1000000 (- t3 t2))

)

(princ (strcat "读入数据共耗时:" (rtos dt1 2 3)

"秒展点共耗时" (rtos dt2 2 3) "秒"

"展点数:" (itoa (length fhb))

"个每展一点耗:"

(rtos (/ dt2 (length fhb)) 2 10) "秒"

)

)

(setvar "cmdecho" cm)(setvar "osmode" os)(princ)

)

AutoLISP-程序创建过程

AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。

(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图

超经典CAD lisp程序集锦、CAD快捷键大全

超经典CAD lisp程序集锦 如果您使用 AutoCAD,下面的内容对您一定有帮助。在某些方面能大大提高 您的工作效率。下面的程序均以源程序方式给出,您可以使用、参考、修改它。 bg.lsp --- 表格自动生成 asc.lsp --- 将文本文件内容写入图中,字符是单个的 wf.lsp --- 将图中字符写入磁盘 exstr.lsp --- 将字符串分解成单字 pgtxt.lsp --- 将字符合成字符串 pb.lsp --- 通过给出长度将字符串分成两个串 cht.lsp --- 直接修改文字内容或块属性 ct.lsp --- 对数字串进行加减 chh.lsp --- 直接修改文字高度 chhw.lsp --- 直接修改文字高宽比(针对PKPM软件将字符定位点改为左下角) chst.lsp --- 直接修改文字字体 txt.shx --- 修改后的标准txt.shx文件。(kuozhan.sld为增强的内容幻灯片) tiao.lsp --- 配合修改过的标准字体文件,将中文字符调大 tiao1.lsp --- 配合修改过的标准字体文件,将英文字符调小 untiao.lsp --- 上两个程序的复原 sht.lsp --- 在图中查找字符串 zhuang.lsp --- 桩点及钎探号绘制(勘测图) dim.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:1) dimm.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:100)

di1.lsp~di8.lsp --- 直接连续标注尺寸(用于1:1的图) di100.lsp~di800.lsp --- 直接连续标注尺寸(用于1:100的图) 详细内容及附件下载请浏览北纬服务论坛 https://www.wendangku.net/doc/b82300033.html,/thread-2724-1-1.html

CAD lisp 实用小程序(源代码)

CAD lisp实用小程序(源代码) 一、圆自动同心 (defun c:TX(/qi aa ec center v_c) (vl-load-com) (princ"圆自动同心:") (setq aa(ssget));;获取圆的图元名 (setq center(getpoint"选取点位置:")); (setq center(vlax-3D-point center)); (setq qi0);初始序号 (repeat(sslength aa);对象个数 (setq ec(ssname aa qi));选择第一个图元 (setq v_c(vlax-ename->vla-object ec));将圆的图元名转换为VLA对象 (vla-put-center v_c center);更新圆中心点 (setq qi(+qi1)) );repeat (princ"修改成功:") );defun 二、图层快速修改 (princ"快速修改图层编程-TC") (defun C:TC(/) (vl-load-com) (setq SET_ZJTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择基准图层:"))))) (WHILE(NOT SET_ZJTC)(setq SET_ZJTC(vla-get-Layer(vlax-ename->vla-object(car(entsel "\n基准图层为空,重新选择!:")))))) (setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择修改图层:"))))) (WHILE(NOT SET_XGTC)(setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car (entsel"\n修改图层为空,重新选择!:")))))) (vlax-for VLA_MSP(vla-get-ModelSpace(vla-get-ActiveDocument(vlax-get-Acad-Object))) (IF(=(vla-get-Layer VLA_MSP)SET_XGTC)(vla-put-Layer VLA_MSP SET_ZJTC))) (princ"\n快速修改图层编程-TC:") (princ) );DEFUN 三、字高自动修改 (princ"快速修改字高编程-ZG") (defun C:ZG(/) (vl-load-com) (setq SET_ZTGD(vla-get-Height(vlax-ename->vla-object(car(entsel"\n选择基准字高:"))))) (WHILE(NOT SET_ZJTC)(setq SET_ZJTC(vla-get-Height(vlax-ename->vla-object(car (entsel"\n基准字高为空,重新选择!:")))))) (setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择修改图层:"))))) (WHILE(NOT SET_XGTC)(setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car (entsel"\n修改图层为空,重新选择!:"))))))

CADLISP程序

1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (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.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (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)

坐标提取lisp程序

坐标提取lisp程序 2010-05-17 20:50:07| 分类:工程| 标签:|字号大中小订阅 ;该程序主要用于CAD点(point)三维坐标提取,并将数据输出为CASS软件中使用的数据格式;输出格式:点号,,测量Y值,测量X值,测量Z值例:1,,100.3244,1232,433,25 ;2010-05-17 ;命令:plzbsc (defun c:plzbsc() (princ "\n选择所需输出的点(point):") (setq ss (ssget ));;选取坐标点 (setq n (sslength ss ));计算坐标点数量 (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径 (setq i 0) (repeat n (setq spt (ssname ss i )) (setq ept (entget spt)) (if (= (cdr (assoc 0 ept)) "POINT") (progn (setq lxyz (cdr (assoc 10 ept))) (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符 (setq sy (rtos (nth 0 lxyz))) (setq sz (rtos (nth 2 lxyz))) (setq i1 (+ i 1));计算点序号 (setq sn (rtos i1 2 0));将序号实数转换成字符 (setq sxyz (strcat sn",," sy "," sx "," sz)) (write-line sxyz ff) ) ) (setq i (+ i 1)) );repeat ) (prompt "* << 命令:plzbsc >> *输出格式(点号,, Y,X,Z)**") (prin1) 地形图上提取碎步点(高程点)坐标并输出到文本 2010-05-18 08:50:38| 分类:工程| 标签:|字号大中小订阅 利用程序提取地形图上碎步点的三维坐标。并输出到记事本中,

在AutoCAD中基于LISP程序简易标注粗糙度

在AutoCAD中基于AutoLISP程序简易标注粗糙度 陕西关中工具制造有限公司(陕西凤翔 721400)张科岐王建卫 对经常使用AutoCAD绘制二维机械图的用户来说,标注表面粗糙度是一件烦琐的事情。常用的方法是先画好粗糙度的符号,再将粗糙度值定义为属性,最后将符号和粗糙度定义为块。标注时插入这个块,按提示输入粗糙度值完成。笔者结合自己在工作中的实际经验,利用AutoCAD提供的AutoLISP程序二次开发功能编写了一个粗糙度标注程序。使用该程序标注粗糙度,操作简单、快捷、准确、美观。现将程序内容及使用方法介绍如下,供大家参考。 程序全文如下: (defun rad->deg(rad) (/ (* rad 180.0) pi) ) (defun Deg->Rad(Deg) (* pi (/ Deg 180.0)) ) (defun rgh() (setvar "CMDECHO" 1) (setq svar_old (getvar "osmode" )) (setq svar_new 0) (setvar "osmode" svar_new) (setq pos_pt (getpoint"\n标注位置:")) (setq sym_dir (getpoint"\n符号方向:")) (setq sym_hgt (getreal"\n符号高度<5>:")) (setq txt (getstring"\n数值大小<3.2>:")) (if (= txt "") (setq txt "3.2") ) (setq txt_hgt(getreal"\n字符高度<2.5>:")) (if (= txt_hgt nil) (setq txt_hgt 2.5) ) (if (= sym_hgt nil) (setq sym_hgt 5.0) ) (setq sym_lgt (/ sym_hgt (cos (/ pi 6.0)))) (setq sym_angle (angle pos_pt sym_dir)) (setq sym_pt1 (polar pos_pt (+ (/ pi 3.0) sym_angle) (* 0.5 sym_lgt)))

用AutoLISP程序提高绘图效率的几个实例

2007.12 科技广场 254

工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。现在提供AutoLISP程序,即可解决绘制螺旋线的问题。然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。 根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下: 图二园台螺旋线 X=[r0+hg *α/(2π)]*cosα Y=[r0+hg *α/(2π)] *sinα Z=±vg *α/(2π) 其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。 下面提供圆台螺旋线的AutoLISP程序清单: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r1 (getreal "指定初始半径:")) (setq disp (getreal "指定节距:")) (setq angtg (getreal "输入锥形角:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq tg (*(/ angtg 180) pi)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r1 0 0)) (repeat (* m n) (setq k(+ k 1)) (setq ang(+ delta ang)) (setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg))))) (setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k)))) (command pt2) ) (command "") ) 根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。圆柱螺旋线程序清单如下: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r (getreal "指定初始半径:")) (setq vg (getreal "指定节距:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r 0 0)) 255

AUTOLISP 程序命令(精校版本)

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将参数表传给指定的函数

AUTOLISP实用编程四例

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.快速画直线 在画给定坐标点的直线时,需要通过键盘输入坐标值。这样的情况下当然是利用右边的数字键盘输入

CAD创建Lisp程序步骤

使用Visual LISP创建简单的LISP应用程序 作者:佚名点击数:1523 更新:2007-2-2 7:08:10 热★★★ 【字体:小大】 a> 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCA D中的加载和运行的方法。首先来创建一个最简单的LISP程序—-―Hello.lsp‖,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-―Hello, Visual LISP!‖。 36.2.1 Visual LISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 36.2.2 实例1 最简单的LISP程序——―Hello.lsp‖ Step 1 创建新文件 (1) 运行AutoCAD 2002系统,以―acadiso.dwt‖为样板创建图形文件,并调用―vlisp‖命令进入Visual LISP环境。 (2) 单击―Standard(标准)‖工具栏中的按钮,新建一个LISP文件。 Step 2 输入代码并保存文件 (1) 在编辑窗口中输入源文件―Hello.lsp‖的代码,如图36-3所示。程序清单如下: ;;;* Hello.lsp –Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量―ipt‖ (setq hgt 15) ;给变量―hgt‖赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!") ;调用―Commnad‖函数与AutoCAD进行通信

CAD-LISP-程序

CAD-LISP-程序

1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (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.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (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)

LISP 程序

;;一、绘制地形图符号 1.点状符号 对于点状符号,其位置固定,数量较多,且一般都带有一定的标注,可逐个制作属性块图元,单独插入。 2.线状符号 利用AutoCAD中强大的线型定义。 3.面状符号 由充填符号在面域内按一定的排列方式组合而成。 目前Auto CAD在建筑设计、工程施工放样得到广泛应用, Auto CAD在工程测量上的应用,大大减少手算坐标的工程量或帮助人们复核手算坐标的准确性。 (1)删除未选择对象 (defun c:sd() (princ"\n选择要保留对象:") (setq SS(ssget) ss1(ssget"X")) (command"erase"ss1"r"ss""zoom _e) );end ;;(2)画圆弧型铁路 ;输入铁路中线上三个点,轨距及绘图比例尺,起、中、始点 (defun c:ytl() (setvar "osmode" 0);取消扑捉 (setq PB(getpoint"\n输入起点:")) (setq PM(getpoint"\n输入中点:")) (setq PE(getpoint"\n输入终点:")) (setq WD(getreal"\n输入铁路宽度(m):")) (setq S(getreal"\n绘图比例尺=:"));1:1000,输入 (setq W1(/(* WD S) 2) W2(+ W1(* S)));轨道及枕木符号的半宽 (setq D(distance PB PE)) (setq A1(angle PB PM) A2(angle PB PE) A3(angle PE PB) A4(angle PE PM)) (setq FB(- A1 A2) FE(- A3 A4) P12(* PI 2)) (if (< FB 0)(setq FB(+ FB P12)));求PB和PE点的圆周角 (if (< FE 0)(setq FE(+ FE P12))) (setq F(+ FB FE) R(/ D(* (sin F)2)));求全弧所对圆心角之半,圆弧半径 (setq F1(- (/ PI 2) F) ABC(- A2 F1)) (if (< ABC 0) (setq ABC(+ ABC P12))) (setq C(polar PB ABC R));求圆心之点位 (setq ACB(angle C PB) ABC(angle PB C));起点左右垂直于中线切线的方位角 (setq ACM(angle C PM) AMC(angle PM C));中点左右垂直于中线切线的方位角 (setq ACE(angle C PE) AEC(angle PE C));终点左右垂直于中线切线的方位角 (setq PBL(polar PB ACB W1) PBL1(polar PB ACB W2)) (setq PBR(polar PB ABC W1) PBR1(polar PB ABC W2))

Lisp程序结构

Lisp程序结构 ;;在明经混了许多年,又在晓东混了几年了,渐发现原来写的程序不是太合理,全改又没有那么多精力了. ;;对于lisp程序结构,我自己有了自己的看法,自己总结一下,今后套用这种格式。自贡黄明儒 2014.10.15 ;;1 建立通用和自定义函数库,分别保存为Public.lsp和MyLsp.lsp,今后加载和修改就方便了 ;;今后只需要加载两个文件,这就方便了;通用函数的建立,给自己修改来方便。 ;;2 自定函数 (defun C:w1 (/ CMD1 OSM1 SS) ;;2.1 错误处理 ;;定义在函数内部,作用范围也只限于此函数。 ;;写在开头,以保证后面的代码发生错误,均会执行错误处理。 (defun *error* (msg) ;;2.1.1 写在开头,错误处理反跟踪,找出调试错误所在。调试完毕后,可注释掉 (vl-bt) ;;2.1.2 如果命令还在执行,中断它 (while (not (equal (getvar "cmdnames") "")) (command nil)) ;;2.1.3 在错误发生之前改变的变量,发生错误时后面的代码不再执行,必须恢复 (setvar "nomutt" 0);容量忘了它,没恢复成0后面使用起来怪怪的 (cond (cmd1 (setvar 'cmdecho cmd1))) (cond (osm1 (setvar 'osmode osm1))) (princ "\n 出错啦!") ;;2.1.4 静默退出 (princ) ) ;;2.2 其它临时函数,非通用的 () ;;2.3 一般说来,执行一个程序,总是要选择对象。如果希望先择后执行,就要有这句,而且写在开头 (cond ((cadr (ssgetfirst)) (setq ss (ssget "_P" '((0 . "*TEXT")))))) ;;2.4 检查加载vl扩展,有这句没有坏处,也不会造成程序多大的额外负担,因为如果已经加载扩展,不做任何事情 (VL-LOAD-COM) ;;2.5 *acad* 是常用的,不必释放。前面加*号,编辑器检查形参时会把它们排在前面,便于我们去除 (or *acad* (setq *acad* (vlax-get-acad-object))) (setq *DOC* (vla-get-ActiveDocument *acad*)) ;;2.6 获取并修改变量

AutoLISP程序在AutoCAD中的应用实例

文章编号:100926825(2002)0320157202 Auto LISP 程序在Auto CAD 中的应用实例 收稿日期:2002201209 作者简介:康保成(19552),男,1987年毕业于广东教育学院工程图学专业,高级讲师,太原理工大学轻纺工程与美术学院,山西晋中 030600 康保成 摘 要:在Auto C AD 绘图环境下,对工程图中圆柱螺旋压缩弹簧的作图方法进行了分析,指出绘制弹簧的关键是绘制拉 伸路径,为了方便、快捷、准确地绘制出弹簧的图形,根据Auto LISP 语言特点编制了一个Auto LISP 程序,解决了拉伸路径的绘制,为Auto C AD 更好地应用于工程实践中提供了方便。关键词:AutoLISP ,AutoC AD ,弹簧中图分类号:TP361文献标识码:A 引言 Auto C AD 是美国Auto desk 公司推出的既能在微机、又能在工 作站上运行的C AD 软件。近20年来,版本不断更新,功能日益增强,Auto C AD 从最初的Auto C AD V1.0版本发展到现今流行的Au 2to C AD2000,成为集平面作图、三维实体、数据库管理、渲染着色、国际互联网等功能于一体的强大辅助设计软件。它的应用与普及覆盖了机械、汽车、造船、家电、工程、建筑、轻工、电气、电力、纺织等许多行业。从最初的甩图板工程到应用C AD 进行三维设计,人们的设计思维也在发生着变化。现就LISP 程序在Auto C AD 中 绘制一圆柱螺旋压缩弹簧的三维图形作一探讨。1 弹簧的绘制 弹簧属于常用件,它主要用于减振、夹紧、储存能量和测力等 方面。弹簧的特点是:去除外力后,弹簧能立即恢复原状。下面 介绍圆柱螺旋压缩弹簧的画法。 111 圆柱螺旋压缩弹簧各部分名称及尺寸关系 1)簧丝直径d :弹簧钢丝直径。2)弹簧外径D :弹簧的最大直径。3)弹簧内径D 1:弹簧的最小直径,D 1=D -2d 。4)弹簧中径D 2:弹簧的内径和外径的平均值,D 2=D +D 1 2 。 5)节距t :除支承圈外,相邻两圈的轴向距离。 6)有效圈数n :保持相等节距的圈数,称为有效圈数。 7)支承圈数n 2:并紧、磨平的各圈仅起支承作用,称为支承 圈,一般n 2=2.5。 8)总圈数n 1:有效圈数与支承圈数之和,称为总圈数,n 1=n +n 2。 9)自由高度H 0:弹簧在不受外力作用时的高度,H 0=n ×t + (n 2-0.5)×d 。 1.2 LISP 程序的编制 绘制弹簧的关键是绘制拉伸路径———螺旋线。 在Auto C AD 中,绘制三维线的命令有Line 、3Dpoly 、S pline 等命令,而作为三维拉伸路径的线只有3Dpoly 命令可以胜任,而且不能使用其中的拟合项。所以,为了保证绘图精度,必须输入大量精确数据,才能一点一点地画出所需的螺旋线,显然这样做非常麻烦。为了解决这个问题,编制一个Lisp 程序,用于绘制弹簧。 (defun c :luowen (/))(setq b1(getpoint ″基点″))(setq r (getreal ″半径R =:″))(setq t1(getreal ″节距″))(setq n (getint ″段数″)(setq delta (/6.28318n )) (setq j (/t1n )) (setq bb (caddr b1)) (setq ang 0)(setq jj 0)(command ″UCS ″″O ″b1) (command ″3dpoly ″(list r 00))(repeat n (setq jj (+jj 1) (setq ang (+delta ang )) (setq pt2(list (3r (cos ang ))(3r (sin ang ))(+0(3j jj )))) (command pt2) ) (command ″″)) The laser vertical positioning technique of high 2rise building WANG Zhi 2sheng ,H AO Zhi 2feng (Luliang College ,Lishi 033000,China ) Abstract :The verticality control of high 2rise building directly in fluence the quality and progress of engineering.In this paper the thing that how to use laser theodolite to control the verticality of high 2rise building is illustrated.The setting up of the drawn point on first floor preenbedded steel board and the placement of the receive target on the measures floor are introduced.s o the vertical controlling method is com pleted.At last the advantages and mat 2ters needing attention of using laser theodolite to conduct axial measurement are summarized.K ey w ords :high 2rise building ,verticality ,laser theodolite ,axes ? 751? 第28卷第3期2002年3月 山西建 筑SHANXI ARCHITECT URE V ol.28N o.3M ar. 2002

如何加载LISP程序

LISP是中望CAD所提供的四个接口中的一个,设计师可以通过这个接口来挂接自已所编写的LISP程序,具体的挂接方法如下: 1、首先请加载lisp程序,加载方法如下: 在菜单栏选择工具——加载应用程序——添加,选择lisp程序然后加载,然后选择添加到启动组。(其他lisp使加载方式相同) 2、然后是添加自定义栏以及图标,方法如下(以坐标标注为例,其余操作相同): 在软件右上方空白区右键选择自定义——工具栏——新建——(修改名称)确定(以下操作均是在不关闭自定义前提下的操作)。 此时在左侧图层工具栏下面会出现一个空白工具栏, 然后在命令里面,随便找一个图标(例如新建、打开等等以下以新建为例)拖放入新建的空白工具栏里,右键点击拖放在空白工具栏里的图标,选修改。

在弹出对话框里有名称、命令、说明三项可以修改。 其中将命令“^C^C_new” 修改为“^C^C_zbbz”,将名称修改为“坐标标注”,然后确定。再次右键点击此图标,选择编辑按钮图像,工具一栏最后一个命令图标Import From File。 选择坐标标注所对应的图标打开然后确定。 3、在使用了自定义工具栏后可能需要将这些工具栏导出给其他同事使用,这是就需要将工具栏导出,导出和导入方法如下: 导出:在自定义完工具栏后,选择工具——自定义——工具栏然后导出,在选项框里将刚才自定义的勾选,其他象不选择,否则会出现重复,然后确定,选择XML工具条文件(xml)格式保存。

导入:加载工具栏文件:选择工具——自定义——工具栏,选择导入,文件类型选择XML工具条文件(xml),选择然后打开。 要注意的地方是:其他命令操作与以上相用,所加载的lisp程序与图片所在文件夹为固定文件夹,不可修改,否则不能调用其命令,加载lisp程序后一定要选择“添加到启动组”,否则软件启动后不能自己加载此lisp程序。

AUTOLISP程序的设计技巧

AUTOLISP程序设计技巧 一、引言 在AutoCAD中的角度捕捉只有当正交状态打开时的直和水平方向,对于其他特殊角 度无能为力;另外,其网点捕捉也是相对于X轴和Y轴,无法实现其他方向的特殊长度捕捉,给绘图带来极大的不方便。 在应用 AutoCAD 进行设计制图的操作中, LINE 和POLYLINE 是使用频率最高的两个命令,经常要遇到在某些特定角度上绘制特定长度的简单线或复合线的情况,因而实现这两个捕捉对提高AutoCAD 作图效率很有实用价值。 二、方法原理 所谓角度捕捉,是指当十字光标在某一角度α的一定围选取一点时,该点自动落在该α角度线上;当我们设定捕捉角度为α时,将会以基准点作为原点、自X轴正方向出发,将整个屏幕划分为[360/α]个区间,则NXα角度就是角度捕捉线,其中,0≤N≤[360/α],[360/α]表示不大于360/α的整数。 所谓长度捕捉,是在角度捕捉的基础上,在某一角度线上有一系列捕捉点,该系列点离基准点的距离为捕捉长度的正整数倍,当选取直线上的一点时,落点自动落到离其最近的捕捉点上。 实现特定角度和长度捕捉的关键点是:当十字光标(即十字交叉线)移动时,程序要随时跟踪其交叉点的位置,并将该位置与用户所设定的捕捉角度与长度对应起来,从而计算出在该角度上的落点。 以下举例说明该两个捕捉的实现过程: 假定捕捉角度为α=30°,捕捉长度为L。 当十字光标在任意的某一区间移动时,比如在第5区间(120°~150 °)移动时,此时,落点只能在120°或150°线上(该线在图中并不直接显示),该两根角度线的中心线为135°。当十字光标的中心点处在120°~135°之间时,则落点应在120°线上,该落点的具体位置为由十字光标的中心点向120°线作垂线来获得,其交点D(称为垂点)即为落点,为直观起见,此时由基准点(此处为O 点)向落点作一橡筋拖曳线,该橡筋拖曳线随十字光标的移动而相应移动,显示出拖动过程(见图1);同样,当十字光标的中心点处在135°~150°之间时,则落点应在150°线上,并显示相应的橡筋拖曳线。该橡筋拖曳线并不是真正的线段,只是用XOR墨水绘制的一个向量,当用XOR墨水重新绘制一遍该向量时,该向量将从屏幕上消失,这就是本程序实现光标拖动的原理。 落点落在某一捕捉角度线上时,还得落在捕捉长度L 的整数倍的点(称为捕捉点)上,还是针对图1,其垂点必然处于某两个捕捉点A与B之间,设A与B的中点为C,当D处于A与C之间时,落点应为A;当D处于C与B之间时,落点应为B (见图1)。其中: -- -- OA = n XL ; OB = (n + 1) XL n: 非负整数。

相关文档